gf2:projekte:minecraft:interaktionen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
gf2:projekte:minecraft:interaktionen [2022/11/18 12:10] – [3. Mit player.execute() Spielkommandos ausführen] lehmannrgf2:projekte:minecraft:interaktionen [2024/12/09 14:07] (aktuell) marroc
Zeile 52: Zeile 52:
 player.on_travelled(WALK, on_travelled_walk) player.on_travelled(WALK, on_travelled_walk)
 </sxh> </sxh>
 +Statt WALK geht auch: swim water, fall, climb, swim lava, fly, riding, sneak, sprint.
  
 ==== 2.3 Weitere Ereignis-Listeners ==== ==== 2.3 Weitere Ereignis-Listeners ====
 Es gibt weitere solche "Listener", die auf ein bestimmtes Ereignis reagieren. Alle beginnen mit ** player.on, ** oder mit ** blocks.on **. Es gibt weitere solche "Listener", die auf ein bestimmtes Ereignis reagieren. Alle beginnen mit ** player.on, ** oder mit ** blocks.on **.
-  * player.on_chat +  * player.on_chat 
 +  * playe.on 
   * player.on_item_interacted   * player.on_item_interacted
   * player.on_died   * player.on_died
 +  * player.on_teleported
   * blocks.on_block_broken    * blocks.on_block_broken 
   * blocks.on_blocks_placed   * blocks.on_blocks_placed
  
 ===== 3. Mit player.execute() Spielkommandos ausführen ===== ===== 3. Mit player.execute() Spielkommandos ausführen =====
-Mit dem Befehl ''player.execute'' kann man die Spielkommandos ausführen, die man sonst in den Chat schreibt. Beispielsweise ''kill @s'' (um den Spieler zu töten, Achtung, hierfür muss man im Survival- oder im Adventure-Modus sein) ''setworldspawn x y z'' (um den Weltspawnpunkt zu setzen), ''spawnpoint x y z'' um den Spawnpunkt des Spielers zu setzen.+Mit dem Befehl ''player.execute'' kann man die Spielkommandos in Python ausführen, die man sonst in den Chat schreibt. Beispielsweise ''kill @s'' (um den Spieler zu töten, Achtung, hierfür muss man im Survival- oder im Adventure-Modus sein) ''setworldspawn x y z'' (um den Weltspawnpunkt zu setzen), ''spawnpoint x y z'' um den Spawnpunkt des Spielers zu setzen.
  
 Hierfür gibt man das Kommando in Anführungszeichen ein, ohne den Schrägstrich. Hierfür gibt man das Kommando in Anführungszeichen ein, ohne den Schrägstrich.
Zeile 77: Zeile 80:
  
 </sxh> </sxh>
 +
 +Falls ein Spieler nicht durch das Programm durch ''player.execute("kill @s")'' stirbt, sondern z.B. im Kampf mit Monstern, funktioniert der Trick von oben natürlich nicht so. Dann muss man den neuen Spawnpoint des Spielers einfach setzen, wenn er eine bestimmte Leistung erreicht hat (genügend Punkte erzielt, bis zu einem bestimmten Block gekommen etc.).
  
 Dafür kann man auch Command-Blocks verwenden (siehe Punkt 4 unten), doch es ist meist viel einfacher, dies direkt im Python-Code zu tun. Dafür kann man auch Command-Blocks verwenden (siehe Punkt 4 unten), doch es ist meist viel einfacher, dies direkt im Python-Code zu tun.
Zeile 114: Zeile 119:
 </sxh> </sxh>
  
 +===== 5. Testen, welche Items sich in einer Kiste befinden =====
 +Hierzu kann man einen Trick verwenden:
 +  - Die Kiste an einen fernen Ort kopieren
 +  - Den Agenten auch dorthin teleportieren
 +  - Die Kiste zerstören
 +  - Agent sammelt die Items ein
 +  - Testen, welche Items der Agent im Inventar hat
 +  - Diesen Vorgang könnte man in eine ''loops.forever''-Schleife packen (siehe Beispiel unten)
 + 
 +Beispielcode
 +<sxh python>
 +# Die folgende Funktion testet, ob ein Diamant in der Truhe ist.
 +# Sie gibt true oder false als Rückgabewert, sodass man sie weiterverwenden kann.
 +
 +def isDiamondInChest():
 +    diamondFound = False
 +    # Agent weit weg teleportieren und alles wegschmeissen
 +    agent.teleport(world(20,-60,12),NORTH)
 +    agent.drop_all(FORWARD)
 +    
 +     # Kiste kopieren (sie steht bei (-7,-60,3))
 +    blocks.clone(world(2, -60, 12), world(2,-60,12), world(10,-60,12), CloneMask.REPLACE, CloneMode.NORMAL)
 +    
 +    # Agenten zur Kiste teleportieren
 +    agent.teleport(world(10, -60, 13), NORTH)
 +    
 +    # Kiste zerstören und Objekte aufsammeln
 +    agent.destroy(FORWARD)
 +    agent.collect_all()
 +    for slotNumber in range(1,10):
 +        itemID = agent.get_item_detail(slotNumber)
 +        if (itemID == 264):
 +            diamondFound = True
 +    return diamondFound    
 +
 +# Nun können wir z.B. ein Mal pro Sekunde testen, ob ein Diamand in der Truhe ist   
 +def on_forever():
 +    if (isDiamondInChest()==True):  
 +        player.say("Ein Diamant in der Truhe")
 +    else:
 +        player.say("Nope, kein Diamand in der Truhe")
 +    loops.pause(1000)
 +
 +loops.forever(on_forever)
 +</sxh>
  
  
-[[gf2:projekte:minecraft:start|Zurück zur Übersicht des Projektes]] 
  
  • gf2/projekte/minecraft/interaktionen.1668769839.txt.gz
  • Zuletzt geändert: 2022/11/18 12:10
  • von lehmannr