• 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
155
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
  • S Serpentos:
    Man muss halt echt aufpassen und schauen, dass man keine Plugins nimmt, die mit TPS arbeiten nd wenig konfigurierbar sind
  • SirYwell SirYwell:
    Ja möglich ist es schon, nur hast du dann ne Bug-Garantie direkt dabei
  • iTz_Proph3t iTz_Proph3t:
    Bug ist ja noch milde ausgedrückt :3
  • Kroseida Kroseida:
    CPU last steigt ja damit automatisch an
  • Kroseida Kroseida:
    also das Konzept dahinter finde ich eher najaaaa
    Sinnvoller ist es eher ein Async Spigot zu basteln, wo z.B jede welt oder jedes Entity einen async tick hat
  • iTz_Proph3t iTz_Proph3t:
    na dann hopp hopp
  • iTz_Proph3t iTz_Proph3t:
    wobei ich hab ne super Mod idee :p
  • iTz_Proph3t iTz_Proph3t:
    aber ka obs machbar wär
  • Kroseida Kroseida:
    sag an :eek:
  • Kroseida Kroseida:
    bukkit async machen bedeutet viele, seeeehr viele Bugs xD
  • Kroseida Kroseida:
    und Aufwand.
  • SirYwell SirYwell:
    Paper hat ja immerhin async Chunk Loading, das ist auch schon Gold wert
  • BloodEko BloodEko:
    Bei vor-gerendeter Welt mit schneller SSD geht es eig? Finde dass meistens entities meistens das Problem sind....
  • BloodEko BloodEko:
    meistens die Entities das Problem sind'
  • Kroseida Kroseida:
    richtig^^
  • Kroseida Kroseida:
    aber auch die Nutzung von vielen Welten macht probleme
  • BloodEko BloodEko:
    Gut eine Welt ist kein kleines Objekt da sind dann viele Sache doppelt
  • BloodEko BloodEko:
    Sachen'
  • BloodEko BloodEko:
    Die trotzdem sync sind?
  • iTz_Proph3t iTz_Proph3t:
    Nix für alle Ohren Kroseida :p
  • Kroseida Kroseida:
    discord? :p
  • iTz_Proph3t iTz_Proph3t:
    ne heut nix, hatte migräne anfall, kopf streikt komplett bei allem
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Fürs Spamen im Chat reichts scheinbar
  • Kroseida Kroseida:
    ChinaMann, meine Nudeln haben nicht gut geschmeckt. Kannst du den Chinesen um die Ecke bitte verbessern?
    Kroseida Kroseida: ChinaMann, meine Nudeln haben nicht gut geschmeckt. Kannst du den Chinesen um die Ecke bitte...
    Oben