Non résolu Probleme hammer 1.12.2
-
Bonjour a tous je viens de creer un hammer pour mon mod minecraft mais le probleme c’est que… Il casse la bedrock. Je ne sais pas comment régler ce probleme c’est pourquoi je fais appelle à vous.
Code :package fr.exatium.examod.exaitems; import fr.exatium.examod.ExaMod; import fr.exatium.examod.exainit.ExaItemsMods; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemPickaxe; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; public class ExateHammer extends ItemPickaxe { public ExateHammer(String name, ToolMaterial material) { super(material); setUnlocalizedName(name); setRegistryName(name); setCreativeTab(ExaMod.tabTools); } public boolean getIsRepairable(ItemStack stack, ItemStack repairItem) { if(stack.getItem().equals(this) && repairItem.getItem() == ExaItemsMods.exate_ingot) return true; return false; } public RayTraceResult rayTrace(double blockReachDistance, float partialTicks, World w, EntityLivingBase e) { Vec3d vec3d = e.getPositionEyes(partialTicks); Vec3d vec3d1 = e.getLook(partialTicks); Vec3d vec3d2 = vec3d.addVector(vec3d1.x * blockReachDistance, vec3d1.y * blockReachDistance, vec3d1.z * blockReachDistance); return w.rayTraceBlocks(vec3d, vec3d2, false, false, true); } public boolean onBlockDestroyed(ItemStack breaker, World w, IBlockState state, BlockPos pos, EntityLivingBase e) { if (e instanceof EntityPlayer && !w.isRemote) { EntityPlayer p = (EntityPlayer) e; RayTraceResult r = this.rayTrace(5.0D, 0.0F, w, e); if (r.typeOfHit == RayTraceResult.Type.BLOCK) { int x = pos.getX(); int y = pos.getY(); int z = pos.getZ(); EnumFacing side = r.sideHit; if (side == EnumFacing.DOWN || side == EnumFacing.UP) { this.destroyAndDropBlock(w, p, breaker, x + 1, y, z - 1); this.destroyAndDropBlock(w, p, breaker, x + 1, y, z); this.destroyAndDropBlock(w, p, breaker, x + 1, y, z + 1); this.destroyAndDropBlock(w, p, breaker, x, y, z - 1); this.destroyAndDropBlock(w, p, breaker, x, y, z + 1); this.destroyAndDropBlock(w, p, breaker, x - 1, y, z - 1); this.destroyAndDropBlock(w, p, breaker, x - 1, y, z); this.destroyAndDropBlock(w, p, breaker, x - 1, y, z + 1); } else if (side == EnumFacing.NORTH || side == EnumFacing.SOUTH) { this.destroyAndDropBlock(w, p, breaker, x + 1, y + 1, z); this.destroyAndDropBlock(w, p, breaker, x, y + 1, z); this.destroyAndDropBlock(w, p, breaker, x - 1, y + 1, z); this.destroyAndDropBlock(w, p, breaker, x + 1, y, z); this.destroyAndDropBlock(w, p, breaker, x - 1, y, z); this.destroyAndDropBlock(w, p, breaker, x + 1, y - 1, z); this.destroyAndDropBlock(w, p, breaker, x, y - 1, z); this.destroyAndDropBlock(w, p, breaker, x - 1, y - 1, z); } else if (side == EnumFacing.EAST || side == EnumFacing.WEST) { this.destroyAndDropBlock(w, p, breaker, x, y + 1, z + 1); this.destroyAndDropBlock(w, p, breaker, x, y + 1, z); this.destroyAndDropBlock(w, p, breaker, x, y + 1, z - 1); this.destroyAndDropBlock(w, p, breaker, x, y, z + 1); this.destroyAndDropBlock(w, p, breaker, x, y, z - 1); this.destroyAndDropBlock(w, p, breaker, x, y - 1, z + 1); this.destroyAndDropBlock(w, p, breaker, x, y - 1, z); this.destroyAndDropBlock(w, p, breaker, x, y - 1, z - 1); } return true; } } return super.onBlockDestroyed(breaker, w, state, pos, e); } private void destroyAndDropBlock(World w, EntityPlayer p, ItemStack breaker, int x, int y, int z) { BlockPos pos = new BlockPos(x, y, z); w.getBlockState(pos).getBlock().harvestBlock(w, p, pos, w.getBlockState(pos), w.getTileEntity(pos), breaker); w.setBlockToAir(pos); } }
Merci D’avance.
-
Bonjour,
J’ai déplacé dans la section support pour les moddeurs, qui est la section appropriée pour le modding. Merci de faire plus attention la prochaine fois.
Dans ta fonction destroyAndDropBlock il faut que tu vérifies que l’hardness du bloc est supérieur ou égal à 0 (les blocs indestructibles ont une valeur négative).
-
En fait même si je vérifie je sais pas comment faire pour qu’il regarde les blocks que je vais casser autour parce que en fait je peux pas casser la bedrock a proprement parler en fait si je casse de la stone et que a coté il y a de la bedrock ca la casse aussi
-
Non mais c’est pas compliqué …
private void destroyAndDropBlock(World w, EntityPlayer p, ItemStack breaker, int x, int y, int z) { BlockPos pos = new BlockPos(x, y, z); if (w.getBlockState(pos).getBlockHardness(w, pos) >= 0) { w.getBlockState(pos).getBlock().harvestBlock(w, p, pos, w.getBlockState(pos), w.getTileEntity(pos), breaker); w.setBlockToAir(pos); } }
-
Le hammer ne marche plus je ne sais pas a quoi c’est du
-
Ajoutes des points d’arrêt et debug ton code.