【问题标题】:Cant figure out how to properly pull keys from config无法弄清楚如何从配置中正确提取密钥
【发布时间】:2021-12-26 11:32:09
【问题描述】:

我一直在尝试为一个非常基本的 EntityDeathEvent 脚本实现一个配置文件,以便实现一个重新加载命令,以便能够添加到我的配置并重新加载文件,而不是重新启动服务器。我正在使用的当前代码返回零错误,所以我现在很迷茫。我花了 5 天时间来修补 Java,所以我的代码中可能缺少很多东西,但这就是我目前所拥有的。

main.java:

package com.mk7smp.LukesMobEffects;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Entity;
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;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;



public class Main extends JavaPlugin implements Listener {

  @Override
  public void onEnable() {
    this.saveDefaultConfig();
    this.getServer().getPluginManager().registerEvents(this, this);
  }

  @Override
  public void onDisable() {

  }

  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (label.equalsIgnoreCase("mobeffects")) {
      if (!sender.hasPermission("mobeffects.reload")) {
        sender.sendMessage(ChatColor.RED + "Nope, big admin guys only.");
        return true;
      }
      if (args.length == 0) {
        // /mobeffects
        sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&f[&bmk7 Mob Effects&f] &aUsage: /mobeffects reload"));
        return true;
      }
      if (args.length > 0) {
        // /mobeffects reload
        if (args[0].equalsIgnoreCase("reload")) {
          for (String msg: this.getConfig().getStringList("reload.message")) {
            sender.sendMessage(ChatColor.translateAlternateColorCodes('&',
              msg));
          }
          this.reloadConfig();
        }
      }
    }
    return false;
  }

  @EventHandler
  public void mobDeath(EntityDeathEvent event) {

    Entity entity = event.getEntity();
    Player player = event.getEntity().getKiller();

    if (player == null) {
      return;
    }

    ConfigurationSection mobs = this.getConfig().getConfigurationSection("mobs"); // The "mobs" section of the config file

    for (String mobKey: mobs.getKeys(false)) { // For ONE(one bc getKeys is set to true) mob key in the set
      String mobname = (String) mobs.get(mobKey + ".name"); // use specified path to retrieve name value
      String message = (String) mobs.get(mobKey + ".message");
      if (entity.getType().toString() == mobname) {
        for (String effectString: mobs.getStringList(mobKey + ".effects")) {


          //make sure there are no whitespaces in the "effectString"
          String[] values = effectString.split(",");

          //create PotionEffectType
          PotionEffectType type;
          //set default duration to 30 seconds
          int duration = 30;
          //set default strength to 1
          int strength = 1;

          //get type
          type = PotionEffectType.getByName(values[0].toUpperCase());

          //check, if type is null
          if (type == null) {
            System.err.println(effectString + " could not be interpreted into a correct PotionEffectType.");
            continue;
          }

          //set duration
          if (values.length > 1)
            duration = Integer.parseInt(values[1]);

          //set strength
          if (values.length > 2)
            strength = Integer.parseInt(values[2]);

          //check, if player already has potiontype
          if (player.hasPotionEffect(type))
            player.removePotionEffect(type);

          //create the effect
          PotionEffect effect = type.createEffect(duration * 20, strength);
          player.addPotionEffect(effect);
          player.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
        }
      }
    }
  }
  // THESE ARE THE FUNCTIONS THAT I WANT TO USE WITH DATA FROM CONFIG
  //if (entity.getType().toString() == "RABBIT") {
  //    player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&f[&bmk7 Mob Effects&f] &aYou've been given &c&lLeaping: 15s &afor killing a &crabbit&a!"));
  //    player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 300, 2));
  //    }
  //if (entity.getType().toString() == "ENDERMAN") {
  //    player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&f[&bmk7 Mob Effects&f] &aYou've been given &c&lRegeneration: 10s &afor killing a &cenderman&a!"));
  //    player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 200, 2));
  //}
  //if (entity.getType().toString() == "CHICKEN") {
  //    player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&f[&bmk7 Mob Effects&f] &aYou've been given &c&lFeather Falling: 10s &afor killing a &c&lchicken&a!"));
  //    player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 200, 1));
  //}
};

config.yml

reload:
   message:
      - "&f[&bmk7 Mob Effects&f] &a&lReloaded config!"
      
mobs:
  rabbit:
    name: rabbit
    message: "&f[&bmk7 Mob Effects&f] &aYou've been given &c&lLeaping: 15s &afor killing a &crabbit&a!"
    effects: 
      - JUMP,15,2

请让我帮忙看看正确的方向

【问题讨论】:

  • 首先了解Java和JavaScript的区别...
  • 我建议你使用mobs.getString()而不是mobs.get

标签: java yaml minecraft bukkit


【解决方案1】:

请把第 7 行的兔子变成一个字符串。添加引号。

reload:
   message:
      - "&f[&bmk7 Mob Effects&f] &a&lReloaded config!"
      
mobs:
  rabbit:
    name: "rabbit"
    message: "&f[&bmk7 Mob Effects&f] &aYou've been given &c&lLeaping: 15s &afor killing a &crabbit&a!"
    effects: 
      - JUMP,15,2

【讨论】:

    【解决方案2】:

    确保您已删除旧的配置文件。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2011-02-18
    • 2019-10-26
    • 2020-06-21
    • 2019-03-12
    • 1970-01-01
    • 2023-03-28
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多