ServerPlugin Für eine bestimmte Zeit immer dorthin teleportieren

Dieses Thema im Forum "Programmierung" wurde erstellt von Luftavatar, 6. November 2016.

  1. Luftavatar
    Offline

    Luftavatar

    Registriert seit:
    25. Dezember 2014
    Beiträge:
    9
    Heyho!

    Hatte den heutigen Tag sehr viel mit dem MoveEvent zutun gehabt, und mir hängts langsam^^

    Deswegen hab ich mich dazu entschieden, einfach den Spieler jeden Tick zu einem Ort hinzuteleportieren, um ihn zu freezen.

    Gibts irgendwie ne Möglichkeit, ihn für jeden Tick so und so viele Sekunden lang zu teleportieren?
    Und danach soll er für so und so viele Sekunden da hin tpt' werden, etc.
    Hätte mir das vorgestellt mit ner Schleife?

    MfG
     
    #1
  2. KeVoZ_
    Offline

    KeVoZ_

    Registriert seit:
    9. Mai 2015
    Beiträge:
    62
    Minecraft:
    Curverneur
    Ich habe zwar noch nie damit arbeiten müssen, aber kannst du nicht ganz einfach das Event canceln?

    Code (Java):
    1. e.setCancled(true);
     
    #2
  3. Luftavatar
    Offline

    Luftavatar

    Registriert seit:
    25. Dezember 2014
    Beiträge:
    9
    Ja hatte ich schon mehrfach versucht, nur leider ohne Erfolg
     
    #3
  4. KeVoZ_
    Offline

    KeVoZ_

    Registriert seit:
    9. Mai 2015
    Beiträge:
    62
    Minecraft:
    Curverneur
    Das darf eigentlich nicht sein :/
    Wenn du das PlayerMoveEvent e nimmst und dann direkt drunter das Event cancelst?
    Hast du @EventHandler über der Methode stehen?

    Sorry bin grad nur am iPhone, ich google gleich mal ;)
     
    #4
  5. Baba43
    Online

    Baba43 Ehem. Teammitglied

    Registriert seit:
    5. November 2012
    Beiträge:
    590
    Das PlayerMoveEvent sollte man in Ruhe lassen, wenn es nicht unbedingt erforderlich ist.

    Warum willst du einen Spieler an einer Position festhalten?
     
    #5
  6. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    #6
  7. JTK222
    Offline

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Öhm ist der Speed Effekt ab einer bestimmten stärke nicht wie ein Freeze?
    Und das Player Move Event ist Client Seitig der Server bestätigt es nur und tpt den Spieler notfalls zurück aber mit etw. Verzögerung.
     
    #7
  8. Luftavatar
    Offline

    Luftavatar

    Registriert seit:
    25. Dezember 2014
    Beiträge:
    9
    Wegen ner Plugin Idee von mir.
    Ja, wollte das aber mit nem Plugin machen, weils mir sonst zu "unprofessionell" wäre^^
     
    #8
  9. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Und an welcher stelle habe ich gesagt das du das nicht über ein Plugin machen sollst? Man kann auch Blöcke über ein Plugin platzieren und auch wieder entfernen wenn sie nicht mehr gebraucht werden.
     
    #9
  10. Baba43
    Online

    Baba43 Ehem. Teammitglied

    Registriert seit:
    5. November 2012
    Beiträge:
    590
    Das ist mir schon klar, aber warum genau? Ist es wirklich so wichtig, dass sich ein Spieler keinen Zentimeter bewegen darf? Das PlayerMoveEvent wird unglaublich häufig aufgerufen, sogar wenn sich ein Spieler nur umsieht und überhaupt nicht bewegt. In den meisten Fällen ist es mehr als ausreichend, die Position des Spielers alle paar Sekunden zu prüfen.
     
    #10
  11. KeVoZ_
    Offline

    KeVoZ_

    Registriert seit:
    9. Mai 2015
    Beiträge:
    62
    Minecraft:
    Curverneur
    Also ich sag mal so, in einer 1vs1 Arena oder so, wo die 2 Spieler nur 5 Sekunden den Countdown abwarten müssen, bis sie aus dem Event genommen werden, ist das PlayerMoveEvent ja okay, aber ich/wir wissen ja jetzt nicht mal ansatzweise, was du eigentlich jetzt genau vor hast.
     
    #11
  12. Sympel
    Offline

    Sympel

    Registriert seit:
    11. Oktober 2016
    Beiträge:
    7
    Man kann ihm einfach Langsamkeit 255 geben, dann kann er sich schon mal nur mit springen fortbewegen. Um das zu beheben kann man ihm ein bestimmtes Level von Sprungkraft geben, da Sprungkraft ab einer gewissen Stärke die Sprunghöhe senkt und diese somit irgendwann fast 0 erreicht. In diesem Zustand ist der Spieler so unfassbar langsam, dass ein Moveevent eigentlich nicht mehr notwendig ist.
     
    #12
    KeVoZ_ gefällt das.
  13. KeVoZ_
    Offline

    KeVoZ_

    Registriert seit:
    9. Mai 2015
    Beiträge:
    62
    Minecraft:
    Curverneur
    Eine gute Idee, wir ich finde.
    Man muss halt nur schauen, ob google da was an Werte rausgibt, oder ob man da selber noch experimentieren muss.
     
    #13
  14. Munkel
    Offline

    Munkel

    Registriert seit:
    27. März 2013
    Beiträge:
    135
    Ich habe einen Freeze durch das hier erzeugt.

    setFlySpeed(0F);

    setWalkSpeed(0F);

    Dabei kannst du die Person halt teleportieren und sie kann sich null bewegen nur umgucken
     
    #14
  15. Luftavatar
    Offline

    Luftavatar

    Registriert seit:
    25. Dezember 2014
    Beiträge:
    9
    Hab ich schon probiert, stimmt nicht so ganz ;) .. Spieler kann sich immernoch durch springen fortbewegen^^
     
    #15
  16. Munkel
    Offline

    Munkel

    Registriert seit:
    27. März 2013
    Beiträge:
    135
    Mein Fehler hab ja auch vergessen zu sagen das ich den Spieler in Gamemode 3 gesetzt habe :oops:.
     
    #16
  17. PrimitiverTyp
    Offline

    PrimitiverTyp

    Registriert seit:
    7. November 2016
    Beiträge:
    7
    Guten Abend zusammen!
    Ziemlich lange her, als ich das letzte mal was mit Bukkit zu tun hatte. Trotzdem habe ich mich noch an folgenden Codeschnipsel erinnern können, der - zumindest in der Bukkit Version 1.8 - tadellos für deinen Zweck angewendet werden kann.
    Code (Text):
    1. if (e.getFrom().getBlock() != e.getPlayer().getLocation().getBlock())
    2.             e.setTo(e.getFrom());
    Mir hat es damals enorm geholfen, einfach mal die Autocomplete Funktion zu nutzen und mir die Funktion der ganzen möglichen Methoden zu erschließen.
    Hoffentlich klappt es damit.
    Besten Gruß!


    #Edit:

    Wohl angemerkt muss man den Code im PlayerMoveEvent einsetzen ^^
     
    #17
  18. BinBaButz
    Offline

    BinBaButz

    Registriert seit:
    23. Oktober 2016
    Beiträge:
    5
    Man kann das verhindern, indem man die Hungerbalken auf 3 oder niedriger setzt.
     
    #18
  19. Luftavatar
    Offline

    Luftavatar

    Registriert seit:
    25. Dezember 2014
    Beiträge:
    9
    Werd ich mal ausprobieren, genauso wie:
    ___


    Vom PlayerMoveEvent möcht ich erstmal bisschen Abstand nehmen :)
     
    #19
  20. PrimitiverTyp
    Offline

    PrimitiverTyp

    Registriert seit:
    7. November 2016
    Beiträge:
    7
    Auch wenn ich das nicht nachvollziehen kann, da das PlayerMoveEvent ja grundlegend der erste Ansatzpunkt ist, wenn es um Bewegung (oder in dem Fall eben keine Bewegung) geht, wünsch ich dir viel Erfolg bei der Verwirklichung deiner Idee.
    Ich möchte trotzdem nochmal anmerken, dass die Lösung, das Problem über dieses Event zu lösen, in meinen Augen die beste ist. So sind auch weitere öffentliche Plugins diesen Weg gegangen.

    Auszug aus https://www.spigotmc.org/resources/simple-freeze.18044/ :
    Code (Text):
    1.   @EventHandler
    2.   public void onPlayerMove(PlayerMoveEvent e)
    3.   {
    4.     Player p = e.getPlayer();
    5.     if (((SFMain.frozenList.contains(p.getUniqueId())) || (SFMain.freezeAll)) && (this.plugin.getConfig().getBoolean("head-movement")) && (!p.hasPermission("sf.exempt")))
    6.     {
    7.       e.setTo(e.getFrom());
    8.     }
    9.     else if (((SFMain.frozenList.contains(p.getUniqueId())) || (SFMain.freezeAll)) && (!this.plugin.getConfig().getBoolean("head-movement")) && (!p.hasPermission("sf.exempt")))
    10.     {
    11.       Location pLoc = e.getFrom();
    12.       pLoc.setPitch(e.getTo().getPitch());
    13.       pLoc.setYaw(e.getTo().getYaw());
    14.       e.setTo(e.getFrom());
    15.     }
    16.   }
    17.  
     
    #20