Résolu Crash report rendu TESR
-
J’ai créer des Modeles 3D pour mon serveur tout fonctionne en solo mais ne multijoueur j’ai un beau crash report
Description: Exception in server tick loop java.lang.NoClassDefFoundError: net/minecraft/client/gui/GuiScreen at blocks.blocksdeco.Blocktombe.func_149645_b(Blocktombe.java:46) at net.minecraft.entity.Entity.func_70091_d(Entity.java:936) at net.minecraft.network.NetHandlerPlayServer.func_147347_a(NetHandlerPlayServer.java:520) at net.minecraft.network.play.client.C03PacketPlayer.func_148833_a(C03PacketPlayer.java:36) at net.minecraft.network.play.client.C03PacketPlayer$C06PacketPlayerPosLook.func_148833_a(C03PacketPlayer.java:234) at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:991) at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:809) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:669) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: net.minecraft.client.gui.GuiScreen at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:101) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) … 12 more
La classe de mon Block
package blocks.blocksdeco; import blocks.culture.TileEntityBlockavoine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mods.client.Clientproxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class Blocktombe extends Block { public Blocktombe(Material material) { super(material.wood); } @Override public boolean hasTileEntity(int metadata) { return true; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityBlocktombe(); } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return Clientproxy.tesrRenderId; } @SideOnly(Side.CLIENT) public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } //Rotation public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { if(stack.getItemDamage() == 0) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityBlocktombe) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; ((TileEntityBlocktombe)tile).setDirection((byte)direction); } } } }
mon TileEntity
package blocks.blocksdeco; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; public class TileEntityBlocktombe extends TileEntity { private byte direction; @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); this.direction = compound.getByte("Direction"); } @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); compound.setByte("Direction", this.direction); } public byte getDirection() { return direction; } public void setDirection(byte direction) { this.direction = direction; this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbttagcompound); } public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { this.readFromNBT(pkt.func_148857_g()); this.worldObj.markBlockRangeForRenderUpdate(this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord); } }
Mon tile Entity renderer
package blocks.blocksdeco; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import blocks.modele.Tombe; public class TileEntityBlocktombeSpecialRenderer extends TileEntitySpecialRenderer { public static Tombe model = new Tombe(); public static ResourceLocation texture = new ResourceLocation("TutoMod:textures/blocks/tombe.png"); @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick) { this.renderTileEntityBlocktombeAt((TileEntityBlocktombe)tile, x, y, z, partialRenderTick); } public void renderTileEntityBlocktombeAt(TileEntityBlocktombe tile, double x, double y, double z, float partialRenderTick) { if(tile.getDirection() == 0) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.8D, z + 0.5D); GL11.glRotated(180, 0.0F, 0.0F, 1.0F); GL11.glRotatef(90F * 2, 0.0F, 1.0F, 0.0F); GL11.glScalef(1.2F, 1.2F, 1.2F); this.bindTexture(texture); model.renderAll(); GL11.glPopMatrix(); } if(tile.getDirection() == 1) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.8D, z + 0.5D); GL11.glRotated(180, 0.0F, 0.0F, 1.0F); GL11.glRotatef(90F * 1, 0.0F, 1.0F, 0.0F); GL11.glScalef(1.2F, 1.2F, 1.2F); this.bindTexture(texture); model.renderAll(); GL11.glPopMatrix(); } if(tile.getDirection() == 2) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.8D, z + 0.5D); GL11.glRotated(180, 0.0F, 0.0F, 1.0F); GL11.glRotatef(90F * 2, 0.0F, 1.0F, 0.0F); GL11.glScalef(1.2F, 1.2F, 1.2F); this.bindTexture(texture); model.renderAll(); GL11.glPopMatrix(); } if(tile.getDirection() == 3) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.8D, z + 0.5D); GL11.glRotated(180, 0.0F, 0.0F, 1.0F); GL11.glRotatef(90F * 1, 0.0F, 1.0F, 0.0F); GL11.glScalef(1.2F, 1.2F, 1.2F); this.bindTexture(texture); model.renderAll(); GL11.glPopMatrix(); } } //Rendu 3D d'un block TECHNE public TileEntityBlocktombeSpecialRenderer() { this.func_147497_a(TileEntityRendererDispatcher.instance); } }
Voila je ne comprend pas d’ou vient le crash il ne ce produit que quand je touche le bloc en multijoueur si personne ne passe dessus tout fonctionne.
Merci de votre aide.
-
Je ne le vois pas, mais selon le crash report tu fais appel à GuiScreen sur le serveur mais cette classe n’existe pas côté serveur.
-
Mieux comme ceci
@SideOnly(SIDE.CLIENT) public int getRenderType() { return Clientproxy.tesrRenderId; }
N’oublier pas d’ importer l’annotation SideOnly.
La méthode getRenderType() n’est à appeler que sur le côté Client, donc fais bien attention la prochaine fois
-
Effectivement je cherchais, mais tu as trouvé avant moi
-
Il a sûrement mit un truc en rapport avec GuiScreen dans le constructeur de son ClientProxy. Le serveur essaye de charger la classe ClientProxy et donc il crash.
Julot10085 a donné la bonne solution. -
robin, pas mal de personnes font cette erreur, y compris moi au début. En fait sur ton tuto, tu as oublié de mettre l’annotation. Si tu pouvais l’éditer quand t’auras le temps
-
Ah oui exact pfff je suis vraiment désolé erreur de …… j’avais pas fait attention que le new getRenderType() que j’avais codé ce lancé aussi coté serveur Merci beaucoup ça parait tellement logique quand on voie son erreur …
-
Je vois ça, je viens de l’ajouter.
-
C’est vrai que j’avais eu la même mauvaise surprise qui avait été résolu tout aussi simplement.
Une bonne chose de faite.