ArkaDarkTime
Активный участник
- Баллы
- 61
Сама ошибка:
[23:41:49 INFO]: ArkaDarkTime issued server command: /infect arka2201
[23:41:49 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'infect' in plugin VirusQuestGame v0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[pufferfish-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155) ~[pufferfish-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R1.CraftServer.dispatchCommand(CraftServer.java:1006) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at org.bukkit.craftbukkit.v1_20_R1.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:265) ~[pufferfish-1.20.1.jar:?]
at net.minecraft.commands.Commands.performCommand(Commands.java:324) ~[?:?]
at net.minecraft.commands.Commands.performCommand(Commands.java:308) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2300) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$20(ServerGamePacketListenerImpl.java:2260) ~[?:?]
at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?]
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1341) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1318) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1311) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1289) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1177) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:320) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at java.lang.Thread.run(Thread.java:1589) ~[?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "arkadarktime.InfectionManager.setInfected(java.util.UUID, boolean)" because "this.infectionManager" is null
at arkadarktime.command.InfectCommand.onCommand(InfectCommand.java:32) ~[VirusQuestGame-0.1.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[pufferfish-api-1.20.1-R0.1-SNAPSHOT.jar:?]
... 23 more
InfectCommand.java:
package arkadarktime.command;
import arkadarktime.InfectionManager;
import arkadarktime.VirusQuestGame;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.UUID;
public class InfectCommand implements CommandExecutor{
private final VirusQuestGame plugin;
private final InfectionManager infectionManager;
public InfectCommand(VirusQuestGame plugin, InfectionManager infectionManager) {
this.plugin = plugin;
this.infectionManager = infectionManager;
}
@Override
public boolean onCommand(@NonNull CommandSender sender, Command cmd, @NonNull String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("infect")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (args.length > 0) {
String targetPlayerName = args[0];
Player targetPlayer = player.getServer().getPlayer(targetPlayerName);
if (targetPlayer != null) {
UUID targetPlayerUUID = targetPlayer.getUniqueId();
// Проверяем, что infectionManager не является null, перед вызовом его методов
if (infectionManager != null) {
infectionManager.setInfected(targetPlayerUUID, true);
String MSG_Infected = (String) plugin.getMessage("infected");
sender.sendMessage(MSG_Infected.replace("%player%", targetPlayerName));
infectionManager.applyInfectionEffect(targetPlayer);
} else {
sender.sendMessage("Произошла внутренняя ошибка. Пожалуйста, свяжитесь с администратором сервера.");
plugin.getLogger().severe("InfectionManager равен null. Убедитесь, что он правильно инициализирован в методе VirusQuestGame.onEnable().");
}
} else {
String MSG_PlayerNotFound = (String) plugin.getMessage("player-not-found");
sender.sendMessage(MSG_PlayerNotFound.replace("%player%", targetPlayerName));
}
} else {
String MSG_CommandUsage = (String) plugin.getMessage("command-usage");
sender.sendMessage(MSG_CommandUsage);
player.sendMessage("");
}
}
return true;
}
return false;
}
}
InfectedManager.java:
package arkadarktime;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import java.io.File;
import java.io.IOException;
import org.bukkit.Sound;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class InfectionManager {
private final Map<UUID, Integer> playerDelays;
private final File dataFile;
private final FileConfiguration infected;
private FileConfiguration config;
private final Map<UUID, BukkitRunnable> infectionTasks;
public InfectionManager(File dataFolder, FileConfiguration config) {
this.dataFile = new File(dataFolder, "infected.yml");
this.infected = YamlConfiguration.loadConfiguration(dataFile);
this.config = config;
this.infectionTasks = new HashMap<>();
this.playerDelays = new HashMap<>();
}
public void setConfig(FileConfiguration config) {
this.config = config;
}
public void setInfected(UUID playerUUID, boolean isInfected) {
infected.set(playerUUID.toString(), isInfected);
saveInfectedPlayers();
}
private void saveInfectedPlayers() {
try {
infected.save(dataFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public void applyInfectionEffect(Player player) {
UUID playerUUID = player.getUniqueId();
if (infectionTasks.containsKey(playerUUID)) {
infectionTasks.get(playerUUID).cancel();
}
TimerParticle(player);
}
public void IfOnRunTimerParticle(Player player) {
UUID playerUUID = player.getUniqueId();
if (config.getBoolean("Virus.enable")) {
// Запускаем BukkitRunnable только если у игрока еще нет запущенного задания
if (!infectionTasks.containsKey(playerUUID)) {
BukkitRunnable task = new BukkitRunnable() {
@Override
public void run() {
TimerParticle(player);
}
};
int delay = 20; // Задержка перед первым запуском (в тиках)
task.runTaskTimer(JavaPlugin.getPlugin(VirusQuestGame.class), delay, delay);
// Сохраняем созданный BukkitRunnable в infectionTasks, чтобы позже можно было отменить его выполнение
infectionTasks.put(playerUUID, task);
}
} else {
// Если значение Virus.enable стало равным false и у игрока уже есть запущенный BukkitRunnable, отменяем его выполнение
if (infectionTasks.containsKey(playerUUID)) {
BukkitRunnable task = infectionTasks.get(playerUUID);
task.cancel();
infectionTasks.remove(playerUUID);
}
}
}
public void TimerParticle(Player player) {
UUID playerUUID = player.getUniqueId();
if (config.getBoolean("Virus.enable")) {
if (playerDelays.containsKey(playerUUID)) {
// Если для игрока уже установлена задержка, используем ее
int delay = playerDelays.get(playerUUID);
playerDelays.remove(playerUUID);
BukkitRunnable task = new BukkitRunnable() {
@Override
public void run() {
Location eyeLocation = player.getEyeLocation();
Vector direction = eyeLocation.getDirection().normalize();
Location particleLocation = eyeLocation.clone().add(direction.multiply(1));
player.getWorld().spawnParticle(Particle.SNEEZE, particleLocation, 50, 0, 0, 0, 0.05);
player.playSound(player.getLocation(), Sound.ENTITY_PANDA_SNEEZE, 1.0f, 1.0f);
Bukkit.getConsoleSender().sendMessage("\n\nОтображена частица чихания для игрока " + player.getName() + " \nРасположение чихания: " + player.getEyeLocation() + "\nВремя через сколько было новое чихание: " + delay);
applyInfectionEffect(player);
}
};
task.runTaskLater(JavaPlugin.getPlugin(VirusQuestGame.class), delay);
infectionTasks.put(playerUUID, task);
} else {
// Если для игрока задержка еще не установлена, генерируем новую и добавляем в карту
int minDelay = config.getInt("Virus.minDelayInSeconds", 5);
int maxDelay = config.getInt("Virus.maxDelayInSeconds", 15);
int minDelayTranslate = minDelay * 20;
int maxDelayTranslate = maxDelay * 20;
int delay = (int) (Math.random() * (maxDelayTranslate - minDelayTranslate + 1)) + minDelayTranslate;
playerDelays.put(playerUUID, delay);
}
} else {
IfOnRunTimerParticle(player);
}
}
}
Если еще что то надо просите!
[23:41:49 INFO]: ArkaDarkTime issued server command: /infect arka2201
[23:41:49 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'infect' in plugin VirusQuestGame v0.1
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[pufferfish-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:155) ~[pufferfish-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R1.CraftServer.dispatchCommand(CraftServer.java:1006) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at org.bukkit.craftbukkit.v1_20_R1.command.BukkitCommandWrapper.run(BukkitCommandWrapper.java:64) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:265) ~[pufferfish-1.20.1.jar:?]
at net.minecraft.commands.Commands.performCommand(Commands.java:324) ~[?:?]
at net.minecraft.commands.Commands.performCommand(Commands.java:308) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.performChatCommand(ServerGamePacketListenerImpl.java:2300) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.lambda$handleChatCommand$20(ServerGamePacketListenerImpl.java:2260) ~[?:?]
at net.minecraft.util.thread.BlockableEventLoop.lambda$submitAsync$0(BlockableEventLoop.java:59) ~[?:?]
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[?:?]
at net.minecraft.server.TickTask.run(TickTask.java:18) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1341) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1318) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1311) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1289) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1177) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:320) ~[pufferfish-1.20.1.jar:git-Pufferfish-19]
at java.lang.Thread.run(Thread.java:1589) ~[?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "arkadarktime.InfectionManager.setInfected(java.util.UUID, boolean)" because "this.infectionManager" is null
at arkadarktime.command.InfectCommand.onCommand(InfectCommand.java:32) ~[VirusQuestGame-0.1.jar:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[pufferfish-api-1.20.1-R0.1-SNAPSHOT.jar:?]
... 23 more
InfectCommand.java:
package arkadarktime.command;
import arkadarktime.InfectionManager;
import arkadarktime.VirusQuestGame;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.UUID;
public class InfectCommand implements CommandExecutor{
private final VirusQuestGame plugin;
private final InfectionManager infectionManager;
public InfectCommand(VirusQuestGame plugin, InfectionManager infectionManager) {
this.plugin = plugin;
this.infectionManager = infectionManager;
}
@Override
public boolean onCommand(@NonNull CommandSender sender, Command cmd, @NonNull String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("infect")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (args.length > 0) {
String targetPlayerName = args[0];
Player targetPlayer = player.getServer().getPlayer(targetPlayerName);
if (targetPlayer != null) {
UUID targetPlayerUUID = targetPlayer.getUniqueId();
// Проверяем, что infectionManager не является null, перед вызовом его методов
if (infectionManager != null) {
infectionManager.setInfected(targetPlayerUUID, true);
String MSG_Infected = (String) plugin.getMessage("infected");
sender.sendMessage(MSG_Infected.replace("%player%", targetPlayerName));
infectionManager.applyInfectionEffect(targetPlayer);
} else {
sender.sendMessage("Произошла внутренняя ошибка. Пожалуйста, свяжитесь с администратором сервера.");
plugin.getLogger().severe("InfectionManager равен null. Убедитесь, что он правильно инициализирован в методе VirusQuestGame.onEnable().");
}
} else {
String MSG_PlayerNotFound = (String) plugin.getMessage("player-not-found");
sender.sendMessage(MSG_PlayerNotFound.replace("%player%", targetPlayerName));
}
} else {
String MSG_CommandUsage = (String) plugin.getMessage("command-usage");
sender.sendMessage(MSG_CommandUsage);
player.sendMessage("");
}
}
return true;
}
return false;
}
}
InfectedManager.java:
package arkadarktime;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import java.io.File;
import java.io.IOException;
import org.bukkit.Sound;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class InfectionManager {
private final Map<UUID, Integer> playerDelays;
private final File dataFile;
private final FileConfiguration infected;
private FileConfiguration config;
private final Map<UUID, BukkitRunnable> infectionTasks;
public InfectionManager(File dataFolder, FileConfiguration config) {
this.dataFile = new File(dataFolder, "infected.yml");
this.infected = YamlConfiguration.loadConfiguration(dataFile);
this.config = config;
this.infectionTasks = new HashMap<>();
this.playerDelays = new HashMap<>();
}
public void setConfig(FileConfiguration config) {
this.config = config;
}
public void setInfected(UUID playerUUID, boolean isInfected) {
infected.set(playerUUID.toString(), isInfected);
saveInfectedPlayers();
}
private void saveInfectedPlayers() {
try {
infected.save(dataFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public void applyInfectionEffect(Player player) {
UUID playerUUID = player.getUniqueId();
if (infectionTasks.containsKey(playerUUID)) {
infectionTasks.get(playerUUID).cancel();
}
TimerParticle(player);
}
public void IfOnRunTimerParticle(Player player) {
UUID playerUUID = player.getUniqueId();
if (config.getBoolean("Virus.enable")) {
// Запускаем BukkitRunnable только если у игрока еще нет запущенного задания
if (!infectionTasks.containsKey(playerUUID)) {
BukkitRunnable task = new BukkitRunnable() {
@Override
public void run() {
TimerParticle(player);
}
};
int delay = 20; // Задержка перед первым запуском (в тиках)
task.runTaskTimer(JavaPlugin.getPlugin(VirusQuestGame.class), delay, delay);
// Сохраняем созданный BukkitRunnable в infectionTasks, чтобы позже можно было отменить его выполнение
infectionTasks.put(playerUUID, task);
}
} else {
// Если значение Virus.enable стало равным false и у игрока уже есть запущенный BukkitRunnable, отменяем его выполнение
if (infectionTasks.containsKey(playerUUID)) {
BukkitRunnable task = infectionTasks.get(playerUUID);
task.cancel();
infectionTasks.remove(playerUUID);
}
}
}
public void TimerParticle(Player player) {
UUID playerUUID = player.getUniqueId();
if (config.getBoolean("Virus.enable")) {
if (playerDelays.containsKey(playerUUID)) {
// Если для игрока уже установлена задержка, используем ее
int delay = playerDelays.get(playerUUID);
playerDelays.remove(playerUUID);
BukkitRunnable task = new BukkitRunnable() {
@Override
public void run() {
Location eyeLocation = player.getEyeLocation();
Vector direction = eyeLocation.getDirection().normalize();
Location particleLocation = eyeLocation.clone().add(direction.multiply(1));
player.getWorld().spawnParticle(Particle.SNEEZE, particleLocation, 50, 0, 0, 0, 0.05);
player.playSound(player.getLocation(), Sound.ENTITY_PANDA_SNEEZE, 1.0f, 1.0f);
Bukkit.getConsoleSender().sendMessage("\n\nОтображена частица чихания для игрока " + player.getName() + " \nРасположение чихания: " + player.getEyeLocation() + "\nВремя через сколько было новое чихание: " + delay);
applyInfectionEffect(player);
}
};
task.runTaskLater(JavaPlugin.getPlugin(VirusQuestGame.class), delay);
infectionTasks.put(playerUUID, task);
} else {
// Если для игрока задержка еще не установлена, генерируем новую и добавляем в карту
int minDelay = config.getInt("Virus.minDelayInSeconds", 5);
int maxDelay = config.getInt("Virus.maxDelayInSeconds", 15);
int minDelayTranslate = minDelay * 20;
int maxDelayTranslate = maxDelay * 20;
int delay = (int) (Math.random() * (maxDelayTranslate - minDelayTranslate + 1)) + minDelayTranslate;
playerDelays.put(playerUUID, delay);
}
} else {
IfOnRunTimerParticle(player);
}
}
}
Если еще что то надо просите!