克鲁鲁殿下

尝试使用检测BlockFromToEvent来检测一个流体破坏物品的事件并判断放置流体的玩家

思路:
首先监听玩家放置方块事件,如果是水/岩浆->存入hashmap<Block block,String player>

监听BlockFromToEvent,获取如果getToBlock()是树苗(火把)的话,去hashmap里面查找是谁放的
作出处理,并移除hashmap
(来自空)

问题是我的代码没有成功运行啊。。。?
  1. public class waterplaced implements Listener {

  2.     Plugin config = Happytree.getProvidingPlugin(Happytree.class);
  3.     Map<Block,Player> map = new HashMap<>();
  4.     @EventHandler
  5.     public void onWaterPlace(BlockPlaceEvent evt) {
  6.         Material m = evt.getBlock().getType();
  7.         Player p = evt.getPlayer();
  8.         Block b = evt.getBlock();
  9.         if (m == Material.WATER||m == Material.LAVA) {
  10. map.put(b,p);
  11.         }
  12.     }
  13.     @EventHandler
  14.     public void onWaterBreak(BlockFromToEvent evt) {
  15.         Block b = evt.getToBlock();
  16. Block block = evt.getBlock();
  17.         Material m = b.getType();
  18.         if (m.equals(Material.ACACIA_SAPLING) || m.equals(Material.DARK_OAK_SAPLING) ||m.equals(Material.JUNGLE_SAPLING)||m.equals(Material.OAK_SAPLING)||m.equals(Material.SPRUCE_SAPLING)||m.equals(Material.BIRCH_SAPLING)) {
  19.             if(map.containsKey(block)){
  20.                 Player p = map.get(block);
  21.                 String pn = p.getName();
  22.                 int dt;
  23.                 int num;
  24.                 num = config.getConfig().getInt("des."+pn);
  25.                 dt = config.getConfig().getInt("destotal");
  26.                 config.getConfig().set("des."+pn,num+1);
  27.                 config.getConfig().set("destotal",dt+1);
  28.                 config.saveConfig();
  29. map.remove(block);
  30.             }
  31.         }
  32.     }
  33. }
复制代码
(数据暂时存在config.yml)


拉普达
本帖最后由 拉普达 于 2022-2-17 19:08 编辑

放置水/岩浆(水桶或岩浆桶),不会触发BlockPlaceEvent事件。具体触发什么事件我还没搞清除,暂时建议从PlayerInteractEvent入手

lanqihuya
好专业我这个萌的不能再萌的萌新听不懂啊

克鲁鲁殿下
拉普达 发表于 2022-2-17 19:00
放置水/岩浆(水桶或岩浆桶),不会触发BlockPlaceEvent事件。具体触发什么事件我还没搞清除,暂时建议从Play ...

那我还有一个问题:
假如我监听了交互事件,我应该怎么获取这个方块(水)呢?

拉普达
本帖最后由 拉普达 于 2022-2-18 19:27 编辑

判断手上拿着的是不是水/岩浆桶

克鲁鲁殿下
拉普达 发表于 2022-2-18 19:24
判断手上拿着的是不是水/岩浆桶

唔。。。。。。


PlayerBucketEmptyEvent可不可以呢

拉普达

应该是正解了