Résolu Block traversable avec la texture du block adjascent
-
Bonjour, j’ai récement eu l’idée d’un block que l’on peut traverser, et qui prends la texture du block qui est en x + 1, cependant je n’ai pas trouvé de solution pour récupérer la texture sur le forum, voici mon code pour le moment :
package com.mod.ciolmod.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockTravers extends Block { public BlockTravers(Material p_i45394_1_) { super(p_i45394_1_); this.setBlockBounds(0.0f, 0.0f, 0.0f, 1f, 1f, 1f); this.setLightLevel(0.1f); this.setLightOpacity(10); } public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) { return null; } public boolean isOpaqueCube(){ return false; } public boolean renderAsNormalBlock() { return true; } }
Merci de votre réponse,
Bonne journée ! -
Salut,
Il faut que tu override la fonction getIcon(IBlockAccess world, int x, int y, int z, int side) et que tu return l’IIcon du bloc à x + 1.De tête ça donne quelques choses comme ceci :
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { return world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side); }
Attention par contre au risque de boucle. En plaçant que le même bloc en ligne sur la même coordonnée x, ça risque de mal se comporter.
-
Merci beaucoup ça fonctionne, cependant y aurait-il moyen de récupérer la teinte vert si c’est de la grass à côté ?
-
Salut, rends toi dans la classe BlockGrass, tu verras trois instance de IIcon au-dessus du constructeur, teste les voir laquelle est la bonne.
-
Merci beaucoup pour toute votre aide
voici le code pour ceux que ça intéresse :
package com.mod.ciolmod.blocks; 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.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.world.ColorizerGrass; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockTravers extends Block { public BlockTravers(Material p_i45394_1_) { super(p_i45394_1_); this.setBlockBounds(0.0f, 0.0f, 0.0f, 1f, 1f, 1f); this.setLightLevel(0.1f); this.setLightOpacity(10); } public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) { return null; } public boolean isOpaqueCube(){ return false; } public boolean renderAsNormalBlock() { return true; } @Override public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { return world.getBlock(x + 1, y, z).getIcon(world, x + 1, y, z, side); } @SideOnly(Side.CLIENT) public int getBlockColor() { double d0 = 0.5D; double d1 = 1.0D; return ColorizerGrass.getGrassColor(d0, d1); } @SideOnly(Side.CLIENT) public int getRenderColor(int p_149741_1_) { return this.getBlockColor(); } @SideOnly(Side.CLIENT) public int colorMultiplier(IBlockAccess p_149720_1_, int p_149720_2_, int p_149720_3_, int p_149720_4_) { int l = 0; int i1 = 0; int j1 = 0; for (int k1 = -1; k1 <= 1; ++k1) { for (int l1 = -1; l1 <= 1; ++l1) { int i2 = p_149720_1_.getBiomeGenForCoords(p_149720_2_ + l1, p_149720_4_ + k1).getBiomeGrassColor(p_149720_2_ + l1, p_149720_3_, p_149720_4_ + k1); l += (i2 & 16711680) >> 16; i1 += (i2 & 65280) >> 8; j1 += i2 & 255; } } return (l / 9 & 255) << 16 | (i1 / 9 & 255) << 8 | j1 / 9 & 255; } }