- Баллы
- 76
- Имя в Minecraft
- _MasterCapeXD_
Если я дам мут игроку, он может обойти его, всего лишь перезаходом на сервер. Мне нужно сохранить его. Сначала ключем в HashMap был класс Player, потом я поставил OfflinePlayer, ошибка не убиралась. Потом решил хранить именно имя игрока. Мут выдается во всех трех случаях, но при выходе сбрасывается. При этом в консоль бросает эту ошибку:
Строка ChatHooker.java:40:
Строка ChatHooker.java:83 (в операторе if):
Фулл класс:
Код:
[22:14:30 WARN]: java.lang.NullPointerException
[22:14:30 WARN]: at net.mcplugin.chat.ChatHooker.getTimePassed(ChatHooker.java:40)
[22:14:30 WARN]: at net.mcplugin.chat.ChatHooker.on(ChatHooker.java:83)
[22:14:30 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:14:30 WARN]: at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
[22:14:30 WARN]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
[22:14:30 WARN]: at java.lang.reflect.Method.invoke(Unknown Source)
[22:14:30 WARN]: at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
[22:14:30 WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
[22:14:30 WARN]: at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499)
[22:14:30 WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:481)
[22:14:30 WARN]: at net.minecraft.server.v1_12_R1.PlayerConnection.chat(PlayerConnection.java:1307)
[22:14:30 WARN]: at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1245)
[22:14:30 WARN]: at net.minecraft.server.v1_12_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39)
[22:14:30 WARN]: at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[22:14:30 WARN]: at java.util.concurrent.FutureTask.run(Unknown Source)
[22:14:30 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[22:14:30 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[22:14:30 WARN]: at java.lang.Thread.run(Unknown Source)
Строка ChatHooker.java:40:
PHP:
private long getTimePassed(String player)
{
return System.currentTimeMillis() - mutedplayers.get(player); //<- 40 строка
}
Строка ChatHooker.java:83 (в операторе if):
PHP:
if(this.getTimePassed(name) >= mutedplayers.get(name))
{
unmute(name);
}
Фулл класс:
PHP:
private oChat instance;
public ChatHooker(oChat chat)
{
this.instance = chat;
}
static HashMap<String, Long> mutedplayers = new HashMap<String, Long>();
static void unmute(String player)
{
mutedplayers.remove(player);
}
static void mute(String player, long minutes)
{
mutedplayers.put(player, minutes);
}
private long getTimePassed(String player)
{
return System.currentTimeMillis() - mutedplayers.get(player);
}
static long timeConvert(long time)
{
return time * 60_000; //1m
}
@EventHandler
public void on(AsyncPlayerChatEvent e)
{
Player player = e.getPlayer();
String name = player.getName();
if(e.isCancelled()) return;
if(mutedplayers.containsKey(name))
{
player.sendMessage(instance.getConfig().getString("chat.muted.chat-disabled-ru").replace("&", "\u00a7"));
e.setCancelled(true);
}
if(this.getTimePassed(name) >= mutedplayers.get(name))
{
unmute(name);
}
}
}