Résolu Créer un item non-lootable.
-
Bonjour à tous.
J’aimerais savoir si quelqu’un aurait un moyen de créer un item non lootable, même en cas de mort.
Merci d’avance. -
Tu souhaites faire que l’item reste dans l’inventaire du joueur lorsqu’il meurt, ou qu’il disparaisse totalement lors de la mort ?
Aussi, tu veux aussi empêcher de jeter l’item manuellement par terre ? -
Moi jz cherche à faire en sorte de désactiver le drop
-
Désactiver totalement je vois vraiment pas comment faire.
Juste supprimer l’item lors du drop, j’ai une idée avec l’eventDeath, ou l’eventDrop, ça devrait le faire. -
Pour la 1.6 je crois que j’avais vue une fonction booléen candrop
-
J’aurais voulu que l’item reste dans l’inventaire du joueur lors de sa mort, et qu’il ne puisse pas le jeter.
-
Dans la classe de ton item, essaye de mettre ça :
public boolean onDroppedByPlayer(ItemStack item, EntityPlayer player) { return false; }
(pas eu le temps de tester)
-
J’ai testé, le joueur ne peut pas jeter l’item, mais lorsqu’il meurt, il le drop quand même.
-
Après quelques tests, dans ta classe principale, dans la fonction init mets ça :
MinecraftForge.EVENT_BUS.register(new PlayerEventHandler());
Et dans la classe PlayerEventHandler :
package fr.minecraftforgefrance.tutoriel.common; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.util.MathHelper; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class PlayerEventHandler { @SubscribeEvent public void onLivingDeath(LivingDeathEvent event) { if(event.entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer)event.entity; if(player.inventory.hasItem(ModTutoriel.itemTutoriel)) { this.dropInventory(player.inventory); player.worldObj.getGameRules().setOrCreateGameRule("keepInventory", "true"); } } } @SubscribeEvent public void onEntityJointWorld(EntityJoinWorldEvent event) { if(event.entity instanceof EntityPlayer) { event.world.getGameRules().setOrCreateGameRule("keepInventory", "false"); } } private void dropInventory(InventoryPlayer inventory) { int i; for(i = 0; i < inventory.mainInventory.length; ++i) { if(inventory.mainInventory* != null) { if(inventory.mainInventory*.getItem() != ModTutoriel.itemTutoriel) { inventory.player.func_146097_a(inventory.mainInventory*, true, false); inventory.mainInventory* = null; } } } for(i = 0; i < inventory.armorInventory.length; ++i) { if(inventory.armorInventory* != null) { inventory.player.func_146097_a(inventory.armorInventory*, true, false); inventory.armorInventory* = null; } } } }
Tu as juste à remplacer ModTutoriel.itemTutoriel par TaClassePrincipale.tonItem
Si c’est un bloc, utilise Item.getItemFromBlock(TaClassePrincipale.tonBloc)J’ai pas trouvé de solution sans passer par le gameRule keepInventory, de toute façon elle n’est que actif lors du la mort du joueur et est remit à false lorsque le joueur revient dans le monde.
-
Merci beaucoup.
-
marche pour 1.6.x?
-
En principe, oui, cela devrais fonctionner à partir de la version 1.5.x.
-
ok merci
-
Si tu veux que l’item soit impossible à poser,tu implémente l’event EntityConstructEvent.
Si l’entité est un EntityItem de ton item, tu le killMême par dispenser et tout ça devient impossible