• 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 Erledigt MoveEvent wird getriggert aber lässt sich nicht canceln

dmmk218

Redstoneengineer
Mitglied seit
28 Juni 2018
Beiträge
42
Alter
21
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
 

DerFrZocker

Miner
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
153
Alter
19
Minecraft
DerFrZocker
Hast du noch andere plugins / events laufen die das Event uncanceln können?
 

HansDev

Schafhirte
Mitglied seit
27 September 2018
Beiträge
113
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
 

dmmk218

Redstoneengineer
Mitglied seit
28 Juni 2018
Beiträge
42
Alter
21
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
Danke für den Tipp werde es probieren.
 

Twitter

Allgemein
Hilfe Benutzer
    Kroseida Kroseida: Jetzt gibt es auch mal gute Musik bei ihm:
    Oben