Ajouter un rendu avancé à votre bloc via TESR
-
at fraiden.minecraftmod.radioactivity.client.ModelCrusher.<init>(ModelCrusher.java:223)
Tu peux envoyer la classe de ton modèle ?</init> -
@‘robin4002’:
at fraiden.minecraftmod.radioactivity.client.ModelCrusher.<init>(ModelCrusher.java:223)
Tu peux envoyer la classe de ton modèle ?</init>le code ?
-
oui.
-
@‘robin4002’:
oui.
Problème résolu, c’était à cause des mirrors.
-
===ERREUR===
Salut,
Après une journée de travail intensif pour essayer de régler ce problème, rien ne fait… j’en suis toujours au même point.
Je me permet donc de vous demander de l’aide.
===MON PROBLÈME===Le bloc en jeux s’affiche comme un bloc sans texture de base
===MON CODE===
class du bloc :
package fr.baptiste.notifia.Blocks; import java.util.List; import fr.baptiste.notifia.TileEntity.TileEntityCone; import fr.baptiste.notifia.proxy.ClientProxy; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class cone extends Block { public cone(Material material) { super(material); } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityCone(); } @Override public boolean hasTileEntity(int metadata) { return true; } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return ClientProxy.tesrRenderId; } 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); } }
Class TileEntity du bloc:
package fr.baptiste.notifia.TileEntity; import net.minecraft.tileentity.TileEntity; public class TileEntityCone extends TileEntity { }
ClientProxy:
package fr.baptiste.notifia.proxy; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; import fr.baptiste.notifia.TileEntity.TileEntityCone; import fr.baptiste.notifia.TileEntity.TileEntityConeSpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; public class ClientProxy extends CommonProxy { public static int tesrRenderId; @Override public void registerRenders() { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCone.class, new TileEntityConeSpecialRenderer()); tesrRenderId = RenderingRegistry.getNextAvailableRenderId(); RenderingRegistry.registerBlockHandler(new TESRInventoryRenderer()); } }
Le specialRenderer :
package fr.baptiste.notifia.TileEntity; import org.lwjgl.opengl.GL11; import fr.baptiste.notifia.Reference; import fr.baptiste.notifia.models.ModelConeTesr; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public class TileEntityConeSpecialRenderer extends TileEntitySpecialRenderer { public static ModelConeTesr model = new ModelConeTesr(); public static ResourceLocation texture = new ResourceLocation(Reference.MOD_ID, "textures/models/blocks/cone.png"); public TileEntityConeSpecialRenderer() { this.func_147497_a(TileEntityRendererDispatcher.instance); } @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick) // la fonction qui était la de base { this.renderTileEntityConeAt((TileEntityCone)tile, x, y, z, partialRenderTick); // j'appelle ma fonction renderTileEntityTutorielAt en castant TileEntityTutoriel à l'argument tile } private void renderTileEntityConeAt(TileEntityCone tile, double x, double y, double z, float partialRenderTick) // ma propre fonction { GL11.glPushMatrix(); // ouvre une matrix GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); // déplace le bloc sur les coordonnés et le centre GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); // met droit le bloc (par défaut il est à l'envers) this.bindTexture(texture); // affiche la texture model.renderAll(); // rend le modèle GL11.glPopMatrix(); // ferme la matrix } }
Le inventoryrenderer :
package fr.baptiste.notifia.proxy; import org.lwjgl.opengl.GL11; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import fr.baptiste.notifia.TileEntity.TileEntityConeSpecialRenderer; import fr.baptiste.notifia.init.BlockMod; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; public class TESRInventoryRenderer implements ISimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { if(block == BlockMod.cone && metadata == 0) { GL11.glPushMatrix(); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityConeSpecialRenderer.texture); TileEntityConeSpecialRenderer.model.renderAll(); GL11.glPopMatrix(); } } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { return false; } @Override public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return 0; } }
Class racine (une partie) :
public void Init(FMLInitializationEvent event) { proxy.registerRenders(); GameRegistry.registerTileEntity(TileEntityCone.class, null); }
J’espère que tout sera vous serez utile pour régler ce problème. Merci beaucoup et bonne soirée;
Amicalement, Baptiste. G
-
Salut,
GameRegistry.registerTileEntity(TileEntityCone.class, null);
devrait être :
GameRegistry.registerTileEntity(TileEntityCone.class, Reference.MOD_ID + “:cone”); -
@‘robin4002’:
Salut,
GameRegistry.registerTileEntity(TileEntityCone.class, null);
devrait être :
GameRegistry.registerTileEntity(TileEntityCone.class, Reference.MOD_ID + “:cone”);Aucun changement.
-
Tu peux envoyer ta classe client proxy ?
-
@‘robin4002’:
Tu peux envoyer ta classe client proxy ?
Elle y est
-
Ah oui en effet, j’avais pourtant vérifié deux fois x)
Tu as essayé de replacé les blocs après avoir corrigé l’enregistrement du tile entity ?
Car je ne vois pas d’autres problèmes dans ton code. -
@‘robin4002’:
Ah oui en effet, j’avais pourtant vérifié deux fois x)
Tu as essayé de replacé les blocs après avoir corrigé l’enregistrement du tile entity ?
Car je ne vois pas d’autres problèmes dans ton code.Je test et je te tient au courant?
-
J’ai cette erreur dans la console :
[17:36:26] [Server thread/ERROR] [FML]: A TileEntity type fr.baptiste.notifia.TileEntity.TileEntityCone has throw an exception trying to write state. It will not persist. Report this to the mod author java.lang.RuntimeException: class fr.baptiste.notifia.TileEntity.TileEntityCone is missing a mapping! This is a bug! at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:96) ~[TileEntity.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:395) [AnvilChunkLoader.class:?] at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:204) [AnvilChunkLoader.class:?] at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:287) [ChunkProviderServer.class:?] at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:340) [ChunkProviderServer.class:?] at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:863) [WorldServer.class:?] at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:113) [IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
-
Ton tile entity n’est toujours pas enregistré correctement.
-
Dans le game registry :
GameRegistry.registerTileEntity(TileEntityCone.class, Reference.MOD_ID + ":cone");
À quoi correspond le “:cone” ?
-
Au non qui sera utilisé pour sauvegarder et charger ton TileEntity, afin d’avoir toujours le même.
Et vérifiés que cette fonction soit bien appelée. -
@‘AymericRed’:
Au non qui sera utilisé pour sauvegarder et charger ton TileEntity, afin d’avoir toujours le même.
Et vérifiés que cette fonction soit bien appelée.Je ne comprends pas ce qui bloque… Meme avec un gameregistry correct cela ne fonctionne pas…
-
Ton GameRegistry est placé où ?
-
@‘AymericRed’:
Ton GameRegistry est placé où ?
Dans mon Init de ma classe racine
-
J’ai un petit problème en 1.11.2, je ne sais pas pourquoi mais le rendu dans le monde est très noir comparé à la véritable texture De plus j’ai l’impression que les jsons ne fonctionne, sauriez vous m’aider pour la 1.11.2 ?
Voici dans l’inventaire et dans la main alors que mon json pour l’item block
{ "parent": "builtin/entity", "display": { "thirdperson": { "rotation": [ 10, -45, 170 ], "translation": [ 0, 1.5, -2.75 ], "scale": [ 0.375, 0.375, 0.375 ] } } }
le json du block :
{ "parent": "builtin/entity", "textures": { "particle": "economy:blocks/block_atm" } }
et mon blockstate
{ "variants": { "normal": { "model": "economy:block_atm" } } }
Pour ce qui est du rendu dans le monde je ne sais pas trop /:
Des idées ?
-
voici ma classe principal:
package ch.gonin.guillaume.ZombieCubeFree.common; import ch.gonin.guillaume.ZombieCubeFree.Proxy.CommonProxy; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.block.BlockGravel; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @Mod(modid = "zombiecubefree", name = "Zombie Cube Free", version = "1.0.0") /** * @author Guillaume * */ public class main { @Instance("zombiecubefree") public static main instance; public static final String MODID = "zombiecubefree"; @EventHandler public void preInit(FMLPreInitializationEvent event) { blockTutoriel = new BlockTutoriel(Material.rock).setBlockName("blockTutoriel") .setBlockTextureName(MODID + ":block_tutoriel").setCreativeTab(CreativeTabs.tabBlock) .setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerBlock(blockTutoriel, "block_tutoriel"); blockTutorielTiles = new BlockTutorielTiles(Material.rock).setCreativeTab(CreativeTabs.tabBlock) .setBlockName("tutorielTiles").setBlockTextureName(MODID + ":block_tutoriel_tiles") .setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerBlock(blockTutorielTiles, "block_tutoriel_tiles"); blockMetadata = new BlockMetadata().setBlockName("blockMetadata").setHardness(1.5F).setResistance(10.0F) .setCreativeTab(CreativeTabs.tabBlock).setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerBlock(blockMetadata, ItemblockMetadata.class, "block_metadata"); itemTutoriel = new ItemTutoriel().setUnlocalizedName("itemTutoriel") .setTextureName(main.MODID + ":item_tutoriel").setCreativeTab(CreativeTabs.tabBlock) .setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerItem(itemTutoriel, "item_tutoriel"); cuisiniere = new Cuisiniere(Material.rock).setBlockName("cuisiniere").setCreativeTab(CreativeTabs.tabBlock) .setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerBlock(cuisiniere, "cuisiniere"); tele = new Tele(Material.rock).setBlockName("tele").setCreativeTab(CreativeTabs.tabBlock) .setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerBlock(tele, "tele"); itemShowInfo = new ItemShowInfo().setUnlocalizedName("itemShowInfo") .setTextureName(main.MODID + ":item_show_info").setCreativeTab(CreativeTabs.tabBlock) .setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerItem(itemShowInfo, "item_show_info"); itemGaz = new ItemGaz().setUnlocalizedName("itemGaz").setTextureName(main.MODID + ":item_gaz") .setCreativeTab(CreativeTabs.tabBlock).setCreativeTab(ZombieCubeFreeCreativeTabs); GameRegistry.registerItem(itemGaz, "item_gaz"); } @SidedProxy(clientSide = "ch.gonin.guillaume.ZombieCubeFree.Proxy.ClientProxy", serverSide = "ch.gonin.guillaume.ZombieCubeFree.Proxy.CommonProxy") public static CommonProxy proxy; @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); GameRegistry.registerTileEntity(TileEntityBlockTutorielTiles.class, MODID + ":blockTutorielTiles"); GameRegistry.registerTileEntity(TileEntityTele.class, MODID + ":tele"); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } public static Block blockTutoriel; public static Block blockTutorielTiles; public static Block blockMetadata; public static Item itemTutoriel; public static Block cuisiniere; public static Block tele; public static Item itemShowInfo; public static Item itemGaz; public static CreativeTabs ZombieCubeFreeCreativeTabs = new ZombieCubeFreeCreativeTabs("Zombie Cube Free"); }
la classe de mon model:
package ch.gonin.guillaume.ZombieCubeFree.client; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; public class ModelTele extends ModelBase { //fields ModelRenderer Shape1; ModelRenderer Shape2; ModelRenderer Shape3; ModelRenderer Shape4; ModelRenderer Shape5; ModelRenderer Shape6; ModelRenderer Piece1; public ModelTele() { textureWidth = 64; textureHeight = 32; Shape1 = new ModelRenderer(this, 3, 12); Shape1.mirror = true; Shape1.addBox(-6F, -1F, -1.5F, 16, 1, 4); Shape1.setRotationPoint(6F, 24F, -0.5F); Shape1.setTextureSize(64, 32); setRotation(Shape1, 0F, 0F, 0F); Shape2 = new ModelRenderer(this, 0, 0); Shape2.mirror = true; Shape2.addBox(-2F, -0.5F, -2F, 4, 1, 3); Shape2.setRotationPoint(8F, 22.5F, 0F); Shape2.setTextureSize(64, 32); setRotation(Shape2, 0F, 0F, 0F); Shape3 = new ModelRenderer(this, 0, 0); Shape3.mirror = true; Shape3.addBox(0F, 0F, 0F, 2, 3, 1); Shape3.setRotationPoint(7F, 19.73333F, -1F); Shape3.setTextureSize(64, 32); setRotation(Shape3, 0F, 0F, 0F); Shape4 = new ModelRenderer(this, 4, 21); Shape4.mirror = true; Shape4.addBox(0F, 0F, 0F, 18, 4, 1); Shape4.setRotationPoint(-1F, 16.5F, 0F); Shape4.setTextureSize(64, 32); setRotation(Shape4, 0F, 0F, 0F); Shape5 = new ModelRenderer(this, 4, 3); Shape5.mirror = true; Shape5.addBox(0F, 0F, 1F, 6, 3, 1); Shape5.setRotationPoint(5F, 16.8F, -2F); Shape5.setTextureSize(64, 32); setRotation(Shape5, 0F, 0F, 0F); Shape6 = new ModelRenderer(this, 0, 0); Shape6.mirror = true; Shape6.addBox(0F, 0F, 0F, 22, 8, 1); Shape6.setRotationPoint(-3F, 14.5F, 1F); Shape6.setTextureSize(64, 32); setRotation(Shape6, 0F, 0F, 0F); Piece1 = new ModelRenderer(this, "Piece1"); Piece1.mirror = true; Piece1.setRotationPoint(4F, 0F, -0.5F); setRotation(Piece1, 0F, 0F, 0F); } public void renderAll() { Shape1.render(0.0625F); Shape2.render(0.0625F); Shape3.render(0.0625F); Shape4.render(0.0625F); Shape5.render(0.0625F); Shape6.render(0.0625F); Piece1.render(0.0625F); } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } }
celle de mon block:
package ch.gonin.guillaume.ZombieCubeFree.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; public class Tele extends Block{ protected Tele(Material material) { super(material); // TODO Auto-generated constructor stub } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityTele(); } @Override public boolean hasTileEntity(int metadata) { return true; } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } public int getRenderType() { return -1; } } celle de l'entité de mon block: * package ch.gonin.guillaume.ZombieCubeFree.common; import net.minecraft.tileentity.TileEntity; public class TileEntityTele extends TileEntity { }
celle de l’entité spécial de mon block:
package ch.gonin.guillaume.ZombieCubeFree.common; import org.lwjgl.opengl.GL11; import ch.gonin.guillaume.ZombieCubeFree.client.ModelTele; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; public class TileEntityTeleSpecialRenderer extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick) { // TODO Auto-generated method stub this.renderTileEntityTeleAt((TileEntityTele) tile, x, y, z, partialRenderTick); } private void renderTileEntityTeleAt(TileEntityTele tile, double x, double y, double z, float partialRenderTick) { ModelTele model = new ModelTele(); ResourceLocation texture = new ResourceLocation(main.MODID, "model_tele"); GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); this.bindTexture(texture); model.renderAll(); GL11.glPopMatrix(); } }
et enfin mon clientProxy:
import ch.gonin.guillaume.ZombieCubeFree.common.TileEntityTele; import ch.gonin.guillaume.ZombieCubeFree.common.TileEntityTeleSpecialRenderer; import cpw.mods.fml.client.registry.ClientRegistry; public class ClientProxy extends CommonProxy { @Override public void registerRender() { System.out.println("méthode côté client"); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTele.class, new TileEntityTeleSpecialRenderer()); } }
je sais pas de où vient le problème mais la texture ne s’affiche pas
qqn peut ?