• 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!

PlugIn Entities bewegen sich bei Teleport - unsichtbare Entities spawnen

CubBossa

Schafhirte
Registriert
17 Juli 2015
Beiträge
125
Diamanten
369
Minecraft
CubBossa
Hallo Leute. Ich programmiere gerade ein kleines Seilbahn plugin. Die idee ist, dass man zwei multicube Seilbahnen platziert und mit leinen verbindet. Funktioniert soweit alles ganz gut. Eine sache stört mich tierisch und irgendwie bekomme ich es nicht vernünftig gelöst und fürchte, dass es viel einfacher geht.
Und zwaar benutze Ich zwei Armorstands, die bisschen der Visualisierung dienen (siehe Anhang). Diese sind beim platzieren des multicubes jedoch für einen Tick sichtbar. Auch wenn es nur um einen Tick geht stört es irgendwie. Mein erster Gedanke: spawn sie halt wo anders und teleportiere sie hin. Mein zweiter Gedanke: Erstelle einen NMS Armorstand. Leider hab ich gar keine Ahnung von NMS und kam daher nicht weiter.
Also doch die Teleportversion. Problem: Die Armorstands brauchen tatsächlich länger, wenn ich sie über eine größere Distanz teleportiere. Heißt man sieht fast, wie das Hologramm und der Customhead anfliegen. Also die Idee auch verworfen. Nächster Gedanke war, sie aus einer anderen Welt zu teleportieren. Das find ich aber irgendwie ganz unschön gelöst D:
Was mich jetzt irritiert: Wenn ich mich mit /tpa zu nem Spieler teleportiere, sieht mich doch auch keiner durch die Luft dorthin fliegen. Gibt es irgendeine Lösung die ich übersehe?
Oder ein gutes Einsteiger Tutorial für NMS? Ich muss ja lediglich Armorstands dazu erweitern, dass sie unsichtbar sind, während sie gespawnt werden.

Vielen Dank schonmal für alle, die sich das hier durchlesen und vielleicht eine Idee haben :D
 

Anhänge

  • 2021-02-12_17.42.46.png
    2021-02-12_17.42.46.png
    1,7 MB · Aufrufe: 384

Ativendus

Kuhfänger
Registriert
7 Dezember 2016
Beiträge
78
Diamanten
352
So jetzt melde ich mich erneut, habe meine vorherige Antwort aus Scham gelöscht. Dein Problem selbst ist mir noch nie untergekommen und ich wüsste auch keine andere Möglichkeit. Ein gutes NMS Tutorial habe ich jetzt nicht, aber ich schicke dir einfach mal eine Klasse von mir, welche ich kommentiert habe und welche auch einfach zu verstehen sein sollte, wenn du schon Programmiererfahrung hast.

md_5 paste - duwudajole (md-5.net)

Ich hoffe das löst dein Problem und wenn du Fragen hast, kannst du mich auch gerne anschreiben
 

CubBossa

Schafhirte
Registriert
17 Juli 2015
Beiträge
125
Diamanten
369
Minecraft
CubBossa
Mega gut, das hilft schonmal - dankeschön :D Jetzt habe ich nur ein problem: ich arbeite mit Maven und habe Paper 1.16.5 als Dependency. Das enthält nicht die nms packages und ich weiß nicht, wie ich an die nms Klassen komme. EntityArmorStand ist ja eine NMS Klasse das heißt ohne die Dependency bekomme ich ja fehler beim Kompilieren. Oder verstehe ich da was falsch?
Da wird es ja vermutlich nicht einfach ein Maven Repo geben oder?
(Du hast die Imports nicht im Code daher bin ich mir nicht sicher :D)
 

Ativendus

Kuhfänger
Registriert
7 Dezember 2016
Beiträge
78
Diamanten
352

Scrayos

Vorarbeiter
Registriert
11 Februar 2012
Beiträge
296
Alter
29
Diamanten
338
Minecraft
Scrayos
Das ist eine wirklich interessante Frage und einer der seltenen Fälle, in denen die Lösung auf ein komplex erscheinendes Problem ganz einfach sein könnte. Dafür wirst du allerdings Paper nutzen müssen (was sowieso eine gute Idee ist, solltest du es noch nicht tun). Paper hat nämlich tolle Überladungen für die World#spawnEntity(..) Methoden, die Spigot leider nicht mitbringt.

In deinem konkreten Fall würde sich hierfür diese Methode anbieten. Neben der üblichen Location, dem Entitäten-Typ und dem Grund für das Erschaffen dieser Entität, definiert die Signatur der Methode nämlich noch ein weiteres Parameter und zwar einen Consumer<Entity>. Dieser Consumer wird für die neue Entität aufgerufen, nachdem die sie konstruiert wurde, aber bevor sie an den Client geschickt wird. Du kannst hierdurch also Änderungen an der Entität vornehmen (wie zum Beispiel das Setzen der Sichtbarkeit, der Schwerkraft, des Displaynames, etc.) ohne, dass der Spieler den vorigen Zustand mitbekommt.

Ich habe diese Lösung noch nicht explizit für deinen Fall getestet, aber ich habe die Methode bereits für vergleichbare Fälle erfolgreich genutzt. Am Ende würdest du so ja theoretisch mit etwa dem folgenden Code rauskommen:

Java:
final ArmorStand armorStand = (ArmorStand) world.spawnEntity(
    location,
    EntityType.ARMOR_STAND,
    CreatureSpawnEvent.SpawnReason.CUSTOM,
    entity -> ((ArmorStand) entity).setVisible(false)
);

Oder, falls du auf explizites Casting verzichten möchtest:
Java:
final ArmorStand armorStand = world.spawn(
    location,
    ArmorStand.class,
    entity -> entity.setVisible(false),
    CreatureSpawnEvent.SpawnReason.CUSTOM
);

Edit: Wie ich sehe, nutzt du bereits Paper. Sehr schön, dann sollte das klappen!
 
Zuletzt bearbeitet:

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Downloade/clone dir einfach PaperMC/Paper: High performance Spigot fork that aims to fix gameplay and mechanics inconsistencies (github.com) und führ dann den Befehl "./paper install" aus, dann sollte das Dependency in deinem local Repository sein
Nur als Tipp für zukünftige Leser: Du kannst die normale Paper.jar auch einfach mit dem Startargument "-Dpaperclip.install=true" starten - das installiert ebenfalls Paper ins lokale Repo. Um dann die Dependency mit NMS zu nutzen, musst du sie nur von "paper-api" zu "paper" ändern.
 
Oben