so://phie

poppy

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

blob: d9614f124d372f79a957b927695d1ad95ea1389d (2923 bytes)[doc][blame][raw]

1package poppy.modules;

2

3import org.bukkit.Bukkit;

4import org.bukkit.Material;

5import org.bukkit.block.Block;

6import org.bukkit.block.BlockState;

7import org.bukkit.block.Dispenser;

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

9import org.bukkit.block.data.Levelled;

10import org.bukkit.event.EventHandler;

11import org.bukkit.event.Listener;

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

13import org.bukkit.inventory.ItemStack;

14import org.bukkit.inventory.meta.PotionMeta;

15import org.bukkit.plugin.Plugin;

16import org.bukkit.potion.PotionData;

17import org.bukkit.potion.PotionType;

18

19

20public class CauldronModule implements Listener

21{

22 private Plugin plugin;

23 private Integer debounceEventCount = 0;

24

25 public CauldronModule(Plugin plugin)

26 {

27 this.plugin = plugin;

28 }

29

30 @EventHandler

31 public void onBlockDispenseEvent(BlockDispenseEvent event)

32 {

33 final Block block = event.getBlock();

34 final BlockState blockState = block.getState();

35

36 if(blockState instanceof Dispenser)

37 {

38 final Dispenser dispenser = (Dispenser) blockState;

39 final ItemStack item = event.getItem();

40

41 if(block.getBlockData() instanceof Directional)

42 {

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

44 final Block cauldron = dispenser.getBlock().getRelative(direction.getFacing());

45

46 if(item.getType() == Material.BUCKET)

47 {

48 if(cauldron.getType() == Material.WATER_CAULDRON)

49 {

50 cauldron.setType(Material.CAULDRON);

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

52 event.setItem(new ItemStack(Material.WATER_BUCKET));

53 }

54

55 if(cauldron.getType() == Material.LAVA_CAULDRON)

56 {

57 cauldron.setType(Material.CAULDRON);

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

59 event.setItem(new ItemStack(Material.LAVA_BUCKET));

60 }

61 }

62

63 if(debounceEventCount > 0)

64 {

65 debounceEventCount = 0;

66 return;

67 }

68

69 if(item.getType() == Material.GLASS_BOTTLE)

70 {

71 debounceEventCount++;

72 final Levelled cauldronData = (Levelled) cauldron.getBlockData();

73 final ItemStack waterBottle = new ItemStack(Material.POTION);

74 final PotionMeta potionMeta = (PotionMeta) waterBottle.getItemMeta();

75 potionMeta.setBasePotionData(new PotionData(PotionType.WATER));

76 waterBottle.setItemMeta(potionMeta);

77

78 if(cauldronData.getLevel() == 1)

79 {

80 cauldron.setType(Material.CAULDRON);

81 }

82 else

83 {

84 cauldronData.setLevel(cauldronData.getLevel() - 1);

85 System.out.println(cauldronData.getLevel());

86 cauldron.setBlockData(cauldronData);

87 }

88

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

90 event.setItem(waterBottle);

91 }

92 }

93 }

94 }

95

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

97 {

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

99 dispenser.getSnapshotInventory().addItem(new ItemStack(material, -amount));

100 dispenser.update();

101 }, 1);

102 }

103}