Probleme résolu + explication a bush à XP
-
Je vais essayer en tout cas merci les gars

EDIT : Marche toujours pas
-
Fait ça ```java
public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase entity) {for(int i = -1; i <= 1; i++) {
for(int k = -1; k <= 1; k++) {
System.out.println(Math.addExact(x, i) + " " + y + " " + Math.addExact(z, k));
Block b = world.getBlock(x + i, y, z + k);
int meta = world.getBlockMetadata(x + i, y, z + k);
System.out.println(stack.getItemDamage());
if(stack.getItemDamage() > 0) {
System.out.println("Breaking " + b.getLocalizedName());
world.setBlockToAir(x + i, y, z + k);
EntityItem item = new EntityItem(world, x + i, y, z + k, new ItemStack(b, 1, meta));
world.spawnEntityInWorld(item);
stack.damageItem(i, entity);
}
}
}
return true;
} -
Tien voila :
[17:25:34] [Server thread/INFO]: Player443 has just earned the achievement [Taking Inventory] [17:25:34] [Client thread/INFO]: [CHAT] Player443 has just earned the achievement [Taking Inventory] [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -275 74 359 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -275 74 360 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -275 74 361 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -274 74 359 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -274 74 360 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -274 74 361 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -273 74 359 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -273 74 360 0 [17:25:40] [Client thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -273 74 361 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -275 74 359 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -275 74 360 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -275 74 361 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -274 74 359 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -274 74 360 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -274 74 361 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -273 74 359 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -273 74 360 0 [17:25:40] [Server thread/INFO] [STDOUT]: [fr.xperiaonline.xperiamod.common.ItemXperiteHammer:onBlockDestroyed:25]: -273 74 361 0 -
Remplace ```java
if(stack.getItemDamage() > 0)Par ```java if(!stack.getItemDamage() > stack.getMaxDamage()) -
Sa marche ! mais pas de direction lol sa mine de façon horizontale

-
Oui je sais, 2 sec
-
C’est ce que fait le code que BrokenSwing t’a donné, tu veux miner dans quelles directions ?
-
désolé

-
Peut toujours être amélioré, j’ai ajouté des trucs et changé d’autres pour être + cohérent
@Override public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int x, int y, int z, EntityLivingBase entity) { if(!world.isRemote) { for(int i = -1; i <= 1; i++) { for(int k = -1; k <= 1; k++) { for(int l = -1; l <= 1; l++) { int blockX = x + i; int blockY = y + l; int blockZ = z + k; Vec3 look = entity.getLookVec(); double direction = Math.max(Math.max(Math.abs(look.xCoord), Math.abs(look.yCoord)), Math.abs(look.zCoord)); if(direction == Math.abs(look.xCoord)) { blockX = x; } else if(direction == Math.abs(look.yCoord)) { blockY = y; } else { blockZ = z; } Block blockBreakingIn = world.getBlock(blockX, blockY, blockZ); int meta = world.getBlockMetadata(blockX, blockY, blockZ); if(!(stack.getItemDamage() > stack.getMaxDamage())) { List <itemstack>drops = blockBreakingIn.getDrops(world, blockX, blockY, blockZ, meta, 0); int exp = blockBreakingIn.getExpDrop(world, meta, 0); world.setBlockToAir(blockX, blockY, blockZ); for(int j = 0; j < drops.size(); j++) { EntityItem item = new EntityItem(world, blockX, blockY, blockZ, drops.get(j)); world.spawnEntityInWorld(item); } if(exp > 0) { EntityXPOrb expOrb = new EntityXPOrb(world, blockX, blockY, blockZ, exp); world.spawnEntityInWorld(expOrb); } stack.damageItem(i, entity); } } } } } return true; } ```</itemstack> -
Super ! Merci beaucoup ! Comment je peux te remercier ?
-
+2 ? ^^
EDIT : Mais comme je l’ai dit tu peux améliorer le code surtout au niveau des directions -
Bah je ne le peux pas xD j’ai aucune connaissance en java
Bon … j’ai reussi a faire
-Minerais (5 en tout) + la generation dans l’overworld
-les lingot
-les bloc de lingot
-les armures
-les armes et outils
-et tout les craft qui en découlent ! -
Pas mal pour quelqu’un qui n’a “aucune” connaissance en java
-
bah j’ai suivie des tuto p’y c’est de la logique en faite donc plutot facile je devrais apprendre pck rien qu’a faire ça je me suis eclater xD
Sinon pour faire un bush genre (Oreberry bush de TC)
C’est un block avec des meta datas qui arriver a un certain stade laisse la posibilité de clic droit ? -
C’est ça en gros
-
oki je suis en train de regarder le tuto de robin

Mais j’aurais surment besoin d’aide pour laisser l’acces au clic droit + l’action -
ça y est je viens de fini j’ai mon block avec mes 4 metadata !
Maintenant je doit faire quoi pour lui dire que tout les “X” tick le block change de metadata ?
Et ensuite pour lui dire que a la 4 eme metadata on peux faire un clic droit dessus( ET PAS AVANT !) pour recuperer un item ?
Et ensuite dire au block de repartir a la metadata numero 1 ?Merci de votre aides !
-
Malheureusement les blocks ne sont pas tickés, ils peuvent seulement êtres tickés de façon aléatoire, donc tu as 2 options :
- faire ticker ton block de façon aléatoire
- lui ajouter une TileEntity qui elle peut être tickée
-
Si je le fait ticker de façon aléatoire le lapse de temps est compris entre combien de tick ? y’a forcement une valeur butée je me trompe ?
-
Alors en fait c’est plus compliqué (j’avais oublié) : je crois que tu dois indiqué dans ton constructeur que ton block doit être tické de façon aléatoire, ensuite tu dois ré-écrire les fonctions tickRate qui indique le nombre de ticks entre chaque mise à jour et updateTick qui sera appelée lors de la mise à jour, mais tu dois aussi rajouter dans la fonction updateTick la fonction World.scheduleBlockUpdate(x, y, z, block, tickRate) pour mettre à jour ton block dans le futur (de façon non-aléatoire)