在敌对的暴民被杀死后运行命令

问题描述

这是我当前的代码


import java.util.Random;
import java.util.stream.IntStream;

import org.bukkit.Bukkit;
import org.bukkit.entity.Monster;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin {

    @Override
    public void onEnable() {
        
    }
    
    @Override
    public void ondisable() {
        
    }
    public class MobListener implements Listener {
         
        @EventHandler
        public void onEntityDeath(EntityDeathEvent event) {
            Random r = new Random();
            int randomInt = r.nextInt(100) + 1;
            int[] myNum = {1,2,3,4,5,6,7,8,9,10};
            int[] uncommon = {1,6};
            int[] rare = {1,5};
            int[] epic = {1,2};
            int[] legendary = {1};
            int[] a = IntStream.range(1,100).toArray();
            if(event.getEntity() instanceof Monster)
            {
                Monster monsterEnt = (Monster) event.getEntity();
                if(monsterEnt.getKiller() instanceof Player)
                {
                    Player mcPlayer = (Player)monsterEnt.getKiller();
                    if(mcPlayer == null)
                        return;
                    if(mcPlayer.hasPermission("customdrops.use"))
                        for(int i : myNum)
                            if(randomInt == i)
                                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"crate give to" + mcPlayer + "CommonChest");
                        for(int i : uncommon)
                            if(randomInt == i)
                                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"crate give to" + mcPlayer + "UncommonChest");
                        for(int i : rare)
                            if(randomInt == i)
                                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"crate give to" + mcPlayer + "RareChest");
                        for(int i : epic)
                            if(randomInt == i)
                                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"crate give to" + mcPlayer + "EpicChest");
                        for(int i : legendary)
                            if(randomInt == i)
                                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"crate give to" + mcPlayer + "LegendaryChest");
                        for(int i : a)
                            if(randomInt == i)
                                Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"give" + mcPlayer + "dirt 64");
                }
            }
        } 
    } 

}

我只是为了测试而添加了脏东西,到目前为止,还没有任何板条箱或污物掉落。控制台中没有错误插件在/ pl中显示为绿色。使用1.16.2。我希望它在杀死敌对生物时运行命令。这些命令将为它们提供板条箱或脏物(暂时将其清除)。

解决方法

您使用的命令无效。

这是您的命令"crate give to" + mcPlayer + "CommonChest",请分解它。

首先,我很确定您不能直接在命令中引用Player对象。

//In-Correct
mcPlayer 

//Correct
mcPlayer.getDisplayName()

第二,您需要在播放器名称的两侧添加空格

//In-Correct
`"abc" + mcPlayer + "def"`

//Correct
`"abc " + mcPlayer + " def"`

现在在一起:

Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),"crate give to " + mcPlayer.getDisplayName() + " CommonChest");

注意:您确定这是由插件crate give to Toasterr1066 CommonChest注册的有效命令吗?

,

据我所知,您尚未注册侦听器类。

您可以在onEnable()方法中使用以下行来完成此操作。

Bukkit.getPluginManager().registerEvents(new MobListener());