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
-
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.
- ta classe RenderResource.java
-
@‘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é - ta classe RenderResource.java
-
UP! Please
-
Essaie de recréer ta propre entité, car les classes de minecraft sont buguées.
-
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 -
-
Je dois passé par quel event du coup?
-
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