Entité Block
-
Tu enregistre comment ton rendu ? Car franchement je ne vois pas pourquoi fallTile est null.
-
Petite remarque surement intéressante:
j’ai mis System.out.println(fallTile+" : "+this); au lieu de System.out.println(fallTile); et sa me met de manière alternée:
[16:12:37] [Server thread/INFO] [STDOUT]: [com.maxyfactory.mod.entity.EntityConvoyingBlock:onUpdate:88]: minecraft:grass[snowy=false] : EntityConvoyingBlock[‘entity.maxyfactory.convoyingBlock.name’/166432, l=‘New World’, x=-635,50, y=5,00, z=-974,50]
et
[16:12:37] [Client thread/INFO] [STDOUT]: [com.maxyfactory.mod.entity.EntityConvoyingBlock:onUpdate:88]: null : EntityConvoyingBlock[‘entity.maxyfactory.convoyingBlock.name’/166432, l=‘MpServer’, x=-635,50, y=5,00, z=-974,50]
quand fallTile est null, l = MpServeur alors que quand fallTile est correcte, l = New Wold (le nom de mon monde)Le Proxy Client :
public class ClientProxy extends CommonProxy{ @Override public void registerRenders() { ItemMod.registerRenders(); BlockMod.registerRenders(); RenderingRegistry.registerEntityRenderingHandler(EntityConvoyingBlock.class, new RenderConvoyingBlock(Minecraft.getMinecraft().getRenderManager())); } } -
Ah surement car c’est null côté client.
Problème de synchro du-coup.
Utilises l’interface IAdditionnalEntityData pour synchroniser le bloc. -
Comment fait-on pour l’utiliser ?
-
Tu ajoutés implements IAdditionalEntityData après la déclaration de ta classe (il me semble que la classe s’appelle comme ça a vérifier) puis tu ajoutés les deux méthodes qu’il te demander d’implémenter. Elles s’utilisent comme celle d’un paquet
-
Eclipse ne trouve pas IAdditionalEntityData, tu est sûr que c’est le bon mon ?
(Désolé d’avoir été si long) -
Non je ne suis pas sûr et je l’ai même précisé dans mon message.
C’est IEntityAdditionalSpawnData -
J’ai essayé de faire fonctionner IEntityAdditionalSpawnData mais je n’y arrives pas, je n’ai jamais utilisé de paquet.
J’ai n’arrive pas a écrire un IBlockState dans le ByteBuf, voici un essai que j’ai fait :@Override public void writeSpawnData(ByteBuf buffer) { Object[] arr = this.fallTile.getProperties().values().toArray(); for (int i = 0 ; i <= arr.length; i++) { Object obj = arr*; buffer.writeByte((Integer) obj); } } @Override public void readSpawnData(ByteBuf additionalData) { byte[] b = additionalData.array(); for (int i = 0 ; i <= b.length; i++) { this.fallTile.withProperty(additionalData.getByte(i) /*ici, je ne sais pas quoi mettre*/, additionalData.getByte(i)); } }Puis-je avoir de l’aide, s’il vous plais.
-
Il faut envoyer l’id du bloc et le metadata.
-
Merci beaucoup, ça fonctionne maintenant voici le code ( plus simple au final ) :
@Override public void writeSpawnData(ByteBuf buffer) { int ID = Block.getIdFromBlock(this.fallTile.getBlock()); int meta = this.fallTile.getBlock().getMetaFromState(this.fallTile); buffer.writeInt(ID); buffer.writeInt(meta); } @Override public void readSpawnData(ByteBuf additionalData) { int ID = additionalData.readInt(); int meta = additionalData.readInt(); this.fallTile = Block.getBlockById(ID).getStateFromMeta(meta); }Petit screen pour montrer la beauté de mon travail
:
