1.12.2 addPotionEffect > Failed to handle packet



  • Bien le bonjour, bon le souci est déjà dans le titre, pour faire court j'ajoute des effets de potion sur mon armure de cette manière :

    package com.kporal.mcplus.items;
    
    import com.kporal.mcplus.Main;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.init.MobEffects;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class DragoonArmor extends ItemArmor {
    
    	public DragoonArmor( ArmorMaterial material, EntityEquipmentSlot slot, String name ) {
    		super( material, 0, slot );
    		this.setRegistryName( name );
    		this.setTranslationKey( name );
    		this.setCreativeTab( Main.mcptab );
    	}
    	
    	@Override
    	public void onArmorTick( World w, EntityPlayer p, ItemStack i ) {
    		
    		if( p instanceof EntityPlayerMP ) { // Test mais crash quand même
    			p = ( EntityPlayerMP ) p;
    		}
    		
    		InventoryPlayer inv = p.inventory;
    			
    		if( inv.armorItemInSlot( 0 ).getItem() == Main.cursedBoots ) {
    			potionEffect( p, MobEffects.FIRE_RESISTANCE, 5, 1, false, false );
    		}
    		if( inv.armorItemInSlot( 1 ).getItem() == Main.cursedLegs ) {
    			potionEffect( p, MobEffects.SPEED, 5, 0, false, false );
    		}
    		if( inv.armorItemInSlot( 2 ).getItem() == Main.cursedChest ) {
    			potionEffect( p, MobEffects.REGENERATION, 5, 0, false, false );
    		}
    		if( inv.armorItemInSlot( 3 ).getItem() == Main.cursedHelmet ) {
    			potionEffect( p, MobEffects.NIGHT_VISION, 5, 2, false, false );
    		}
    	}
    	
    	private int secondToTicks( int s ) {
    		return s * 20;
    	}
    	
    	private void potionEffect( EntityPlayer player, Potion e, int t, int p, boolean ambiant, boolean particle ) {
    		if( player.getActivePotionEffect( e ) == null ) {
    			player.addPotionEffect( new PotionEffect( e, secondToTicks( t ), p, ambiant, particle ));
    		}
    	}
    }
    

    Ce qui fonctionne sans problème, en local évidement, par contre une fois le mod placer sur mon serveur dev et mon mc officiel et que j'équipe mon armure j'obtiens cette erreur ( et je en comprend pas trop pourquoi ) :

    [10:52:43] [Server thread/WARN] [net.minecraft.network.NetworkSystem]: Failed to handle packet for /192.168.1.1:51949
    net.minecraft.util.ReportedException: Ticking player
    	at net.minecraft.entity.player.EntityPlayerMP.func_71127_g(EntityPlayerMP.java:459) ~[oq.class:?]
    	at net.minecraft.network.NetHandlerPlayServer.func_73660_a(NetHandlerPlayServer.java:173) ~[pa.class:?]
    	at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher$1.func_73660_a(NetworkDispatcher.java:209) ~[NetworkDispatcher$1.class:?]
    	at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:285) ~[gw.class:?]
    	at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:180) [oz.class:?]
    	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:790) [MinecraftServer.class:?]
    	at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:397) [nz.class:?]
    	at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:668) [MinecraftServer.class:?]
    	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526) [MinecraftServer.class:?]
    	at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]
    Caused by: java.lang.NoSuchMethodError: net.minecraft.entity.player.InventoryPlayer.func_70440_f(I)Lnet/minecraft/item/ItemStack;
    	at com.kporal.mcplus.items.DragoonArmor.onArmorTick(DragoonArmor.java:35) ~[DragoonArmor.class:?]
    	at net.minecraft.entity.player.InventoryPlayer.func_70429_k(InventoryPlayer.java:371) ~[aec.class:?]
    	at net.minecraft.entity.player.EntityPlayer.func_70636_d(EntityPlayer.java:511) ~[aed.class:?]
    	at net.minecraft.entity.EntityLivingBase.func_70071_h_(EntityLivingBase.java:2172) ~[vp.class:?]
    	at net.minecraft.entity.player.EntityPlayer.func_70071_h_(EntityPlayer.java:234) ~[aed.class:?]
    	at net.minecraft.entity.player.EntityPlayerMP.func_71127_g(EntityPlayerMP.java:382) ~[oq.class:?]
    	... 9 more
    

    Des idées ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Bonjour,

    La fonction armorItemInSlot(index) ne serait pas client side only ? Si oui, il faut utiliser une autre fonction.



  • Problème résolu, grossière erreur de ma pars d'autant plus que .... hum je cherche à récupérer inutilement un slot précis alors que la fonction donne par défaut ... et oui l'item en question ( le recule est censé être bien mais parfois on se sent juste con 😄 )

    package com.kporal.mcplus.items;
    
    import com.kporal.mcplus.Main;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.player.EntityPlayerMP;
    import net.minecraft.entity.player.InventoryPlayer;
    import net.minecraft.init.MobEffects;
    import net.minecraft.inventory.EntityEquipmentSlot;
    import net.minecraft.item.ItemArmor;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class DragoonArmor extends ItemArmor {
    
    	public DragoonArmor( ArmorMaterial material, EntityEquipmentSlot slot, String name ) {
    		super( material, 0, slot );
    		this.setRegistryName( name );
    		this.setTranslationKey( name );
    		this.setCreativeTab( Main.mcptab );
    	}
    	
    	@Override
    	public void onArmorTick( World w, EntityPlayer p, ItemStack i ) {
    		if( i.getItem() == Main.cursedBoots ) {
    			potionEffect( p, MobEffects.FIRE_RESISTANCE, 5, 1, false, false );
    		}
    		if( i.getItem() == Main.cursedLegs ) {
    			potionEffect( p, MobEffects.SPEED, 5, 0, false, false );
    		}
    		if( i.getItem() == Main.cursedChest ) {
    			potionEffect( p, MobEffects.REGENERATION, 5, 0, false, false );
    		}
    		if( i.getItem() == Main.cursedHelmet ) {
    			potionEffect( p, MobEffects.NIGHT_VISION, 5, 2, false, false );
    		}
    	}
    	
    	private int secondToTicks( int s ) {
    		return s * 20;
    	}
    	
    	private void potionEffect( EntityPlayer player, Potion e, int t, int p, boolean ambiant, boolean particle ) {
    		if( player.getActivePotionEffect( e ) == null ) {
    			player.addPotionEffect( new PotionEffect( e, secondToTicks( t ), p, ambiant, particle ));
    		}
    	}
    }
    

    Problème résolu et sa fonctionne. Merci de ton aide !


Log in to reply