Item lanceur de projectile
-
Ha, cette fonction n’est que exécuté quand tu fais un clic gauche sur une entités, j’ai mal lu la doc :
“Called when the player Left Clicks (attacks) an entity.”
Et il n’y a pas de paramètre World.
Il n’y a pas d’autre fonction en rapport avec le clic gauche
Le !world.isremote, dans toute la fonction, donc comme ça :public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if(!world.isRemote) { if(player.capabilities.isCreativeMode || player.inventory.hasItem(Laser_Mod.Laser.itemID)) { if(shootTimer == 0) { world.spawnEntityInWorld(new EntityLaser(world, player, 4.0F)); shootTimer = 15; for(int slotID = 0; slotID < player.inventory.getSizeInventory(); slotID++) { ItemStack ammo = player.inventory.getStackInSlot(slotID); if(ammo.itemID == Mod.Munition.itemID) { ammo.damageItem(1, player); break; } } } } } return stack; }Je peux voir la classe de ton rendu ?
Pour la boucle for, tu as la réponse dans le code au dessus.
-
J’ai fail -- j’ai pas changer tous les noms xD__
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public abstract class RenderLaser extends Render { private float size; public RenderLaser(float size) { this.size = size; } @Override public void doRender(Entity entity, double d0, double d1, double d2, float f, float f1) { this.doRenderLaser((EntityLaser)entity, d0, d1, d2, f, f1); } private void doRenderLaser(EntityLaser entity, double d0, double d1, double d2, float f, float f1) { GL11.glPushMatrix(); GL11.glTranslatef((float)d0, (float)d1, (float)d2); GL11.glEnable(GL12.GL_RESCALE_NORMAL); float var10 = this.size; GL11.glScalef(var10 / 1.0F, var10 / 1.0F, var10 / 1.0F); byte var11 = 0; this.loadTexture("laser_mod", "textures/entity/Laser.png"); Tessellator var12 = Tessellator.instance; float var13 = (float)(var11 % 16 * 16 + 0) / 16.0F; float var14 = (float)(var11 % 16 * 16 + 16) / 16.0F; float var15 = (float)(var11 / 16 * 16 + 0) / 16.0F; float var16 = (float)(var11 / 16 * 16 + 16) / 16.0F; float var17 = 1.0F; float var18 = 0.5F; float var19 = 0.25F; GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); var12.startDrawingQuads(); var12.setNormal(0.0F, 1.0F, 0.0F); var12.addVertexWithUV((double)(0.0F - var18), (double)(0.0F - var19), 0.0D, (double)var13, (double)var16); var12.addVertexWithUV((double)(var17 - var18), (double)(0.0F - var19), 0.0D, (double)var14, (double)var16); var12.addVertexWithUV((double)(var17 - var18), (double)(1.0F - var19), 0.0D, (double)var14, (double)var15); var12.addVertexWithUV((double)(0.0F - var18), (double)(1.0F - var19), 0.0D, (double)var13, (double)var15); var12.draw(); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } private void loadTexture(String string, String string2) { } }Voilà pour la classe de mon rendu…
-
abstract
Pas normal, ta classe ne devrait pas être abstraite. -
Si ça t’intéresse j’ai utilisé ce tuto (yen a pas 250 des comme ça) : Créer un projectile___
J’ai enlevé le abstract, add les methods implements (traducteur de fou :D) et ça ma rajouté en bas un@Override protected ResourceLocation getEntityTexture(Entity entity) { return null; }Et maintenant la ligne RenderingRegistry.registerEntityRenderingHandler(EntityLaser.class, new RenderLaser(0.5F)); n’a pas d’erreur.
-
Pour ton problème de clic gauche, voici (une partie de) la solution:
public boolean onEntitySwing(EntityLivingBase e, ItemStack s) { if(e instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer)e; boolean flag = false; if(player.capabilities.isCreativeMode) { flag = true; } else { flag = player.inventory.consumeInventoryItem(ModHL2.modInstance.magnumAmmo.itemID); } if(flag) { EntityBullet bullet = new EntityBullet(e.worldObj, e, false, "magnum", 15, 64); if(!e.worldObj.isRemote) e.worldObj.spawnEntityInWorld(bullet); e.worldObj.playSoundAtEntity(e, "hl2:magnum_fire", 0.5f, 1); } else e.worldObj.playSoundAtEntity(e, "hl2:weapon_empty", 0.5f, 1); } return true; }Cette méthode consiste ainsi:
Dès qu’une entitée “balance son bras” avec l’objet (clic gauche pour le joueur), on vérifie si c’est un joueur, si oui on tire, sinon, on fait rien
(et je te laisse les sons + vérification des munitions au cas où tu en aurais besoin) -
Ok merci

-
Faut que tu return sur ta texture :
@Override protected ResourceLocation getEntityTexture(Entity entity) { return texture; }Et en haut de ta classe :
public static ResourceLocation texture = new ResourceLocation("laser_mod", "textures/entity/Laser.png");Et tu peux supprimer la méthode loadTexture que ne fonctionnera pas de toute façon.
-
Ok ! J’essaie tout ça !___
Et merci d’avoir validé mon tuto :D___
Dis-moi xavpok stp à quoi correspondent les valeurs “15” et “64” ? -
Les valeurs 15 et 64 de EntityBullet ?
Laisse tomber, c’est juste pour mon code, je suis trop flemmard pour faire des EntityBullet pour chaque arme x) -
A ok… (flemmard :D)
-
Vive la 1.7 !!!
(Oui, c’était ironique…)