Ajouter un rendu avancé à votre bloc via TESR
-
Et une dernière modification, dans la classe de votre bloc, modifiez le return -1 dans la fonction getRenderType par return ClientProxy.tesrRenderId.
Dans ta classe BlockCauldron :
public int getRenderType() { return -1; }Devrait être :
public int getRenderType() { return ClientProxy.tesrRenderId; } -
Merci ^^ C’est bon c’est ok !

-
Hello, superbe tuto. Je doit avouer que c’est quelques choses de très utilise dès qu’on souhaite faire un peu plus que de l’ajout de block/item basique.
Sinon, j’aurai une petite question. Je n’ai jamais vraiment trop causé sur le forum, malgré le temps que j’y ai passé… Mais, voila, j’aimerai savoir, si on souhaite faire un rendu d’un escalier en modifiant son block bounds, comment faire pour qu’il y ai encore la jointure dans les angles ?
Ça fait un bout de temps que je cherche mais je n’ai jamais réussi a résoudre mon problème. Et disons que passer par un rendu TESR, ça me parait lourd pour juste un escalier

En espérant trouver une réponse,
Salutation a vous,
0xPic0. -
Pour un escalier custom passe plutôt par un rendu ISBRH (il y a un tutoriel 1.6, il n’y a pas beaucoup de différence).
Il suffit d’adapter le rendu en fonction des blocs autours (avec world.getBlock(x, y, z +1) == TaClassePrincipale.tonEscalier par exemple) -
Okay, merci robin. Mon rendu tourne déjà en ISBRH, c’est pour cela que je demandais si TESR était mieux ^^ . Je vais essayer de corriger mon soucis d’angle dans ce cas. Si j’y arrive alors j’arriverai a résoudre le rendu de l’escalier quand il est mit a l’envers

Je reviendrai vers vous si jamais je ne m’en sort pas mais ça devrait aller
Merci beaucoup.
0xPic0
Edit: Heu, je devait avoir la tête ailleurs, m’enfin, ce que tu m’a proposé est déjà en place. Là ou je pêche, c’est sur le rendu vers le haut et les angles. Physiquement, Steve ressent l’angle, seulement, graphiquement, ce n’est pas correct. Quand au bloc a l’envers, c’est l’affichage qui ne se fait pas. J’ai chercher dans la classe BlockStairs mais, :fuuuu: qu’est-ce que c’est le bordel toutes des méthodes sans doc et sans nomination intelligente ^^, j’espère trouver

-
Plop!

J’ai comme qui dirait un p’tit problème avec TESR : ma méthode renderTileEntityAt(TileEntity, double, double, double, float) n’est jamais appelée…
J’ai vérifié avec des System.out.println, c’est bien à partir de là que ça marche pas; le bloc est là, la hitbox est visible, mais aucun rendu, aucune texture, il est totalement invisible…
Mon code
Mon ClientProxy
:::package sasukz.htmc.proxy; import sasukz.htmc.blocks.tileentities.TECopperCable; import sasukz.htmc.client.rendering.TESRCopperCable; import cpw.mods.fml.client.registry.ClientRegistry; public class ClientProxy extends CommonProxy { @Override public void registerRender() { System.out.println("[DEBUG] TESR chargé"); ClientRegistry.bindTileEntitySpecialRenderer(TECopperCable.class, new TESRCopperCable()); } }:::
Mon TileEntity
:::package sasukz.htmc.blocks.tileentities; import java.util.ArrayList; import net.minecraft.block.Block; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import sasukz.htmc.blocks.tileentities.utils.TEElectrical; import sasukz.htmc.common.HTMC; public class TECopperCable extends TEElectrical { public ArrayList <forgedirection>getConnections() { System.out.println("[DEBUG] Méthode getConnections() appelée"); ArrayList <forgedirection>r = new ArrayList<forgedirection>(); Block cc = HTMC.t_CopperCable; World w = getWorldObj(); if (w.getBlock(xCoord, yCoord+1, zCoord).equals(cc)) r.add(ForgeDirection.UP); if (w.getBlock(xCoord, yCoord-1, zCoord).equals(cc)) r.add(ForgeDirection.DOWN); if (w.getBlock(xCoord+1, yCoord, zCoord).equals(cc)) r.add(ForgeDirection.EAST); if (w.getBlock(xCoord-1, yCoord, zCoord).equals(cc)) r.add(ForgeDirection.WEST); if (w.getBlock(xCoord, yCoord, zCoord+1).equals(cc)) r.add(ForgeDirection.SOUTH); if (w.getBlock(xCoord, yCoord, zCoord-1).equals(cc)) r.add(ForgeDirection.NORTH); return r; } @Override public int getMaxEnergy() { return 128; } @Override public int getMinPower() { return 2; } @Override public int getMaxPower() { return 64; } }:::
Mon TESR
:::package sasukz.htmc.client.rendering; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import sasukz.htmc.blocks.tileentities.TECopperCable; import sasukz.htmc.common.HTMC; import sasukz.htmc.models.ModelCopperCable; public class TESRCopperCable extends TileEntitySpecialRenderer { public static ModelCopperCable model = new ModelCopperCable(); public static ResourceLocation texture = new ResourceLocation(HTMC.MODID, "textures/models/blocks/copper_cable.png"); @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialRenderTick) { System.out.println("[HTMC] Méthode renderTileEntityAt() appelée"); GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); bindTexture(texture); model.renderAll((TECopperCable)te); GL11.glPopMatrix(); } }:::
Merci d’avance :)</forgedirection></forgedirection></forgedirection>
-
Ton bloc ? Ta classe principale ?
-
Mon bloc
:::package sasukz.htmc.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import sasukz.htmc.blocks.tileentities.TECopperCable; import sasukz.htmc.common.HTMC; public class BlockCopperCable extends Block { public BlockCopperCable(Material m) { super(m); setHardness(0.5F); setResistance(0.0F); setBlockName("copper_cable"); setCreativeTab(HTMC.ctab_mach); } @Override public boolean hasTileEntity() { return true; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TECopperCable(); } @Override public boolean isOpaqueCube() { return false; } @Override public boolean renderAsNormalBlock() { return false; } @Override public int getRenderType() { return -1; } }:::
Ma classe principale
:::package sasukz.htmc.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import sasukz.htmc.blocks.BlockCombiner; import sasukz.htmc.blocks.BlockCopperCable; import sasukz.htmc.blocks.BlockMacerator; import sasukz.htmc.blocks.BlockOreAluminum; import sasukz.htmc.blocks.BlockOreCopper; import sasukz.htmc.blocks.BlockOreLead; import sasukz.htmc.blocks.BlockOreSilicon; import sasukz.htmc.blocks.BlockOreSilver; import sasukz.htmc.blocks.BlockOreTin; import sasukz.htmc.blocks.BlockOreUranium; import sasukz.htmc.blocks.tileentities.TECombiner; import sasukz.htmc.blocks.tileentities.TECopperCable; import sasukz.htmc.blocks.tileentities.TEMacerator; import sasukz.htmc.generation.HTMCWorldGen; import sasukz.htmc.items.ItemAluminumPlate; import sasukz.htmc.items.ItemBasicCircuit; import sasukz.htmc.items.ItemDustAluminum; import sasukz.htmc.items.ItemDustCopper; import sasukz.htmc.items.ItemDustLead; import sasukz.htmc.items.ItemDustSilver; import sasukz.htmc.items.ItemDustTin; import sasukz.htmc.items.ItemIngotAluminum; import sasukz.htmc.items.ItemIngotBronze; import sasukz.htmc.items.ItemIngotCopper; import sasukz.htmc.items.ItemIngotLead; import sasukz.htmc.items.ItemIngotSilver; import sasukz.htmc.items.ItemIngotTin; import sasukz.htmc.items.ItemSilicon; import sasukz.htmc.items.ItemWrench; import sasukz.htmc.network.HTMCGUIHandler; import sasukz.htmc.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.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @Mod(modid="htmc", name="HTMC Mod", version="MC 1.7.10") public class HTMC { @Instance("htmc") public static HTMC instance; @SidedProxy(clientSide="sasukz.htmc.proxy.ClientProxy", serverSide="sasukz.htmc.proxy.CommonProxy") public static CommonProxy proxy; public static final String MODID = "htmc"; public static HTMCWorldGen worldgen = new HTMCWorldGen(); public static Block t_TinOre; public static Block t_CopperOre; public static Block t_SilverOre; public static Block t_UraniumOre; public static Block t_LeadOre; public static Block t_AluminumOre; public static Block t_SiliconOre; public static Block t_Combiner; public static Block t_Macerator; public static Block t_CopperCable; public static Item i_CopperIngot; public static Item i_TinIngot; public static Item i_SilverIngot; public static Item i_LeadIngot; public static Item i_AluminumIngot; public static Item i_BronzeIngot; public static Item i_Silicon; public static Item i_AluminumPlate; public static Item i_BasicCircuit; public static Item i_Wrench; public static Item i_CopperDust; public static Item i_TinDust; public static Item i_AluminumDust; public static Item i_LeadDust; public static Item i_SilverDust; public static CreativeTabs ctab_mat = new CreativeTabs("htmc_materials") { @Override public Item getTabIconItem() { return HTMC.i_CopperIngot; } @SideOnly(Side.CLIENT) public int func_151243_f() { return 0; } }; public static CreativeTabs ctab_comp = new CreativeTabs("htmc_components") { @Override public Item getTabIconItem() { return HTMC.i_BasicCircuit; } @SideOnly(Side.CLIENT) public int func_151243_f() { return 0; } }; public static CreativeTabs ctab_mach = new CreativeTabs("htmc_machines") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(HTMC.t_Combiner); } @SideOnly(Side.CLIENT) public int func_151243_f() { return 0; } }; @EventHandler public static void preInit(FMLPreInitializationEvent e) { GameRegistry.registerWorldGenerator(worldgen, 0); // BLOCKS –- t_TinOre = new BlockOreTin(Material.rock); GameRegistry.registerBlock(t_TinOre, "ore_tin"); t_CopperOre = new BlockOreCopper(Material.rock); GameRegistry.registerBlock(t_CopperOre, "ore_copper"); t_SilverOre = new BlockOreSilver(Material.rock); GameRegistry.registerBlock(t_SilverOre, "ore_silver"); t_UraniumOre = new BlockOreUranium(Material.rock); GameRegistry.registerBlock(t_UraniumOre, "ore_uranium"); t_LeadOre = new BlockOreLead(Material.rock); GameRegistry.registerBlock(t_LeadOre, "ore_lead"); t_AluminumOre = new BlockOreAluminum(Material.rock); GameRegistry.registerBlock(t_AluminumOre, "ore_aluminum"); t_SiliconOre = new BlockOreSilicon(Material.rock); GameRegistry.registerBlock(t_SiliconOre, "ore_silicon"); t_Combiner = new BlockCombiner(Material.rock); GameRegistry.registerBlock(t_Combiner, "combiner"); t_Macerator = new BlockMacerator(Material.rock); GameRegistry.registerBlock(t_Macerator, "macerator"); t_CopperCable = new BlockCopperCable(Material.iron); GameRegistry.registerBlock(t_CopperCable, "copper_cable"); // ITEMS --- i_CopperIngot = new ItemIngotCopper(); GameRegistry.registerItem(i_CopperIngot, "ingot_copper"); i_TinIngot = new ItemIngotTin(); GameRegistry.registerItem(i_TinIngot, "ingot_tin"); i_SilverIngot = new ItemIngotSilver(); GameRegistry.registerItem(i_SilverIngot, "ingot_silver"); i_LeadIngot = new ItemIngotLead(); GameRegistry.registerItem(i_LeadIngot, "ingot_lead"); i_AluminumIngot = new ItemIngotAluminum(); GameRegistry.registerItem(i_AluminumIngot, "ingot_aluminum"); i_Silicon = new ItemSilicon(); GameRegistry.registerItem(i_Silicon, "silicon"); i_BasicCircuit = new ItemBasicCircuit(); GameRegistry.registerItem(i_BasicCircuit, "basic_circuit"); i_AluminumPlate = new ItemAluminumPlate(); GameRegistry.registerItem(i_AluminumPlate, "aluminum_plate"); i_Wrench = new ItemWrench(); GameRegistry.registerItem(i_Wrench, "wrench"); i_CopperDust = new ItemDustCopper(); GameRegistry.registerItem(i_CopperDust, "dust_copper"); i_TinDust = new ItemDustTin(); GameRegistry.registerItem(i_TinDust, "dust_tin"); i_BronzeIngot = new ItemIngotBronze(); GameRegistry.registerItem(i_BronzeIngot, "ingot_bronze"); i_AluminumDust = new ItemDustAluminum(); GameRegistry.registerItem(i_AluminumDust, "dust_aluminum"); i_LeadDust = new ItemDustLead(); GameRegistry.registerItem(i_LeadDust, "dust_lead"); i_SilverDust = new ItemDustSilver(); GameRegistry.registerItem(i_SilverDust, "dust_silver"); } @EventHandler public static void init(FMLInitializationEvent e) { proxy.registerRender(); GameRegistry.registerTileEntity(TECombiner.class, MODID+":combiner"); GameRegistry.registerTileEntity(TEMacerator.class, MODID+":macerator"); System.out.println("[DEBUG] TileEntity enregistré."); GameRegistry.registerTileEntity(TECopperCable.class, MODID+":copper_cable"); HTMCRecipes.addRecipes(); HTMCRecipes.addSmeltings(); } @EventHandler public static void postInit(FMLPostInitializationEvent e) { NetworkRegistry.INSTANCE.registerGuiHandler(instance, new HTMCGUIHandler()); } }:::
-
Je ne vois aucun problème, essaye de créer un nouveau monde puis de replacer des blocs.
Le seul truc que je trouve étrange, c’est que tes fonctions init, preInit sont statics dans ta classe principale, normalement il n’y a pas besoin. -
ça marche toujours pas

Je suis certain que le problème vient de mon TESR, la méthode est jamais appelée.
-
Pourtant ton TESR est bien enregistré dans le client proxy, à la limite envoie un zip de ton dossier src, je vais regarder quand j’aurai le temps.
-
Bonjour,
J’ai donc ajouté un rendu Techne à mon bloc grâce au super tuto de robin mais j’ai un soucis quand je regarde mon block dans mon mod je lag énormément …
Par déduction je pense que ceci vient du nombre de tick par seconde et je voudrais savoir si il était possible de le diminuer.
et si oui comment.
Merci d’avance
-
Il me semble pas que ce soit possible de réduire ça.
Ton modèle ressemble à quoi ? Car j’ai jamais eu de grosse chute de fps à cause d’un TESR … -
Arf mon modèle est petit mais à 240 parties sous techne …
Tu pense que le problème vient de la ?
-
Surement oui, 240 ça fait beaucoup.
-
Pas d’autre moyen de créer un block avec un modèle techne ?
Car passer par un Tilentity alors que mon block n’a rien de particulier apart le modèle…
-
Il y a les rendus ISBRH mais ça ne passe par un modèle.
-
Après avoir testé avec un modèle moins détaillé, le problème disparaît malheureusement ^^
-
Il aura t’ils un tutoriels pour la 1.8 ?
-
Non, pas encore.