Résolu Créer des tapis.
-
Bonjour à tous,
Voila j’ai créer une class tapis_brun, et mon problème est encore une fois le direction du tapis
dont je voudrais que le coté arrondie soit de mon coté quand je le pose à terre.J’ai essayer la formule comme sur les block mais sa ne fonctionne pas.
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving living, ItemStack stack) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0f / 360.0f) + 2.5D) & 3; world.setBlockMetadataWithNotify(x, y, z, direction, 2); }
- le tapis_brun ![](http://bountycraft.power-heberg.com/Images perso/tapis-brun.png) ![](http://bountycraft.power-heberg.com/Images perso/tapis_direction.png)
Merci encore d’avance pour l’aide que vous pour m’apporter.
package crepi.mod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLiving; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class BlockTapis_brun extends Block { public BlockTapis_brun(int par1, int par2) { super(par1, Material.grass); setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); setTickRandomly(true); this.setCreativeTab(ModBuild.CreativeTabAccessoire); } public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) { int i = par1World.getBlockMetadata(par2, par3, par4) & 7; if (i >= 3) { return AxisAlignedBB.getBoundingBox((double)par2 + minX, (double)par3 + minY, (double)par4 + minZ, (double)par2 + maxX, (float)par3 + 0.5F, (double)par4 + maxZ); } else { return null; } } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } }
Bounty…
-
Il faut mettre des metadatas à ton bloc, la méthode que tu as utilisée en a besoin:
world.setBlockMetadataWithNotify(x, y, z, direction, 2);
-
Il faut que tu fasse 4 texture, une pour chaque sens, et ensuite dans le getIcon en fonction du metadata tu prends la bonne texture.
-
Bonjour,
Voila j’ai fait mes quatre textures et modifier mon code et je n’est toujours un seul sens à mon tapis, donc mon code ne doit pas être bon.
package crepi.mod; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.EntityLiving; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Icon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class BlockTapis_Orange extends Block { private Icon icontop2; //= this.tapis_orange3; private Icon icontop3; //= this.tapis_orange2; private Icon icontop4; //= this.tapis_orange5; private Icon icontop5; //= this.tapis_orange4; public BlockTapis_Orange(int par1, int par2) { super(par1, Material.grass); setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); setTickRandomly(true); this.setCreativeTab(ModBuild.CreativeTabAccessoire); } public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) { int i = par1World.getBlockMetadata(par2, par3, par4) & 7; if (i >= 3) { return AxisAlignedBB.getBoundingBox((double)par2 + minX, (double)par3 + minY, (double)par4 + minZ, (double)par2 + maxX, (float)par3 + 0.5F, (double)par4 + maxZ); } else { return null; } } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } @SideOnly(Side.CLIENT) public Icon getIcon(int side, int metadata) { return side == 1 ? this.icontop2 : (metadata == 2 && side == 1 ? this.icontop3 : (metadata == 3 && side == 1 ? this.icontop2 : (metadata == 4 && side == 1 ? this.icontop5 : (metadata == 5 && side == 1 ? this.icontop4 : this.blockIcon)))); } @Override @SideOnly(Side.CLIENT) public void registerIcons(IconRegister iconRegister) { icontop2 = iconRegister.registerIcon("tapis_orange0"); // Sud f0 icontop3 = iconRegister.registerIcon("tapis_orange2"); // Nord f2 icontop4 = iconRegister.registerIcon("tapis_orange3"); // Est f3 icontop5 = iconRegister.registerIcon("tapis_orange1"); // Ouest f1 } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving living, ItemStack stack) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0f / 360.0f) + 2.5D) & 3; world.setBlockMetadataWithNotify(x, y, z, direction, 2); } }
Bounty…
-
@SideOnly(Side.CLIENT) public Icon getIcon(int side, int metadata) { return metadata == 1 ? this.icontop2 : metadata == 2 ? this.icontop3 : metadata == 3 ? this.icontop4 : this.icontop5; }
-
re bonjour,
J’ai appliquer le code et voila ce que sa donne sur l’image.
![](http://bountycraft.power-heberg.com/Images perso/tapis_direction1.png)
J’ai eu bon changer les les textures au icontop mais rien à faire de n’obtiens qu’une seule direction de bonne à chaque fois., et
aussi j’ai des bordures d’épaisseur sur les textures pour certaine.Bounty…
-
Pourtant c’est possible, il faut juste adapter le getIcon au metadata du bloc.
Pour le problème de bordure, c’est la fonction getCollisionBoundingBoxFromPool, au pire envoie-moi les 4 textures, je vais voir ce que je peux faire de mon côté. -
Re bonjour,
Je te donne le lien du téléchargement pour les textures et le fichier texte.
[Les textures BlockTapis Orange](http://bountycraft.power-heberg.com/Images perso/BlockTapis_Orange.zip)
Merci d’avance à toi.
Bounty…
-
C’est bon comme ça ?J’ai fais ça en 1.6.2, donc réadapte pour la 1.5.2 (il y a juste EntityLivingBase à mettre en EntityLiving il me semble)
package tutoriel.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Icon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class BlockTapis_brun extends Block { private Icon icontop1, icontop2, icontop3, icontop4, iconvide; public BlockTapis_brun(int id) { super(id, Material.grass); setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.001F, 1.0F); } public void registerIcons(IconRegister iconRegister) { icontop1 = iconRegister.registerIcon("modtutoriel:tapis_orange1"); icontop2 = iconRegister.registerIcon("modtutoriel:tapis_orange0"); icontop3 = iconRegister.registerIcon("modtutoriel:tapis_orange2"); icontop4 = iconRegister.registerIcon("modtutoriel:tapis_orange3"); iconvide = iconRegister.registerIcon("modtutoriel:vide"); } public Icon getIcon(int side, int meta) { if(side == 1 || side == 0) { switch(meta) { case 0: return icontop2; case 1: return icontop4; case 2: return icontop3; default: return icontop1; } } else return iconvide; } 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; world.setBlockMetadataWithNotify(x, y, z, direction, 2); } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } }
Vide est une image de 1x1 transparent, c’est pour éviter d’avoir un truc sur les cotés
-
Bonjour à tous,
Merci encore pour ton aide robin4002.
Bounty…