注释类无法访问全局布尔值

时间:2020-05-22 14:47:28

标签: java boolean listener minecraft bukkit

我正在尝试编写一个Minecraft插件,用一个命令使所有产生电荷的爬虫爬行,而使用另一个命令使它们不带电荷。我已经编写了用于设置侦听器的代码(这样,我的意思是我从https://youtu.be/oHKcQ184aa8?t=22复制了Dream的代码),我只想创建它,因此在以下代码中有一个布尔值代替true:最后一行) '''

    @EventHandler
    public void creeperSpawn(CreatureSpawnEvent event) {
        if (event.getEntityType() == EntityType.CREEPER) {
            Creeper creeper = (Creeper) event.getEntity();
            creeper.setPowered(true);
        }
    } 

''' 我想将true更改为名为PoweredOrNot的布尔型,然后在运行命令时将其设置为Powered或不设置为true。唯一的问题是它要么说未定义PoweredOrNot,要么当我添加扩展onCommand时,它给我错误“令牌“扩展”上的语法错误,引发预期错误” 和另外两个错误,一个在上面的括号中显示“语法错误,请插入“}”以完成ClassBody”,而添加另一个括号则不起作用。括号下面的另一个错误是“令牌“}语法错误””,请删除此令牌,这样可以消除错误。

我进行了研究,并制作了另一个名为Globals的类,它具有布尔名称或不具有布尔名称,但是当我执行Globals.PoweredOrNot时,它会说它没有定义

这是您可以反编译的jar文件,因为有许多类和软件包可以使用。注意,我认为您可能必须下载spiggot的参考库,但如果jar中包含idk,则请下载idk。 https://drive.google.com/file/d/18XWOHV13I2cB---xlG0socfRMOnnKfPv/view?usp=sharing

完整代码(用于startCommand类)

package me.Gwehyr.chargeall.commands;

import org.bukkit.entity.Creeper;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.command.*;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;

import me.Gwehyr.chargeall.*;


public class StartCommand implements CommandExecutor, Listener {

    private Main plugin;

    public StartCommand(Main plugin) {
        this.plugin = plugin;
        plugin.getCommand("charge").setExecutor(this);
    }

    @Override
    public boolean onCommand( CommandSender sender,  Command cmd,  String label, String[] args) {
        if (sender instanceof Player) {
            sender.sendMessage("Only Console may execute this command");
            return true;
        }else {
            boolean PoweredOrNot = true;
            sender.sendMessage("Creepers Charged!");
        }
        return true;
    }

@EventHandler
public void creeperSpawn(CreatureSpawnEvent event) extends onCommand {
    if (event.getEntityType() == EntityType.CREEPER) {
        Creeper creeper = (Creeper) event.getEntity();
        creeper.setPowered(PoweredOrNot);
    }
}

1 个答案:

答案 0 :(得分:1)

之所以说尚未初始化是因为它仅在onCommand函数内部进行了初始化。因此,不要将布尔值放在此处(箭头所在的位置)

public boolean onCommand( CommandSender sender,  Command cmd,  String label, String[] args) {
        if (sender instanceof Player) {
            sender.sendMessage("Only Console may execute this command");
            return true;
        }else {
            boolean PoweredOrNot = true;   <---------
            sender.sendMessage("Creepers Charged!");
        }
        return true;
    }

把您的课程排在首位。

public boolean PoweredOrNot;

这可以确保已定义它,并且如果您希望能够从另一个类访问此布尔值(我不确定为什么会这样,这取决于您在做什么),而是可以放入

public static boolean PoweredOrNot;

默认情况下该值没有值,因此您可能希望将其设置为false或其他值。

也有人对那些刚接触Bukkit /编码的人说,不要告诉他们“在开始之前先学习”,这是很好的帮助,它可以防止他们下次再做。希望对您有所帮助!