Transparence d'un bloc / Possibilité d'escalader un bloc
-
Il y a maintenant une erreur sur
setBlockBounds(float f, float g, float h, float i, float j, float k)Et j’utilise du copier coller vite fait pour créer des blocs rapidement, et j’éviterais de faire, à l’avenir, ceci…
-
Il indique quoi ?
-
Cannot reduce the visibility of the inherited method from BlockErreur de ma part, j’avais copié 2 fois cette partie
C’est l’heure du-du-du-duu DU TEST -
Bon, eh bien, il est transparant, mais il l’est trop… Il rend même le sol transparant. Je veut pas un bloc XRay moi

Ensuite, suite (lol) a la modification de la hitbox, ehb bien, je ne sais pas ou elle est, et il m’es impossible d’empiler des blocs, ou de les casser -
Il faut ajouter une fonction pour forcer le rendu des autres côté du bloc il me semble. Regarde le verre, la fonction shouldSideBeRendered
Et pour la hitbox c’est étrange, le code que je t’ai donné ne devrait pas causer problème :s -
J’ai enlevé le code qui permet de changer la hitbox
Dans la classe du verre, je ne trouve pas la fonction shouldSideBeRenderedpackage net.minecraft.block; import java.util.Random; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class BlockGlass extends BlockBreakable { private static final String __OBFID = "CL_00000249"; public BlockGlass(Material p_i45408_1_, boolean p_i45408_2_) { super(p_i45408_1_, p_i45408_2_); this.setCreativeTab(CreativeTabs.tabBlock); } /** * Returns the quantity of items to drop on block destruction. */ public int quantityDropped(Random random) { return 0; } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean isFullCube() { return false; } protected boolean canSilkHarvest() { return true; } } -
Elle est dans BlockBreakable alors
-
Cela devrait t’aider : http://www.minecraftforgefrance.fr/showthread.php?tid=1977&page=3&highlight=%C3%A9chelle
-
J’ai bien trouvé la méthode. Mais cela ne change rien du tout
Quand a la possibilité de grimpé dessus, je pense que je vais laisser tomber, puis je reprendrais lors d’une MàJ de mon mod ( Je pense la Bêta 1.0 ou la 1.0 ) -
Pour la transparence : regarde comment est fait le verre.
Pour grimper : la solution que j’ai donné dans l’autre topic fonctionne, si tu n’y arrive pas c’est que tu l’utilises mal.
-
Voici la classe de mon bloc
package eryah.usefulthings.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import eryah.usefulthings.Reference; import eryah.usefulthings.UsefulthingsMod; public class Scaffolding extends Block { protected Scaffolding(Material materialIn) { super(materialIn); // TODO Auto-generated constructor stub } public static Block scaffolding; public static void init() { scaffolding = new Scaffolding(Material.wood).setUnlocalizedName("scaffolding").setCreativeTab(UsefulthingsMod.UTTab); } public static void register() { GameRegistry.registerBlock(scaffolding, scaffolding.getUnlocalizedName().substring(5)); } public static void registerRenders() { registerRender(scaffolding); } public static void registerRender(Block block) { Item item = Item.getItemFromBlock(block); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } public boolean renderAsNormalBlock() { return false; } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side ) { return true; } public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) { return true; } public boolean isFullCube() { return false; } } -
public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side ) { return true; }Il manque des conditions il me semble ?
De plus tu n’as rajouté les fonctions qui permettent de grimper…
-
Bah si, je crois que c’est
public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) { return true; } -
Absolument pas, ça ne suffit pas, essaie avec çà :
@Override public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) { if (entity.onGround || entity.isCollidedVertically) { return; } if (entity.motionY >= 0.1) { entity.setPosition(entity.posX, entity.posY + 1.0F, entity.posZ); // Ici le + 1.0F correspond à la vitesse de l'échelle, 1.0F est très grand, je te laisse essayer avec tes valeurs } else if (entity.motionY <= -0.1) { Block blockUnder = world.getBlockState(new BlockPos(entity.posX, entity.posY - 3, entity.posZ)).getBlock(); if (blockUnder == null || blockUnder == this) { entity.setPosition(entity.posX, entity.posY - 1.0F, entity.posZ); // Même valeur ici mais en négatif } } } -
Je ne grimpe toujours pas
Verification de la classepackage eryah.usefulthings.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import eryah.usefulthings.Reference; import eryah.usefulthings.UsefulthingsMod; public class Scaffolding extends Block { protected Scaffolding(Material materialIn) { super(materialIn); // TODO Auto-generated constructor stub } public static Block scaffolding; public static void init() { scaffolding = new Scaffolding(Material.wood).setUnlocalizedName("scaffolding").setCreativeTab(UsefulthingsMod.UTTab); } public static void register() { GameRegistry.registerBlock(scaffolding, scaffolding.getUnlocalizedName().substring(5)); } public static void registerRenders() { registerRender(scaffolding); } public static void registerRender(Block block) { Item item = Item.getItemFromBlock(block); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } public boolean renderAsNormalBlock() { return false; } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side ) { return true; } public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) { return true; } @Override public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) { if (entity.onGround || entity.isCollidedVertically) { return; } if (entity.motionY >= 0.1) { entity.setPosition(entity.posX, entity.posY + 1.0F, entity.posZ); } else if (entity.motionY <= -0.1) { Block blockUnder = world.getBlockState(new BlockPos(entity.posX, entity.posY - 3, entity.posZ)).getBlock(); if (blockUnder == null || blockUnder == this) { entity.setPosition(entity.posX, entity.posY - 1.0F, entity.posZ); } } } } -
Mets un System.out.println(“quelque chose”) (ou utilise un logger si tu en as un) et place le dans la fonction onEntityCollidedWithBlock pour voir si la fonction est appellée lorsque tu te colles au block et que tu appuies sur la touche avancer.
-
Ça fonction ne sera jamais appelé car il n’a pas réduit la boite de collision du bloc …
-
Pour que le bloc soit transparent :
@Override @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT_MIPPED; }Dans cette première fonction tu peux remplacer CUTOUT_MIPPED par CUTOUT ou par TRANSLUCENT, le mieux c’est de les tester tous pour voir leur différente propriété.
@Override public boolean isVisuallyOpaque() { return false; //Si visuellement opaque } @Override public boolean isOpaqueCube() { return false; //Si effectivement opaque } @Override public boolean isFullCube() { return true; //Si complet }Et ça c’est le reste des fonctions obligatoires, un peux de recherche par ci par là t’aurais vite conduit à ce résultat.
-
Plus de problème

Enfin… Si
Je peut monter uniquement si je saute contre le bloc, et je monte de 6 blocs max
Si il est possible de corriger le bug, voici ma classepackage eryah.usefulthings.blocks; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import eryah.usefulthings.Reference; import eryah.usefulthings.UsefulthingsMod; public class Scaffolding extends Block { protected Scaffolding(Material materialIn) { super(materialIn); // TODO Auto-generated constructor stub } public static Block scaffolding; public static void init() { scaffolding = new Scaffolding(Material.wood).setUnlocalizedName("scaffolding").setCreativeTab(UsefulthingsMod.UTTab); } public static void register() { GameRegistry.registerBlock(scaffolding, scaffolding.getUnlocalizedName().substring(5)); } public static void registerRenders() { registerRender(scaffolding); } public static void registerRender(Block block) { Item item = Item.getItemFromBlock(block); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } public boolean renderAsNormalBlock() { return false; } @Override public boolean isVisuallyOpaque() { return false; //Si visuellement opaque } @Override public boolean isOpaqueCube() { return false; //Si effectivement opaque } @Override public boolean isFullCube() { return true; //Si complet } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean shouldSideBeRendered(IBlockAccess worldIn, BlockPos pos, EnumFacing side ) { switch(side) { case DOWN: return false; default: return true; } } public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) { return true; } @Override public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) { if (entity.onGround || entity.isCollidedVertically) { return; } if (entity.motionY >= 0.1) { entity.setPosition(entity.posX, entity.posY + 1.0F, entity.posZ); } else if (entity.motionY <= -0.1) { Block blockUnder = world.getBlockState(new BlockPos(entity.posX, entity.posY - 3, entity.posZ)).getBlock(); if (blockUnder == null || blockUnder == this) { entity.setPosition(entity.posX, entity.posY - 1.0F, entity.posZ); } } } public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { this.setBlockBoundsBasedOnState(worldIn, pos); return super.getCollisionBoundingBox(worldIn, pos, state); } @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBox(World worldIn, BlockPos pos) { this.setBlockBoundsBasedOnState(worldIn, pos); return super.getSelectedBoundingBox(worldIn, pos); } public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) { this.setBlockBounds(0.1F, 0.1F, 0.1F, 0.9F, 0.9F, 0.9F); } } -
Need Help guys…
