[En Cours] [1.12.2] Tester si un item est dans l'inventaire d'un joueur

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
Avatar de l’utilisateur
MaxAnimator
Messages : 12
Inscription : 09 déc. 2019 20:04

[1.12.2] Tester si un item est dans l'inventaire d'un joueur

Message par MaxAnimator »

Bonjour,
J'essaie de détecter quand un certain item est dans l'inventaire d'un joueur, et quand il y est, le joueur a un effet de potion(qui s'enlève dès que l'item n'est plus détecté dans l'inventaire)
Voici le code de la classe de l'item en question:

Code : Tout sélectionner

package com.maxanimator.myawesomemod.items;

import com.maxanimator.myawesomemod.init.ModItems;

import ibxm.Player;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArrow;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;

public class StrenghtSkillOrb extends Item{

	public StrenghtSkillOrb(String name)
	{
		setUnlocalizedName(name);
		setRegistryName(name);
	}
    
    public PotionEffect onEntityItemUpdate(EntityItem entityItem, EntityPlayer player)
    {	
    	if(player.inventory.hasItemStack(new ItemStack(ModItems.strenght_skill_orb)))
    	{
    		return new PotionEffect(MobEffects.STRENGTH, 1, 0, true, true);
    	}
		return null;
    }
	
}
Le code de ma classe d'items:

Code : Tout sélectionner

package com.maxanimator.myawesomemod.init;

import com.maxanimator.myawesomemod.References;
import com.maxanimator.myawesomemod.items.BasicItem;
import com.maxanimator.myawesomemod.items.SpearWeapon;
import com.maxanimator.myawesomemod.items.StrenghtSkillOrb;
import com.maxanimator.myawesomemod.items.armor.ObsidianArmor;
import com.maxanimator.myawesomemod.items.armor.QuartzArmor;

import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.SoundEvents;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

@Mod.EventBusSubscriber(modid = References.MODID)
public class ModItems
{
	public static Item item_test, iron_spear, quartz_helmet, quartz_chestplate, quartz_leggings, quartz_boots, nether_gem, minecoin, obsidian_helmet, obsidian_chestplate, obsidian_leggings, obsidian_boots,
	empty_skill_orb, strenght_skill_orb;
	
	public static ArmorMaterial QuartzArmor = EnumHelper.addArmorMaterial("QuartzArmor", References.MODID + ":quartz_layer_1", 13, new int[] {1, 4, 5, 2}, 13, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 0.0F);
	public static ArmorMaterial ObsidianArmor = EnumHelper.addArmorMaterial("ObsidianArmor", References.MODID + ":obsidian_layer_1", 13, new int[] {1, 2, 3, 1}, 7, SoundEvents.ITEM_ARMOR_EQUIP_GENERIC, 0.0F);
	
	public static void init()
	{
		item_test = new BasicItem("item_test");
		iron_spear = new SpearWeapon("iron_spear", ToolMaterial.IRON).setCreativeTab(CreativeTabs.COMBAT);
		quartz_helmet = new QuartzArmor("quartz_helmet", QuartzArmor, 1, EntityEquipmentSlot.HEAD).setCreativeTab(CreativeTabs.COMBAT);
		quartz_chestplate = new QuartzArmor("quartz_chestplate", QuartzArmor, 1, EntityEquipmentSlot.CHEST).setCreativeTab(CreativeTabs.COMBAT);
		quartz_leggings = new QuartzArmor("quartz_leggings", QuartzArmor, 2, EntityEquipmentSlot.LEGS).setCreativeTab(CreativeTabs.COMBAT);
		quartz_boots = new QuartzArmor("quartz_boots", QuartzArmor, 1, EntityEquipmentSlot.FEET).setCreativeTab(CreativeTabs.COMBAT);
		nether_gem = new BasicItem("nether_gem").setCreativeTab(CreativeTabs.MATERIALS);
		minecoin = new BasicItem("minecoin").setCreativeTab(CreativeTabs.MISC);
		obsidian_helmet = new ObsidianArmor("obsidian_helmet", ObsidianArmor, 1, EntityEquipmentSlot.HEAD).setCreativeTab(CreativeTabs.COMBAT);
		obsidian_chestplate = new ObsidianArmor("obsidian_chestplate", ObsidianArmor, 1, EntityEquipmentSlot.CHEST).setCreativeTab(CreativeTabs.COMBAT);
		obsidian_leggings = new ObsidianArmor("obsidian_leggings", ObsidianArmor, 2, EntityEquipmentSlot.LEGS).setCreativeTab(CreativeTabs.COMBAT);
		obsidian_boots = new ObsidianArmor("obsidian_boots", ObsidianArmor, 1, EntityEquipmentSlot.FEET).setCreativeTab(CreativeTabs.COMBAT);
		empty_skill_orb = new StrenghtSkillOrb("empty_skill_orb").setCreativeTab(CreativeTabs.MISC);
		strenght_skill_orb = new StrenghtSkillOrb("strenght_skill_orb").setCreativeTab(CreativeTabs.MISC);
	}
	
	@SubscribeEvent
	public static void registerItems(RegistryEvent.Register<Item> event)
	{
		event.getRegistry().registerAll(item_test, iron_spear, quartz_helmet, quartz_chestplate, quartz_leggings, quartz_boots, nether_gem, minecoin, obsidian_helmet, obsidian_chestplate, obsidian_leggings,
			obsidian_boots, empty_skill_orb, strenght_skill_orb);
	}
	
	@SubscribeEvent
	public static void registerRenders(ModelRegistryEvent event)
	{
		registerRender(item_test);
		registerRender(iron_spear);
		registerRender(quartz_helmet);
		registerRender(quartz_chestplate);
		registerRender(quartz_leggings);
		registerRender(quartz_boots);
		registerRender(nether_gem);
		registerRender(minecoin);
		registerRender(obsidian_helmet);
		registerRender(obsidian_chestplate);
		registerRender(obsidian_leggings);
		registerRender(obsidian_boots);
		registerRender(empty_skill_orb);
		registerRender(strenght_skill_orb);
	}
	
	private static void registerRender(Item item)
	{
		ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory"));
	}
}
Avatar de l’utilisateur
Checconio
Site Admin
Messages : 660
Inscription : 20 juil. 2019 18:53
Localisation : Istres
Contact :

Re: [1.12.2] Tester si un item est dans l'inventaire d'un joueur

Message par Checconio »

Le soucis c'est que tu as mis ton effet dans cette fonction "onEntityItemUpdate" qui n'est activé que quand le jour a l'item en main
donc ton code ne sera jamais actif si ton item est ailleurs, il fraudais utilisé une fonction qui du coup est toujours active


Tu peux passer ton sujet en [En Cours] :)
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
Avatar de l’utilisateur
MaxAnimator
Messages : 12
Inscription : 09 déc. 2019 20:04

Re: [1.12.2] Tester si un item est dans l'inventaire d'un joueur

Message par MaxAnimator »

Euh quand j'ai l'item en main ça ne marche pas non plus et tu connaitrais une fonction pour le faire n'importe où dans l'inventaire?

Edit: Tu as été absent longtemps non? Quand est-ce que tu reprendras tes tutos? Ils sont vachement bien et utiles! Perso j'ai un peu perdu la motivation de faire mon mod depuis que tu as arrêté les vidéos...

Edit 2: Je suppose que c'est toi qui as fait ton site vu que tu connais a priori pas mal le java tu dois surement connaître l'html, css et php. Dans ce cas, est-ce que tu pourrais modifier la taille limite des images de profil? Parce que 200x200 c'est assez bas et tu dois t'en rendre compte plus que moi vu que ta résolution d'écran est 4K(sinon tu uploaderais pas en 4K).
Avatar de l’utilisateur
Checconio
Site Admin
Messages : 660
Inscription : 20 juil. 2019 18:53
Localisation : Istres
Contact :

Re: [1.12.2] Tester si un item est dans l'inventaire d'un joueur

Message par Checconio »

Pour la fonction je ne sais pas, il faut regarder dans la class item

Pour les tuto, je n'ais plus du tout le temps pour le moment et je t’avoue ne pas savoir quand je vais reprendre

Pour la taille des images, aucun intérêt de les prendre en plus grande taille car le site les affiches en 200x200, et je pense que les images a coté des messages ne sont pas du tout trop petite ^^
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
Répondre