如何解决在敌对的暴民被杀死后运行命令
这是我当前的代码:
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());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。