Scanner les blocks allentour
-
j’y comprend rien –’ pour quoi ils on pas écrit comme tout le monde (en anglais bien sur ) parce que leur func_2656287_8 c’est du charabia incompréhensible
-
if (block instanceof IGrowable) { IGrowable igrowable = (IGrowable)block; if (igrowable.func_149851_a(world, a, b, c, world.isRemote)) { if (!world.isRemote) { if (igrowable.func_149852_a(world, world.rand, a, b, c)) { igrowable.func_149853_b(world, world.rand, a, b, c); } } } }Les func_xxxx c’est parce que les noms de fonctions n’ont pas été traduites.
-
D’accord un grand merci je test sa dessuite
-
c’est possible de faire une pause sans créer un tread ?
-
j’ai un problème je viens de me rendre compte que sa tick pas –’
voila le code :package com.Albanninou.Testmod.Blocks; import java.util.Random; import com.Albanninou.Testmod.CreativeTab; import com.Albanninou.Testmod.Blocks.TileEntity.TileEntityLampOfGrowth; import com.Albanninou.Testmod.Items.DropOfBlood; import com.Albanninou.Testmod.Items.Luminite; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.IGrowable; import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class LampForGrowth extends Block { public static Block LampForGrowth; private int a = 8; protected LampForGrowth(Material material) { super(material); setTickRandomly(true); } public static void Registery() { LampForGrowth = new LampForGrowth(Material.glass).setBlockName("LampForGrowth") .setBlockTextureName("TestMod:LampForGrowth").setCreativeTab(CreativeTab.CreativeTabs).setHardness(3.0f) .setLightLevel(1.0f); GameRegistry.registerBlock(LampForGrowth, "LampForGrowth"); GameRegistry.addRecipe(new ItemStack(LampForGrowth, 1), new Object[] { "AXZ", "XYX", "ZXA", 'X', Luminite.Luminite, 'Y', Items.iron_ingot, 'A', DropOfBlood.DropOfBlood, 'Z', Items.bone }); GameRegistry.addRecipe(new ItemStack(LampForGrowth, 1), new Object[] { "AXZ", "XYX", "ZXA", 'X', Luminite.Luminite, 'Y', Items.iron_ingot, 'Z', DropOfBlood.DropOfBlood, 'A', Items.bone }); } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityLampOfGrowth(world); } @Override public boolean hasTileEntity(int metadata) { return true; } public void updateTick(World world, int x, int y, int z, Random rand) { System.out.println("tick"); Block block; Material Materiaux; if (a == 8) { System.out.println("On rentre dans la boucle"); for (a = x - 4; a != 8; a++) { for (int c = z - 4; c != 8; c++) { block = world.getBlock(a, y, c); Materiaux = block.getMaterial(); if (Materiaux == Material.plants) { // fonction pour faire poussez la plante if (block instanceof IGrowable) { IGrowable igrowable = (IGrowable)block; if (igrowable.func_149851_a(world, a, y, c, world.isRemote)) { if (!world.isRemote) { if (igrowable.func_149852_a(world, world.rand, a, y, c)) { igrowable.func_149853_b(world, world.rand, a, y, c); } } } } } } } } } } -
Pourtant ça devrait, tu as le setTickRandomly(true);
Ajoute
@Override au dessus de updateTick -
je viens d’essailler , vous été d’accord que je devrait avoir écrit tick dans la console a chaque vois que sa tick (désoler pour le jeu de mot). Mais la sa écrit jamais tick pour temps le bloc est poser juste devant moi
-
j’ai attendus plus longtemps , sa tick au bout de 5 min par contre sa fait crash minecraft (les mob bouge plus et impossible de rentrer dans un coffre)
-
Si tu as une tileEntity, utilise la fonction updateEntity de la tileEntity plutôt.
Pour le tick : tu dois avoir une boucle infinie quelque part.
-
c’est a dire pour le tileEntity ?
-
Ré-écris une fonction qui s’appelle updateEntity (plus trop sûr du nom, fait alt + shift + s puis “override/implement methods” pour trouver la bonne). Par contre, ton algorithme n’est pas bon du tout, je te conseille de créer un int qui va s’ajouter à ceux des coordonnées au lieu d’initilaiser ce int à la valeur des coordonnées, exemple :
(tu utilises une valeur dans ton block, ce qui n’est pas à faire)for (a = x - 4; a != 8; a++) { for (int c = z - 4; c != 8; c++) { block = world.getBlock(a, y, c); // patati patata }devient :
for (int i = -4; i <= 8; i++) { block = world.getBlock(x + i, y + j, z + k); // patati patata }çà évite de s’embrouiller.
-
d’accord mais le updateEntity je dois le metre dans quelle class ?
-
TileEntity, je l’ai dit dans les messages précédents.
-
un problème se pose comment je récupère les coordonne de mon bloc du coup . (question con mais je suis pas doué en programmation minecraft)
-
Regardes dans la classe TileEntity, tu as directement les variables contenant les coordonnées (x/y/zCoord il me semble)