作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想删除玩家掉落某些元素的能力,同时删除除我想要取消的元素之外的所有掉落,例如:玩家不能掉落剑,但当他掉落蘑菇汤空碗时,然后清洁水滴。我在主类上注册了两个监听器类。
听众:
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent e) {
e.getItemDrop().remove();
}
防止掉落:
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled=false)
public void onPlayerDropItem(PlayerDropItemEvent e) {
if(e.getItemDrop().equals(new ItemStack(Material.MUSHROOM_SOUP))
|| (e.getItemDrop().equals(new ItemStack(Material.DIAMOND_SWORD)))
|| (e.getItemDrop().equals(new ItemStack(Material.IRON_SWORD)))
|| (e.getItemDrop().equals(new ItemStack(Material.TNT)))
|| (e.getItemDrop().equals(new ItemStack(Material.ARROW)))
|| (e.getItemDrop().equals(new ItemStack(Material.BOW)))
|| (e.getItemDrop().equals(new ItemStack(Material.WOOD_SWORD)))
|| (e.getItemDrop().equals(new ItemStack(Material.STONE_SWORD))))
{
e.setCancelled(true);
}
}
主要(onLoad部分):
@Override
public void onEnable() {
System.out.println("Main plugin enabled");
getCommand("pvp").setExecutor(new PvP(this));
getCommand("instakiller").setExecutor(new InstaKiller(this));
getCommand("wizard").setExecutor(new Wizard(this));
getCommand("archer").setExecutor(new Archer(this));
getServer().getPluginManager().registerEvents(new Listeners(this), this);
getServer().getPluginManager().registerEvents(new PreventDropping(this), this);
}
遗憾的是,服务器只是忽略了我的第二个监听器,并清除了所有 drop,而不是使其无法删除 PreventDropping 中列出的 itens。怎么了?
附加问题:箭头错误,如评论中所述。
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent e) {
if(e.getItemDrop().getItemStack().getType() == Material.DIAMOND_SWORD ||
(e.getItemDrop().getItemStack().getType() == Material.IRON_SWORD) ||
(e.getItemDrop().getItemStack().getType() == Material.STONE_SWORD) ||
(e.getItemDrop().getItemStack().getType() == Material.WOOD_SWORD) ||
(e.getItemDrop().getItemStack().getType() == Material.TNT) ||
(e.getItemDrop().getItemStack().getType() == Material.BOW) ||
(e.getItemDrop().getItemStack().getType() == Material.ARROW) ||
(e.getItemDrop().getItemStack().getType() == Material.BLAZE_ROD)) {
e.setCancelled(true);
} else {
e.getItemDrop().remove();
}
}
最佳答案
如果我理解正确的话,您想要禁用掉落示例蘑菇汤的功能,并删除玩家尝试掉落的所有其他元素。如果是这样,为什么要使用两个PlayerDropItemEvent
?另外,每次要进行检查时,无需创建新的 ItemStack
对象,只需使用:
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent e) {
if(event.getItemDrop().getItemStack().getType() == Material.MUSHROOM_SOUP))
/* Your code here */
{
e.setCancelled(true);
} else {
e.getItemDrop().remove();
}
}
如果该元素是蘑菇汤,此代码将取消掉落事件,否则它将删除掉落事件。
您的代码的问题是,无论如何,两个监听器都会运行。这意味着即使它是蘑菇汤,该滴也会被移除。一个监听器将覆盖另一个监听器。
关于java - bukkit - 跌落预防不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40707539/
我正在制作一个简单的游戏,用户单击彩色 block ,所有相同颜色的相邻 block 都会一起消失。当一个方 block 消失时,它上面的所有方 block 都会掉落并填充空白区域。我将如何实现这种行
我是一名优秀的程序员,十分优秀!