• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spigot MoveEvent wird getriggert aber lässt sich nicht canceln

dmmk218

Redstoneengineer
Registriert
28 Juni 2018
Beiträge
42
Alter
27
Diamanten
300
Hey zusammen,

ich habe eine Frage und zwar habe ich BungeeCord Backend plugin laufen und habe jetzt mit einem Custom-Channel eine Brücke gebastelt um das MoveEvent zu canceln ich hab jetzt ein paar tests schon eingebaut der spieler wird auf die ArrayList geaddet wie vorgesehen hab das MoveEvent gecancelt wenn er drauf steht die Nachricht wird Ihm auch gesendet wenn er versucht sich zu bewegen nur das Problem ist man kann trotzdem noch fröhlich durch die Welt hüpfen. Hat jemand eine Idee was ich falsch gemacht habe?


Code des Listeners:
package de.therealdomm.sauth.events;

import de.therealdomm.sauth.util.Data;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class EventBlocker implements Listener {

    public static List<String> frozen = new ArrayList<>();
    private HashMap<String, Boolean> msg = new HashMap<>();

    @EventHandler(priority = EventPriority.HIGH)
    public void onMove(PlayerMoveEvent e) {

        Player p = e.getPlayer();

        if (frozen.contains(p.getName())) {
            e.setCancelled(true);
            if (msg.get(p.getName()) == null) {
                p.sendMessage(Data.data.needLogin);
                msg.put(p.getName(), true);
            }

        }

    }

}

Code des Communicators:
package de.therealdomm.sauth.util;

import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import de.therealdomm.sauth.events.EventBlocker;
import de.therealdomm.sauth.main.Main;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.messaging.PluginMessageListener;

public class CommunicationAPI implements PluginMessageListener {

    public CommunicationAPI() {
        Main.getInstance().getServer().getMessenger().registerIncomingPluginChannel(Main.getInstance(), "bauth:channel", this);
    }

    @Override
    public void onPluginMessageReceived(String s, Player player, byte[] bytes) {

        if (!s.equals("bauth:channel")) return;

        ByteArrayDataInput byteArrayDataInput = ByteStreams.newDataInput(bytes);
        String subChannel = byteArrayDataInput.readUTF();

        if (subChannel.equalsIgnoreCase("reload")) {

            String data1 = byteArrayDataInput.readUTF();
            int data2 = byteArrayDataInput.readInt();
            String playerName = byteArrayDataInput.readUTF();

            if (data1.equalsIgnoreCase("perform") && data2 == 1) {

                ConfigUtil configUtil = new ConfigUtil();
                configUtil.reload();
                System.out.println(playerName + " performed reload!");

            }

        }

        if (subChannel.equalsIgnoreCase("freeze")) {

            String data1 = byteArrayDataInput.readUTF();
            int data2 = byteArrayDataInput.readInt();
            String playerName = byteArrayDataInput.readUTF();

            System.out.println(playerName + " Subchannel:" + subChannel);

            if (Bukkit.getPlayer(playerName) == null) return;

            Player p = Bukkit.getPlayer(playerName);

            if (data1.equalsIgnoreCase("perform") && data2 == 1) {

                EventBlocker.frozen.add(p.getName());
                System.out.println("ArrayList: " + EventBlocker.frozen);

            }

        }

        if (subChannel.equalsIgnoreCase("unfreeze")) {

            String data1 = byteArrayDataInput.readUTF();
            int data2 = byteArrayDataInput.readInt();
            String playerName = byteArrayDataInput.readUTF();

            System.out.println(playerName + " SubChannel:" + subChannel);

            if (Bukkit.getPlayer(playerName) == null) return;

            Player p = Bukkit.getPlayer(playerName);

            if (data1.equalsIgnoreCase("perform") && data2 == 1) {

                EventBlocker.frozen.remove(p.getName());
                System.out.println("ArrayList: " + EventBlocker.frozen);

            }

        }

    }
}

Ich hoffe jemand von euch kann mir da helfen.
LG dmmk218
 

HansDev

Schafhirte
Registriert
27 September 2018
Beiträge
113
Diamanten
307
Hey dmmk218,
das Move-Event sollte man nie versuchen zu canceln, da es entweder nicht funktioniert oder sehr buggy ist.
Versuche es stattdessen mal damit:
Java:
e.setTo(e.getFrom());
Ich hoffe ich konnte dir helfen
Mit freundlichen Grüßen
HansDev
 
Oben