CumingSoon
Местный стендапер
- 1,634
- 12
- 270
Не знаю, у меня все как нужно с этим методом
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
sendTo
private NBTTagCompound data;
public SyncPlayerPropsMessage() {}
public SyncPlayerPropsMessage(EntityPlayer player)
{
data = new NBTTagCompound();
ExtendedPlayer.get(player).saveNBTData(data);
}
@Override
public void fromBytes(ByteBuf buffer)
{
data = ByteBufUtils.readTag(buffer);
}
@Override
public void toBytes(ByteBuf buffer)
{
ByteBufUtils.writeTag(buffer, data);
}
public static class Handler extends AbstractClientMessageHandler<SyncPlayerPropsMessage>
{
@Override
public IMessage handleClientMessage(EntityPlayer player, SyncPlayerPropsMessage message, MessageContext ctx)
{
ExtendedPlayer.get(player).loadNBTData(message.data);
return null;
}
}
String playerName = ByteBufUtils.readUTF8String(buf);
NBTTagCompound nbt = ByteBufUtils.readTag(buf);
EntityClientPlayerMP syncPlayer = (EntityClientPlayerMP)world.getPlayerEntityByName(playerName);
if(syncPlayer != null){
MorasPlayer syncData = MorasPlayer.forPlayer(syncPlayer);
if(syncData != null){
morasPlayer.loadNBTData(nbt);
if(morasPlayer.isSelectedRace()){
player.func_152121_a(Type.SKIN, morasPlayer.getPlayerSkin());
}
}
}
NBTTagCompound nbt = new NBTTagCompound();
saveNBTData(nbt);
FMLProxyPacket packet = MorasBooks.packetSender.createPacket(PacketHandler.SYNC_PLAYER_DATA, player.getCommandSenderName(), nbt);
MorasBooks.packetSender.sendToDimension(packet, player.dimension);
@SubscribeEvent
public void onPlayerTracking(PlayerEvent.StartTracking e){
if(e.target instanceof EntityPlayer){
MorasPlayer data = MorasPlayer.forPlayer((EntityPlayer)e.target);
NBTTagCompound nbt = new NBTTagCompound();
data.saveNBTData(nbt);
FMLProxyPacket packet = MorasBooks.packetSender.createPacket(PacketHandler.SYNC_PLAYER_DATA_ALL, e.target.getEntityId(), nbt);
MorasBooks.packetSender.sendToAll(packet);
}
}
int playerId = buf.readInt();
NBTTagCompound nbtAll = ByteBufUtils.readTag(buf);
AbstractClientPlayer syncPlayer = (AbstractClientPlayer)world.getEntityByID(playerId);
if(syncPlayer != null){
MorasPlayer syncData = MorasPlayer.forPlayer(syncPlayer);
if(syncData != null){
syncData.loadNBTData(nbtAll);
if(syncData.isSelectedRace()){
syncPlayer.func_152121_a(Type.SKIN, syncData.getPlayerSkin());
}
}
}
@SubscribeEvent
public void onPlayerJoin(EntityJoinWorldEvent e){
if(!(e.entity instanceof EntityPlayerMP)){
return;
}
EntityPlayer player = (EntityPlayer)e.entity;
MorasPlayer data = MorasPlayer.forPlayer(player);
if(data != null){
NBTTagCompound nbt = new NBTTagCompound();
data.saveNBTData(nbt);
FMLProxyPacket packet = MorasBooks.packetSender.createPacket(PacketHandler.SYNC_PLAYER_DATA, nbt);
MorasBooks.packetSender.sendTo(packet, (EntityPlayerMP)player);
}
}
MorasPlayer morasPlayer = MorasPlayer.forPlayer(player);
if(morasPlayer != null){
NBTTagCompound nbtPlayer = ByteBufUtils.readTag(buf);
morasPlayer.loadNBTData(nbtPlayer);
if(morasPlayer.isSelectedRace()){
player.func_152121_a(Type.SKIN, morasPlayer.getPlayerSkin());
}
}
@SubscribeEvent
public void onLivingUpdate(LivingEvent.LivingUpdateEvent event)
{
if(event.entityLiving instanceof EntityPlayerMP)
{
ExtendedPlayer props = ExtendedPlayer.get((EntityPlayer) event.entityLiving);
NBTTagCompound currentData = extendedEntityData.get(event.entityLiving.getEntityId());
//^^^ - это хэшмап, в котором ключи -- ID
NBTTagCompound newData = new NBTTagCompound();
props.saveNBTData(newData);
if (currentData==null)
{
extendedEntityData.put(event.entityLiving.getEntityId(), newData);
}
if (currentData!=null && newData!=null && !(currentData.equals(newData)))
{
extendedEntityData.put(event.entityLiving.getEntityId(), newData);
PacketDispatcher.sendToAll(new SyncPlayerPropsMessage(event.entityLiving.getEntityId(), extendedEntityData.get(event.entityLiving.getEntityId())));
//можно взять и newData, но я хотел немного некрасиво записать ;D
props.setBackpackID(props.inventory.getBagSize());
}
}
}