Crash sans rapport d'erreur


  • Correcteurs

    Plop.

    J'ai fais une arme qui tire si on a "Use" l'arme un certain nombre de ticks.
    Bref, pour afficher que l'arme était assez chargée j'ai pensé changer le rendu.

    public class RenderRailGun implements IItemRenderer
    {
        protected ModelRailGun model;
        protected static final ResourceLocation texture = new ResourceLocation("ModPg2:textures/models/items/RailGun.png");
    protected static final ResourceLocation texture2 = new ResourceLocation("ModPg2:textures/models/items/RailGun2.png");
    
        public RenderRailGun()
        {
            model = new ModelRailGun();
        }
    
        @Override
        public boolean handleRenderType(ItemStack item, ItemRenderType type)
        {
            switch(type)
            {
            case EQUIPPED:
                return true;
            case EQUIPPED_FIRST_PERSON:
                return true;
            default:
                return false;
            }
        }
    
        @Override
        public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
        {
            return false;
        }
    
        @Override
        public void renderItem(ItemRenderType type, ItemStack item, Object… data)
        {
            switch(type)
            {
            case EQUIPPED:
            {
                GL11.glPushMatrix();
                GL11.glRotatef(90.F, 1.0F, 0.2F, 0.0F);
                GL11.glRotatef(100.F, 1.0F, 0.0F, 0.0F);
                GL11.glTranslatef(0.56F, -0.45F, -0.65F);
                GL11.glScaled(0.6F, 0.4F, 0.4F);
                Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                model.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                GL11.glPopMatrix();
                break;
            }
            case EQUIPPED_FIRST_PERSON:
            {
            if(item.getTagCompound() == null) 
            {
                    item.setTagCompound(new NBTTagCompound());
                }
            else
            {
            if(item.getTagCompound().getBoolean("loaded") == true)
            {
            GL11.glPushMatrix();
                        GL11.glRotatef(90.F, 1.0F, -0.2F, 0.0F);
                        GL11.glRotatef(100.F, 0.5F, -0.2F, -0.6F);
                        GL11.glRotatef(30.F, -0.1F, -0.5F, 0.0F);
                        GL11.glTranslatef(0.3F, -0.2F, -1.0F);
                        GL11.glScaled(0.55F, 0.55F, 0.55F);
            Minecraft.getMinecraft().renderEngine.bindTexture(texture2);
            model.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
            GL11.glPopMatrix();
            break;
            }
            else
            {
                    GL11.glPushMatrix();
                        GL11.glRotatef(90.F, 1.0F, -0.2F, 0.0F);
                        GL11.glRotatef(100.F, 0.5F, -0.2F, -0.6F);
                        GL11.glRotatef(30.F, -0.1F, -0.5F, 0.0F);
                        GL11.glTranslatef(0.3F, -0.2F, -1.0F);
                        GL11.glScaled(0.55F, 0.55F, 0.55F);
                        Minecraft.getMinecraft().renderEngine.bindTexture(texture);
                        model.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
                        GL11.glPopMatrix();
                        break;
            }
            }                    
            }
            default:
                break;
            }
        }
    }
    

    Mais quand le changement de rendu se fait, il y a "internal server error" ça m'expulse mais aucun rapport de crash, je suis renvoyé sur la connexion à un serveur.
    Un peu compliqué de savoir comment résoudre le problème du coup de mon côté.

    Edit: D'ailleurs comme ça marche très bien côté client, c'est sûrement une histoire de side, non?


  • Administrateurs

    Il faudrait les logs du serveur.


  • Correcteurs

    ça devrait être là:

    Pastebin _ error

    Edit: Je mets la classe de l'item, j'vois NPE dans l'histoire…

    
    package fr.powergame.modpg2.common;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.world.World;
    
    public class ItemRailGun extends Item 
    {      
    public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int useTime)
        {
    if (useTime <= 2940)
    {
    EntityBullet entityBullet = new EntityBullet(world, player);
    world.playSoundAtEntity(player, "note.bd", 0.3F, 1.0F);
    if (!world.isRemote)
    {
    player.worldObj.spawnEntityInWorld(entityBullet);
    } 
      if(!player.capabilities.isCreativeMode)
    {   
    player.inventory.consumeInventoryItem(ModPg2.itemBullet);    
    }
    stack.getTagCompound().setBoolean("loaded", !(stack.getTagCompound().getBoolean("loaded")));
    }
    }  
    
        public void onUsingTick(ItemStack stack, EntityPlayer player, int count)
        {
    if (count == 2940)
    {
    stack.getTagCompound().setBoolean("loaded", !(stack.getTagCompound().getBoolean("loaded")));
    }
        }
    
        public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
        {
            return stack;
        }
    
        public int getMaxItemUseDuration(ItemStack stack)
        {
            return 3000;
        }
    
        public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
        {
            return true;
        }
    
        public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack)
        {
            return true;
        }
    
        public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    if(player.inventory.hasItem(ModPg2.itemBullet))
    {
    player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
    }
    return stack;
    }
    
        public void writeToNBT(NBTTagCompound nbt) 
    {
    nbt.setBoolean("loaded", false);
    }
    
    public void readFromNBT(NBTTagCompound nbt) 
    {
    nbt.getBoolean("loaded");
    }
    }
    

  • Administrateurs

    Caused by: java.lang.NullPointerException
    at fr.powergame.modpg2.common.ItemRailGun.onUsingTick(ItemRailGun.java:100) ~[ItemRailGun.class:?]
    Voila le responsable de cette déconnexion. Tu as un npe à la ligne 100 de ItemRailGun


  • Correcteurs

    Y'a pas de ligne 100 :s

    Edit: Je me rends aussi compte que mon code n'est plus fonctionnel (je m'étais couché content pourtant)

    Edit2: Visiblement la méthode onUsingTick n'est jamais appelée oO


  • Administrateurs

    Si si elle est appelé, sinon ça ne crasherait pas.


  • Correcteurs

    Bon j'ai rien compris, j'ai rien changé, plus de soucis.

    Joie…