尝试使用检测BlockFromToEvent来检测一个流体破坏物品的事件并判断放置流体的玩家
思路:
首先监听玩家放置方块事件,如果是水/岩浆->存入hashmap<Block block,String player>
监听BlockFromToEvent,获取如果getToBlock()是树苗(火把)的话,去hashmap里面查找是谁放的
作出处理,并移除hashmap
(来自空)
问题是我的代码没有成功运行啊。。。?
- public class waterplaced implements Listener {
- Plugin config = Happytree.getProvidingPlugin(Happytree.class);
- Map<Block,Player> map = new HashMap<>();
- @EventHandler
- public void onWaterPlace(BlockPlaceEvent evt) {
- Material m = evt.getBlock().getType();
- Player p = evt.getPlayer();
- Block b = evt.getBlock();
- if (m == Material.WATER||m == Material.LAVA) {
- map.put(b,p);
- }
- }
- @EventHandler
- public void onWaterBreak(BlockFromToEvent evt) {
- Block b = evt.getToBlock();
- Block block = evt.getBlock();
- Material m = b.getType();
- 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)) {
- if(map.containsKey(block)){
- Player p = map.get(block);
- String pn = p.getName();
- int dt;
- int num;
- num = config.getConfig().getInt("des."+pn);
- dt = config.getConfig().getInt("destotal");
- config.getConfig().set("des."+pn,num+1);
- config.getConfig().set("destotal",dt+1);
- config.saveConfig();
- map.remove(block);
- }
- }
- }
- }
本帖最后由 拉普达 于 2022-2-17 19:08 编辑
放置水/岩浆(水桶或岩浆桶),不会触发BlockPlaceEvent事件。具体触发什么事件我还没搞清除,暂时建议从PlayerInteractEvent入手
放置水/岩浆(水桶或岩浆桶),不会触发BlockPlaceEvent事件。具体触发什么事件我还没搞清除,暂时建议从PlayerInteractEvent入手