NBTTag propre a mon bloc
-
-
On est obliger d’utiliser un TileEntity pour ça je savait pas

-
j’ai un autre probleme j’augmente ma valeur via un void mais dans le guetteur elle ne s actualise pas du coup la partie ou je téléporte mon joueur ne fonctionne plus ou alors elle reste a la valeur de base
-
Code ?
-
petit édit c’est seulement dans la fonction OnWalking que mon getteur ne fonctionne pas
c’est toujours aussi sale désolé
Le TileEntitypackage virusz.tileEntity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; public class TileEntitySafeZone extends TileEntity { private double radius = 5; private int state; public void IncreaseState(){ if(state > 3){ state = state-4; }else{ state++; } System.out.println(state); } public int GetState(){ return state; } public void IncreaseRadius(){ if(radius > 60){ radius = radius-55; }else{ radius = radius+5; } } public Double GetRadius(){ return radius; } @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); compound.setInteger("state", this.state); compound.setDouble("radius", radius); } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); this.state = compound.getInteger("state"); this.radius = compound.getDouble("radius"); } }}```java
package virusz.block;import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;import org.lwjgl.input.Keyboard;
import virusz.core.VirusZCore;
import virusz.tileEntity.TileEntitySafeZone;public class BlockSafeZone extends Block
{
private String State = “nothing”;
public BlockSafeZone(Material par2Material)
{
super(par2Material);
this.setBlockUnbreakable();
this.setCreativeTab(VirusZCore.Blocks);
}@Override
public boolean isOpaqueCube()
{
return true;
}@Override
public boolean renderAsNormalBlock()
{
return true;
}
@Override
public TileEntity createTileEntity(World world, int metadata)
{
return new TileEntitySafeZone();
}@Override
public boolean hasTileEntity(int metadata)
{
return true;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
{
TileEntity tile = world.getTileEntity(x, y, z);
TileEntitySafeZone Tile = (TileEntitySafeZone)tile;
if (!world.isRemote){if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)){
Tile.IncreaseState();
if(Tile.GetState() == 0){
this.State = “left”;
}
if(Tile.GetState() == 1){
this.State = “up”;
}
if(Tile.GetState() == 2){
this.State = “Down”;
}
if(Tile.GetState() == 3){
this.State = “Right”;
}
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "State set to: " + State + Tile.GetState()));
}else{
Tile.IncreaseRadius();
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + “radius set to: " + Tile.GetRadius() + " block”));
}
}return true;
}
@Override
public void onEntityWalking(World world, int x, int y, int z, Entity entity){
EntityPlayer player = (EntityPlayer)entity;
TileEntity tile = world.getTileEntity(x, y, z);
TileEntitySafeZone Tile = (TileEntitySafeZone)tile;double X = entity.posX;
double Y = entity.posY;
double Z = entity.posZ;
double RADIUS = Tile.GetRadius();
System.out.println(Tile.GetState());if(Tile.GetState() == 0){
player.setPosition(X-RADIUS, Y, Z);
}
if(Tile.GetState() == 1){
player.setPosition(X, Y, Z-RADIUS);
}
if(Tile.GetState() == 2){
player.setPosition(X, Y, Z+RADIUS);
}
if(Tile.GetState() == 3){
player.setPosition(X+RADIUS, Y, Z);
}}
} -
Rajoutes cette ligne à la fin de ta méthode increaseState()
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); -
ça fonctionne pas =( la valeur passe a 1 pendant 1s et ensuite repasse a 0
le plus fou dans tout ça c est que dans le chat mon guetteur fonctionne c est la la méthode onWalking que tout casse

il se passe ça exactement
http://puu.sh/jPG5v/19a2fbd7d6.png -
Problème de synchro client serveur sûrement.
Par contre ça :if (!world.isRemote){ if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)){ne va jamais fonctionner sur un serveur.
Utilises plutôt player.isSneaking() pour la deuxième condition -
je vois pas d’où ça peut venir le probleme de Synchro sachant que mes 2 variable radius et state ont le même probleme
-
Et alors, ça n’empêche qu’elles peuvent avoir toutes les 2 un prob de synchro. Normalement ce que je t’ai filé devrait le régler. En tout cas chez moi c’est le cas ^^’
-
Il faut ajouter ça dans le tile entity d’abord :
public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbttagcompound); } public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { this.readFromNBT(pkt.func_148857_g()); } -
je me disait bien que j avait oublier un truc merci de votre aide
