Résolu Multiblock plus compacte
-
Bonjour,
je viens de faire un multiblock mais je me demander si je pouvais le faire plus compacte ou plus optimiser.
Voici ma class :
public class BlockPersonalBlock extends Block { public BlockPersonalBlock() { super(Block.Properties.create(Material.IRON)); setRegistryName("personal_block"); } @Override public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { if (!world.isRemote) { if (placer instanceof PlayerEntity) { Block diamond = Blocks.DIAMOND_BLOCK; Block gold = Blocks.GOLD_BLOCK; Block iron = Blocks.IRON_BLOCK; Block bars = Blocks.IRON_BARS; Block water = Blocks.WATER; if ( getBlock(world, pos.down()) == diamond && getBlock(world, pos.down().north().west()) == diamond && getBlock(world, pos.down().north()).getBlock() == diamond && getBlock(world, pos.down().north().east()) == diamond && getBlock(world, pos.down().west()) == diamond && getBlock(world, pos.down().east()) == diamond && getBlock(world, pos.down().south().west()) == diamond && getBlock(world, pos.down().south()) == diamond && getBlock(world, pos.down().south().east()) == diamond && getBlock(world, pos.north()) == water && getBlock(world, pos.north().east()) == water && getBlock(world, pos.north().west()) == water && getBlock(world, pos.west()) == water && getBlock(world, pos.south()) == water && getBlock(world, pos.south().west()) == water && getBlock(world, pos.south().east()) == water && getBlock(world, pos.east()) == water && getBlock(world, pos.north(2).west()) == gold && getBlock(world, pos.north(2).west(2)) == gold && getBlock(world, pos.north(2)) == gold && getBlock(world, pos.north(2).east()) == gold && getBlock(world, pos.north(2).east(2)) == gold && getBlock(world, pos.east(2).north()) == gold && getBlock(world, pos.east(2)) == gold && getBlock(world, pos.east(2).south()) == gold && getBlock(world, pos.south(2).east()) == gold && getBlock(world, pos.south(2).east(2)) == gold && getBlock(world, pos.south(2)) == gold && getBlock(world, pos.south(2).west()) == gold && getBlock(world, pos.south(2).west(2)) == gold && getBlock(world, pos.west(2).north()) == gold && getBlock(world, pos.west(2)) == gold && getBlock(world, pos.west(2).south()) == gold && getBlock(world, pos.up().north(2).west(2)) == iron && getBlock(world, pos.up().north(2).east(2)) == iron && getBlock(world, pos.up(2).north(2).west(2)) == iron && getBlock(world, pos.up(2).north(2).east(2)) == iron && getBlock(world, pos.up(3).north(2).west(2)) == iron && getBlock(world, pos.up(3).north(2).east(2)) == iron && getBlock(world, pos.up().south(2).west(2)) == iron && getBlock(world, pos.up().south(2).east(2)) == iron && getBlock(world, pos.up(2).south(2).west(2)) == iron && getBlock(world, pos.up(2).south(2).east(2)) == iron && getBlock(world, pos.up(3).south(2).west(2)) == iron && getBlock(world, pos.up(3).south(2).east(2)) == iron && getBlock(world, pos.up(4).north(2).west()) == iron && getBlock(world, pos.up(4).north(2).east()) == iron && getBlock(world, pos.up(5).north(2)) == iron && getBlock(world, pos.up(4).east(2).north()) == iron && getBlock(world, pos.up(4).east(2).south()) == iron && getBlock(world, pos.up(5).east(2)) == iron && getBlock(world, pos.up(4).south(2).west()) == iron && getBlock(world, pos.up(4).south(2).east()) == iron && getBlock(world, pos.up(5).south(2)) == iron && getBlock(world, pos.up(4).west(2).south()) == iron && getBlock(world, pos.up(4).west(2).north()) == iron && getBlock(world, pos.up(5).west(2)) == iron && getBlock(world, pos.up(6).north(2)) == bars && getBlock(world, pos.up(7).north()) == bars && getBlock(world, pos.up(7).north(2)) == bars && getBlock(world, pos.up(6).west(2)) == bars && getBlock(world, pos.up(7).west()) == bars && getBlock(world, pos.up(7).west(2)) == bars && getBlock(world, pos.up(6).south(2)) == bars && getBlock(world, pos.up(7).south()) == bars && getBlock(world, pos.up(7).south(2)) == bars && getBlock(world, pos.up(6).east(2)) == bars && getBlock(world, pos.up(7).east()) == bars && getBlock(world, pos.up(7).east(2)) == bars && getBlock(world, pos.up(8)) == bars && getBlock(world, pos.up(8).north()) == bars && getBlock(world, pos.up(8).west()) == bars && getBlock(world, pos.up(8).south()) == bars && getBlock(world, pos.up(8).east()) == bars && getBlock(world, pos.up(9)) == bars ) { Main.loggger.info("Structure good"); } } } } private Block getBlock(World world, BlockPos pos) { return world.getBlockState(pos).getBlock(); } }
-
Je ne connaît pas la structure mais tu peux essayer de mettre des boucles for et de ne garder juste qu’un boolean donc tu le met à true puis si un Block n’est pas bon tu le met sur false (après peut être que ca ne marchera pas, mais tu pourrais t’inspirer du beacon :winking_face: )
EDIT : tu pourrais carrément break si un Block n’est pas bon comme ça ça continue pas -
Oui mais moi et les boucles (même si je sais que c’est hyper simple) ça va pas trop bien ensemble, si j’arrive à en comprendre une, le temps que j’essaye d’en comprendre une autre j’ai déjà l’ai déjà oublié.
J’ai quand même déjà essayer voir si j’avait compris
if (i = 0; i < 10; i++)
et il n’y à aucun problème à part que c’estfor
mais c’est la seul que je comprends bien sinon les autres behhhh -
Pourtant c’est très simple :upside-down_face:
for (int x = 0; x < 3; x++) for (int y = 0; y < 3; y++) for (int z = 0; z < 3; z++) world.setBlockState (new BlockPos (posX + x, posY + y, posZ + z), Blocks.DIRT);
La ca va te faire un cube de 3x3 de dirt
-
Ouai mais pour ce que je veux faire je ne vois pas comment je peux faire.
Et ton exemple est assez pourrie car il y a juste à faire
world.setBlockState(new BlockPos(posX + 3, posY + 3, posZ + 3), Blocks.DIRT);
et la boucles que tu as faites et celle que je comprends le mieux, mais sinon il y à le while qui se répète jusqu’à que ce qui à en les parenthèses soit vrai (comme un if mais voila) et le
for (Block block : blocks)
je ne sais pas ce qui fais.
Il y en à d’autre ou pas ?Et pour le while je sens que je me suis mal exprimer dans mon explication voir si j’ai compris :
int i = 1 while (i == 2) i++;
donc la il s’execute que une, et pour faire une boucle infinie, il faut utiliser
while (true)
-
Si tu es en 1.15 tu peux essayer de mettre en relation une boucle for avec la classe Direction pour aller plus vite. Sinon tu peux faire une HashMap avec les BlockPos et les BlockState.
-
Mon block n’a pas de direction et le multiblock à les même block au nord sud est et ouest donc j’ai pas besoin de faire de vérification dans la quel il est fait.
-
J’ai testé d’utiliser des boucles for pour ta structure mais le haut est trop complexe à réaliser avec, la base elle est plutôt simple.
-
Mais sinon c’est pas très grave mais merci quand même