#java #class #object #bukkit #instance-variables
#java #класс #объект #bukkit #переменные экземпляра
Вопрос:
прежде всего; Спасибо за чтение и помощь мне, я новичок в Java, я столкнулся с проблемой.
Я создал переменные экземпляра внутри определенного класса. После этого я создаю новый экземпляр / объект этого класса и указываю новый ввод переменной. Проблема в том, что когда я запускаю код и пытаюсь, работает ли он, он не работает. Похоже, что новая переменная не передается создаваемому классу. (Когда я щелкаю левой кнопкой мыши по изумрудному блоку, появляется пустая строка)
Что я уже пробовал:
- создание метода установки для установки переменной.
- использование конструктора
Класс, из которого я хочу создать экземпляр:
package rico.polkadot;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
public class InstanceClass implements Listener {
public String name;
@EventHandler
public void onInteract(PlayerInteractEvent e) {
Action action = e.getAction();
Player p = e.getPlayer();
Block b = e.getClickedBlock();
if(action.equals(Action.LEFT_CLICK_BLOCK)) {
if(b.getType().equals(Material.EMERALD_BLOCK)) {
p.sendMessage(name);
}
}
}
}
Основной класс:
package rico.polkadot;
import java.util.List;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new InstanceClass(this),this);
InstanceClass test = new InstanceClass();{
test.name = "lol";
}
}
}
Комментарии:
1. «я хочу создать экземпляр», вы создаете его экземпляр, который называется test .
2. Не похоже, что есть проблема с установкой переменной. У вас есть общедоступная переменная, и вы устанавливаете ее после создания экземпляра с именем test
3. @Stultuske о, ну, извините меня. Я создаю экземпляр с именем test, но с именем строковой переменной, измененным на «lol». Тем не менее, это не работает, когда я запускаю код .. (При разрыве изумрудного блока не появляется сообщение со строкой «lol»)
Ответ №1:
Хорошо, вы должны создать конструктор или, по крайней мере, сеттер в вашем InstanceClass
лучшем варианте:
public class InstanceClass implements Listener {
public String name;
public InstanceClass(String name) {
this.name = name;
}
}
Тогда вы спрашиваете об экземпляре. Вы создали его внутри своей onEnable()
функции, но вы должны помнить, что он недоступен вне этой функции, поэтому вы не можете просто получить доступ к этой test
переменной из своего InstanceClass
.
@Override
public void onEnable() {
// here you create instance of InstanceClass
InstanceClass test = new InstanceClass("lol");
}
Комментарии:
1. Спасибо за вашу помощь AP11, я пробовал, но это не сработало.. Я также должен зарегистрировать слушателя в nnEnable (не включил его в свой пост) Код, необходимый для регистрации событий: getServer().getPluginManager().registerEvents(new InstanceClass(null),this);
Ответ №2:
Решаемая, требуется несколько конструкторов и «RegisterEvents» в OnEnable. Спасибо за помощь.