A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: fb3d10be335d195948eda4198b85b53329119c7c (2870 bytes)[doc][blame][raw]
1
package poppy.modules;3
import org.bukkit.Bukkit;4
import org.bukkit.Material;5
import org.bukkit.block.Block;6
import org.bukkit.block.BlockState;7
import org.bukkit.block.Dispenser;8
import org.bukkit.block.data.Directional;9
import org.bukkit.block.data.Levelled;10
import org.bukkit.event.EventHandler;11
import org.bukkit.event.Listener;12
import org.bukkit.event.block.BlockDispenseEvent;13
import org.bukkit.inventory.ItemStack;14
import org.bukkit.inventory.meta.PotionMeta;15
import org.bukkit.plugin.Plugin;16
import org.bukkit.potion.PotionType;19
public class CauldronModule implements Listener20
{21
private Plugin plugin;22
private Integer debounceEventCount = 0;24
public CauldronModule(Plugin plugin)25
{26
this.plugin = plugin;27
}29
@EventHandler30
public void onBlockDispenseEvent(BlockDispenseEvent event)31
{32
final Block block = event.getBlock();33
final BlockState blockState = block.getState();35
if(blockState instanceof Dispenser)36
{37
final Dispenser dispenser = (Dispenser) blockState;38
final ItemStack item = event.getItem();40
if(block.getBlockData() instanceof Directional)41
{42
final Directional direction = (Directional) dispenser.getBlockData();43
final Block cauldron = dispenser.getBlock().getRelative(direction.getFacing());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
}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
}62
if(debounceEventCount > 0)63
{64
debounceEventCount = 0;65
return;66
}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);77
if(cauldronData.getLevel() == 1)78
{79
cauldron.setType(Material.CAULDRON);80
}81
else82
{83
cauldronData.setLevel(cauldronData.getLevel() - 1);84
System.out.println(cauldronData.getLevel());85
cauldron.setBlockData(cauldronData);86
}88
removeSnapshotItem(dispenser, item.getType(), 1);89
event.setItem(waterBottle);90
}91
}92
}93
}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
}