1.12.2 Armure qui te passe en créatif



  • Bonjour !
    j'aimerais que quand le joueur porte mon casque, il passe en créatif.
    Voici mon code mais il ne vas pas

    package com.drastic.mod.init.objects.armour;
    
    import com.drastic.mod.Main;
    import com.drastic.mod.init.ItemInit;
    import com.drastic.mod.render.models.armor.ModelGbHead;
    import com.drastic.mod.util.IHasModel;
    
    import net.minecraft.client.model.ModelBiped;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    import net.minecraftforge.common.util.ITeleporter;
    
    public class GbArmor extends ItemArmor implements IHasModel
    {
    
        public GbArmor(String name, ArmorMaterial materialIn, EntityEquipmentSlot equipmentSlotIn)
        {
            super(materialIn, 1, equipmentSlotIn);
            setUnlocalizedName(name);
            setRegistryName(name);
            setCreativeTab(Main.BadassTab);
            setMaxStackSize(1);
            
            ItemInit.ITEMS.add(this);
        }
    
        @Override
        public void registerModels()
        {
            Main.proxy.registerItemRederer(this, 0);        
        }
        
        @Override
        public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, EntityEquipmentSlot armorSlot, ModelBiped _default)
        {
            if(itemStack != ItemStack.EMPTY && itemStack.getItem() instanceof ItemArmor)
            {
                ModelGbHead model = new ModelGbHead();
                
                model.bipedHead.showModel = armorSlot == EntityEquipmentSlot.HEAD;
                
                model.isChild = _default.isChild;
                model.isRiding = _default.isRiding;
                model.isSneak = _default.isSneak;
                model.rightArmPose = _default.rightArmPose;
                model.leftArmPose = _default.leftArmPose;    
                
                return model;
            }
            
            return null;
        }
        
        @Override
        public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
        {
            if(isFullSet(player)) 
            {
                player.capabilities.isCreativeMode = true;
            }
            else
            {
                player.capabilities.isCreativeMode = false;
            }
            super.onArmorTick(world, player, itemStack);
        }
        
        
        public static boolean isFullSet(EntityPlayer player){       
            ItemStack head = player.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
            
            return !head.isEmpty() && head.getItem() instanceof GbArmor;
        }
    }
    
    


  • Bonjour :D,
    il faut rajouter cette méthode dans la classe qui a pour effet de ticker en permanence dès que l'on porte un morceau de l'armure pusi ensuite de faire les checks nécessaires :

    @Override
    	public void onArmorTick(World world, EntityPlayer player, ItemStack item)
    	{
    		if(player.inventory.armorItemInSlot(0) != null)
    			if(player.inventory.armorItemInSlot(0).getItem() == TON_CASQUE )
                                   if(!player.capabilities.isInCreative)
                                   {
                                             player.setGameType(EnumGameType.CREATIVE)
                                   }
    	}
    


  • Bonjour,

    Si un event qui ne se déclenche que lors d'un changement d'armure existe, il serait bon de le favoriser sinon les deux premiers if du code proposé par Eno_gamer10 seront testés à tous les ticks (donc niveau optimisation ce ne serait pas ouf)


Log in to reply