Résolu Block XRay
-
Bonjour, c’est encore moi
Je reviens vers vous car j’ai deux blocs qui posent problème :-
Mon purificateur, qui est un block container, qui n’a une texture que dans l’inventaire.
Mon blockstate :{ “variants”: { “normal”:{ “model”: “elementalmod:purifier” } }}
-
Mon modele (block) :
{ “parent”: “block/cube_bottom_top”, “textures”: { “side”: “elementalmod:blocks/purifier_side”, “top”: “elementalmod:blocks/purifier_top”, “bottom”: “elementalmod:blocks/purifier_bottom” }} -
Mon modèle (item) :
{ “parent”: “elementalmod:block/purifier”, “display”: { “thirdperson”: { “rotation”: [10, -45, 170], “translation”: [0, 1.5, -2.75], “scale”: [0.375, 0.375, 0.375] } }} -
Et enfin, mon Purifier.java :```java
public class PurifierBlock extends BlockContainer { protected PurifierBlock(Material material) { super(material); this.setUnlocalizedName(“purifier”); this.setCreativeTab(CreativeTabs.tabDecorations); this.setResistance(50.0F); this.setHardness(10.0F); this.setHarvestLevel(“pickaxe”, 1); } public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) { if(!world.isRemote) { player.openGui(ModElemental.instance, 0, world, pos.getX(), pos.getY(), pos.getZ()); } return true; } @Override public TileEntity createNewTileEntity(World worldIn, int meta) { return new PurifierTileEntity(); } public boolean hasTileEntity(IBlockState state) { return true; } public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tileentity = world.getTileEntity(pos); if (tileentity instanceof IInventory) { IInventory inv = (IInventory)tileentity; for (int i1 = 0; i1 < inv.getSizeInventory(); ++i1) { ItemStack itemstack = inv.getStackInSlot(i1); if (itemstack != null) { float f = world.rand.nextFloat() * 0.8F + 0.1F; float f1 = world.rand.nextFloat() * 0.8F + 0.1F; EntityItem entityitem; for (float f2 = world.rand.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem)) { int j1 = world.rand.nextInt(21) + 10; if (j1 > itemstack.stackSize) { j1 = itemstack.stackSize; } itemstack.stackSize -= j1; entityitem = new EntityItem(world, (double)((float)pos.getX() + f), (double)((float)pos.getY() + f1), (double)((float)pos.getZ() + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); float f3 = 0.05F; entityitem.motionX = (double)((float)world.rand.nextGaussian() * f3); entityitem.motionY = (double)((float)world.rand.nextGaussian() * f3 + 0.2F); entityitem.motionZ = (double)((float)world.rand.nextGaussian() * f3); if (itemstack.hasTagCompound()) { entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); } } } } } super.breakBlock(world, pos, state); }} -
Mon deuxième problème, c’est un bloc qui a de la transparence. J’ai copié le code de BlockGlass, et le seul problème, c’est que l’on peut voir a travers les blocs adjacents.
Code :```java
public class SelenitBlock extends Block { protected SelenitBlock(Material material) { super(material); this.setUnlocalizedName(“selenitBlock”); this.setCreativeTab(CreativeTabs.tabBlock); this.setResistance(8.0F); this.setHardness(12.0F); this.setHarvestLevel(“pickaxe”, 1); } /public boolean isOpaque() { return false; } public boolean isTranslucent() { return true; }/ @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean isFullCube() { return false; }}Désolé, mais l'éditeur a retiré tous les retours a la ligne…et toutes les balises... :@ :@ :@
-
-
Il me semble que :
public boolean isOpaque()
{
return false;
}
public boolean isTranslucent()
{
return true;
}
Permette de corriger ça, essaye de les mettre -
Je les ai testé seul mais je n’ai pas testé de mettre les deux en même temps… Je vais voir ça
-
Override la fonction getRenderType et retourne 3 (pour le container)
-
@‘bodri’:
Override la fonction getRenderType et retourne 3 (pour le container)
Pour le purificateur ou pour le Selenit ?
-
Le purificateur
@Override public int getRenderType() { return 3; }
-
Je teste ça tout de suite
PS : arrêtez d’aller plus vite que mon ordinateurEDIT : Merci beaucoup, le purificateur fonctionne enfin totalement
Le Selenit a cependant toujours le même problème… -
Essai d’extends le Selenit à BlockBreakable et de mettre ces fonctions :
@SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } public boolean isFullCube() { return false; }
-
Tu peux aussi essayer de mettre le code ci-dessous à la place de isTranslucent:
public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; }
-
Et n oublie pas de rajouter l annotation
@SideOnly(SIDE.CLIENT)
Au dessus de ta methode getRenderType()
Sinon c est le crash assure une fois le mod sur serveur ! -
Merci, je vais tester tout ça.
EDIT : voilà ! Ça fonctionne ! Mais ce serait possible de faire une nuance entre coloré et transparent ? Dans la main, ca l’est, mais une fois posé c’est tout transparent avec des grilles totalement opaques. :s -
Screenshot ? Pas tout compris
-
Voilà un screenshot :
Le bloc en main est translucide alors que une fois posé, il est transparent
J’aimerais que, une fois posé il est translucide. -
UP ! J’aimerais bien que mon block soit translucide une fois posé ! J’espère que c’est possible, car le bloc de verre ne le fait même pas, alors je ne vois pas où chercher…
-
Qu’appelles tu translucide ? Tu veux qu’il y est une légère transparence ?
EDIT : envoi les json au passage
-
Tu peux peut-être aussi essayer de retourner EnumWorldBlockLayer.TRANSLUCENT dans la fonction getBlockLayer()
-
@‘bodri’:
Tu peux peut-être aussi essayer de retourner EnumWorldBlockLayer.TRANSLUCENT dans la fonction getBlockLayer()
C’est bon ça fonctionne ! Merci !