A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: d9614f124d372f79a957b927695d1ad95ea1389d (2923 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.PotionData;17
import org.bukkit.potion.PotionType;20
public class CauldronModule implements Listener21
{22
private Plugin plugin;23
private Integer debounceEventCount = 0;25
public CauldronModule(Plugin plugin)26
{27
this.plugin = plugin;28
}30
@EventHandler31
public void onBlockDispenseEvent(BlockDispenseEvent event)32
{33
final Block block = event.getBlock();34
final BlockState blockState = block.getState();36
if(blockState instanceof Dispenser)37
{38
final Dispenser dispenser = (Dispenser) blockState;39
final ItemStack item = event.getItem();41
if(block.getBlockData() instanceof Directional)42
{43
final Directional direction = (Directional) dispenser.getBlockData();44
final Block cauldron = dispenser.getBlock().getRelative(direction.getFacing());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
}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
}63
if(debounceEventCount > 0)64
{65
debounceEventCount = 0;66
return;67
}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);78
if(cauldronData.getLevel() == 1)79
{80
cauldron.setType(Material.CAULDRON);81
}82
else83
{84
cauldronData.setLevel(cauldronData.getLevel() - 1);85
System.out.println(cauldronData.getLevel());86
cauldron.setBlockData(cauldronData);87
}89
removeSnapshotItem(dispenser, item.getType(), 1);90
event.setItem(waterBottle);91
}92
}93
}94
}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
}