Rendu de bloc TESR
-
WHAT ? Attends, explique moi ce que tu veux faire. Tu veux faire un ou deux blocs ? Car la ce que tu as fait actuellement c’est 2 blocs en metadata avec 2 tile entity.
-
Non donc j’ai mon block barriere qui est un modèle techne donc j’ai suivi le tutoriel pour le faire , après j’ai voulu faire en sorte que sa tourne selon la direction j’ai posté ce message car je n’y arrivais pas et tu ma dis qu’il fallait aussi suivre le tuto sur la direction des blocs pour que mon model techne se tourne selon ou je me trouve j’ai donc suivi le tuto et dans le tuto il y a deux classes apparement ce que je voudrais c’est que mon model se tourne quand je le place de la facon dont moi je suis
Désolé si je semble mal m’exprimé 
-
Les tutoriels, ils faut les lires, pas les copier/coller …
J’ai expliqué dans le tutoriel sur les directions que j’appliquais la direction à un bloc en metadata de metadata2, dans ton cas tu n’as pas de bloc avec metadata, il te faut donc un seul tile entity --’
Donc ça :@Override public TileEntity createTileEntity(World world, int metadata) { if(metadata == 0) return new TileEntityBarriere(); else if(metadata == 2) return new TileEntityBarriere2(); else return null; } public boolean hasTileEntity(int metadata) { if(metadata == 0 || metadata == 2) return true; else return false; } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; TileEntity te = world.getTileEntity(x, y, z); if(te != null && stack.getItemDamage() == 2 && te instanceof TileEntityBarriere2) { ((TileEntityBarriere2)te).setDirection((byte)direction); world.markBlockForUpdate(x, y, z); } }Devient :
@Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityBarriere(); } public boolean hasTileEntity(int metadata) { return true; } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntityBarriere) { ((TileEntityBarriere)te).setDirection((byte)direction); world.markBlockForUpdate(x, y, z); } }Et tu mets tout le contenu de TileEntityBarriere2 dans TileEntityBarriere et puis tu supprime TileEntityBarriere2
-
Pfiouuu , vraiment désolé j’ai lu vite pour pouvoir répondre et résoudre le problème , j’aurais pas du
Mais maintenant sa marche un grand merci à toi robin !!!
Y a t-il moyen de faire comme les escaliers ou même les barrières pour que les textures se connecte sur les coins ? Et pour la barrière qui sort de la case de l’inventaire comment faire ? 

-
Pour le rendu dans l’inventaire, je ne vois pas quoi faire à par un glScalef.
Pour les coins, il faudrait faire plusieurs modèles et choisir le modèle en fonction des blocs qui sont autours. -
Ouah ça a l’air compliquer pour les coins
Tu saurais me passer le code du dlScalef s’il te plait ? 
-
bha tu ajoute dans le code de ton rendu un G11.Scalef(x,y,z);
-
Sa ne marche pas ou que je le place et si je le place après les autres GL11 etc sa scale la barrière en jeux et pas dans l’inventaire
-
Envoi ton code de rendu
-
BarriereInventoryRenderer
package mod.proxy; import java.util.HashMap; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; public class BarriereInventoryRenderer implements ISimpleBlockRenderingHandler { public static class TESRIndex { Block block; int metadata; public TESRIndex(Block block, int metadata) { this.block = block; this.metadata = metadata; } @Override public int hashCode() { return block.hashCode() + metadata; } @Override public boolean equals(Object o) { if(!(o instanceof TESRIndex)) return false; TESRIndex tesr = (TESRIndex)o; return tesr.block == block && tesr.metadata == metadata; } } public static HashMap <tesrindex, iinventoryrenderer="">blockByTESR = new HashMap<tesrindex, iinventoryrenderer="">(); @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { TESRIndex index = new TESRIndex(block, metadata); if(blockByTESR.containsKey(index)) { blockByTESR.get(index).renderInventory(-0.5, -0.5, -0.5); } } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { return true; } public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return ClientProxy.renderInventoryBarriere; } }Celui-ci ?</tesrindex,></tesrindex,>
-
package mod.proxy; import java.util.HashMap; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; public class BarriereInventoryRenderer implements ISimpleBlockRenderingHandler { public static class TESRIndex { Block block; int metadata; public TESRIndex(Block block, int metadata) { this.block = block; this.metadata = metadata; } @Override public int hashCode() { return block.hashCode() + metadata; } @Override public boolean equals(Object o) { if(!(o instanceof TESRIndex)) return false; TESRIndex tesr = (TESRIndex)o; return tesr.block == block && tesr.metadata == metadata; } } public static HashMap <tesrindex, iinventoryrenderer="">blockByTESR = new HashMap<tesrindex, iinventoryrenderer="">(); @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { TESRIndex index = new TESRIndex(block, metadata); GL11.glScaled(0.5f, 0.5f, 0.5f); if(blockByTESR.containsKey(index)) { blockByTESR.get(index).renderInventory(-0.5, -0.5, -0.5); } } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { return true; } public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return ClientProxy.renderInventoryBarriere; } }essaie avec ca</tesrindex,></tesrindex,>
-
Ca dépasse toujours du cadre

-
Il y a rien a faire dans la classe BarriereInventoryRenderer.
D’ailleurs ce nom n’est pas approprié, car comme je l’ai expliqué la classe implements ISimpleBlockRenderingHandler va servir pour tous les rendus en main des TESR.Il faudrait plutôt modifier TileEntityBarriereSpecialRender.
@Override public void renderInventory(double x, double y, double z) { GL11.glPushMatrix(); GL11.glScaled(1.0F, 0.5F, 1.0F); GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F); this.bindTexture(textureLocation); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); this.model.render(0.0625F); GL11.glPopMatrix(); } -
oui j’avais mal vu
-
Ca se réduit également mais il est toujours hors du cadre , mais il y a un énorme espace entre le bas de la case et le bas de la barrière , il y a moyen de bouger la barrière vers le bas ?
-
Lance ton jeu en débug et “joue” avec cette ligne :
GL11.glTranslated(x + 0.5F, y + 1.5F, z + 0.5F);
(En gros change les valeurs jusqu’à avoir ce que tu veux). -
Merci Robin c’est parfait !! Je suis content mon mod va pouvoir avancer , il ne me reste plus qu’a trouver le code pour la hitbox , tu a des idées de sites spécialisés ou je pourrais chercher ( même anglais ) s’il te plait ?
-
Ici même. http://www.minecraftforgefrance.fr/showthread.php?tid=136
getSelectedBoundingBoxFromPool
getCollisionBoundingBoxFromPool -
Oké merci je vais lire tout ca et je re port si j’ai un problème ^^
J’ai réussi a faire la hitbox plus grande !!
Merci , par contre quand je regarde le haut de la barriere la hitbox disparais mais quand je regarde le bas elle ré-apparaît , y’a un moyen de considérer la hitbox entière comme le block ? -
Non, pas possible. Minecraft n’est pas prévu pour ça.
Le seul moyen de faire ça c’est de faire deux blocs, comme la porte.
