Résolu Probleme résolu + explication a bush à XP
-
Le truc c’est que je ne sais pas du tout quoi mettre dedans et je ne trouve aucune doc je cherche depuis pas mal de temps… même mon ancien codeur trouvais pas
-
Je n’ai pas de code près pour toi, désolé mais on va y aller par étape.
Premièrement on va oublier l’histoire de direction, on va faire deux boucles qui parcours les 9 blocs et qui les détruient@Override 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++) { Block b = world.getBlock(i, y, k); int meta = world.getBlockMetadata(i, y, k); if(this.canHarvestBlock(block, stack) && stack.getItemDamage() > 0) { world.setBlockToAir(i, y, k); EntityItem item = new EntityItem(world, i, y, k, new ItemStack(b, 1, meta)); world.spawnEntityInWorld(item); stack.damageItem(i, entity); } } } return true; }
Ce code devrait détruire les blocs dans une zone de 3x3 sur le sol (je l’espère)
-
Et non ça ne fait rien juste comme une pioche de base…
-
Essai d’enlever la condition if(this.canHarvestBlock(block, stack) && stack.getItemDamage() > 0) et si ça marche essai et mettant seulement canHarvest
-
Aucune des 2 solutions que tu me propose ne marche
-
Ce n’est pas normal, ça devrait marcher, mets des System.out.println(“Quelque chose”); un peu partout dans la fonction et vérifies que ça s’affiche dans les consoles, en double à chaque fois (une fois avec [Client thread/INFO] et une autre fois avec [Server thread/INFO], si il y en a qui manquent dis lesquels.
-
Je vais tester de mon côté
-
Par contre la je n’arrive pas a suivre
-
Perso j’ai un problème avec l’EntityItem, je vais régler ça
-
J’ai aucune erreur dans la console et le hammer a le meme comportement qu’une pioche
-
Je sais … OMG
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++) { Block b = world.getBlock(x + i, y, z + k); int meta = world.getBlockMetadata(x + i, y, z + k); if(stack.getItemDamage() > 0) { 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; }
-
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>