Résolu Player + Armure invisible
-
Bonjour ! Encore moi. Voilà, j’ai ajouté une fonction à mon armure pour que quand on sneak on devient invisible.
Cependant si on est invisible et que l’on voit notre armure, ce n’est pas très utile Donc je voudrais savoir si c’était possible de rendre l’armure également invisible !Class de l’armure :
:::
package com.heartshadow.mod.armors; import com.heartshadow.mod.HSMOD; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class ItemProtoArmor extends ItemArmor { public ItemProtoArmor(ArmorMaterial material_, int type) { super(material_, 0, type); } public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(slot == 2) { return HSMOD.MODID + ":textures/models/armor/proto_layer_2.png"; } return HSMOD.MODID + ":textures/models/armor/proto_layer_1.png"; } public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == HSMOD.protoIngot) { return true; } return false; } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { player.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), 1200, 3)); if(this.armorType == 0 && world.getBlockLightValue(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)) < 8) { player.addPotionEffect(new PotionEffect(Potion.nightVision.getId(), 1200, 0)); } if(this.armorType == 2 && player.isSprinting() && player.onGround) { player.motionX *= 1.2F; player.motionZ *= 1.2F; } if(this.armorType == 3 && player.isSneaking() && player.onGround) { player.addPotionEffect(new PotionEffect(Potion.invisibility.getId(), 200, 0)); } } }
:::
Voilà merci
-
Regarde du côté de l’événement RenderPlayerEvent.SetArmorModel
-
Dans la fonction
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
tu as l’entité en paramètre.
Il tu suffit de vérifier que entity instanceof EntityLivingBase et depuis EntityLivingBase tu peux savoir si une entité a un effet de potion
((EntityLivingBase)entity).hasPotionEffect(Potion.nightVision.getId()) il me semble) et si c’est le cas tu renvois sur une texture qui n’est que composé d’une couche alpha. -
Okay … Je vais regarder puis-je vous proposez ma class si je n’y arrive pas ?
-
@‘VhakeFX’:
puis-je vous proposez ma class si je n’y arrive pas ?
Comment ça ? J’ai pas compris.
-
Je suis vraiment pas doué avec ce que tu as dit donc j’aimerais une petite précision, pas le code entier.
Ps: je débute désolé ;/
-
Tu regardes si le joueur a la potion d’invisibilité et si c’est le cas, tu retournes un fichier vide (le fichier doit exister mais doit être vide).
-
Je suis vraiment désolé, mais j’y arrive pas x( Se met en position fœtale sur sa chaise Ne me tapez pas s’il vous plait
-
Qu’est-ce que tu ne comprends pas ?
-
public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(entity instanceof EntityLivingBase && ((EntityLivingBase)entity).hasPotionEffect(Potion.nightVision.getId()) { return HSMOD.MODID + ":textures/models/armor/proto_invisible.png"; } if(slot == 2) { return HSMOD.MODID + ":textures/models/armor/proto_layer_2.png"; } return HSMOD.MODID + ":textures/models/armor/proto_layer_1.png"; }
Ensuite dans le dossier armor tu ajoutes un fichier nommé proto_invisible.png qui fait la même taille que proto_layer_1 et proto_layer_2 (64 en largeur, 32 en hauteur de mémoire, je ne suis pas sûr) entièrement transparent.
-
J’étais sur la bonne voie mais j’ai pas fusionné entity instanceof et le reste x/*
EDIT : J’ai une erreur sur hasPotionEffect :
-
Bonsoir, je me permet de up !
PS : Désolé si c’est double post, mais je ne savais pas si j’éditer mon message précédent ça marcherait
-
Essaie de le cast à EntityPlayer.
-
Il me semblait que cette fonction était dans EntityLivingBase.
Mais visiblement non.
Du-coup fait comme ça :
if(entity instanceof EntityPlayer && ((EntityPlayer )entity).hasPotionEffect(Potion.nightVision.getId()) -
Non toujours la même erreur.
Voici la class :
package com.heartshadow.mod.armors; import com.heartshadow.mod.HSMOD; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class ItemProtoArmor extends ItemArmor { public ItemProtoArmor(ArmorMaterial material_, int type) { super(material_, 0, type); } public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { if(entity instanceof EntityPlayer && ((EntityPlayer)entity).hasPotionEffect(Potion.nightVision.getId())); { return HSMOD.MODID + ":textures/models/armor/proto_invisible.png"; } if(slot == 2) { return HSMOD.MODID + ":textures/models/armor/proto_layer_2.png"; } return HSMOD.MODID + ":textures/models/armor/proto_layer_1.png"; } public boolean getIsRepairable(ItemStack input, ItemStack repair) { if(repair.getItem() == HSMOD.protoIngot) { return true; } return false; } public void onArmorTick(World world, EntityPlayer player, ItemStack stack) { if(this.armorType == 0 && world.getBlockLightValue(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)) < 8) { player.addPotionEffect(new PotionEffect(Potion.nightVision.getId(), 1200, 0)); } if(this.armorType == 2 && player.isSprinting() && player.onGround) { player.motionX *= 1.3F; player.motionZ *= 1.3F; } if(this.armorType == 3 && player.isSneaking() && player.onGround) { player.addPotionEffect(new PotionEffect(Potion.invisibility.getId(), 200, 0)); } if(this.armorType == 1 && player.isBurning()) { player.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), 1200, 3)); } } @SideOnly(Side.CLIENT) public boolean hasEffect(ItemStack par1ItemStack) { return true; } }
-
Au pire getActivePotionEffect().contains(Potion.nightVision) ou getActivePotionEffect().contains(Potion.nightVision.getId())
-
Je remplace le hasPotionEffect par le getActivePotionEffect ?
-
Oui.
-
Toujours la même erreur
-
Laquelle ?