Помогите не могу найти ошибку

  • Автор темы Автор темы Chupaaa
  • Дата начала Дата начала

Chupaaa

Новичок
Пользователь
Баллы
21
Имя в Minecraft
xChupa
Крч. У меня есть две команды: pos1 и pos2. Они записывают в конфиг файл координаты игрока.
Я хотел чтобы когда игрок наступает на координаты pos2, то его телепортирует на координаты pos1.
Вот что я наскреб:
сам хандлер
public class ChupaHandler implements Listener {

private ChupaPark plugin;

public ChupaHandler(ChupaPark plugin) {
this.plugin = plugin;
}
@EventHandler
public void onFallMove(PlayerMoveEvent e) {
File config = new File(plugin.getDataFolder() + File.separator + "config.yml");
FileConfiguration file = YamlConfiguration.loadConfiguration(config);
int x = file.getInt("pos2.x");
int y = file.getInt("pos2.y");
int z = file.getInt("pos2.z");
World w = Bukkit.getServer().getWorld(plugin.getConfig().getString("pos1.world"));
int x2 = file.getInt("pos1.x");
int y2 = file.getInt("pos1.y");
int z2 = file.getInt("pos1.z");
Player p = e.getPlayer();
if(p.getLocation().getX() == x) return;
if(p.getLocation().getY() == y) return;
if(p.getLocation().getZ() == z) return;
p.teleport(new Location(w, x2, y2, z2));

}

}
одна из команд, тк вторая почти такая же:
private ChupaPark plugin;

public Commandpos1(ChupaPark plugin) {
this.plugin = plugin;
}

@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player p = (Player) sender;
File config = new File(plugin.getDataFolder() + File.separator + "config.yml");
FileConfiguration pos = YamlConfiguration.loadConfiguration(config);
pos.set("pos1", p.getLocation());
try {
pos.save(config);
} catch (IOException e1) {
e1.printStackTrace();
}
p.sendMessage("Координаты начала записаны.");
return true;
}

}
Ну и вот сама консоль (она флудит этим, когда я двигаюсь):
[19:24:40] [Server thread/ERROR]: Could not pass event PlayerMoveEvent to ChupaPark v1.0
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[server.jar:git-Bukkit-a4c555b]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[server.jar:git-Bukkit-a4c555b]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) ~[server.jar:git-Bukkit-a4c555b]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) ~[server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.PlayerConnection.a(PlayerConnection.java:933) ~[server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.PacketPlayInFlying.a(SourceFile:126) ~[server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.PacketPlayInFlying$PacketPlayInPosition.a(SourceFile:57) ~[server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.PlayerConnectionUtils.a(SourceFile:10) ~[server.jar:git-Bukkit-a4c555b]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:?]
at java.util.concurrent.FutureTask.run(Unknown Source) [?:?]
at net.minecraft.server.v1_13_R2.SystemUtils.a(SourceFile:199) [server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.MinecraftServer.b(MinecraftServer.java:843) [server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.DedicatedServer.b(DedicatedServer.java:382) [server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.MinecraftServer.a(MinecraftServer.java:796) [server.jar:git-Bukkit-a4c555b]
at net.minecraft.server.v1_13_R2.MinecraftServer.run(MinecraftServer.java:699) [server.jar:git-Bukkit-a4c555b]
at java.lang.Thread.run(Unknown Source) [?:?]
Caused by: java.lang.IllegalArgumentException: Name cannot be null
at org.apache.commons.lang.Validate.notNull(Validate.java:192) ~[server.jar:git-Bukkit-a4c555b]
at org.bukkit.craftbukkit.v1_13_R2.CraftServer.getWorld(CraftServer.java:1041) ~[server.jar:git-Bukkit-a4c555b]
at chupapark.main.ChupaHandler.onFallMove(ChupaHandler.java:30) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:298) ~[server.jar:git-Bukkit-a4c555b]
... 15 more
 
В ChupaHandler какая строка у тебя 30?

+ зачем тебе добавлять координаты игрока в конфиг, List, Map для этого есть

Как я понял, нужно чтобы при падении ниже определенного уровня тебя телепортировало обратно, это делается одним EventHandler'om
 
В ChupaHandler какая строка у тебя 30?

+ зачем тебе добавлять координаты игрока в конфиг, List, Map для этого есть

Как я понял, нужно чтобы при падении ниже определенного уровня тебя телепортировало обратно, это делается одним EventHandler'om
30 строка: World w = Bukkit.getServer().getWorld(plugin.getConfig().getString("pos1.world"));
 
В ChupaHandler какая строка у тебя 30?

+ зачем тебе добавлять координаты игрока в конфиг, List, Map для этого есть

Как я понял, нужно чтобы при падении ниже определенного уровня тебя телепортировало обратно, это делается одним EventHandler'om
Мне нужно, чтобы на определенном x, y, z телепортировало обратно
 
А, ну тогда тебе конфиг нужен только в случае, если брать координаты с него.

Примерно так:

x, y, z - Определенные координаты
x1, y1, z1 - Координаты, куда нужно телепортировать игрока


Код:
@EventHandler
public void onDangerMove(PlayerMoveEvent e){

    Player p = e.getPlayer();
    World w = p.getWorld();
    Location loc = p.getLocation();
    Location tp = new Location(w, x1, y1, z1);

    if(loc.getX() == x && loc.getY() == y && loc.getZ() == z){
        p.teleport(tp);
    }

}

Если нужно телепортировать игрока только в определенном мире то добавляешь:
Код:
World target = Bukkit.getWorld("Название_мира")

А в Location tp заменяешь w на target:

Код:
    Location tp = new Location(w, x1, y1, z1);

Код:
    Location tp = new Location(target, x1, y1, z1);

Получается рабочий Handler:

Код:
@EventHandler
public void onDangerMove(PlayerMoveEvent e){

    Player p = e.getPlayer();
    World w = p.getWorld();
    World target = Bukkit.getWorld("Название_мира");
    Location loc = p.getLocation();
    Location tp = new Location(target, x1, y1, z1);

    if(loc.getX() == x && loc.getY() == y && loc.getZ() == z){
        p.teleport(tp);
    }

}
 
А, ну тогда тебе конфиг нужен только в случае, если брать координаты с него.

Примерно так:

x, y, z - Определенные координаты
x1, y1, z1 - Координаты, куда нужно телепортировать игрока


Код:
@EventHandler
public void onDangerMove(PlayerMoveEvent e){

    Player p = e.getPlayer();
    World w = p.getWorld();
    Location loc = p.getLocation();
    Location tp = new Location(w, x1, y1, z1);

    if(loc.getX() == x && loc.getY() == y && loc.getZ() == z){
        p.teleport(tp);
    }

}

Если нужно телепортировать игрока только в определенном мире то добавляешь:
Код:
World target = Bukkit.getWorld("Название_мира")

А в Location tp заменяешь w на target:

Код:
    Location tp = new Location(w, x1, y1, z1);

Код:
    Location tp = new Location(target, x1, y1, z1);

Получается рабочий Handler:

Код:
@EventHandler
public void onDangerMove(PlayerMoveEvent e){

    Player p = e.getPlayer();
    World w = p.getWorld();
    World target = Bukkit.getWorld("Название_мира");
    Location loc = p.getLocation();
    Location tp = new Location(target, x1, y1, z1);

    if(loc.getX() == x && loc.getY() == y && loc.getZ() == z){
        p.teleport(tp);
    }

}
Спасибо большое!!)
 
Назад
Верх