A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy
blob: 38000238dc44aaa36c7d07c7a52a13cabcaca2cc (2460 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() != null && 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()) && !isShulkerboxContent(item))52
{53
faceBlock.setType(item.getType());54
removeSnapshotItem(dispenser, item.getType(), 1);55
}57
if(Tag.ITEMS_HOES.isTagged(item.getType()) && faceBlock.getType() == Material.COARSE_DIRT)58
{59
faceBlock.setType(Material.DIRT);60
}61
}63
if(isShulkerboxContent(item))64
{65
event.setCancelled(false);66
}67
}68
}69
}71
public boolean isShulkerboxContent(ItemStack itemStack)72
{73
final ItemMeta itemMeta = itemStack.getItemMeta();74
final Set<Material> shulkerboxes = Tag.SHULKER_BOXES.getValues();76
for(Material material : shulkerboxes)77
{78
if(itemStack.getType().equals(material) && itemMeta instanceof BlockStateMeta)79
{80
return true;81
}82
}83
return false;84
}86
public void removeSnapshotItem(Dispenser dispenser, Material material, int amount)87
{88
Bukkit.getScheduler().runTaskLater(plugin, () -> {89
dispenser.getSnapshotInventory().addItem(new ItemStack(material, -amount));90
dispenser.update();91
}, 1);92
}93
}