下面列出了org.bukkit.Material#DISPENSER 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@EventHandler
public void onBlockDispensing(BlockDispenseEvent e) {
Block b = e.getBlock();
if (b.getType() == Material.DISPENSER && b.getRelative(BlockFace.DOWN).getType() != Material.HOPPER) {
SlimefunItem machine = BlockStorage.check(b);
if (machine != null) {
machine.callItemHandler(BlockDispenseHandler.class, handler -> {
Dispenser dispenser = (Dispenser) b.getState();
BlockFace face = ((Directional) b.getBlockData()).getFacing();
Block block = b.getRelative(face);
handler.onBlockDispense(e, dispenser, block, machine);
});
}
}
}
protected void depositItems(BlockMenu menu, Block facedBlock) {
if (facedBlock.getType() == Material.DISPENSER && BlockStorage.check(facedBlock, "ANDROID_INTERFACE_ITEMS")) {
Dispenser d = (Dispenser) facedBlock.getState();
for (int slot : getOutputSlots()) {
ItemStack stack = menu.getItemInSlot(slot);
if (stack != null) {
Optional<ItemStack> optional = d.getInventory().addItem(stack).values().stream().findFirst();
if (optional.isPresent()) {
menu.replaceExistingItem(slot, optional.get());
}
else {
menu.replaceExistingItem(slot, null);
}
}
}
}
}
@Override
public ItemUseHandler getItemHandler() {
return e -> {
// Check if it is being placed into an ancient altar.
if (e.getClickedBlock().isPresent()) {
Material block = e.getClickedBlock().get().getType();
if (block == Material.DISPENSER || block == Material.ENCHANTING_TABLE) {
return;
}
}
Player p = e.getPlayer();
if (p.getGameMode() != GameMode.CREATIVE) {
ItemUtils.consumeItem(e.getItem(), false);
}
p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1);
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, 3));
};
}
@Override
public BlockProjectileSource getBlockProjectileSource() {
Block block = getBlock();
if (block.getType() != Material.DISPENSER) {
return null;
}
return new CraftBlockProjectileSource((TileEntityDispenser) this.getTileEntityFromWorld());
}
@EventHandler
public void onEntityDispense(BlockDispenseEntityEvent event){
if (event.getBlock().getType() == Material.DISPENSER){
if (event.getEntity().getType() == EntityType.PRIMED_TNT) {
Location location = event.getBlock().getLocation();
if (dispenserPlaced.containsKey(location.getBlockX() + "," + location.getBlockY() + "," + location.getBlockZ())) {
UUID player = dispenserPlaced.get(location.getBlockX() + "," + location.getBlockY() + "," + location.getBlockZ());
event.getEntity().setMetadata("source", new FixedMetadataValue(GameHandler.getGameHandler().getPlugin(), player));
}
}
}
}
public ArmorForge(Category category, SlimefunItemStack item) {
super(category, item, new ItemStack[] {
null, null, null,
null, new ItemStack(Material.ANVIL), null,
null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)"), null
}, new ItemStack[0], BlockFace.SELF);
}
private Block locateDispenser(Block b) {
Block block = null;
if (b.getRelative(1, 0, 0).getType() == Material.DISPENSER) block = b.getRelative(1, 0, 0);
else if (b.getRelative(0, 0, 1).getType() == Material.DISPENSER) block = b.getRelative(0, 0, 1);
else if (b.getRelative(-1, 0, 0).getType() == Material.DISPENSER) block = b.getRelative(-1, 0, 0);
else if (b.getRelative(0, 0, -1).getType() == Material.DISPENSER) block = b.getRelative(0, 0, -1);
return block;
}
public BlockProjectileSource getBlockProjectileSource() {
Block block = getBlock();
if (block.getType() != Material.DISPENSER) {
return null;
}
return new CraftBlockProjectileSource(dispenser);
}
@Override
default Optional<IncompatibleItemHandlerException> validate(SlimefunItem item) {
if (item instanceof NotPlaceable || item.getItem().getType() != Material.DISPENSER) {
return Optional.of(new IncompatibleItemHandlerException("Only dispensers that are not marked as 'NotPlaceable' can have a BlockDispenseHandler.", item, this));
}
return Optional.empty();
}
protected void refuel(BlockMenu menu, Block facedBlock) {
if (facedBlock.getType() == Material.DISPENSER && BlockStorage.check(facedBlock, "ANDROID_INTERFACE_FUEL")) {
Dispenser d = (Dispenser) facedBlock.getState();
for (int slot = 0; slot < 9; slot++) {
ItemStack item = d.getInventory().getItem(slot);
if (item != null) {
insertFuel(menu, d.getInventory(), slot, menu.getItemInSlot(43), item);
}
}
}
}
@Test
public void testSymmetry() {
SlimefunItem item = TestUtilities.mockSlimefunItem(plugin, "MULTIBLOCK_TEST", new CustomItem(Material.BRICK, "&5Multiblock Test"));
MultiBlock multiblock = new MultiBlock(item, new Material[] { null, null, null, Material.DIAMOND_BLOCK, null, Material.DIAMOND_BLOCK, null, Material.DISPENSER, null }, BlockFace.DOWN);
Assertions.assertTrue(multiblock.isSymmetric());
MultiBlock multiblock2 = new MultiBlock(item, new Material[] { Material.EMERALD_BLOCK, null, null, Material.EMERALD_BLOCK, null, Material.DIAMOND_BLOCK, Material.EMERALD_BLOCK, Material.DISPENSER, null }, BlockFace.DOWN);
Assertions.assertFalse(multiblock2.isSymmetric());
}
@EventHandler
private void blockDispense(BlockDispenseEvent event) {
if (event.getBlock().getType() != Material.DISPENSER) {
return;
}
CustomItem customItem = CustomItemManager.getCustomItem(event.getItem());
if (customItem != null) {
if (verifyCustomItem(customItem, event.getBlock().getWorld())) {
customItem.onDispense(event, new DispenserDetails(event, customItem._owner));
} else {
event.setCancelled(true);
}
}
}
public Juicer(Category category, SlimefunItemStack item) {
super(category, item,
new ItemStack[] {null, new ItemStack(Material.GLASS), null, null, new ItemStack(Material.NETHER_BRICK_FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)"), null},
new ItemStack[0],
BlockFace.SELF
);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlace(ParticipantBlockTransformEvent event) {
if (event.getNewState().getMaterial() == Material.DISPENSER) {
blocks().trackBlockState(event.getNewState(), new DispenserInfo(event.getPlayerState()));
}
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onClick(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack norm = null;
if (event.getHand() == EquipmentSlot.HAND) {
norm = player.getInventory().getItemInMainHand();
} else if (event.getHand() == EquipmentSlot.OFF_HAND) {
norm = player.getInventory().getItemInOffHand();
}
if (norm == null) return;
if (event.getAction() == Action.RIGHT_CLICK_AIR) {
if (modManager.isModifierItem(norm)) {
event.setCancelled(true);
}
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Block block = event.getClickedBlock();
if (block == null) {
return;
}
if (!player.isSneaking()) {
Material type = block.getType();
if (type == Material.ANVIL || type == Material.CRAFTING_TABLE
|| type == Material.CHEST || type == Material.ENDER_CHEST
|| type == Material.DROPPER || type == Material.HOPPER
|| type == Material.DISPENSER || type == Material.TRAPPED_CHEST
|| type == Material.FURNACE || type == Material.ENCHANTING_TABLE) {
return;
}
}
if (modManager.isModifierItem(norm)) {
event.setCancelled(true);
return;
}
if (block.getType() == Material.getMaterial(MineTinker.getPlugin().getConfig().getString("BlockToEnchantModifiers", Material.BOOKSHELF.name()))) {
ItemStack item = player.getInventory().getItemInMainHand();
for (Modifier m : modManager.getAllMods()) {
if (m.getModItem().getType().equals(item.getType())) {
if (!m.isEnchantable()) continue;
m.enchantItem(player);
event.setCancelled(true);
break;
}
}
}
}
}
public Dispenser() {
super(Material.DISPENSER);
}
public Smeltery(Category category, SlimefunItemStack item) {
super(category, item, new ItemStack[] { null, new ItemStack(Material.NETHER_BRICK_FENCE), null, new ItemStack(Material.NETHER_BRICKS), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)"), new ItemStack(Material.NETHER_BRICKS), null, new ItemStack(Material.FLINT_AND_STEEL), null }, new ItemStack[] { SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT) }, BlockFace.DOWN);
addItemSetting(fireBreakingChance);
}
public OreWasher(Category category, SlimefunItemStack item) {
super(category, item, new ItemStack[] { null, new ItemStack(Material.DISPENSER), null, null, new ItemStack(Material.OAK_FENCE), null, null, new ItemStack(Material.CAULDRON), null }, new ItemStack[0], BlockFace.SELF);
legacyMode = SlimefunPlugin.getCfg().getBoolean("options.legacy-ore-washer");
dusts = new ItemStack[] { SlimefunItems.IRON_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.TIN_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.MAGNESIUM_DUST, SlimefunItems.LEAD_DUST, SlimefunItems.SILVER_DUST };
}
public EnhancedCraftingTable(Category category, SlimefunItemStack item) {
super(category, item, new ItemStack[] { null, null, null, null, new ItemStack(Material.CRAFTING_TABLE), null, null, new ItemStack(Material.DISPENSER), null }, new ItemStack[0], BlockFace.SELF);
}
public OreCrusher(Category category, SlimefunItemStack item) {
super(category, item, new ItemStack[] { null, null, null, null, new ItemStack(Material.NETHER_BRICK_FENCE), null, new ItemStack(Material.IRON_BARS), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)"), new ItemStack(Material.IRON_BARS) }, new ItemStack[] { new ItemStack(Material.COBBLESTONE, 8), new ItemStack(Material.SAND, 1), SlimefunItems.GOLD_4K, SlimefunItems.GOLD_DUST, new ItemStack(Material.GRAVEL), new ItemStack(Material.SAND), new ItemStack(Material.MAGMA_BLOCK, 4), SlimefunItems.SULFATE }, BlockFace.SELF);
addItemSetting(doubleOres);
}