Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter  –  Chatte im Wiki-Discord  –  Noch keinen Server gefunden? Es gibt einen Wiki-Server

Diskussion:Gegenstandsdaten

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

Ohne NBT von mit NBT unterscheiden?[Bearbeiten]

Mit dem Ziel, jede Fackel, die der Spieler in meiner Adventure Map aufsammelt, durch eine mit NBT-Daten spezifizierte zu ersetzten, habe ich folgendes aufgebaut:

Redstone-Torch --> RKomparator <--> RRepeater (1) -->

cmd1 /clear @p torch 0 1 --> RKomparator -->

cmd2 /give @p torch 1 0 {CanPlaceOn:[stone],HideFlag:63} --> RRepeater (1) -->

cmd3 /blockdata x y z {SuccessCount:0} (Koordinaten von cmd1)

Also, das funktioniert wunderbar. Fast. Fackeln, die ich aus dem Kreativ-Inventar nehme, werden - wie ich es will - umgewandelt in eine, die der Spieler wieder platzieren kann. Problem ist nur, dass die Fackeln, welche der zweite Commandblock gibt, vom ersten erkannt werden. Das hat zur Konsequenz, dass diese auch wieder gelöscht werden und die Befehls-Kette fortgesetzt wird. Eine abgezogen, eine hinzugefügt, eine abgezogen, eine hinzugefügt, ... Als Lösung darf also die gegebene Fackel aus cmd2 nicht von cmd1 erkannt werden. Ich habe schon probiert, NBT-Daten wie {Invulnerable} hinzuzufügen, sodass der Unterschied ausgemacht werden kann, das funktioniert jedoch nicht. Was könnte ich noch probieren? Gruß, 2ndpopcornxD (Diskussion) 13:03, 5. Mär. 2016 (UTC)

Hast du denn auch in cmd1 die NBT-Daten angegeben, um einen Unterschied beim Löschen machen zu können? Folgendes funktioniert bei mir: /give @p torch 1 0 {CanPlaceOn:[stone],HideFlag:63} und /clear @p torch 0 1 {CanPlaceOn:[stone],HideFlag:63}: Normale Fackeln werden dann nicht gelöscht. -- Sumpfhütte 11:34, 6. Mär. 2016 (UTC)
Vielleicht ist es bei der Überschrift nicht ganz hervorgestochen, aber es soll jene gelöscht (bzw. ersetzt) werden, welche keine NBT-Daten hat, damit der Spieler dann in gamemode 2 Fackeln platzieren kann. :( Gruß, 2ndpopcornxD (Diskussion) 13:56, 6. Mär. 2016 (UTC)
Das geht tatsächlich nicht. Du kannst nur die speziellen Fackeln oder alle ansprechen, nicht aber nur die normalen. Du müsstest es also komplizierter machen, z.B. indem du für den Spieler erst alle Fackeln abziehst und dabei ein Anzeigetafel-Ziel hochzählst und dann alle Fackeln geändert wieder gibst und das Ziel dabei bis auf Null runterzählst . -- Sumpfhütte 18:44, 6. Mär. 2016 (UTC)
Gut, dann hätte ich eine andere Idee, auf die du mich gerade gebracht hast - einfacher als dein Vorschlag - wenn es funktioniert. Ich nutze zwei objectives, bei welchen stat.mineBlock.minecraft.torch, und stat.craftItem.minecraft.torch hinterlegt ist. Da es grundsätzlich passt, kann ich /gamerule doTileDrops false nutzen, was meinen Vorgang vereinfacht. Dann brauche ich nur noch einen Mechanismus, der jedem Spieler, der bei mine (bzw. bei craft) einen Score von 1 (bzw. 4) oder mehr hat, eine (bzw. 4) Fackel(n) gibt. Ich werde das probieren, wenn ich Zeit habe. Gruß, 2ndpopcornxD (Diskussion) 19:03, 6. Mär. 2016 (UTC)
Ok, ersteres funktionert, zweiteres nicht. Das hier habe ich in einem Repeat-Befehlsblock hinterlegt: /clear @p[tag=Spieler,score_Torches_crafted_min=4] minecraft:torch 0 4 Was ist falsch? Etikettiert bin ich. Gruß, 2ndpopcornxD (Diskussion) 02:38, 7. Mär. 2016 (UTC)

@2ndpopcornxD: Ich hab mir jetzt aus Interesse zu diesem Problem deine Versuche mir angeschaut und ich muss sagen, dass das was du erreichen willst, einen wirklich sehr komplexen Mechanismus benötigen würde. Ich hab mich mal dran begeben und bin zu folgendem gekommen: Startbefehle:

Wiederhol-Befehlsblock (1) Befehl /scoreboard objectives add Fackel_abgebaut stat.mineBlock.minecraft.torch
Ketten-Befehlsblock (1) Befehl /scoreboard objectives add Fackel dummy
Ketten-Befehlsblock (2) Befehl /scoreboard objectives add Fackel_Wurf stat.drop.minecraft.torch
Ketten-Befehlsblock (3) Befehl /scoreboard objectives add Fackel_gebaut stat.craftItem.minecraft.torch

Arbeitsbefehle (1):

Ketten-Befehlsblock Befehl /execute @p[score_Fackel_abgebaut_min=1,score_Fackel_abgebaut=1] ~ ~ ~ /say Du hast eine Fackel abgebaut
Ketten-Befehlsblock Befehl /execute @p[score_Fackel_abgebaut_min=1] ~ ~ ~ /scoreboard players set @e[type=Item] Fackel 1 {Item:{id:"minecraft:torch"} }
Ketten-Befehlsblock Befehl /execute @p[score_Fackel_abgebaut_min=1] ~ ~ ~ /entitydata @e[score_Fackel_min=1,r=10] {Item:{id:"minecraft:torch",tag:{CanPlaceOn:[stone,grass],HideFlag:63} } }
bedingter Ketten-Befehlsblock Befehl /scoreboard players reset @p[score_Fackel_abgebaut_min=1] Fackel_abgebaut

Arbeitsbefehle (2):

Ketten-Befehlsblock Befehl /execute @p[score_Fackel_Wurf_min=1] ~ ~ ~ /say Du hast eine Fackel geworfen
Ketten-Befehlsblock Befehl /execute @p[score_Fackel_Wurf_min=1] ~ ~ ~ /scoreboard players set @e[type=Item] Fackel 1 {Item:{id:"minecraft:torch"} }
Ketten-Befehlsblock Befehl /execute @p[score_Fackel_Wurf_min=1] ~ ~ ~ /entitydata @e[score_Fackel_min=1,r=10] {Item:{id:"minecraft:torch",tag:{CanPlaceOn:[stone,grass],HideFlag:63} } }
bedingter Ketten-Befehlsblock Befehl /scoreboard players reset @p[score_Fackel_Wurf_min=1] Fackel_Wurf

Arbeitsbefehle (3):

Ketten-Befehlsblock Befehl /execute @p[score_Fackel_gebaut_min=4,score_Fackel_abgebaut=4] ~ ~ ~ /say Du hast vier Fackeln hergestellt
Ketten-Befehlsblock Befehl /clear @p[score_Fackel_gebaut_min=4] minecraft:torch 0 4
bedingter Ketten-Befehlsblock Befehl /give @p[score_Fackel_gebaut_min=1] torch 1 0 {CanPlaceOn:[stone,grass],HideFlag:63}
bedingter Ketten-Befehlsblock Befehl /scoreboard players reset @p[score_Fackel_gebaut_min=1] Fackel_gebaut

Jedoch gibt es manchmal Probleme beim craften von Fackeln, da diese vorhandene Fackeln löschen sollen, welche aber noch ins Inventar gelegt werden sollen. Es ist also damit noch nicht getan, es bleibt weiterhin spannend :-D. Nethonos (Diskussion) 12:51, 7. Mär. 2016 (UTC)

Danke für dein Interesse! Ich habe den Fehler an meinem Befehl gefunden. xD Er funktioniert, nur führt er in einem Repeat-Befehlsblock zu erheblichen Problemen: Ich hatte mich sehr gewundert, warum Fackeln, welche ich aus meinem Kreativ-Inventar platziert habe, unverzüglich verschwanden; sogar Schnee legte sich wieder auf den Block. Scheinbar wurden die Fackeln bereits gelöscht, waren aber noch im Inventar zu sehen, konnten aber trotzdem ohne Probleme vom Kreativ-Inventar in die Schnellzugrifflsleiste bewegt werden. Mein Prinzip funktioniert jetzt für meine Zwecke FAST. Der Spieler stellt nur einmal Fackeln her, nämlich wenn er noch keine hat. Daher brauche ich mich nicht um das Problem kümmern, dass mein (letzter) Befehl ebenfalls NBT-Fackeln erkennt. Meine Idee geht, wenn der Spieler beim herstellen der Fackeln mit Shift auf das Herstellungsprodukt klickt. Wenn er es erst in die Hand nimmt, liefert der Befehlsblock trotzdem ein positives Signal, obwohl er keine Fackeln gelöscht hat. Als Folge werden ihm 4 NBT-Fackeln gegeben und er hat noch die 4 normalen Fackeln nach dem Herstellen mit der Maus angeklickt irgendwo auf dem Bildschirm... :( Ich habe deine Ideen noch nicht ausprobiert, jedoch frage ich mich, warum sich dein Arbeitsbefehlssektor (2) mit dem Droppen von Fackeln beschäftigt. Wenn ich eine NBT-Fackel droppe, bleibt sie eine. Wenn der Spieler eine normale Fackel hat, würde er sie nicht droppen. Gruß, 2ndpopcornxD (Diskussion) 18:57, 7. Mär. 2016 (UTC)
Ich wollte damit auch den Fall abdecken, falls du bereits normale Fackeln in der Hand hältst und diese wirfst, sich dann entsprechend auch umwandeln lassen. Unter eigene Befehle schreiben wird es demnächst auch um solche Dinge gehen, denn dort muss dafür gesorgt werden, dass ein Schreibbuch immer im entsprechend richtigen Slot ist. Deshalb konnte ich dir jetzt auch so ausführlich helfen. Nethonos (Diskussion) 19:07, 7. Mär. 2016 (UTC)

TileEntityData[Bearbeiten]

Kann es sein, dass unter dem Abschnitt "Datenstruktur" unter Gegenstandbasisdaten im Unterpunkt "tag" die TileEntityData fehlt? Denn wie soll ich sonst zu den Beutetabllen gelangen? Beispiel, wenn ich einen Dorfbewohner als Handelsangebot eine Truhe geben wollte, die Beutetabellen nutzen soll: sell: { id:chest,tag:{TileEntityData:{LootTable:chests/village_blacksmith}}, maxUses:1, uses:0. Oder kann es sein, dass ich hier was übersehen habe? Nethonos (Diskussion) 12:23, 29. Mär. 2016 (UTC)

Steht doch unter Gegenstandsdaten#Blockobjektdaten-Gegenstände, oder? Es gilt ja nicht allgemein für alle Gegenstände, also kann es auch nicht allgemein im Abschnitt "Gegenstandbasisdaten" aufgelistet werden. | violine1101 (Diskussion) 13:03, 29. Mär. 2016 (UTC)
Ne, leider nicht. Zum Beispiel bei der Truhe steht nicht wie man ihr die Beutetabellen zu weist. Nethonos (Diskussion) 15:48, 29. Mär. 2016 (UTC)
Das steht dann unter Blockobjektdaten. Es hat ja schließlich nichts mit den Gegenständen an sich zu tun, sondern mit dem Blockobjekt, das sie enthalten. | violine1101 (Diskussion) 16:21, 29. Mär. 2016 (UTC)
Ok, aber dort steht das gleiche und auch ohne Beutetabellen. Nethonos (Diskussion) 17:00, 29. Mär. 2016 (UTC)
Stimmt, das hat dort gefehlt. Jetzt fehlt es dort nicht mehr. | violine1101 (Diskussion) 17:42, 29. Mär. 2016 (UTC)
Gut, dann ist das auch endlich geklärt. Danke @Violine1101:. Nethonos (Diskussion) 18:18, 29. Mär. 2016 (UTC)

Übersichtlichkeit abnutzbarer Gegenstände[Bearbeiten]

Der Abschnitt für die abnutzbaren Gegenstände macht den Artikel etwas unübersichtlicher, denn einige Gegenstände besitzen neben der Haltbarkeit auch noch andere NBT-Daten. Dazu gehören z.B. der Schild und die Lederrüstung.

PS. Und fehlt in dem Artikel nicht noch das Schild? Diese kann man ja auch direkt mit Text setzen.   HorseHead.png MarkusRost (Diskussion) 13:29, 21. Jan. 2018 (UTC)

Ich habe jetzt umsortiert und drei Abschnitte gebildet: Basisdaten, Gruppeneigenschaften und individuelle Eigenschaften. Das Schild ist ein Block und steht daher bei den Blockobjektdaten. Als Gegenstand gehört es zur Gruppe der "Blockobjekt-Gegenstände". -- Sumpfhütte 16:47, 21. Jan. 2018 (UTC)
Stimmt, die Blockobjektdaten hatte ich übersehen.
Aber eventuell sollte man bei jedem Gegenstand der einzeln aufgeführt ist auch auf alle Gruppen zu denen sie gehören verlinken. Sonst muss man für den Schild an mehreren Stellen suchen und findet direkt unter Schild nicht alles. Außerdem kann man dann wirklich jeden Gegenstand auf sich oder die zugehörige Gruppe verlinken. In den einzelnen Gruppen sind die Basisdaten ja auch verlinkt. Dabei sollte man eventuell Gegenstände, die mehreren Untergruppen angehören auch extra aufführen und die Gruppen verlinken. (Waffen und Werkzeuge haben eine Haltbarkeit und sind modifiziert) Denn wenn man schon selbst gucken muss wozu ein Gegenstand gehört, der nicht selbst aufgeführt ist, dann sollte man nicht auch noch mehrere Abschnitte durchsuchen müssen, bis man zu allen Daten verlinkt wurde.
Ansonsten könnte man es auch ähnlich wie im englischen Wiki lösen und für die Gruppen jeweils eine Unterseite erstellen, sodass man diese in den verschiedenen Bäumen über {{Lade Inhalt}} direkt einbinden kann. Dies wäre auch eine gute Vorbereitung für @Violine1101s Projekt zum Einbinden der Daten direkt in den dazugehörigen Artikeln.   HorseHead.png MarkusRost (Diskussion) 17:02, 21. Jan. 2018 (UTC)
Welche Gruppen würden denn bei den individuellen Gegenständen verlinkt werden?
  • Schild: + abnutzbar
  • Lederrüstung: + abnutzbar
  • Spielerkopf: + Blockobjekt
Das wäre doch alles, oder? Dann würden diese noch zusätzlich zu dem Basisdatenlink dazukommen. -- Sumpfhütte 17:41, 21. Jan. 2018 (UTC)
Der Spielerkopf gehört nicht dazu, als Gegenstand hat er keine Blockobjektdaten, die hat er erst, wenn er gesetzt wird. Der Schild hat dagegen Blockobjektdaten (und zwar die des Banners), obwohl er kein Block ist und nicht platziert werden kann. -- Sumpfhütte 15:21, 22. Jan. 2018 (UTC)

Benutzerdefinierte tag-Eigenschaft[Bearbeiten]

Ich hab mitbekommen, das man innerhalb von tag:{ ... } eigene Eigenschaften eintragen darf, die dann auch gespeichert werden wie tag:{X:X}, aber auch tag:{foo:15} ist möglich. Das auslesen dieser Daten ist ebenfalls möglich. Es eröffnet einem viele neue Möglichkeiten, aber ich bin mir auch nicht sicher wann das überhaupt erlaubt war oder vielleicht schon immer möglich ist. -- Nethonos 21:47, 24. Mär. 2018 (UTC)

Die Anzeichen sind vielversprechend: Das NBT-Format selbst hat keine Prüfung auf richtige oder falsche Eigenschaften. Mit dem NBTExplorer kann man auch tatsächlich neue Eigenschaften eintragen. Ich habe erstmal mit Objekten und nicht mit Gegenständen getestet: Mit der 1.8-Version von /entitydata kann man einem Objekt neue Eigenschaften hinzufügen. Die sind allerdings nur abfragbar, solange man das Spiel nicht verlässt, denn sie werden nicht in den NBT-Daten gespeichert. Mit 1.13 sieht es dagegen nicht gut aus: Mit dem /data-Befehl kann man Objekten keine neuen Eigenschaften mehr hinzufügen. Und selbst das Hinzufügen von Eigenschaften über den NBTExplorer bringt nichts, denn sie werden vom Programm wieder entfernt. Es scheint so, als gibt es jetzt eine Prüfung der erlaubten Eigenschaften im Programm. Das gilt auch für Blockobjektdaten, das habe ich auch mit 1.13 getestet. Nun zu den Gegenstandsdaten: Beliebige tag-Eigenschaften können hinzugefügt und abgefragt werden. Sie werden auch in den NBT-Daten gespeichert. Beispiel:
/give @s stone{bbbb:"xxxx"}
/data get entity @s
/execute as @e[nbt={Inventory:[{tag:{bbbb:"xxxx"}}]}] run say @s hat was
Der Unterschied zu den Etiketten ist, dass Etiketten an Objekte geheftet werden können, aber nicht an Gegenstände. Hier gibt es nun eine Möglichkeit, auch Gegenstände mit Etiketten oder sogar beliebigen Eigenschaften (Texte oder Zahlen) zu versehen. -- Sumpfhütte 09:01, 25. Mär. 2018 (UTC)
Ich glaube mal, das es so schnell keinen 'tag'-Befehl für Gegenstände gibt und daher hat Mojang auch diese Funktion bestimmt eingebaut. Das tolle ist halt wirklich, das man da nicht nur wie bei den Etiketten, welche vergeben kann, sondern auch ihnen Werte übergeben kann, sodass man mit dem 'scoreboard'-Befehl die Werte abgreifen oder verändern kann. Aber so gesehen kann man das ja auch über Punktestände bei Objekten erreichen, also sind die 'tags' der Gegenstände ein Gemisch aus Etiketten und Punkteständen. Jetzt fehlt nur noch, das man die primitiven Datentypen wie double, char und boolean von 'execute' auch wie den bisher einzigen nutzbaren Typ int in Objekten oder Variablen speichern kann. -- Nethonos 11:10, 25. Mär. 2018 (UTC)