so://phie

poppy

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

blob: fb3d10be335d195948eda4198b85b53329119c7c (2870 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.PotionType;

17

18

19public class CauldronModule implements Listener

20{

21 private Plugin plugin;

22 private Integer debounceEventCount = 0;

23

24 public CauldronModule(Plugin plugin)

25 {

26 this.plugin = plugin;

27 }

28

29 @EventHandler

30 public void onBlockDispenseEvent(BlockDispenseEvent event)

31 {

32 final Block block = event.getBlock();

33 final BlockState blockState = block.getState();

34

35 if(blockState instanceof Dispenser)

36 {

37 final Dispenser dispenser = (Dispenser) blockState;

38 final ItemStack item = event.getItem();

39

40 if(block.getBlockData() instanceof Directional)

41 {

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

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

44

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

46 {

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

48 {

49 cauldron.setType(Material.CAULDRON);

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

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

52 }

53

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

55 {

56 cauldron.setType(Material.CAULDRON);

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

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

59 }

60 }

61

62 if(debounceEventCount > 0)

63 {

64 debounceEventCount = 0;

65 return;

66 }

67

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

69 {

70 debounceEventCount++;

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

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

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

74 potionMeta.setBasePotionType(PotionType.WATER);

75 waterBottle.setItemMeta(potionMeta);

76

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

78 {

79 cauldron.setType(Material.CAULDRON);

80 }

81 else

82 {

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

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

85 cauldron.setBlockData(cauldronData);

86 }

87

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

89 event.setItem(waterBottle);

90 }

91 }

92 }

93 }

94

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

96 {

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

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

99 dispenser.update();

100 }, 1);

101 }

102}