1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Chupaaa, 21 янв 2019.

  1. Автор темы
    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
     
  2. Vladis086

    Vladis086 Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Vladis086
    В ChupaHandler какая строка у тебя 30?

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

    Как я понял, нужно чтобы при падении ниже определенного уровня тебя телепортировало обратно, это делается одним EventHandler'om
     
  3. Автор темы
    Chupaaa

    Chupaaa Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    xChupa
    30 строка: World w = Bukkit.getServer().getWorld(plugin.getConfig().getString("pos1.world"));
     
  4. Автор темы
    Chupaaa

    Chupaaa Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    xChupa
    Мне нужно, чтобы на определенном x, y, z телепортировало обратно
     
  5. Vladis086

    Vladis086 Активный участник

    Баллы:
    61
    Имя в Minecraft:
    Vladis086
    А, ну тогда тебе конфиг нужен только в случае, если брать координаты с него.

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

    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);
        }
    
    }
    
     
  6. Автор темы
    Chupaaa

    Chupaaa Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    xChupa
    Спасибо большое!!)
     

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