Résolu Crash sans rapport d'erreur
-
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?
-
Il faudrait les logs du serveur.
-
ça devrait être là:
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"); } }
-
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 -
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
-
Si si elle est appelé, sinon ça ne crasherait pas.
-
Bon j’ai rien compris, j’ai rien changé, plus de soucis.
Joie…