1 votes

Comment remplacer tous les coffres par des coffres avec une table de butin ?

Bonjour, j'ai une carte Hunger Games et une table de butin personnalisée que je veux utiliser pour remplir mes coffres. Je veux être capable de mettre ces coffres dans une table de butin personnalisée sur commande. J'ai étudié la commande /fill mais je me heurte à deux limitations : les orientations ne sont pas préservées lors du remplacement des anciens coffres, et l'arène est trop grande pour être chargée en une seule fois, donc la commande ne fonctionne pas. Existe-t-il une solution à ce problème ? Il serait préférable que je puisse remplir les coffres de manière transparente et répétée afin de pouvoir facilement réinitialiser la carte pour une nouvelle utilisation.

2voto

Alexander Uskov Points 21

Je travaille actuellement sur quelque chose de similaire, et la meilleure solution que j'ai trouvée jusqu'à présent est la suivante :

  1. Utiliser les Datapacks avec des fonctions, et non des chaînes de blocs de commande, ce qui permet d'économiser des tonnes de performances.

  2. vous devez créer des setblock fonctions pour chaque type de coffres que vous avez, multiplier par quatre pour l'orientation (six pour les barils). Vous pouvez séparer le frai et le remplissage en utilisant data merge mais vous ne pouvez pas changer l'état d'un bloc existant, du moins dans vanilla, donc vous devez créer une fonction pour chaque orientation au moins. La première est probablement possible en utilisant WorldEdit puisqu'il expose l'outil "cycler" qui fait exactement cela.

  3. Vos conteneurs doivent être placés à des endroits définis, car, à ma connaissance, vous ne pouvez pas utiliser de sélecteur de type pour les blocs. À moins que vous ne vouliez devenir fou en faisant apparaître des supports d'armure et en effectuant des tests pour chaque bloc de la zone, vous devriez plutôt utiliser execute positioned <pos> as entity @p[distance=..R] fonctions. Vous pouvez utiliser la position de la poitrine elle-même comme pos alors R est la distance de déclenchement du spawn, que j'ai réglée sur le minimum possible de 4 (car le coffre est accessible à partir d'une distance de 3), et elle est réglable. Une autre option consiste à définir pos à l'entrée d'une zone fermée (où R est la taille d'entrée en gros), qui est impossible à contourner, puis déclenche la création d'un coffre par une autre couche de execute positioned . Ces vérifications doivent être exécutées à chaque tic, ce que vous pouvez réaliser soit en utilisant le bloc de commande répétitif, soit en plaçant votre fonction dans le fichier #minecraft:tick étiquette de fonction .

  4. Pour éviter le frayage répétitif, vous devez utiliser Tags . C'est un peu verbeux, mais assez efficace. En fonction de vos objectifs, vous pouvez marquer soit un joueur, soit le coffre au moment où il est rempli. Ainsi, il peut être rempli une fois par vie (totalement sûr pour les multijoueurs), une fois par joueur approchant (moins sûr pour les multijoueurs), ou, si vous êtes assez fou avec la gestion de l'état, vous pouvez forcer un coffre à respawn une fois pour chaque joueur mais seulement s'il est vidé. Pour ce faire, vous devez marquer à la fois un joueur et un coffre lors de l'événement de spawn, et créer un autre événement tick qui suit les coffres précédemment marqués et supprime cette marque, de sorte que l'état est entièrement réinitialisé pour le coffre (mais pas pour le joueur). Si vous avez besoin de trop de balises, vous pouvez utiliser la génération de code.

  5. Regroupez les coffres qui apparaissent dès que vous le pouvez. Par exemple, s'il y a une pièce avec 2 entrées et 15 coffres, il est préférable de tester la présence de joueurs à chacune des entrées plutôt que de le faire autour de chaque coffre. Quand c'est possible, essayez d'utiliser des câbles de redstone (plaques de pression, coffres piégés, fils-pièges, etc.) avec des blocs de commande d'impulsion pour tester l'approche des joueurs plutôt que de le faire autour de chaque coffre. tick pour des raisons de performance.

L'exemple de code serait donc le suivant

### Repeating command block or tick function
execute positioned X Y Z as entity @p[distance=..4,tag=!spawnChestUniqueIdentifier] run function datapack:chests/theSameUniqueIdentifier

### Function datapack:chests/theSameUniqueIdentifier

# The function is written specifically for the usage above, 
# as it assumes the location context ~ ~ ~ to be precisely at chest. 
# If you want to separate tracking and spawning, 
# put "execute positioned" here
# You have to wipe the chest first, since "setblock" doesn't refresh the loot table seed of existing blocks, sadly
fill ~ ~ ~ ~ ~ ~ air replace

# generally it's worth wiping whatever was dropped if the chest could have the remaining loot from previous spawn
# you may want to keep the items when several players approach the same chest so they get double items anyway
kill @e[type=item,distance=..3]

# And now you create a filled chest
setblock ~ ~ ~ chest[facing=south]{LootTable:"chests:masonry"} replace 

# Or creating template functions to avoid copy pasting
function utils:chests/masonry/south

# finally, you tag a player so he doesn't retrigger the spawn. Again, the context is dependant on the previous function
tag @s add spawnChestUniqueIdentifier

J'ai d'autres exemples ici si vous en avez besoin https://gitlab.com/octaharon/Minecraft-quest/-/tree/master/data/chests

0voto

Brickstackerz Points 59

Il peut être possible d'avoir vos coffres habituels dans la carte et sur certains déclencheurs. Redstone, bloc de commande, etc. Émettre une commande de clonage qui remplacera les coffres désirés par des versions clonées des versions de la table de butin personnalisée.

Le coffre piégé est ouvert, ce qui déclenche un bloc de commande pour bloquer un bloc de redstone. Cela déclenche un bloc d'impulsion avec des commandes en chaîne attachées qui peuvent être assignées à différents coffres et vous pouvez bloquer le départ vers l'air pour rendre la séquence répétable. Avec plus d'informations sur la carte, je pourrais l'étoffer un peu plus.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X