[Résolu] Heal(); qui ne fonctionne pas ( Forge 1.8 )

Besoin d'aide ? c'est par ici ;)
Règles du forum
[En Attente] - Qui est défini par défaut à l'ouverture de la demande d'aide
[En Cours] - Qui est à mettre lorsque vous venez d'avoir une réponse à votre demande d'aide
[Résolu] - Qui est à mettre lorsque votre problème est résolu
Merci de respecter ce modèle pour toutes demandes d'assistances !
Merci de mettre votre code dans les balises code prévus à cet effet, icon </>
Version de Minecraft:
Version de Forge: (Il s'agit du numéro de version indiqué sur le nom de votre dossier forge téléchargé)

Description du problème:
(Un maximum d'informations sera utile, quel code fait crash ?, quand cela ce produit ?, ne pas hésiter à mettre des captures d'écran et fichiers de log en pièces jointes)
Répondre
_Zeirox
Messages : 7
Inscription : 22 juil. 2022 20:50

Heal(); qui ne fonctionne pas ( Forge 1.8 )

Message par _Zeirox »

Bonjour, j'ai suivi les tuto de Checconio sur le modding forge 1.8 et j'ai voulu faire un item qui, lorsque l'on fait un clique droit dessus, va soigner le joueur. Seulement, le joueur n'est pas soigné, j'ai testé en ajoutant des cœurs d'absorption et cela marche donc ma variable joueur est bien bonne et j'ai essayé de remplacer le Heal() par Jump() et cela marche !
Voici mon code ( j'ai enlevé les imports ) :

Code : Tout sélectionner

public class ItemHeal extends Item {
    public ItemHeal() {
	this.setUnlocalizedName("ItemHeal");
	this.setCreativeTab(ModTest.ModTest);
	this.setMaxStackSize(1);
    }
    private int timer = 0;
    private boolean onOff = false;
    @Override
    public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) {
	String timerMSG = Integer.toString((int) player.getHealth());
	player.addChatComponentMessage(new ChatComponentText(timerMSG));
	if (onOff == false) {
            if (player.getMaxHealth() - player.getHealth() >= 8) {
        	player.heal(4.0F);
            } else if (player.getMaxHealth() - player.getHealth() < 8) {
        	player.heal(player.getMaxHealth() - player.getHealth());
        	player.setAbsorptionAmount(8 - (player.getMaxHealth() - player.getHealth()));
            }
	    player.addChatMessage(new ChatComponentText("Added"));
	}
	onOff = true;
	return item;
    }
    public boolean hasEffect(ItemStack item, int pass) {
        if (item.hasTagCompound()) {
        } else {
            return true;
        }
    }
    public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
	EntityPlayer player = (EntityPlayer) entityIn;
	if (onOff == true) {
	    String timerMSG = Integer.toString(400 - timer / 40);
	    //player.addChatMessage(new ChatComponentText(timerMSG));
	    timer++;  
	}
	if (timer == 400) {
	    onOff = false;
	    timer = 0;
	}
    }
}
Et si possible, si quelqu'un pourrait m'aider à faire en sorte que l'item est un effet d'enchantement lorsque le cooldown est terminé ? et que l'effet s'enlève lorsque le cooldown commence ( lorsque l'on utilise l'item )

Et pour finir, si ce n'est pas trop demandé, si quelqu'un saurait comment récupérer la face du bloc que regarde le joueur ?
Avatar de l’utilisateur
Checconio
Site Admin
Messages : 660
Inscription : 20 juil. 2019 18:53
Localisation : Istres
Contact :

Re: Heal(); qui ne fonctionne pas ( Forge 1.8 )

Message par Checconio »

salut,

Pour la fonction Heal(), je n'aurais pas la réponse tout de suite, cependant pour l'apparence enchanté, il s'agit d'une fonction a mettre dans la class de ton item

Code : Tout sélectionner

@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack)
{
    return true;
}

ou si tu utilise ta classe de base des items, tu peux la mettre dedans et indiquer seulement l'item qui doit avoir l'effet

Code : Tout sélectionner

@SideOnly(Side.CLIENT)
public boolean hasEffect(ItemStack stack)
{
    return stack.getItem() == ItemsMod.ton_item;
}

Par contre a voir si la valeur peut être modifier à la volé, sinon il faudra créer 2 items différent, 1 avec l'effet et l'autre sans.

Et c'est ton cooldown qui fera switcher l'item dans la main du joueur
Tu veux des réductions et du cashback ? passe par iGraal ;)
3€ Offert en passant par mon lien :)

https://fr.igraal.com/?parrain=AG_577542b686c1d
Image
_Zeirox
Messages : 7
Inscription : 22 juil. 2022 20:50

Re: Heal(); qui ne fonctionne pas ( Forge 1.8 )

Message par _Zeirox »

Merci beaucoup !
Je pense que pour la fonction heal, je vais aller explorer d'autres mod en 1.8 qui l'utilisent pour voir si je n'ai pas manqué quelque chose !

J'ai peut être une suspicion sur le fait que ça vienne de l'event clique droit car quand je change le Heal() par setHealth(player.getHealth + 8) et la vie se rajoute bien mais dès que je l'actualise ( par exemple en reprenant des dégats ) la vie qui a été gagné repart

Merci encore !
_Zeirox
Messages : 7
Inscription : 22 juil. 2022 20:50

Re: Heal(); qui ne fonctionne pas ( Forge 1.8 )

Message par _Zeirox »

*Update*

J'ai réussie à faire marcher le heal() en le mettant dans une fonction à part !

je pense donc que le heal() ne peut pas aller dans le onItemRightClick()

Merci encore pour votre aide !
Avatar de l’utilisateur
Checconio
Site Admin
Messages : 660
Inscription : 20 juil. 2019 18:53
Localisation : Istres
Contact :

Re: Heal(); qui ne fonctionne pas ( Forge 1.8 )

Message par Checconio »

Super :)

Pense à passer ton sujet en [Résolu]
Tu veux des réductions et du cashback ? passe par iGraal ;)
3€ Offert en passant par mon lien :)

https://fr.igraal.com/?parrain=AG_577542b686c1d
Image
_Zeirox
Messages : 7
Inscription : 22 juil. 2022 20:50

Re: Heal(); qui ne fonctionne pas ( Forge 1.8 )

Message par _Zeirox »

*Re Update*

Si ça peut aider des gens, j'ai trouvé comment faire briller un item lorsque le cooldown est activé !

il faut utiliser le TagCompound de l'item ou est stocké votre cooldown !

Code : Tout sélectionner

public boolean hasEffect(ItemStack item) {
        if (item.hasTagCompound()) {
            return item.getTagCompound().getInteger("timer") == 0;
        } else {
            return true;
        }
    }
et normalement, lorsque vous utilisez votre item, il va arrêter de briller et lorsque le cooldown ( le tag "timer" ) sera repassé à 0, il va refaire briller l'objet !

C'est tout pour moi !
Répondre