Résolu (Help!) Impossible de configurer le mod Morph dans eclipse
-
Pour installer l’API, tu dois créer un dossier libs dans ton dossier forge, et déplacer le .jar dedans. Une fois fait, il faut exécuter gradlew eclipse pour qu’eclipse ajoute la lib au classpath du projet.
-
En fait c’est bon, il crash plus
J’ai téléchargé le mauvais
-
Je m’approche du but
Maintenant il faut que j’autorise l’objet à être équipépackage baubles.api; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; /** * * This interface should be extended by items that can be worn in bauble slots * * @author Azanor */ public interface IBauble { /** * This method return the type of bauble this is. * Type is used to determine the slots it can go into. */ public BaubleType getBaubleType(ItemStack itemstack); /** * This method is called once per tick if the bauble is being worn by a player */ public void onWornTick(ItemStack itemstack, EntityLivingBase player); /** * This method is called when the bauble is equipped by a player */ public void onEquipped(ItemStack itemstack, EntityLivingBase player); /** * This method is called when the bauble is unequipped by a player */ public void onUnequipped(ItemStack itemstack, EntityLivingBase player); /** * can this bauble be placed in a bauble slot */ public boolean canEquip(ItemStack itemstack, EntityLivingBase player); /** * Can this bauble be removed from a bauble slot */ public boolean canUnequip(ItemStack itemstack, EntityLivingBase player); }
-
Tu vois comment faire avec les commentaires ou tu as quelque questions ?
-
Ba en fait je comprends pas trop
La fonction *getBaubles() *me renvoie une interface “IInventory”
Je sais pas quoi faire avec ça -
package baubles.api; import java.lang.reflect.Method; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import cpw.mods.fml.common.FMLLog; /** * @author Azanor */ public class BaublesApi { static Method getBaubles; /** * Retrieves the baubles inventory for the supplied player */ public static IInventory getBaubles(EntityPlayer player) { IInventory ot = null; try { if(getBaubles == null) { Class fake = Class.forName("baubles.common.lib.PlayerHandler"); getBaubles = fake.getMethod("getPlayerBaubles", EntityPlayer.class); } ot = (IInventory) getBaubles.invoke(null, player); } catch(Exception ex) { FMLLog.warning("[Baubles API] Could not invoke baubles.common.lib.PlayerHandler method getPlayerBaubles"); } return ot; } }
Ça me dépasse largement
-
Ce que tu veux faire, c’est rajouter un nouvel item amulette plaçable dans le slot correspondant du mod Baubles, c’est ça ?
Attention, au passage aux doubles/triples posts… -
Oui, c’est bien ça
-
Eh bien si on look les commentaires de la classe IBauble, on peut lire la phrase suivante :
“This interface should be extended by items that can be worn in bauble slots”A partir de là, tu sais comment faire
-
Çà c’est deja fait
Mais maintenant je voudrais tester dans une fonction si le joueur porte cette amulette
-
Bah si c’est déjà fait, tu te give ton item, tu regardes si il va bien dans tel slot et pas dans un autre, si c’est le cas, alors t’as réussi !
Oups mal lu
On voit ça demain ? Je lookerai d’un peu plus près le code du Baubles mod -
Oui, ça marche parfaitement
C’est réussitMais moi je suis déjà plus loin, j’aimerais tester si le joueur à cette item présent dans ce slot
Et c’est là que je bloque
Je sais pas quoi faire avec cette interface Iinventory
-
@‘Mugiwaxar’:
Oui, ça marche parfaitement
C’est réussitMais moi je suis déjà plus loin, j’aimerais tester si le joueur à cette item présent dans ce slot
Et c’est là que je bloque
Je sais pas quoi faire avec cette interface Iinventory
Si c’est pour effectuer une action à chaque tick, tu peut utiliser la méthode “onWornTick” de l’interface “IBauble”.
Mais si tu veux exécuter quelque chose à partir d’un event :
l’interface Iinventary te donne accès aux item équipés par le joueur : tu as la méthode getInventorySize qui te donne la taille de l’inventaire (le nombre de slot, dans ton cas je pence que ça ne conte que les 4 slots de bauble) et la méthode getInventorySlotContent(index) qui te donne l’item qu’il y as dans le slot (donc tu peut utiliser un “for” ou directement mettre l’index qui correspond au slot de l’amulette) -
Ouaip!
C’est ce que j’ai vue aussi, j’ai réussit à faire un petit truc de coup
(C’est très brouillon mais ça marche)Minecraft mc = Minecraft.getMinecraft(); EntityPlayer player = (EntityPlayer) Minecraft.getMinecraft().thePlayer; if(player != null) { if(BaublesApi.getBaubles(player).getStackInSlot(0) != null) { String name = BaublesApi.getBaubles(player).getStackInSlot(0).getItem().getUnlocalizedName(); if(!name.equals("item.magicleaf")) { System.out.println("Bad"); return; } } else return;
C’est déjà une petite victoire :inlove:
Je vais m’arrêter à là pour ce soir
Merci beaucoup pour votre aide à tous !
-
J’en profite au passage pour indiquer que le mod morph possède bien une API permettant de métamorphoser un joueur A en une entity B. Du coup c’est une bonne nouvelle pour la suite de ton code
-
@‘Mugiwaxar’:
Ouaip!
C’est ce que j’ai vue aussi, j’ai réussit à faire un petit truc de coup
(C’est très brouillon mais ça marche)Minecraft mc = Minecraft.getMinecraft(); EntityPlayer player = (EntityPlayer) Minecraft.getMinecraft().thePlayer; if(player != null) { if(BaublesApi.getBaubles(player).getStackInSlot(0) != null) { String name = BaublesApi.getBaubles(player).getStackInSlot(0).getItem().getUnlocalizedName(); if(!name.equals("item.magicleaf")) { System.out.println("Bad"); return; } } else return;
C’est déjà une petite victoire :inlove:
Je vais m’arrêter à là pour ce soir
Merci beaucoup pour votre aide à tous !
Si ça fonctionne c’est déja pas mal mais dit nous où tu as mis ce code car on ne peut utiliser “Minecraft.getMinecraft()” que coté client. En générale, il y as déjà le joueur dans les arguments de la méthode (si tu utilise une méthode) ou parmi les variable de l’event (si tu utilise un event).
Ensuite on utilise plutôt :if(BaublesApi.getBaubles(player).getStackInSlot(0).getItem() == tonItem)
plutôt que de passer par “getUnlocalizedName”