Résolu Tourner CustomBlock dans la main
-
J’aimerais faire tourner le modèle que dans ma main pas dans la barre d’inventaire et en 3D quand il est posé, voici les classes :
package fr.altiscraft.altiscraft.proxy; import org.lwjgl.opengl.GL11; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import fr.altiscraft.altiscraft.common.ModAltisCraft; 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 { public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { if (block == ModAltisCraft.BlocATM) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityATMSpecialRenderer.texture); TileEntityATMSpecialRenderer.model.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocVLampadaire) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityVLampadaireSpecialRenderer.texturev); TileEntityVLampadaireSpecialRenderer.modelv.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocPoubelle) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityPoubelleSpecialRenderer.texturep); TileEntityPoubelleSpecialRenderer.modelp.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocCoco) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityCocoSpecialRenderer.textures); TileEntityCocoSpecialRenderer.models.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocLampadaire) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityCocoSpecialRenderer.texturesb); TileEntityCocoSpecialRenderer.modelsb.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocBarriereOuverte) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager() .bindTexture(TileEntityBarriereOuverteSpecialRenderer.texturesbo); TileEntityBarriereOuverteSpecialRenderer.modelsbo.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocBarriereFerme) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityBarriereFermeSpecialRenderer.texturesbf); TileEntityBarriereFermeSpecialRenderer.modelsbf.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocPanneauSTOP) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(TileEntityPanneauSTOPSpecialRenderer.textureps); TileEntityPanneauSTOPSpecialRenderer.modelps.renderAll(); GL11.glPopMatrix(); } else if (block == ModAltisCraft.BlocPanneauInterdit) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager() .bindTexture(TileEntityPanneauInterditSpecialRenderer.texturepi); TileEntityPanneauInterditSpecialRenderer.modelpi.renderAll(); GL11.glPopMatrix(); } } public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { return false; } public int getRenderId() { return ClientProxy.tesrRenderId; } public boolean shouldRender3DInInventory(int modelId) { return true; } }
package fr.altiscraft.altiscraft.common; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import fr.altiscraft.altiscraft.proxy.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; import net.minecraftforge.common.util.ForgeDirection; public class BlocPanneauInterdit extends Block { protected BlocPanneauInterdit() { super(Material.ground); } public boolean hasTileEntity(int metadata) { return true; } public TileEntity createTileEntity(World world, int metadata) { return new TileEntityPanneauInterdit(); } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } @SideOnly(Side.CLIENT) public int getRenderType() { return ClientProxy.tesrRenderId; } 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 TileEntityPanneauInterdit)) { int direction = MathHelper.floor_double(living.rotationYaw * 4.0F / 360.0F + 2.5D) & 0x3; ((TileEntityPanneauInterdit) tile).setDirection((byte) direction); } } } public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) { if (((axis == ForgeDirection.UP) || (axis == ForgeDirection.DOWN)) && (!world.isRemote) && (world.getBlockMetadata(x, y, z) == 0)) { TileEntity tile = world.getTileEntity(x, y, z); if ((tile instanceof TileEntityPanneauInterdit)) { TileEntityPanneauInterdit tilePanneauInterdit = (TileEntityPanneauInterdit) tile; byte direction = tilePanneauInterdit.getDirection(); direction = (byte) (direction + 1); if (direction > 3) { direction = 0; } tilePanneauInterdit.setDirection(direction); return true; } } return false; } public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { setBlockBounds(0.45F, 0.0F, 0.45F, 0.55F, 3.0F, 0.55F); } public ForgeDirection[] getValidRotations(World world, int x, int y, int z) { return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] { ForgeDirection.UP, ForgeDirection.DOWN } : ForgeDirection.VALID_DIRECTIONS; } }
package fr.altiscraft.altiscraft.client; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; public class ModelBlockPanneauInterdit extends ModelBase { ModelRenderer poteau; ModelRenderer centre; ModelRenderer apreshaut; ModelRenderer haut; ModelRenderer apresbas; ModelRenderer bas; public ModelBlockPanneauInterdit() { textureWidth = 32; textureHeight = 64; poteau = new ModelRenderer(this, 0, 0); poteau.addBox(0F, 0F, 0F, 2, 48, 2); poteau.setRotationPoint(-1F, -24F, -1F); poteau.setTextureSize(32, 64); setRotation(poteau, 0F, 0F, 0F); centre = new ModelRenderer(this, 0, 55); centre.addBox(0F, 0F, 0F, 14, 5, 1); centre.setRotationPoint(-7F, -20F, -2F); centre.setTextureSize(32, 64); setRotation(centre, 0F, 0F, 0F); apreshaut = new ModelRenderer(this, 10, 51); apreshaut.addBox(0F, 0F, 0F, 10, 2, 1); apreshaut.setRotationPoint(-5F, -22F, -2F); apreshaut.setTextureSize(32, 64); setRotation(apreshaut, 0F, 0F, 0F); haut = new ModelRenderer(this, 10, 50); haut.addBox(0F, 0F, 0F, 6, 2, 1); haut.setRotationPoint(-3F, -24F, -2F); haut.setTextureSize(32, 64); setRotation(haut, 0F, 0F, 0F); apresbas = new ModelRenderer(this, 10, 50); apresbas.addBox(0F, 0F, 0F, 10, 2, 1); apresbas.setRotationPoint(-5F, -15F, -2F); apresbas.setTextureSize(32, 64); setRotation(apresbas, 0F, 0F, 0F); bas = new ModelRenderer(this, 13, 50); bas.addBox(0F, 0F, 0F, 6, 2, 1); bas.setRotationPoint(-3F, -13F, -2F); bas.setTextureSize(32, 64); setRotation(bas, 0F, 0F, 0F); } public void renderAll() { this.poteau.render(0.0625F); this.bas.render(0.0625F); this.apresbas.render(0.0625F); this.haut.render(0.0625F); this.apreshaut.render(0.0625F); this.centre.render(0.0625F); } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } }
package fr.altiscraft.altiscraft.proxy; import org.lwjgl.opengl.GL11; import fr.altiscraft.altiscraft.client.ModelBlockPanneauInterdit; import fr.altiscraft.altiscraft.common.TileEntityPanneauInterdit; 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 TileEntityPanneauInterditSpecialRenderer extends TileEntitySpecialRenderer { public static ModelBlockPanneauInterdit modelpi = new ModelBlockPanneauInterdit(); public static ResourceLocation texturepi = new ResourceLocation("altiscraft", "textures/models/blocks/ModelBlockPanneauInterdit.png"); public TileEntityPanneauInterditSpecialRenderer() { func_147497_a(TileEntityRendererDispatcher.instance); } public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick) { renderTileEntityPanneauInterditAt((TileEntityPanneauInterdit) tile, x, y, z, partialRenderTick); } private void renderTileEntityPanneauInterditAt(TileEntityPanneauInterdit tile, double x, double y, double z, float partialRenderTick) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(90.0F * tile.getDirection() + 180.0F, 0.0F, 1.0F, 0.0F); bindTexture(texturepi); modelpi.renderAll(); GL11.glPopMatrix(); } }
Voilà cette photo expliquera mieux que moi :
-
} else if (block == ModAltisCraft.BlocPanneauInterdit) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager() .bindTexture(TileEntityPanneauInterditSpecialRenderer.texturepi); TileEntityPanneauInterditSpecialRenderer.modelpi.renderAll(); GL11.glPopMatrix(); }
ajoute un
GL11.glRotatef(90f, 0f, 1f, 0f);
avant ton:
GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F);
-
ça c’est le rendu dans l’inventaire xavpok, il faut qu’il modifie dans renderTileEntityPanneauInterditAt qu’il doit ajouter ça.
-
Robin tu veux que je fasse ça ? Parce que ça ne change rien… :S
package fr.altiscraft.altiscraft.proxy; import org.lwjgl.opengl.GL11; import fr.altiscraft.altiscraft.client.ModelBlockPanneauInterdit; import fr.altiscraft.altiscraft.common.TileEntityPanneauInterdit; 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 TileEntityPanneauInterditSpecialRenderer extends TileEntitySpecialRenderer { public static ModelBlockPanneauInterdit modelpi = new ModelBlockPanneauInterdit(); public static ResourceLocation texturepi = new ResourceLocation("altiscraft", "textures/models/blocks/ModelBlockPanneauInterdit.png"); public TileEntityPanneauInterditSpecialRenderer() { func_147497_a(TileEntityRendererDispatcher.instance); } public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialRenderTick) { renderTileEntityPanneauInterditAt((TileEntityPanneauInterdit) tile, x, y, z, partialRenderTick); } private void renderTileEntityPanneauInterditAt(TileEntityPanneauInterdit tile, double x, double y, double z, float partialRenderTick) { GL11.glPushMatrix(); GL11.glRotatef(90f, 0f, 1f, 0f); GL11.glTranslated(x + 0.5D, y + 1.5D, z + 0.5D); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(90.0F * tile.getDirection() + 180.0F, 0.0F, 1.0F, 0.0F); bindTexture(texturepi); modelpi.renderAll(); GL11.glPopMatrix(); } }
-
Pourtant ça devrait fonctionner …
-
Ah ba sans là je viens de relancer…
-
Après ce que j’ai dit c’est seulement pour le rendu dans le monde. Pour le rendu en main il faut passer par un IItemRenderer.
-
Tu peux me donner un lien vite fait s’il te plaît ? ^^
-
-
Balise résolu ?
-
Comme j’ai dis sur l’autre post avec robin on travaille toujours sur la question…
-
Sinon j’image que c’est pour faire un serveur Altis
Les joueurs n’auront donc pas accès panneau !
Tu vois où je veux en venir, sa ne gênera donc pas les joueurs de voir un panneau return vu qu’il ne l’auront pas en main -
Oui Mais bon ce serait pour les développeurs mais bon je ferme on va dire que ce n’est pas grave merci à toi
-
Ah mais je viens d’avoir un tilt !!!
Si tu veux faire tourné l’objet dans ta main il faut modifié la valeur ici :} else if (block == ModAltisCraft.BlocPanneauInterdit) { GL11.glPushMatrix(); GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glTranslatef(0.0F, -1.0F, 0.0F); Minecraft.getMinecraft().getTextureManager() .bindTexture(TileEntityPanneauInterditSpecialRenderer.texturepi); TileEntityPanneauInterditSpecialRenderer.modelpi.renderAll(); GL11.glPopMatrix(); }
Tu vois des lignes avec GL11.glRotatef et GL11.glTranslatef ??
Et bien il faut les utiliser en changant les valeur (ne touche pas au 180.0F qui permet e mettre ton block droit).
Il faut aussi que tu enleves une des ligne GL11.glRotatef car il ne t’en faut qu’une !!
Dans ton cas (si je ne me trompe pas je début dans le modding) il faut que tu joue avec l’axe Y de glTranslatef (l’axe Y est la 2eme valeur le -1.0F) ensuite tu bidouille mais je pense que la valeur dans être dans les 180°Je précise que je me base sur la rotation des items mais vu que pour les item pour peux préciser sur quel vision on se base beh je suis pas sûr !!
Si j’ai pu t’aidé met moi un petit +1 -
Parfait merci
-
Salut, si tu fais des retours sur chacun de tes anciens posts, sois utile aux autres et fais leur gagner du temps en sélectionnant la meilleure réponse. Merci