Résolu Scanner les blocks allentour
-
public void updateTick(World p_149674_1_, int p_149674_2_, int p_149674_3_, int p_149674_4_, Random p_149674_5_){ }
es-que sa équivaut a sa ?
public void updateTick(World world, int x, int y, int z, Random rand){ }
Avec world , x , y , z pour la position de mon bloc ?
-
Ve sont des noms de variables, tu peux mettre tout ce que tu veux. Mais c’est mieux de respecter la convention java.
-
On pourrait même mettre :
public void updateTick(World world, int robinEstUnAdminTresPuissant, int ScarexCodeTresBien, int albanninouAEncoreBesoinDaide, Random rand){
ça serait la même chose.
Bon en général on met plutôt des noms de variable qui vont avec la situation. -
la question est pas si je peut les renommer mais si elle correspond bien a sa (si c’est bien les coordonnés de mon block)
-
Oui c’est ça. En général quand tu as world et 3 int après c’est toujours world, x, y, z
-
et le rand c’est quoi ?
-
Une instance de Random.
-
Du coup j’ai fait sa :
public void updateTick(World world, int x, int y, int z, Random rand){ Block block; Material Materiaux; for(int a = x -4;a!=8;a++){ for(int b = y -4;b!=8;b++){ for(int c = z-4;c!=8;c++){ block = world.getBlock(a,b,c); Materiaux = block.getMaterial(); if(Materiaux == Material.plants){ // fonction pour faire poussez la plante } } } } }
mais je ne trouve pas la méthode pour faire pousser la plante
-
Regarde ce que fait le bonne meal quand on fait un clic droit (ItemDye)
-
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.