so://phie

poppy

A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy

blob: fe63fbeaa83efc1bfc1b8b17813299aed2ee126c (2457 bytes)[doc][blame][raw]

1package poppy.modules;

2

3import java.util.Set;

4

5import org.bukkit.Bukkit;

6import org.bukkit.Material;

7import org.bukkit.Tag;

8import org.bukkit.block.Block;

9import org.bukkit.block.BlockState;

10import org.bukkit.block.Dispenser;

11import org.bukkit.block.data.Directional;

12import org.bukkit.event.EventHandler;

13import org.bukkit.event.Listener;

14import org.bukkit.event.block.BlockDispenseEvent;

15import org.bukkit.inventory.ItemStack;

16import org.bukkit.inventory.meta.BlockStateMeta;

17import org.bukkit.inventory.meta.ItemMeta;

18import org.bukkit.plugin.Plugin;

19

20import poppy.Utils;

21

22public class AutoPlacerModule implements Listener

23{

24 private Plugin plugin;

25

26 public AutoPlacerModule(Plugin plugin)

27 {

28 this.plugin = plugin;

29 }

30

31 @EventHandler

32 public void onBlockDispenseEvent(BlockDispenseEvent event)

33 {

34 final Block block = event.getBlock();

35 final BlockState blockState = block.getState();

36 final ItemStack item = event.getItem();

37

38 if(blockState instanceof Dispenser)

39 {

40 Dispenser dispenser = (Dispenser) blockState;

41

42 if(dispenser.getCustomName() != null && dispenser.getCustomName().toLowerCase().equals("placer"))

43 {

44 event.setCancelled(true);

45

46 if(block.getBlockData() instanceof Directional)

47 {

48 final Directional direction = (Directional) dispenser.getBlockData();

49 final Block faceBlock = dispenser.getBlock().getRelative(direction.getFacing());

50

51 if(item.getType().isBlock() && Utils.isAir(faceBlock.getType()) && !isShulkerboxContent(item))

52 {

53 faceBlock.setType(item.getType());

54 removeSnapshotItem(dispenser, item.getType(), 1);

55 }

56

57 if(Tag.ITEMS_HOES.isTagged(item.getType()) && faceBlock.getType() == Material.COARSE_DIRT)

58 {

59 faceBlock.setType(Material.DIRT);

60 }

61 }

62

63 if(isShulkerboxContent(item))

64 {

65 event.setCancelled(false);

66 }

67 }

68 }

69 }

70

71 public boolean isShulkerboxContent(ItemStack itemStack)

72 {

73 final ItemMeta itemMeta = itemStack.getItemMeta();

74 final Set<Material> shulkerboxes = Tag.SHULKER_BOXES.getValues();

75

76 for(Material material : shulkerboxes)

77 {

78 if(itemStack.getType().equals(material) && itemMeta instanceof BlockStateMeta)

79 {

80 return true;

81 }

82 }

83 return false;

84 }

85

86 public void removeSnapshotItem(Dispenser dispenser, Material material, int amount)

87 {

88 Bukkit.getScheduler().runTaskLater(plugin, () -> {

89 dispenser.getSnapshotInventory().removeItem(new ItemStack(material, 1));

90 dispenser.update();

91 }, 1);

92 }

93}