Problème Render Entity + Son échelle



  • Salut à tous j'ai deux problèmes.
    1. L'échelle ne fait aucun son lorsque l'on se déplace deçu
    :::

    package qc.maxx.blocks;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.BlockLadder;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.Entity;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.MathHelper;
    import net.minecraft.world.World;
    import cpw.mods.fml.common.registry.GameRegistry;
    
    public class BlockIronLadder extends BlockLadder
    {
    public BlockIronLadder() {
    super();
    setBlockTextureName("EpicOres:iron_ladder");
    setStepSound(Block.soundTypeMetal);
    setCreativeTab(CreativeTabs.tabDecorations);
    setHardness(0.6F);
    setResistance(2.0F);
    }
    
    @Override
    public Material getMaterial() {
    return Material.iron;
    }
    
    @Override
    public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
    if (entity.onGround || entity.isCollidedVertically) {
    return;
    }
    
    if(entity.motionY >= 0.1) {
    entity.setPosition(entity.posX, entity.posY + 0.2F, entity.posZ);
    } else if(entity.motionY <= -0.1) {
    Block blockUnder = entity.worldObj.getBlock(MathHelper.floor_double(entity.posX), MathHelper.floor_double(entity.posY) - 3, MathHelper.floor_double(entity.posZ));
    if (blockUnder == null || blockUnder == this) {
    entity.setPosition(entity.posX, entity.posY - 0.2F, entity.posZ);
    }
    }
    }
    }
    

    :::

    2. J'ai ajouté une dynamite basé sur les anciennes versions du mod Balkon's weapon mais j'ai un problème.
    Lorsque je fais clique droit la dynamite se lance mais affiche comme une flèche, le render ne fonctionne pas.

    :::

    package qc.maxx.items;
    
    import qc.maxx.entity.EntityDynamite;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    
    public class ItemDynamite extends Item
    {
    public ItemDynamite()
    {
    super();
    setTextureName("EpicOres:dynamite");
    setMaxStackSize(64);
    setFull3D();
    setCreativeTab(CreativeTabs.tabCombat);
    }
    
    public int getItemEnchantability()
    {
    return 0;
    }
    
    public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
    {
    if (entityplayer.inventory.consumeInventoryItem(this))
    {
    world.playSoundAtEntity(entityplayer, "game.tnt.primed", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F));
    if (!world.isRemote)
    {
    world.spawnEntityInWorld(new EntityDynamite(world, entityplayer, 40 + itemRand.nextInt(10)));
    }
    }
    return itemstack;
    }
    
    @SideOnly(Side.CLIENT)
    public boolean shouldRotateAroundWhenRendering()
    {
    return true;
    }
    
    @SideOnly(Side.CLIENT)
    public boolean isFull3D()
    {
    return true;
    }
    }
    

    :::

    :::

    package qc.maxx.entity;
    
    import qc.maxx.ores.EpicOres;
    import qc.maxx.other.PhysHelper;
    import qc.maxx.other.WeaponDamageSource;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.util.DamageSource;
    import net.minecraft.util.MathHelper;
    import net.minecraft.util.MovingObjectPosition;
    import net.minecraft.world.World;
    
    public class EntityDynamite extends EntityProjectile
    {
    private int explodefuse;
    private boolean extinguished;
    
    public EntityDynamite(World world)
    {
    super(world);
    setPickupMode(NO_PICKUP);
    extinguished = false;
    explodefuse = rand.nextInt(30) + 20;
    }
    
    public EntityDynamite(World world, double d, double d1, double d2)
    {
    this(world);
    setPosition(d, d1, d2);
    }
    
    public EntityDynamite(World world, EntityLivingBase entityliving, int i)
    {
    this(world);
    shootingEntity = entityliving;
    setLocationAndAngles(entityliving.posX, entityliving.posY + entityliving.getEyeHeight(), entityliving.posZ, entityliving.rotationYaw, entityliving.rotationPitch);
    posX -= MathHelper.cos((rotationYaw / 180F) * 3.141593F) * 0.16F;
    posY -= 0.1D;
    posZ -= MathHelper.sin((rotationYaw / 180F) * 3.141593F) * 0.16F;
    setPosition(posX, posY, posZ);
    motionX = -MathHelper.sin((rotationYaw / 180F) * 3.141593F) * MathHelper.cos((rotationPitch / 180F) * 3.141593F);
    motionZ = MathHelper.cos((rotationYaw / 180F) * 3.141593F) * MathHelper.cos((rotationPitch / 180F) * 3.141593F);
    motionY = -MathHelper.sin((rotationPitch / 180F) * 3.141593F);
    setThrowableHeading(motionX, motionY, motionZ, 0.7F, 4.0F);
    explodefuse = i;
    }
    
    @Override
    protected void entityInit()
    {
    }
    
    @Override
    public void onUpdate()
    {
    super.onUpdate();
    
    if (!inGround && !beenInGround)
    {
    rotationPitch -= 50F;
    } else
    {
    rotationPitch = 180F;
    }
    
    if (isInWater()) if (!extinguished)
    {
    extinguished = true;
    worldObj.playSoundAtEntity(this, "random.fizz", 1.0F, 1.2F / (rand.nextFloat() * 0.2F + 0.9F));
    for (int k = 0; k < 8; k++)
    {
    float f6 = 0.25F;
    worldObj.spawnParticle("explode", posX - motionX * f6, posY - motionY * f6, posZ - motionZ * f6, motionX, motionY, motionZ);
    }
    }
    
    explodefuse–;
    if (!extinguished) if (explodefuse <= 0)
    {
    detonate();
    setDead();
    } else if (explodefuse > 0)
    {
    worldObj.spawnParticle("smoke", posX, posY, posZ, 0.0D, 0.0D, 0.0D);
    }
    }
    
    @Override
    public void onEntityHit(Entity entity)
    {
    DamageSource damagesource = null;
    if (shootingEntity == null)
    {
    damagesource = WeaponDamageSource.causeProjectileWeaponDamage(this, this);
    } else
    {
    damagesource = WeaponDamageSource.causeProjectileWeaponDamage(this, shootingEntity);
    }
    if (entity.attackEntityFrom(damagesource, 1))
    {
    applyEntityHitEffects(entity);
    playHitSound();
    setVelocity(0D, 0D, 0D);
    ticksInAir = 0;
    }
    }
    
    @Override
    public void onGroundHit(MovingObjectPosition mop)
    {
    xTile = mop.blockX;
    yTile = mop.blockY;
    zTile = mop.blockZ;
    inTile = worldObj.getBlock(xTile, yTile, zTile);
    motionX = (float) (mop.hitVec.xCoord - posX);
    motionY = (float) (mop.hitVec.yCoord - posY);
    motionZ = (float) (mop.hitVec.zCoord - posZ);
    float f1 = MathHelper.sqrt_double(motionX * motionX + motionY * motionY + motionZ * motionZ);
    posX -= (motionX / f1) * 0.05D;
    posY -= (motionY / f1) * 0.05D;
    posZ -= (motionZ / f1) * 0.05D;
    
    motionX *= -0.2D;
    motionZ *= -0.2D;
    if (mop.sideHit == 1)
    {
    inGround = true;
    beenInGround = true;
    } else
    {
    inGround = false;
    worldObj.playSoundAtEntity(this, "random.fizz", 1.0F, 1.2F / (rand.nextFloat() * 0.2F + 0.9F));
    }
    
    if (inTile != null)
    {
    inTile.onEntityCollidedWithBlock(worldObj, xTile, yTile, zTile, this);
    }
    }
    
    private void detonate()
    {
    if (worldObj.isRemote) return;
    if (extinguished) if (ticksInGround >= 200 || ticksInAir >= 200)
    {
    setDead();
    }
    float f = 2.0F;
    PhysHelper.createAdvancedExplosion(worldObj, this, posX, posY, posZ, f, true, true);
    }
    
    @Override
    public boolean aimRotation()
    {
    return false;
    }
    
    @Override
    public int getMaxArrowShake()
    {
    return 0;
    }
    
    @Override
    public ItemStack getPickupItem()
    {
    return new ItemStack(EpicOres.ItemDynamite, 1);
    }
    
    @Override
    public float getShadowSize()
    {
    return 0.2F;
    }
    
    @Override
    public void playHitSound()
    {
    worldObj.playSoundAtEntity(this, "random.fizz", 1.0F, 1.2F / (rand.nextFloat() * 0.2F + 0.9F));
    }
    
    @Override
    public void writeEntityToNBT(NBTTagCompound nbttagcompound)
    {
    super.writeEntityToNBT(nbttagcompound);
    nbttagcompound.setByte("fuse", (byte) explodefuse);
    nbttagcompound.setBoolean("off", extinguished);
    }
    
    @Override
    public void readEntityFromNBT(NBTTagCompound nbttagcompound)
    {
    super.readEntityFromNBT(nbttagcompound);
    explodefuse = nbttagcompound.getByte("fuse");
    extinguished = nbttagcompound.getBoolean("off");
    }
    }
    

    :::

    :::

    package qc.maxx.other;
    
    import net.minecraft.client.renderer.Tessellator;
    import net.minecraft.client.renderer.entity.Render;
    import net.minecraft.entity.Entity;
    import net.minecraft.util.MathHelper;
    import net.minecraft.util.ResourceLocation;
    
    import org.lwjgl.opengl.GL11;
    
    import qc.maxx.entity.EntityDynamite;
    
    public class RenderDynamite extends Render
    {
    public void renderDynamite(EntityDynamite entityarrow, double d, double d1, double d2, float f, float f1)
    {
    bindEntityTexture(entityarrow);
    GL11.glPushMatrix();
    GL11.glTranslatef((float) d, (float) d1, (float) d2);
    GL11.glRotatef(entityarrow.rotationYaw + 90F, 0.0F, 1.0F, 0.0F);
    GL11.glRotatef(entityarrow.prevRotationPitch + (entityarrow.rotationPitch - entityarrow.prevRotationPitch) * f1, 0.0F, 0.0F, 1.0F);
    Tessellator tessellator = Tessellator.instance;
    int i = 0;
    float f2 = 0.0F;
    float f3 = 0.5F;
    float f4 = (0 + i * 10) / 32F;
    float f5 = (5 + i * 10) / 32F;
    float f6 = 0.0F;
    float f7 = 0.15625F;
    float f8 = (5 + i * 10) / 32F;
    float f9 = (10 + i * 10) / 32F;
    float f10 = 0.05625F;
    GL11.glEnable(32826 /*GL_RESCALE_NORMAL_EXT*/);
    float f11 = -f1;
    if (f11 > 0.0F)
    {
    float f12 = -MathHelper.sin(f11 * 3F) * f11;
    GL11.glRotatef(f12, 0.0F, 0.0F, 1.0F);
    }
    GL11.glRotatef(45F, 1.0F, 0.0F, 0.0F);
    GL11.glScalef(f10, f10, f10);
    GL11.glTranslatef(-4F, 0.0F, 0.0F);
    GL11.glNormal3f(f10, 0.0F, 0.0F);
    tessellator.startDrawingQuads();
    tessellator.addVertexWithUV(-7D, -2D, -2D, f6, f8);
    tessellator.addVertexWithUV(-7D, -2D, 2D, f7, f8);
    tessellator.addVertexWithUV(-7D, 2D, 2D, f7, f9);
    tessellator.addVertexWithUV(-7D, 2D, -2D, f6, f9);
    tessellator.draw();
    GL11.glNormal3f(-f10, 0.0F, 0.0F);
    tessellator.startDrawingQuads();
    tessellator.addVertexWithUV(-7D, 2D, -2D, f6, f8);
    tessellator.addVertexWithUV(-7D, 2D, 2D, f7, f8);
    tessellator.addVertexWithUV(-7D, -2D, 2D, f7, f9);
    tessellator.addVertexWithUV(-7D, -2D, -2D, f6, f9);
    tessellator.draw();
    for (int j = 0; j < 4; j++)
    {
    GL11.glRotatef(90F, 1.0F, 0.0F, 0.0F);
    GL11.glNormal3f(0.0F, 0.0F, f10);
    tessellator.startDrawingQuads();
    tessellator.addVertexWithUV(-8D, -2D, 0.0D, f2, f4);
    tessellator.addVertexWithUV(8D, -2D, 0.0D, f3, f4);
    tessellator.addVertexWithUV(8D, 2D, 0.0D, f3, f5);
    tessellator.addVertexWithUV(-8D, 2D, 0.0D, f2, f5);
    tessellator.draw();
    }
    
    GL11.glDisable(32826 /*GL_RESCALE_NORMAL_EXT*/);
    GL11.glPopMatrix();
    }
    
    public float pitch = 40F;
    
    @Override
    public void doRender(Entity entity, double d, double d1, double d2, float f, float f1)
    {
    renderDynamite((EntityDynamite) entity, d, d1, d2, f, f1);
    }
    
    @Override
    protected ResourceLocation getEntityTexture(Entity entity)
    {
    return RenderResource.Textures.DYNAMITE;
    }
    }
    

    :::

    :::

    package qc.maxx.other;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.util.ResourceLocation;
    
    @SideOnly(Side.CLIENT)
    public abstract class RenderResource
    {
    public static abstract class Textures
    {
    public static final ResourceLocation DYNAMITE = new ResourceLocation("epicores", "textures/entity/dynamite.png");
    }
    }
    

    :::

    :::

    package qc.maxx.ores;
    
    import qc.maxx.other.MsgExplosion;
    import qc.maxx.other.WMMessagePipeline;
    import net.minecraftforge.common.MinecraftForge;
    
    public class CommonProxy
    {
    public void registerRender()
    {
    }
    }
    

    :::

    :::

    package qc.maxx.ores;
    
    import net.minecraftforge.common.MinecraftForge;
    import qc.maxx.entity.EntityDynamite;
    import qc.maxx.other.RenderDynamite;
    import qc.maxx.other.WMMessagePipeline;
    import cpw.mods.fml.client.registry.RenderingRegistry;
    import cpw.mods.fml.common.FMLCommonHandler;
    import cpw.mods.fml.relauncher.Side;
    
    public class ClientProxy extends CommonProxy
    {
     @Override
     public void registerRender()
     {
       RenderingRegistry.registerEntityRenderingHandler(EntityDynamite.class, new RenderDynamite());
     }
    }
    

    :::

    :::

    package qc.maxx.ores;
    
    import java.io.File;
    import java.util.Random;
    import java.util.logging.Level;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.Item.ToolMaterial;
    import net.minecraft.item.ItemArmor.ArmorMaterial;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import qc.maxx.other.WMMessagePipeline;
    import qc.maxx.items.*;
    
    @cpw.mods.fml.common.Mod(modid="EpicOres", name="EpicOres", version="1.0")
    public class EpicOres
    {
    @Instance("EpicOres")
    public static EpicOres instance;
    public WMMessagePipeline messagePipeline;
    
    public EpicOres()
    {
    messagePipeline = new WMMessagePipeline();
    }
    
    @cpw.mods.fml.common.SidedProxy(clientSide="qc.maxx.ores.ClientProxy", serverSide="qc.maxx.ores.CommonProxy")
    public static CommonProxy proxy;
    public static String MODID = "EpicOres";
    public static String VERSION = "1.0";
    public static final Logger logger = LogManager.getLogger("EpicOres");
    public static boolean debug_enableConsole = false;
    public static boolean debug_enableChat = false;
    
    public static Item ItemDynamite;
    
      @EventHandler
      public void PreInit(FMLPreInitializationEvent event)
      {
    ItemDynamite = new ItemDynamite().setUnlocalizedName("ItemDynamite");
    GameRegistry.registerItem(ItemDynamite, ItemDynamite.getUnlocalizedName());
    
    messagePipeline.initalize();
      }
    
      @EventHandler
      public void Init(FMLInitializationEvent event)
      {
      proxy.registerRender();
      OreGeneration eventmanager = new OreGeneration();
         proxy.registerRender();
    
         GameRegistry.registerWorldGenerator(eventmanager, 1);
      }
    
      @EventHandler
      public void PostInit(FMLPostInitializationEvent event)
      {
      messagePipeline.postInitialize();
      OreGeneration eventmanager = new OreGeneration();
      }
    }
    

    :::

    Merci à tous ceux qui pourront m'aider et ceux qui ont prit le temps de lire 🙂


  • Administrateurs

    EntityDynamite n'est pas enregistré.

    return RenderResource.Textures.DYNAMITE;

    • ta classe RenderResource.java
      WHAT !?! je ne vois pas du tout l'intérêt.

    Tu dois utiliser le même rendu que la boule de neige si tu veux rendre un item. Ce n'est pas du tout comme ça qu'il faut faire.

    Pour le son de l'échèle il faut trouver où est joué celui de Minecraft.



  • @'robin4002':

    EntityDynamite n'est pas enregistré.

    return RenderResource.Textures.DYNAMITE;

    • ta classe RenderResource.java
      WHAT !?! je ne vois pas du tout l'intérêt.

    Tu dois utiliser le même rendu que la boule de neige si tu veux rendre un item. Ce n'est pas du tout comme ça qu'il faut faire.

    Pour le son de l'échèle il faut trouver où est joué celui de Minecraft.

    J'ai supprimé la classe RenderResource 😛
    J'ai enregistré l'entity dynamite dans le preinit: EntityRegistry.registerModEntity(EntityDynamite.class, "dynamite", 7, this, 64, 3, true);
    Cependant, quand je lance une dynamite elle s'affiche bien, mais parfois elle disparaît un peu avant d'exploser ce qui est embêtant.
    J'ai essayé de trouver où est jouer le son de l'échelle mais j'ai pas encore trouvé



  • UP! Please 😞



  • Essaie de recréer ta propre entité, car les classes de minecraft sont buguées.


  • Administrateurs

    Code après modif ?
    à mon avis pour le son c'est joué directement dans entity player. Donc faudrait passer par un event (de tick par exemple).



  • @'SCAREX':

    Essaie de recréer ta propre entité, car les classes de minecraft sont buguées.

    J'ai réglé le problème 🙂

    @'robin4002':

    Code après modif ?
    à mon avis pour le son c'est joué directement dans entity player. Donc faudrait passer par un event (de tick par exemple).

    Pourrais-tu me dire comment faire?
    Je n'ai jamais utilisé les event


  • Correcteurs



  • Je dois passé par quel event du coup?


  • Administrateurs

    TickEvent.PlayerTickEvent je pense.
    Il faudrait vérifier qu'au coordonnée du joueur il y a une échelle, si oui jouer le son. Si le son est lancé en boucle faut faire un timer.

    ÉDIT : je viens de faire aussi des recherches sur tous le projet Minecraft, impossible de trouver où le son de l'échelle est joué o_O
    La recherche de "step.ladder" me renvoie 0 résultat !?!



  • @'robin4002':

    TickEvent.PlayerTickEvent je pense.
    Il faudrait vérifier qu'au coordonnée du joueur il y a une échelle, si oui jouer le son. Si le son est lancé en boucle faut faire un timer.

    ÉDIT : je viens de faire aussi des recherches sur tous le projet Minecraft, impossible de trouver où le son de l'échelle est joué o_O
    La recherche de "step.ladder" me renvoie 0 résultat !?!

    Je sais, idem pour moi.
    Du coup je vais laisser tomber le son, c'est trop compliqué et je ne veux pas que ça cause de lag