Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Установка сообщения о смерти игрока

Через поле(поле-переменная класса) какого-либо класса.
Напишите пожалуйста, как должно в моем случае получится, а то я что слоупочу...
Класс KillerCommands, переменная target, события onCommand() и onPlayerDeath()
 
В моем предыдущем сообщении написано то, что нужно только класс по-другому называется.
 
Понял, спасибо. Просто не увидел сообщение)
 
Блин, туплю я жестоко.
Вот указал я
Java:
private Object nick;

В первом событии я придаю переменной nick значение
Java:
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(command.getName().equalsIgnoreCase("killer")){
Player s = (Player)sender;
s.setHealth(0);
nick = s;}
return true;
}

А во втором я просто использую эту переменную
Java:
public void onPlayerDeath(PlayerDeathEvent event) {
event.setDeathMessage(ChatColor.RED + "" + nick + "совершил самоубийство.");
}

Ник - переменная которая должна содержать ник игрока. В итоге получается, что в чате вместо ник пишет null:(
 
Эти 2 метода в одном классе?

Если да, то попробуйте следующее:
2) Поменяйте Object на Player
3) И вместо nick напишите nick.getName()
4) После выполнения 2,3 должно выкидывать NullPointerException
5) Попробуйте поставить в обоих методах synchronized (получится public synchronized void)
6) Попробуйте поставить полю nick модификатор volatile
 
Да, эти события в 1 классе.
Проделал все пункты. В итоге вообще сообщение о смерти не меняется (выдаёт стандартное Gate умер)
 
Java:
package KillerPackage;
 
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.entity.Player;
 
public class KillerCommands extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
    private Player nick;
 
@Override
public void onEnable() {
    _log.info("[Killer] Enadled!"); //вывод произвольного текста в консоль сервера
    Bukkit.getPluginManager().registerEvents(this, this);
}
 
@EventHandler
public synchronized boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("killer")){
            Player s = (Player)sender;
            s.setHealth(0);
            nick = s;}
        return true;
    }
 
@EventHandler
public synchronized void onPlayerDeath(PlayerDeathEvent event) {
    event.setDeathMessage(ChatColor.RED + "" + nick.getName() + "совершил самоубийство.");
    }
 
 
 
 
 
 
 
}

Держите
 
Можете убирать syncronized.
Java:
Bukkit.getPluginManager().registerEvents(this, this);
замените на
Java:
getServer().getPluginManager().registerEvents(this, this);

И еще (не относится к ошибке) логгер лучше получать с помощью Bukkit, а не самостоятельно. Логгер, выданный баккитом, будет автоматически ставить имя плагина перед каждой строкой лога.
Уберите присваивание
Java:
= Logger.getLogger("Minecraft");
и в onLoad() напишите
Java:
_log = getLogger();
 
Убрал синхронизед, заменил Bukkit на getServer()
Но опять же не меняется сообщение о смерти:why:
 
Код:
21:06:46 [SEVERE] java.lang.NullPointerException
21:06:46 [SEVERE]      at net.minecraft.server.NetworkListenThread.a(NetworkLis
tenThread.java:38)
21:06:46 [SEVERE]      at net.minecraft.server.NetLoginHandler.a(NetLoginHandle
r.java:160)
21:06:46 [SEVERE]      at net.minecraft.server.Packet254GetInfo.handle(SourceFi
le:16)
21:06:46 [SEVERE]      at net.minecraft.server.NetworkManager.b(NetworkManager.
java:246)
21:06:46 [SEVERE]      at net.minecraft.server.NetLoginHandler.a(NetLoginHandle
r.java:48)
21:06:46 [SEVERE]      at net.minecraft.server.NetworkListenThread.a(NetworkLis
tenThread.java:65)
21:06:46 [SEVERE]      at net.minecraft.server.MinecraftServer.w(MinecraftServe
r.java:567)
21:06:46 [SEVERE]      at net.minecraft.server.MinecraftServer.run(MinecraftSer
ver.java:459)
21:06:46 [SEVERE]      at net.minecraft.server.ThreadServerApplication.run(Sour
ceFile:492)

Вот что выдаёт
 
А еще?
Что-нибудь, связанное с плагином?
 
Я предыдущий пост исправил
 
Изменений не заметил. Прикрепите полный лог файлом.
 
Код:
2012-11-10 21:22:06 [SEVERE] Could not pass event PlayerDeathEvent to Killer
org.bukkit.event.EventException
Проверьте, точно оба synchronized убраны?
Так как у меня этот код на 1.3 работает.

Java:
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.entity.Player;
 
public class KillerCommands extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
    private Player nick;
 
    @Override
    public void onEnable() {
        _log.info("[Killer] Enadled!");
        getServer().getPluginManager().registerEvents(this, this);
    }
 
    @EventHandler
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(command.getName().equalsIgnoreCase("killer")){
            Player s = (Player)sender;
            s.setHealth(0);
            nick = s;}
        return true;
    }
 
    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent event) {
        event.setDeathMessage(ChatColor.RED + "" + nick.getName() + "совершил самоубийство.");
    }
}
 
Вот мой код, все убраны вроде
Java:
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.entity.Player;
 
public class KillerCommands extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
    private Player nick;
 
 
@Override
public void onEnable() {
    _log.info("[Killer] Enadled!"); //вывод произвольного текста в консоль сервера
    getServer().getPluginManager().registerEvents(this, this);
   
}
 
@EventHandler
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if(command.getName().equalsIgnoreCase("killer")){
            Player s = (Player)sender;
            s.setHealth(0);
            nick = s;}
        return true;
    }
 
@EventHandler
public void onPlayerDeath(PlayerDeathEvent event) {
    event.setDeathMessage(ChatColor.RED + "" + nick.getName() + "совершил самоубийство.");
    }
 
}
 

Поделиться этой страницей

Назад
Верх