Problème onBlockDestroyed
-
J’ai supposé que ce que tu voulais faire c’était créer une hache qui détruit tous les blocs autour du bloc détruit, voici ce à quoi je suis arrivé :
public class SuperAxe extends ItemAxe { private static final String name = "superAxe"; protected SuperAxe() { super(ToolMaterial.EMERALD); GameRegistry.registerItem(this, name); setUnlocalizedName(ST18.MODID + "_" + name); setCreativeTab(CreativeTabs.tabTools); } public static String getName() { return name; } @Override public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, BlockPos pos, EntityLivingBase playerIn) { if (!worldIn.isRemote && playerIn instanceof EntityPlayer) { worldIn.destroyBlock(pos, true); destroyNearWood(worldIn, pos, stack, playerIn, stack.getMaxDamage() - stack.getItemDamage()); stack.damageItem(1, playerIn); if (stack.stackSize <= 0 || stack.getItemDamage() >= stack.getMaxDamage()) ((EntityPlayer) playerIn).destroyCurrentEquippedItem(); } return true; } public int destroyNearWood(World world, BlockPos pos, ItemStack stack, EntityLivingBase player, int maxBlocks) { if (world.getBlockState(pos.up()).getBlock().isWood(world, pos.up())) { if (–maxBlocks > 0) { world.destroyBlock(pos.up(), true); stack.damageItem(1, player); maxBlocks = destroyNearWood(world, pos.up(), stack, player, maxBlocks); } } if (world.getBlockState(pos.down()).getBlock().isWood(world, pos.down())) { if (--maxBlocks > 0) { world.destroyBlock(pos.down(), true); stack.damageItem(1, player); maxBlocks = destroyNearWood(world, pos.down(), stack, player, maxBlocks); } } if (world.getBlockState(pos.east()).getBlock().isWood(world, pos.east())) { if (--maxBlocks > 0) { world.destroyBlock(pos.east(), true); stack.damageItem(1, player); maxBlocks = destroyNearWood(world, pos.east(), stack, player, maxBlocks); } } if (world.getBlockState(pos.west()).getBlock().isWood(world, pos.west())) { if (--maxBlocks > 0) { world.destroyBlock(pos.west(), true); stack.damageItem(1, player); maxBlocks = destroyNearWood(world, pos.west(), stack, player, maxBlocks); } } if (world.getBlockState(pos.north()).getBlock().isWood(world, pos.north())) { if (--maxBlocks > 0) { world.destroyBlock(pos.north(), true); stack.damageItem(1, player); maxBlocks = destroyNearWood(world, pos.north(), stack, player, maxBlocks); } } if (world.getBlockState(pos.south()).getBlock().isWood(world, pos.south())) { if (--maxBlocks > 0) { world.destroyBlock(pos.south(), true); stack.damageItem(1, player); maxBlocks = destroyNearWood(world, pos.south(), stack, player, maxBlocks); } } return maxBlocks; } }NOTE : ce code est pour la 1.8 mais si tu es en 1.7 tu pourras tout de même l’utiliser en changeant quelques valeus.
-
Merci, tu supposais bien c’était mon intention
Sinon l’équivalent de BlockPos en 1.7.10 est x,y,z mais je vois pas trop comment faire pour adapter ton code . Surtout les fonctions pos.south() etc… A moins que pos.up() ) soit égale à y+1 , pos.down() à y -1 mais alors je vois pas se que peut représenter pos.north() et pos.south(). Bref si tu as une idée donne la moi sinon je mettrais mon mod à jour. Et encore merci pour le code. -
up -> y + 1
down -> y - 1
south -> x + 1
north -> x - 1
est -> z + 1
west -> z - 1
(de tête, pas sûr). -
J’ai essayé le code de Robin4002 mais j’ai une erreur sur
this.dropBlockAsItem(world, x, y - 1, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));Eclipse me dis que dropBlockAsItem est indéfinie pour ma classe.
Et Eclipse ne trouve pas non plus player icithis.cutWood(world, x, y, z, player.inventory.getCurrentItem(), player); -
private void dropBlockAsItem(World world, int x, int y, int z, ItemStack stack) { if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops")) { float f = 0.7F; double d0 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D; double d1 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D; double d2 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D; EntityItem entityitem = new EntityItem(world, x + d0, y + d1, z + d2, stack); entityitem.delayBeforeCanPickup = 10; world.spawnEntityInWorld(entityitem); } }Il manquant cette fonction.
-
Merci mais j’ai toujours le problème du player. En gros il me le trouve pas et me propose de créer une variable.
-
Ajoutes cette variable dans ta méthode
EntityPlayer entityplayer = (EntityPlayer)player; -
J’ai une erreur sur le cast : (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.
-
@‘20cents34’:
Merci, tu supposais bien c’était mon intention
Sinon l’équivalent de BlockPos en 1.7.10 est x,y,z mais je vois pas trop comment faire pour adapter ton code . Surtout les fonctions pos.south() etc… A moins que pos.up() ) soit égale à y+1 , pos.down() à y -1 mais alors je vois pas se que peut représenter pos.north() et pos.south(). Bref si tu as une idée donne la moi sinon je mettrais mon mod à jour. Et encore merci pour le code.BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.
-
Euh non eclipse le trouve nul part et je suis en 1.7.10
-
@‘20cents34’:
J’ai une erreur sur le cast : (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.
C’est de ma faute, j’ai édité mon message, maintenant ça devrait être bon.
@‘SCAREX’:
BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.
Non, elle n’existe pas en 1.7.10
-
@‘robin4002’:
@‘20cents34’:
J’ai une erreur sur le cast : (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.
C’est de ma faute, j’ai édité mon message, maintenant ça devrait être bon.
@‘SCAREX’:
BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.
Non, elle n’existe pas en 1.7.10
Effectivement mais le principe est le même que ce que robin disait, tu fait x + 1 (east) puis x - 1 (west) puis z + 1 (south) puis z - 1 (north) puis y + 1 (up) (puis y - 1 (down) si tu veux aller vers le bas)
Je peux vite fait adapter le code si tu veux pour la 1.7 ?
-
Merci a tous et surtout à robin4002 ça marche parfaitement maintenant

Ça ira merci SCAREX j’utiliserai ton code quand je passerai en 1.8.