(1.16.2) Qual è il modo più efficiente per / diffondere i giocatori in una dimensione diversa?
Sto cercando di teletrasportare istantaneamente tutte le entità che viaggiano nel Nether in una posizione casuale nell'Overworld.
Il /spreadplayers
comando è perfetto per la posizione casuale:
spreadplayers 0 0 0 45 under 30 false @s
E posso rilevare qualsiasi entità nel nether con un predicato:
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"location": {
"dimension": "minecraft:the_nether"
}
}
}
Così: spreadplayers 0 0 0 45 under 30 false @e[predicate=namespace:in_nether]
Sfortunatamente, questo comando diffonde tutte le entità in modo casuale intorno a 0x 0z nel Nether, non nell'Overworld.
Ho quindi provato:
execute in minecraft:overworld run spreadplayers 0 0 0 45 under 30 false @e[predicate=namespace:in_nether]
Il risultato è stato lo stesso.
Ho deciso di fare dei test, quindi ho sostituito il primo comando /spreadplayers
con /tp
:
tp @e[predicate=namespace:in_nether] 0 1 0
Ha funzionato perfettamente. Tutte le entità che hanno viaggiato nel Nether sono state immediatamente teletrasportate in Overworld 0x 1y 0z.
Sembrava che /tp
funzionasse diversamente da /spreadplayers
. Quindi, il mio prossimo tentativo è stato di inserire i seguenti comandi in una funzione che ho chiamato portal
:
tp @s 0 1 0
spreadplayers 0 0 0 45 under 30 false @s
Ho eseguito questa funzione ogni tick:
execute as @e[predicate=namespace:in_nether] run function namespace:portal
Ha funzionato: ogni volta che il mio giocatore ha attraversato il portale, è stato immediatamente teletrasportato su Overworld 0x 1y 0z e poi si è diffuso casualmente in Overworld 0x 0z. Ma poi ho scoperto che sembrava funzionare solo per il mio lettore .
Quando qualsiasi altro tipo di entità viaggiava nel Nether, veniva teletrasportato nell'Overworld 0x 1y 0z, ma non si diffondeva in modo casuale.
Ho finalmente trovato una soluzione funzionante: ( e ha creato un problema tecnico visivo lato client )
tag @e[predicate=namespace:in_nether] add in_nether
tp @e[predicate=namespace:in_nether] 0 1 0
spreadplayers 0 0 0 45 under 30 false @e[tag=in_nether]
tag @e[tag=in_nether] remove in_nether
Questa soluzione è più lenta e complessa di quello che inizialmente pensavo avrebbe funzionato. Non sono sicuro del motivo per cui / spreadplayers si comporta in questo modo, quindi per riaffermare la mia domanda: qual è il modo più efficiente per / spreadplayers in una dimensione diversa? (E perché le mie altre soluzioni più eleganti non hanno funzionato ?!) Grazie
Risposte
La tua idea potrebbe essere la migliore che puoi fare.
Sembra che il nostro amico Fabian Röling abbia segnalato un bug report su questo problema. Poiché è stato confermato come un bug, significa che /spreadplayers
non dovrebbe agire in questo modo.
Pertanto, per rispondere alla tua domanda originale, il modo teorico più efficace per /spreadplayers
entrare in una dimensione diversa è una delle tue prove originali:
execute in minecraft:overworld run spreadplayers 0 0 0 45 under 30 false @e[predicate=namespace:in_nether]
Ma a causa del bug, non funziona. E dovevi trovare una soluzione alternativa.