gpt4 book ai didi

java - 小山羊 : Read out Custom Name String/Extract Integer

转载 作者:行者123 更新时间:2023-11-29 04:53:09 26 4
gpt4 key购买 nike

我目前正在开发一个小的 RPG 插件,目前我正在尝试读取通过以下代码召唤的暴徒的等级:

public static void summonMob(EntityType entTy, int level, World w, Location loc) {

Entity en = w.spawnEntity(loc, entTy);
en.setCustomName(ChatColor.RED + "Experiment One " + ChatColor.DARK_GRAY + "> " + ChatColor.GREEN + level
+ ChatColor.DARK_GRAY + " <");
}

然后在onEnable()中调用进行测试:

summonMob(EntityType.ZOMBIE, 1, w, new Location(w, 238, 45, 1349));

“test-mob”被 1 级召唤,我正在尝试在以下事件中读出此信息:

@EventHandler
public void onEntityDeath(EntityDeathEvent e) {
if (e.getEntity().getKiller() instanceof Player) {

Player p = e.getEntity().getKiller();

if (e.getEntity().getCustomName() != null) {

int mobLevel = Integer
.parseInt(ChatColor.stripColor(e.getEntity().getCustomName().replaceAll("[^\\d.]", "")
.replaceAll("[^\\p{L}\\p{Nd}]+", "").replaceAll("\\s+", "")));
p.sendMessage("You've slain a Level " + mobLevel + " enemie!");
}
}

}

问题是,虽然从自定义名称中删除了所有非数字,但最终的整数总是将“8”加两倍,使得 1 中有 818,20 中有 8208。

我可能在这里漏掉了一些简单的东西,如果有人能帮助我,那就太好了。

最佳答案

虽然在其名称中存储了生物等级,但在使用时会使其难以提取。更好的解决方案可能是使用 Bukkit 的 Metadatable系统。

这个系统真的很容易使用,可以通过以下方式完成:

当你生成你的生物时,你可以通过以下方式为生物附加一个值:

en.setMetadata("level", new FixedMetadataValue(level));

当暴民被杀时,你可以很容易地通过以下方式取回值(value):

List<MetadataValue> data = e.getEntity().getMetadata("level");
if(data.isEmpty()) return;
int level = data.get(0).asInt();

这样,您就不需要执行复杂的字符串正则表达式来恢复您的水平。

关于java - 小山羊 : Read out Custom Name String/Extract Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com