Добрый день, друзья. Учусь работать с capability и нетворкингом.
В общем: у меня есть капабилити, которое хранит интовый айдишник. Этот айдишник обновляется в некотором гуи. Сделал пакет и при смене этот id на клиенте у одного из игроков отправляю для всего измерения пакет с обновлением. Но определённо делаю что то не то.
В общем: у меня есть капабилити, которое хранит интовый айдишник. Этот айдишник обновляется в некотором гуи. Сделал пакет и при смене этот id на клиенте у одного из игроков отправляю для всего измерения пакет с обновлением. Но определённо делаю что то не то.
Пакет:
public class UpdateCapPacket extends AbstractMessage<UpdateCapPacket> {
private int hatId;
public UpdateCapPacket() {
}
public UpdateCapPacket(int id) {
this.hatId = id;
}
@Override
public void encode(UpdateCapPacket message, PacketBuffer buffer) {
buffer.writeInt(message.hatId);
}
@Override
public UpdateCapPacket decode(PacketBuffer buffer) {
int id = buffer.readInt();
return new UpdateCapPacket(hatId);
}
@Override
public void handle(UpdateCapPacket message, Supplier<NetworkEvent.Context> ctx) {
if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT)
ctx.get().enqueueWork(() ->
{
InfCust.LOGGER.error("[UPDATING CAP PACKET]");
final Optional<World> optionalWorld = LogicalSidedProvider.CLIENTWORLD.get(ctx.get().getDirection().getReceptionSide());
final LivingEntity livingEntity = ctx.get().getSender();
InfCust.LOGGER.debug(ctx.get().getDirection());
if (livingEntity != null) {
InfCust.LOGGER.error("[CHANGING CAP]");
optionalWorld.ifPresent(world -> InfCust.capabilityUtil.updateCapabilityHatId(message.hatId));
}
InfCust.LOGGER.error(InfCust.capabilityUtil.getCapabilityHatId());
});
ctx.get().setPacketHandled(true);
}
}
Эвент открытия:
public void OpenCustMenu() {
// Как пример
Minecraft.getInstance().setScreen(new CustomizationScreen());
PacketDispatcher.sendToAll(new UpdateCapPacket(-1));
}