Clone relatif

  • Auteur de la discussion Auteur de la discussion Oromis
  • Date de début Date de début
Yep mais dans ce cas le problème sera identique si tu t'éloignes trop du one command :/. Pour ça, peut-être qu'il serait préférable de donner comme consigne l'usage du spawn (me semble que tous les chunks autour du spawn restent chargés, du style 4x4 chunks).

Je cherche toujours une solution mais ton problème est tordu, puisque tu utilises du relatif de tous les côtés. Il n'y aura clairement aucune méthode parfaite tant que le jeu ne permettra pas de récupérer les coordonnées pour les stocker en mémoire.
 
Tout à fait d'accord, c'est pour ça que je pense que je vais partir sur l'idée du livre, comme ça, chaqu'un des blocs aura un clickevent faisant un blockdata sur le command block se trouvant à la position d'un armorstand ! ^^"
Pour ceux que ça intéresse, je donne la commande que je viens fraîchement de créer contenant tout les blocs du jeu (ou presque) :
Code:
/give @p written_book 1 0 {pages:["[\"\",{\"text\":\"-------- A ---------\",\"color\":\"dark_red\"},{\"text\":\"\nAir\nAndesite\n\",\"color\":\"reset\"},{\"text\":\"-------- B ---------\",\"color\":\"dark_red\"},{\"text\":\"\nBarrier\nBedrock\nBone Block\nBooshelf\nBrick\nBrown Mushroom (B)\n\",\"color\":\"reset\"},{\"text\":\"-------- C ---------\",\"color\":\"dark_red\"},{\"text\":\"\nCarpet (Black)\nCarpet (Blue)\nCarpet (Brown)\nCarpet (Cyan)\",\"color\":\"reset\"}]","{\"text\":\"Carpet (Green)\nCarpet (Grey)\nCarpet (Light Blue)\nCarpet (Light Gray)\nCarpet (Lime)\nCarpet (Magenta)\nCarpet (Orange)\nCarpet (Pink)\nCarpet (Purple)\nCarpet (Red)\nCarpet (Yellow)\nChorus Flower\nChorus Plant\nClay Bock\nCoal Block\"}","[\"\",{\"text\":\"Coal Ore\nCobblestone\nCobblestone Wall\nCobweb\nCoarse Dirt\n\"},{\"text\":\"-------- D ---------\",\"color\":\"dark_red\"},{\"text\":\"\nDark Prismarine\nDiamond Block\nDiamond Ore\nDiorite\nDirt\n\",\"color\":\"reset\"},{\"text\":\"-------- E ---------\",\"color\":\"dark_red\"},{\"text\":\"\nEmerald Block\nEmerald Ore\nEnd Portal\n \",\"color\":\"reset\"}]","[\"\",{\"text\":\"End Portal Frame\nEnd Stone\nEnd Stone Brick\n\"},{\"text\":\"-------- F ---------\",\"color\":\"dark_red\"},{\"text\":\"\nFarmland\nFence (Accacia)\nFence (Birch)\nFence (Dark Oak)\nFence (Jungle)\nFence (Oak)\nFence (Spruce)\nFence Gate (Accacia)\nFence Gate (Birch)\nFence Gate (Dark Oak)\nFence Gate (Jungle)\n \",\"color\":\"reset\"}]","[\"\",{\"text\":\"Fence Gate (Oak)\nFence Gate (Spruce)\nFire\n\"},{\"text\":\"-------- G ---------\",\"color\":\"dark_red\"},{\"text\":\"\nGlass\nGlasse Pane\nGlowstone\nGold Block\nGold Ore\nGranite Grass\nGrass Path\nGravel\n\",\"color\":\"reset\"},{\"text\":\"-------- H ---------\",\"color\":\"dark_red\"},{\"text\":\"\nHardened Clay\nHay Bale\n \",\"color\":\"reset\"}]","[\"\",{\"text\":\"Head (Creeper)\nHead (Skeleton)\nHead (Steve)\nHead (Wither)\nHead (Zombie)\n\"},{\"text\":\"-------- I ---------\",\"color\":\"dark_red\"},{\"text\":\"\nIce\nIron Bars\nIron Block\nIron Ore\n\",\"color\":\"reset\"},{\"text\":\"-------- J ---------\",\"color\":\"dark_red\"},{\"text\":\"\nJack-O-Lantern\n\",\"color\":\"reset\"},{\"text\":\"-------- L ---------\",\"color\":\"dark_red\"},{\"text\":\"\nLapis Lazuli Block\nLapis Lazuli Ore\n \",\"color\":\"reset\"}]","[\"\",{\"text\":\"Lava\nLeaves (Birch)\nLeaves (Oak)\nLeaves (Jungle)\nLeaves (Birch)\nLily Pad\n\"},{\"text\":\"-------- M ---------\",\"color\":\"dark_red\"},{\"text\":\"\nMagma Block\nMelon Block\nMelon Vine\nMob Spawner\nMonster Egg (Stone)\nMoss Stone\nMossy Cobblestone Wall\nMycelium\",\"color\":\"reset\"}]","[\"\",{\"text\":\"-------- N ---------\",\"color\":\"dark_red\"},{\"text\":\"\nNether Brick\nNether Quartz Ore\nNetherrack\nNether Wart Block\n\",\"color\":\"reset\"},{\"text\":\"-------- O ---------\",\"color\":\"dark_red\"},{\"text\":\"\nObsidian\n\",\"color\":\"reset\"},{\"text\":\"-------- P ---------\",\"color\":\"dark_red\"},{\"text\":\"\n\",\"color\":\"reset\"},{\"text\":\"Packed Ice\nPodzol\nPolished Andesite\nPolished Diorite\nPolished Granite\nPortal\nPrismarine\",\"color\":\"black\"}]","[\"\",{\"text\":\"Prismarine Bricks\nPumpkin Block\nPumpkin Vine\nPurpur Block\nPurpur Pillar\n\"},{\"text\":\"-------- Q ---------\",\"color\":\"dark_red\"},{\"text\":\"\nQuartz Block\n\",\"color\":\"reset\"},{\"text\":\"-------- R ---------\",\"color\":\"dark_red\"},{\"text\":\"\nRed Mushroom (B)\nRed Nether Birck\nRed Sandstone\nR Sandstone (Chiseled)\nR Sandstone (Smooth)\nRedstone Block\nRedstone Ore\",\"color\":\"reset\"}]","[\"\",{\"text\":\"-------- S ---------\",\"color\":\"dark_red\"},{\"text\":\"\nSand\nSandstone\nSandstone (Chiseled)\nSandstone (Smooth)\nSlab (Accacia)\nSlab (Birch)\nSlab (Brick)\nSlab (Cobblestone)\nSlab (Dark Oak)\nSlab (Jungle)\nSlab (Nether Brick)\nSlab (Oak)\nSlab (Purpur)\nSlab (Quartz)\",\"color\":\"reset\"}]","{\"text\":\"Slab (Red Sandstone)\nSlab (Sandstone)\nSlab (Spruce)\nSlab (Stone Brick)\nSlab (Stone)\nSnow\nSnow Block\nSoul Sand\nSponge\nStained Clay (Black)\nStained Clay (Blue)\nStained Clay (Brown)\nStained Clay (Cyan)\nStained Clay (Green)\nStained Clay (Grey)\"}","{\"text\":\"Stained Clay (L  Blue)\nStained Clay (L Gray)\nStained Clay (Lime)\nStained Clay (Magenta)\nStained Clay (Orange)\nStained Clay (Pink)\nStained Clay (Purple)\nStained Clay (Red)\nStained Clay (Yellow)\nStained Glass (Black)\nStained Glass (Blue)\nStained Glass (Brown)\nStained Glass (Cyan)\nStained Glass (Green)\nStained Glass (Grey)\"}","{\"text\":\"Stained Glass (L  Blue)\nStained Glass (L Gray)\nStained Glass (Lime)\nStained Glass(Magenta)\nStained Glass (Orange)\nStained Glass (Pink)\nStained Glass (Purple)\nStained Glass (Red)\nStained Glass (Yellow)\nStained G P (Black)\nStained G P (Blue)\nStained G P (Brown)\nStained G P (Cyan)\nStained G P (Green)\nStained G P (Grey)\"}","{\"text\":\"Stained G P (L  Blue)\nStained G P (L Gray)\nStained G P (Lime)\nStained G P (Magenta)\nStained G P (Orange)\nStained G P (Pink)\nStained G P (Purple)\nStained G P (Red)\nStained G P (Yellow)\nStairs (Accacia)\nStairs (Birch)\nStairs (Brick)\nStairs (Cobblestone)\nStairs (Dark Oak)\nStairs (Jungle)\"}","[\"\",{\"text\":\"Stairs (Nether Brick)\nStairs (Oak)\nStairs (Purpur)\nStairs (Quartz)\nStairs (Red Sandstone)\nStairs (Sandstone)\nStairs (Spruce)\nStairs (Stone Brick)\nStone\nStone Bricks\nStructure Block\n\"},{\"text\":\"-------- V ---------\",\"color\":\"dark_red\"},{\"text\":\"\nVines\n\",\"color\":\"reset\"},{\"text\":\"-------- W ---------\",\"color\":\"dark_red\"},{\"text\":\"\nWater\",\"color\":\"reset\"}]","{\"text\":\"Wet Sponge\nWood (Accacia)\nWood (Birch)\nWood (Dar Oak)\nWood (Jungle)\nWood (Oak)\nWood (Spruce)\nWood Plank (Accacia)\nWood Plank (Birch)\nWood Plank (Dar Oak)\nWood Plank (Jungle)\nWood Plank (Oak)\nWood Plank (Spruce)\nWool (Black)\nWool (Blue)\"}","{\"text\":\"Wool (Brown)\nWool (Cyan)\nWool (Green)\nWool (Grey)\nWool (Light Blue)\nWool (Light Gray)\nWool (Lime)\nWool (Magenta)\nWool (Orange)\nWool (Pink)\nWool (Purple)\nWool (Red)\nWool (Yellow)\"}"],title:"Minecraft's Block",author:theogiraudet}
 
  • J'aime
Reactions: McBooster et Xilak
Ah, donc c’est sur la bonne voie ? :D

Sinon j’avais pensé à une solution, je vais quand même la partager...
Je n’aurais jamais cru trouver une solution à ton problème, quel défi xD
Désolé pour le pavé mais je me suis bien amusé, la solution parait compliquée mais c’est faisable je pense.
Tout d’abord il faudra préciser aux joueurs d’installer le command_block pour ton one command à une position définie d’un chunk (par exemple 0 0), n’importe quel chunk car il me semble qu’un /setworldspawn le fera charger constamment.

Je n’ai pas testé si tout ça marchera vraiment, normalement oui...
Cela consiste à amener le "bloc posé par l’utilisateur", "aux pied de l’ArmorStand", avec un système de pathfinding.

problème tordu ---> solution tordue

Tout d’abord il faut faire en sorte qu’un ArmorStand soit à la position XYZ du "bloc posé par l’utilisateur" (genre un œuf "piédestal", l’utilisateur éclot l’œuf, ce qui place une structure, il ne restera plus qu’à l’utilisateur de poser le bloc qu’il souhaite dessus) l’ArmorStand du "bloc posé par l’utilisateur" fera /clone le "bloc posé par l’utilisateur" aux coordonnées ~0 0 ~0 au niveau de la bedrock, se sera une sorte de copie mémoire du "bloc posé par l’utilisateur".
Il faudra /summon 5 ArmorStand (ayant comme name : nord, sud, est, ouest, et centre) en forme de "+" vu du dessus, se trouvant à la couche 0 au niveau de la bedrock centrés aux coordonnées XZ du "bloc posé par l’utilisateur".

Maintenant, vérifier lequel des 5 ArmorStand du "+" est plus proche de "l’ArmorStand aux pieds".
Si c’est par exemple le bras ouest du "+" qui est plus proche de "l’ArmorStand aux pieds", alors l’Armorstand au centre du "+" /clone la copie mémoire du "bloc posé par l’utilisateur" d’une distance d’1 bloc à l’ouest (et remet facultativement un bloc de bedrock à la position précédente au centre).
Puis les 5 ArmorStand du "+" se /tp d’1 bloc à l’ouest depuis leur position. Puis le cycle recommence...
C’est quasi pareil pour le bras est, nord, et sud du "+"... faut juste changer les coordonnées...

Au bout d’un petit moment, l’ArmorStand au centre du "+" sera le plus proche de "l’ArmorStand aux pieds". Et cela voudra dire que la copie mémoire du "bloc posé par l’utilisateur" est aux mêmes coordonnées XZ que "l’ArmorStand aux pieds", il est juste en dessous !
Il ne reste plus qu’à faire faire à "l’ArmorStand aux pieds" un /clone ~ 0 ~ ~ 0 ~ ~ ~ ~

Et voilà :D

Je ne sais pas combien de temps prendra le système pour amener le bloc aux pieds de l’ArmorStand, tout dépendra de la distance entre eux, peut-être 10 blocs/seconde...
Mais je viens d’avoir une nouvelle idée pour accélérer tout ça :
Au lieu de déplacer le bloc mémoire et le "+", d’1 bloc à la fois, déplacer le tout de 64 blocs, puis avec des scoreboards, si par exemple le tout se déplaçait à l’ouest, et qu’après il se déplace à l’est (une direction opposée donc), cela voudra dire que "l’ArmorStand aux pieds" est entre cette distance, donc à partir de là déplacer le tout de 32 blocs, puis 16, etc... pour arriver à des déplacements de 1 bloc de distance, pour ainsi trouver "l’ArmorStand aux pieds". J’imagine que ça accélèrera la recherche...

Comme ça tu n’auras pas à faire tous les blocs possibles du jeu, et tout ce fera avec un /clone.
Après... il y aura toujours le gros problème de chunk non chargé si le "+" est trop éloigné de "l’ArmorStand aux pieds"

Mais, il y a un espoir... Étant donné que le génialissime Chunk Loader de test137E29 ne marche malheureusement qu’en 1.8... Il ne reste plus que le Chunk Loader de SimplySarc avec les hoppers !
Mais ça va être plus compliqué, d’ailleurs je ne sais même pas si c’est possible, je pense que si...
Étant donné qu’il est inimaginable, et peut-être même impossible, de faire charger une zone de 1000 chunks sur 1000 chunks...
J'ai pensé à un système qui génèrerait en temps réel comme une espèce de "fil d’Ariane" de chunks constamment chargés avec des chunk loader cachés en couche 0, qui relierait le spawn jusqu’au joueur, et qui élimine même les nœuds formé par le joueur.

/summon 5 ArmorStand en forme de "+" (nord, sud, est, ouest, centre) au centre du chunk du spawn. Atribuer à l'ArmorStand du centre un score "Ariane" de 0. Le joueur, lui, aura la valeur du plus gros score "Ariane" atteint.
Ensuite rechercher si le joueur est à minimum 32 blocs d’un ArmorStand, nord, ou sud, ou est, ou ouest, si oui, si c’est par exemple l’ArmorStand ouest qui est plus proche du joueur, faire faire apparaitre à l’ArmorStand centre un chunk loader 32 blocs à l'ouest, de même lui faire /tp aussi les 4 ArmorStand (nord, sud, est, ouest) 32 blocs à l’ouest, lui faire /summon un ArmorStand centre 32 blocs à l’ouest aussi, l’ArmorStand centre précédent reste et reçoit le score Ariane = au joueur + 1, ensuite le joueur reçoit + 1 à son score Ariane. Programmer cela pour les 4 directions (nord, sud, est, ouest), et le système créera tout seul le fil d’Ariane du spawn au joueur :D

Le scoreboard Ariane sert à éliminer les nœuds, si par exemple le joueur a un score Ariane de 27, et qu’il arrive par exemple sur un chunk qui vaut 18, donc inférieur à 27, un procédé éliminera le nœud, et le joueur aura son score Ariane = à l’ArmorStand le plus proche qui gère le score Ariane, donc 18. Les ArmorStands et les chunk loader correspondant aux chunks chargés de 19 à 27 n'existent alors plus.
Mais je me demande vraiment s’il est possible de tester le score d’une entité et voir s’il est inférieur à une autre entité, sans mettre de nombre... ?
Au pire les nœuds resteront... xD
Dans ce cas, le scoreboard Ariane est à supprimer, de même que les ArmorStand stockant la longueur du fil d'Ariane en chunk...

Une fois le bloc posé par l'utilisateur, le fil d'Ariane du spawn au joueur se transforme en fil d'Ariane du spawn au "bloc posé par l'utilisateur", de même pour "l'ArmorStand aux pieds" posé par l'utilisateur. Ces fils d'Ariane resteront sauvegardés jusqu'à ce que l’utilisateur change de place le "bloc posé par l'utilisateur" ou "l'ArmorStand aux pieds". Le fil d'Ariane du joueur est à part et fonctionne tout le temps.
Mais maintenant les chunks entre les deux lieux ne sont peut-être pas chargés... Soit l'utilisateur fait le trajet à vol d'oiseau (ou en angle droit, je ne sais pas comment le pathfinding va se comporter), mais bon c'est pas raisonnable s'il faut faire un aller-retour pour charger le chemin entre le "bloc posé par l'utilisateur" et "l'ArmorStand aux pieds", donc, si ces deux lieux sont bien présent, un fil d'Ariane de chunks chargés supplémentaire va se créer et va ouvrir le passage au "+" de la copie mémoire du "bloc posé par l'utilisateur" jusqu'aux pieds de l'ArmorStand.
Ça parait complexe mais je crois que c'est faisable en fin de compte...
Après faut tester, je ne l’ai pas fait de mon côté, je n'ai fait QUE la théorie... xD
Après si t’es déjà bien avancé dans le livre clickevent laisse tomber ma solution xD
 
Dernière édition:
Oula !!!!! Effectivement, solution complètement tordu ^^"
Ton idée me parait bonne mais malheureusement, il y a un moyen beaucoup plus simple de le remplacer en 1.10 avec les structures blocks ^^"
Mais bon, encore une fois, il reste le problème des chunks, tu proposes un système en fil d'Ariane, encore une fois, ça me parait faisable au détail près que j'ai peur que ces générations/dégénérations par des entités fasse lag le joueur si il n'est pas doté d'un bon PC, par contre, ça peut être une idée à développer pour un no-mod ! ^^
Merci tout de même de ta solution et du paragraphe explicatif que tu as rédigé ! :p
Mais je me demande vraiment s’il est possible de tester le score d’une entité et voir s’il est inférieur à une autre entité, sans mettre de nombre... ?
Oui, c'est possible, d'une façon assez casse-pied ^^" :
Code:
/scoreboard players operation @p ariane -= @e[tag=ariane] ariane
Ensuite, un testfor, si le score du joueur est inférieur à 0, alors le score du l'armor stand était plus grand que celui du joueur !
Il est vrai que ce genre de problème est assez sympa à résoudre, il faut se surpasser pour trouver une solution bien complexe mais je trouve que c'est un réel plaisir de la trouver ! :p
 
De rien ^^
Pas de souci ^^
Ah, ces fameux structures blocks... Le pire c’est qu’ils me sont venus à l’esprit mais je les ai balayé aussitôt, de même que la nouvelle commande /teleport, je me disais que ça n’aller pas être utile pour trouver une solution ><

Mais normalement il n’y a plus aucun problème de chunks non chargés si tu utilises les structures blocks :
Si tu Save depuis le spawn le "bloc posé par l’utilisateur" depuis la position de "l’ArmorStand du bloc posé par l’utilisateur", et que tu Load depuis le spawn "la structure" depuis la position de "l’ArmorStand" à ses pieds, il n'y aura pas besoin de charger des chunks, car (j’imagine) le bloc n’aura pas besoin d’être présent aux pieds de l’ArmorStand tant que le joueur ne sera pas à ses environs pour le voir. :D

Et aussi il y a la commande /setworldspawn qui permet de changer le spawn et donc d’y déplacer les chunks constamment chargés. Comme ça le spawn se déplacera là où le joueur souhaite installer ton one command. Normalement c’est 256x256x256 blocs constamment chargés au spawn.

Et super pour l’astuce du scoreboard, merci ! :D
 
Dernière édition:
Pas de quoi ! ;)
Effectivement pour le /setworldspawn, je l'utiliserai peut-être en cas de dernier recours, car ça reste assez contraignant pour le joueur ! :p
Pour ce qui est du structure block, je n'ai pas essayé dans les zones déchargées, mais il faut bien pouvoir le mettre dedans, ce qui n'est pas possible :p
 
Le joueur n’aura rien à faire, à part placer un CB où il le souhaite et y entrer ta one command.
Le /setworldspawn ~ ~ ~ peut se faire automatiquement avec un CB pendant la génération de ton nomod.
Le structure block load, et le structure block save seront toujours chargés au spawn comme ça...
Après peut-être que l’on ne peut pas Save ou Load depuis la position relative d’une entité, et que c’est forcément depuis la position relative du structure block ? Si c'est le cas le problème est toujours là :p

Edit: Il y a peut-être une solution... Mais peut-on /setblock un structure block avec ses fonctions déjà inscrites et configurées à l'intérieur ?

Edit2: Non j’ai pas trouvé d’option pour Load et Save depuis la position relative d’une entité, pourtant je croyais que l’on pouvait, ça me parait crucial d’ajouter cette option dans les prochaines mise à jour :D
Pour ce qui est du /setblock, c’était une question bête... bien évidemment que l’on peut >< Sinon on ne pourrait pas l’utiliser dans un module en one command... Maintenant je ne connais pas ses tagNBT, mais je les ai aperçus dans MCedit en pointant le bloc. Les placer en commande j’ai pas testé...
Une solution :
Pour le Save, ce serait de faire /setblock à l’ArmorStand le structureblock (commande comprise) compris dans la structure "piédestal" (après je ne sais pas si tu comptes passer par un truc comme ça...), et de lui faire Save le bloc.
Pour le Load, ce serait "l’AmorStand aux pieds" qui va /setblock le structure block (commande comprise), au seul endroit préférable qui serait la couche zéro à ~ 0 ~, et l’activer avec un bloc de redstone à ~ 0 ~-1, pour qu’il Load le bloc à ~ ~ ~1 de sa position, puis faire faire à l’ArmorStand un /clone ~ 0 ~1 ~ 0 ~1 ~ ~ ~ :D
 
Dernière édition:
Comme je le disais, je préfère éviter d'avoir recours à un setworldspawn, il suffit que le joueur exploite déjà le spawn d'origine pour que je dérègle tout sur sa map ^^"
 
Aaah ok, désolé, j'avais mal compris...
Dans ce cas le joueur sera obligé de placer ton one command à son spawn...
Et ça marchera quand même... ^^
 
Dernière édition:
Oui, ça reste contraignant, je vais continuer à réfléchir à un autre moyen mais pour l'instant, je suis occupé par le bac ^^"