Non résolu Dynamite ayant aucun effet
-
Hey, j’ai suivi le tuto sur comment créer une dynamite mais lorsque je la lance rien ne se passe une idée ?
La classe Dynamite:
package com.hypala.hypalacore.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class Dynamite extends Item { public ItemStack onItemRightClick(ItemStack stack ,World world, EntityPlayer player){ world.playSoundAtEntity(player, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if(!world.isRemote){ world.spawnEntityInWorld(new EntityDynamite(world)); } return stack; } }
La classe EntityDynamite :
package com.hypala.hypalacore.common; import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; import io.netty.buffer.ByteBuf; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class EntityDynamite extends EntityThrowable implements IEntityAdditionalSpawnData{ public EntityDynamite(World world, EntityLivingBase thrower){ super(world,thrower); } private int fuseTime = 50; public EntityDynamite(World world){ super(world); } @Override public void onUpdate() { super.onUpdate(); if(fuseTime > 0){ //si fuseTime est supérieur à 0 alors this.fuseTime --; // retire 1 a la variable fuseTime } else if(!this.worldObj.isRemote){ //si le monde n'est pas distant, on est sur le monde serveur uniquement this.worldObj.newExplosion(this, this.posX, this.posY, this.posZ, 7.0F, true, true); //(l'entité que l'on veut utiliser, x, y, z, puissance de l'explosion, si l'explosion met le feux, si l'explosion casse les blocs) this.setDead();//On tue l'entité, on l'enlève } } @Override public void writeSpawnData(ByteBuf buffer) { buffer.writeInt(this.fuseTime); buffer.writeDouble(this.motionX); buffer.writeDouble(this.motionY); buffer.writeDouble(this.motionZ); } @Override public void readSpawnData(ByteBuf additionalData) { this.fuseTime = additionalData.readInt(); this.motionX = additionalData.readDouble(); this.motionY = additionalData.readDouble(); this.motionZ = additionalData.readDouble(); } @Override protected void onImpact(MovingObjectPosition mop){ this.motionX = 0; this.motionY = 0; this.motionZ = 0; } }
Et la classe RenderDynamite :
package com.hypala.hypalacore.common; import com.sun.prism.TextureMap; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; public class renderDynamite extends Render { private Item dynamite; private int renderdynamite; public void doRender(Entity player, double x, double y, double z, float p_76986_8_ , float p_76986_9_){ IIcon icon = this.dynamite.getIconFromDamage(this.renderdynamite); } public void DynamiteRender(Item Dynamite, int RenderDynamite){ this.dynamite = Dynamite; this.renderdynamite = RenderDynamite; } public void DynamiteRender(Item Dynamite){ this.DynamiteRender(Dynamite,0); } @Override protected ResourceLocation getEntityTexture(Entity p_110775_1_) { return null; } }
Merci pour votre aide
-
Yo, as tu compris ce que tu as fait au moins ? car la methode
onImpect
de la class de ton Entity n’est pas rempli correctement, rien dans le code qui est present dans cette methode ne fait allusion a une eventuelle création d’explosion
pour rappel la fonctiononImpact
est appelé lorsque l’entity touche un surface solide.Le rendu a été lui aussi mal programmer, car la methode
doRender
contient seulement une var local qui est inutilisé :public void doRender(Entity player, double x, double y, double z, float p_76986_8_ , float p_76986_9_){ IIcon icon = this.dynamite.getIconFromDamage(this.renderdynamite); }
-
J’ai essayé de rajouter une explosion dans onImpact mais ça fait rien et pour le rendu je vois pas trop comment faire