Problème Setblockstate
-
Re ,
ça ne met pas d’erreur mais ça cha
-
Re ,
Ça met pas d’erreur mais ça ne corrige pas le problème

Cordialement ,
Jeremy60800
-
Je ne vois pas pourquoi la fonction n’est pas appelé alors

-
Et ça donne quoi dans la console, tu reçois bien tes messages ?
Change tes différents println, afin qu’on puisse mieux se repérer, car tu as le même avant et après la condition. Change le 0.9 en un entier, on compare ici des integer et non des floats ou double. -
Re ,
Non rien dans la console , là est le problème

Cordialement ,
Jeremy60800
-
Tu as attendu combien de temps ?
Car la fonction updateTick n’est appelé très fréquemment.
Tu peux changer la fréquence avec la fonction int tickRate() -
Re ,
A oui en effet en attendant plus ça s’exécute .
Toutefois , le tick rate c’est plus le return est élevée , plus la fréquence est haute ?
Cordialement ,
Jeremy60800
-
L’inverse si mes souvenirs sont bon.
-
Re ,
Alors que je le mette à 1 ou 500 , ça change rien

public class DofusCraftOakLogRegenerator extends Block { public DofusCraftOakLogRegenerator(Material materialIn) { super(materialIn); this.requiresUpdates(); this.tickRate(); } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean isFullCube() { return true; } public boolean isOpaqueCube() { return false; } int tickRate() { return 1; } @Override public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) { System.out.println("Execution condition"); int numlog = 0; BlockPos pos1 = pos; for (int i = 1 ; i < 7 ; i++) { BlockPos posreplace = pos1.up(i); if (worldIn.getBlockState(posreplace).getBlock() == Blocks.air) { numlog++; } else if(worldIn.getBlockState(posreplace).getBlock() == Blocks.leaves) { numlog++; break; } } for (int i = 1 ; i < numlog ; i++) { BlockPos posreplace = pos1.up(i); if(worldIn.getBlockState(posreplace).getBlock() == Blocks.air) { worldIn.setBlockState(posreplace, BlockMod.natural_oak_log.getDefaultState(), 0); worldIn.notifyNeighborsOfStateChange(posreplace, Blocks.air); } if(i == numlog) { break; } } } }Cordialement ,
Jeremy60800
-
La fonction exacte c’est ça :
public int tickRate(World worldIn) { return 10; }(10 est la valeur par défaut).
-
Re ,
Si je veux éxécuter tout les ticks je fait comment ?
J’ai l’impression que ça change rien toujours en plus
Autre chose : le setblock state fonctionne mais il faudrais update les blocks car sinon il sont invisible : possible ?
Code actuelle (j’ai fait pas mal de modif peut-être qu’il y a un souci …)
public class DofusCraftOakLogRegenerator extends Block { public DofusCraftOakLogRegenerator(Material materialIn) { super(materialIn); } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean isFullCube() { return true; } public boolean isOpaqueCube() { return false; } public int tickRate(World worldIn) { return 0; } @Override public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand) { System.out.println("Execution condition"); int numlog = 0; BlockPos pos1 = pos; for (int i = 1 ; i < 7 ; i++) { BlockPos posreplace = pos1.up(i); if (worldIn.getBlockState(posreplace).getBlock() == Blocks.air) { numlog++; } else if(worldIn.getBlockState(posreplace).getBlock() == Blocks.leaves) { numlog++; break; } } for (int i = 1 ; i < numlog ; i++) { BlockPos posreplace = pos1.up(i); if(worldIn.getBlockState(posreplace).getBlock() == Blocks.air) { worldIn.setBlockState(posreplace, BlockMod.natural_oak_log.getDefaultState(), 0); worldIn.notifyNeighborsOfStateChange(posreplace, Blocks.air); } if(i == numlog) { break; } } } }Cordialement ,
Jeremy60800
-
worldIn.setBlockState(posreplace, BlockMod.natural_oak_log.getDefaultState(), 3);
au lieu de
worldIn.setBlockState(posreplace, BlockMod.natural_oak_log.getDefaultState(), 0);
(le flag 3 fait une mise à jour alors que le 0 non).Pour la fréquence de tick je ne crois pas que c’est possible de le mettre à tous les ticks. Cette fonction n’est pas pensé pour ça à la base (elle est pensé pour avoir un appel de temps en temps, pour faire pousser les plantes principalement).
Si tu as vraiment besoin d’update à chaque tick il faut un tile entity. -
Re ,
Pour le tickrate j’ai pas nécessairement besoin tout les ticks , c’était pour tester , vu que l’arbre doit pousser au bout d’un temps relativement long

Sinon pour l’update des blocks posé : parfait
Je passe ce sujet en résolu , merci pour votre aide !
Cordialement ,
Jeremy60800