A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 2c0f39d56124ca82bd9cf32c3bc43cd4b7943180 (2272 bytes)[doc][blame][raw]
1
package poppy.modules;3
import java.util.Set;5
import org.bukkit.Bukkit;6
import org.bukkit.Material;7
import org.bukkit.Tag;8
import org.bukkit.block.Block;9
import org.bukkit.block.BlockState;10
import org.bukkit.block.Dispenser;11
import org.bukkit.block.data.Directional;12
import org.bukkit.event.EventHandler;13
import org.bukkit.event.Listener;14
import org.bukkit.event.block.BlockDispenseEvent;15
import org.bukkit.inventory.ItemStack;16
import org.bukkit.inventory.meta.BlockStateMeta;17
import org.bukkit.inventory.meta.ItemMeta;18
import org.bukkit.plugin.Plugin;20
import poppy.Utils;22
public class AutoPlacerModule implements Listener23
{24
private Plugin plugin;26
public AutoPlacerModule(Plugin plugin)27
{28
this.plugin = plugin;29
}31
@EventHandler32
public void onBlockDispenseEvent(BlockDispenseEvent event)33
{34
final Block block = event.getBlock();35
final BlockState blockState = block.getState();36
final ItemStack item = event.getItem();38
if(blockState instanceof Dispenser)39
{40
Dispenser dispenser = (Dispenser) blockState;42
if(dispenser.getCustomName().toLowerCase().equals("placer"))43
{44
event.setCancelled(true);46
if(block.getBlockData() instanceof Directional)47
{48
final Directional direction = (Directional) dispenser.getBlockData();49
final Block faceBlock = dispenser.getBlock().getRelative(direction.getFacing());51
if(item.getType().isBlock() && Utils.isAir(faceBlock.getType()) && !isShulkerboxContend(item))52
{53
faceBlock.setType(item.getType());54
removeSnapshotItem(dispenser, item.getType(), 1);55
}56
}58
if(isShulkerboxContend(item))59
{60
event.setCancelled(false);61
}62
}63
}64
}66
public boolean isShulkerboxContend(ItemStack itemStack)67
{68
final ItemMeta itemMeta = itemStack.getItemMeta();69
final Set<Material> shulkerboxes = Tag.SHULKER_BOXES.getValues();71
for(Material material : shulkerboxes)72
{73
if(itemStack.getType().equals(material) && itemMeta instanceof BlockStateMeta)74
{75
return true;76
}77
}78
return false;79
}81
public void removeSnapshotItem(Dispenser dispenser, Material material, int amount)82
{83
Bukkit.getScheduler().runTaskLater(plugin, () -> {84
dispenser.getSnapshotInventory().addItem(new ItemStack(material, -amount));85
dispenser.update();86
}, 1);87
}88
}