- 627
- 72
- 178
сегодня открыл для себя способ синхронизации капабилити на 1.12.2 при заходе в мир. наверное многие о нем знают, но все же, вдруг кому понадобится.
в свою очередь, Request-пакет запускается на сервере и отсылает на клиент пакет о синхронизации всех данных капы.
пишите замечания в коде, если есть - обязательно исправлю)
Java:
@SubscribeEvent
public void entityJoinWorld(EntityJoinWorldEvent evt) {
if (!(evt.getEntity() instanceof EntityPlayer)) // если сущность не игрок - выходим из метода.
return;
EntityPlayer player = (EntityPlayer) evt.getEntity(); // сохраняем игрока в переменную
if (!player.world.isRemote) // если сервер - выходим из метода
return;
if (player != null) { //если игрок существует
CAPAttributesProvider.sendSyncRequest(); //отсылаем пакет на сервер, о том, что нужно синхронизировать клиент
}
}
}
Java:
@Override
public IMessage onMessage(Request message, MessageContext ctx) {
EntityPlayer player = ctx.getServerHandler().player; //получаем серверного игрока
ICAPAttributes cap = CAPAttributesProvider.getAttributesCap(player); //получаем капу (мой метод для удобства)
CAPAttributesProvider.sendSyncToClient((EntityPlayerMP) player, cap.getAllAttributes()); //отсылаем пакет синхронизации
System.out.println("SYNC HAS REQUESTED"); //дебаг SYSOUT
return null;
}