@‘robin4002’:
Dans le src que tu m’as envoyé il y avait deux classes FlagSpawn.
Une dans le package BlockPers et l’autre dans le package fr.shyfe.dcedo.common.
J’ai viré celle dans fr.shyfe.dcedo.common qui ne semble pas utilisé.
Et elle avait tout le deux le code suivant :
package BlockPers;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class FlagSpawn extends Block
{
public FlagSpawn(Material material)
{
super(material);
}
@Override
public TileEntity createTileEntity(World world, int metadata)
{
return new TileEntityFlagSpawn();
}
@Override
public boolean hasTileEntity(int metadata)
{
return true;
}
public boolean isOpaqueCube()
{
return false;
}
public boolean renderAsNormalBlock()
{
return false;
}
public int getRenderType()
{
return -1;
}
}
Qui n’est pas vraiment celui tu as envoyé.
Avec ce code, c’est normal que le rendu et la direction ne fonctionne pas.
Après avoir modifié la classe comme ceci :
package BlockPers;
import fr.shyfe.dcedo.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 FlagSpawn extends Block
{
public FlagSpawn(Material material)
{
super(material);
}
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
{
this.setBlockBounds(0.06F, 0.0F, 0.06F, 0.94F, 0.88F, 0.94F);
}
@Override
public TileEntity createTileEntity(World world, int metadata)
{
return new TileEntityFlagSpawn();
}
@Override
public boolean hasTileEntity(int metadata)
{
return true;
}
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 TileEntityFlagSpawn)
{
int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
((TileEntityFlagSpawn)tile).setDirection((byte)direction);
}
}
}
@Override
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 TileEntityFlagSpawn)
{
TileEntityFlagSpawn tileDirectional = (TileEntityFlagSpawn)tile;
byte direction = tileDirectional.getDirection();
direction++;
if(direction > 3)
{
direction = 0;
}
tileDirectional.setDirection(direction);
return true;
}
}
return false;
}
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; // si le metadata est 0, les deux directions sur
// lesquels on peut faire tourner le bloc, sinon
// toutes les directions ce qui est la valeur par
// défaut pour les blocs non directionnels.
}
public boolean isOpaqueCube()
{
return false;
}
public boolean renderAsNormalBlock()
{
return false;
}
public int getRenderType()
{
return ClientProxy.tesrRenderId;
}
}
C’est ok :
http://puu.sh/tlfCt/330fb303b5.jpg
Et j’ai vérifie avec un point d’arrêt en debug la fonction writeToNBT de la classe tile entity (celle-ci) :
public void writeToNBT(NBTTagCompound p_145841_1_)
{
String s = (String)classToNameMap.get(this.getClass());
if (s == null)
{
throw new RuntimeException(this.getClass() + " is missing a mapping! This is a bug!");
}
else
{
p_145841_1_.setString("id", s);
p_145841_1_.setInteger("x", this.xCoord);
p_145841_1_.setInteger("y", this.yCoord);
p_145841_1_.setInteger("z", this.zCoord);
}
}
Et chez moi s avait bien la valeur attendu, donc le jeu ne crash pas.
Effectivement, ca fonctionne ! Merci beaucoup 🙂