下面列出了org.bukkit.Material#HOPPER 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlace(BlockPlaceEvent e) {
final Block b = e.getBlock();
if (b.getType() != Material.HOPPER) {
return;
}
final Player p = e.getPlayer();
if (!Util.isOtherShopWithinHopperReach(b, p)) {
return;
}
if (QuickShop.getPermissionManager().hasPermission(p, "quickshop.other.open")) {
MsgUtil.sendMessage(p, MsgUtil.getMessage("bypassing-lock", p));
return;
}
MsgUtil.sendMessage(p, MsgUtil.getMessage("that-is-locked", p));
e.setCancelled(true);
}
@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);
});
}
}
}
/**
* Get the possible protection matchers that can match the protection
*
* @return
*/
public Matcher[] getProtectionMatchers() {
Material material = baseBlock.getType();
if (material == Material.HOPPER) {
return new Matcher[0];
}
// Double chests
if (DoubleChestMatcher.PROTECTABLES_CHESTS.contains(material)) {
return new Matcher[]{
new DoubleChestMatcher()
};
}
// Gravity
else if (GravityMatcher.PROTECTABLES_POSTS.contains(material)) {
return new Matcher[]{
new GravityMatcher()
};
}
// Doors
else if (DoorMatcher.PROTECTABLES_DOORS.contains(material)) {
return new Matcher[]{
new DoorMatcher()
};
}
// Anything else
else {
return new Matcher[]{
new DoorMatcher(),
new GravityMatcher(),
new WallMatcher()
};
}
}
private ItemStack getOpenButton(MatchPlayer player) {
ItemStack stack = new ItemStack(Material.HOPPER);
ItemMeta meta = stack.getItemMeta();
meta.addItemFlags(ItemFlag.values());
meta.setDisplayName(BUTTON_PREFIX + ChatColor.BLUE.toString() + ChatColor.BOLD + PGMTranslations.t("rating.rateThisMap", player));
stack.setItemMeta(meta);
return stack;
}
@EventHandler
public void onOpenButtonClick(PlayerInteractEvent event) {
if(event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
MatchPlayer player = this.getMatch().getPlayer(event.getPlayer());
if(player == null) return;
ItemStack stack = event.getPlayer().getItemInHand();
if(stack == null) return;
if(stack.getType() != Material.HOPPER) return;
String name = stack.getItemMeta().getDisplayName();
if(name == null || !name.startsWith(BUTTON_PREFIX)) return;
this.showDialog(player);
}
@Override
public BlockTicker getItemHandler() {
return new BlockTicker() {
@Override
public void tick(Block b, SlimefunItem sfItem, Config data) {
if (b.getType() != Material.HOPPER) {
// we're no longer a hopper, we were probably destroyed. skipping this tick.
BlockStorage.clearBlockInfo(b);
return;
}
Location l = b.getLocation().add(0.5, 1.2, 0.5);
boolean sound = false;
double range = radius.getValue();
for (Entity item : b.getWorld().getNearbyEntities(l, range, range, range, n -> isValidItem(l, n))) {
item.setVelocity(new Vector(0, 0.1, 0));
item.teleport(l);
sound = true;
}
if (sound && !silent.getValue().booleanValue()) {
b.getWorld().playSound(b.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1F, 2F);
}
}
@Override
public boolean isSynchronized() {
return true;
}
};
}
@EventHandler(ignoreCancelled = true)
void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
Material type = block.getType();
Player player = event.getPlayer();
if (Utils.isChest(type)) {
if (plugin.getProtectedChests().isChestProtected(block, player)) {
Log.debug("Cancelled placing of chest block by '" + player.getName() + "' at '"
+ Utils.getLocationString(block) + "': Protected chest nearby");
event.setCancelled(true);
}
} else if (type == Material.HOPPER) {
if (plugin.getProtectedChests().isProtectedChestAroundHopper(block, player)) {
Log.debug("Cancelled placing of hopper block by '" + player.getName() + "' at '"
+ Utils.getLocationString(block) + "': Protected chest nearby");
event.setCancelled(true);
}
} else if (type == Material.RAILS || type == Material.POWERED_RAIL || type == Material.DETECTOR_RAIL || type == Material.ACTIVATOR_RAIL) {
Block upperBlock = block.getRelative(BlockFace.UP);
if (Utils.isChest(upperBlock.getType()) && plugin.getProtectedChests().isChestProtected(upperBlock, player)) {
Log.debug("Cancelled placing of rail block by '" + player.getName() + "' at '"
+ Utils.getLocationString(block) + "': Protected chest nearby");
event.setCancelled(true);
return;
}
}
}
@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;
}
}
}
}
}
private void onClickMainMenu(InventoryClickEvent event, ItemStack currentItem, Player p, int slotIndex) {
event.setCancelled(true);
if (slotIndex < 0 || slotIndex > 35) {
return;
}
PlayerInfo playerInfo = plugin.getPlayerInfo(p);
IslandInfo islandInfo = plugin.getIslandInfo(playerInfo);
if (currentItem.getType() == Material.JUNGLE_SAPLING) {
p.closeInventory();
p.performCommand("island biome");
} else if (currentItem.getType() == Material.PLAYER_HEAD) {
p.closeInventory();
p.performCommand("island party");
} else if (currentItem.getType() == Material.RED_BED) {
p.closeInventory();
p.performCommand("island sethome");
p.performCommand("island");
} else if (currentItem.getType() == Material.GRASS) {
p.closeInventory();
p.performCommand("island spawn");
} else if (currentItem.getType() == Material.HOPPER) {
p.closeInventory();
p.performCommand("island setwarp");
p.performCommand("island");
} else if (currentItem.getType() == Material.WRITABLE_BOOK) {
p.closeInventory();
p.performCommand("island log");
} else if (currentItem.getType() == Material.OAK_DOOR) {
p.closeInventory();
p.performCommand("island home");
} else if (currentItem.getType() == Material.EXPERIENCE_BOTTLE) {
p.closeInventory();
p.performCommand("island level");
} else if (currentItem.getType() == Material.DIAMOND_ORE) {
p.closeInventory();
p.performCommand("c");
} else if (currentItem.getType() == Material.END_STONE || currentItem.getType() == Material.END_PORTAL_FRAME) {
p.closeInventory();
p.performCommand("island togglewarp");
p.performCommand("island");
} else if (currentItem.getType() == Material.IRON_BARS && islandInfo.isLocked()) {
p.closeInventory();
p.performCommand("island unlock");
p.performCommand("island");
} else if (currentItem.getType() == Material.IRON_BARS && !islandInfo.isLocked()) {
p.closeInventory();
p.performCommand("island lock");
p.performCommand("island");
} else if (slotIndex == 17) {
if (islandInfo.isLeader(p) && plugin.getConfig().getBoolean("island-schemes-enabled", true)) {
p.closeInventory();
p.openInventory(createRestartGUI(p));
} else {
if (plugin.getConfirmHandler().millisLeft(p, "/is leave") > 0) {
p.closeInventory();
p.performCommand("island leave");
} else {
p.performCommand("island leave");
updateLeaveMenuItemTimer(p, event.getInventory(), currentItem);
}
}
} else {
if (!isExtraMenuAction(p, currentItem)) {
p.closeInventory();
p.performCommand("island");
}
}
}
/**
* Constructs a hopper facing the specified direction and either active or
* not.
*
* @param facingDirection the direction the hopper is facing
* @param isActive True if the hopper is initially active, false if
* deactivated
* @see BlockFace
*/
public Hopper(BlockFace facingDirection, boolean isActive) {
super(Material.HOPPER);
setFacingDirection(facingDirection);
setActive(isActive);
}