public static void setBooleanOnServerAndSync(Player p, String key, boolean value, boolean temporary) { p.getCapability(PlayerDataProvider.PLAYER_DATA, null).ifPresent(playerData -> { playerData.setBoolean(key, value, temporary); Messages.sendToPlayer(SyncPlayerDataPacket.toClient(key).setBoolean(value), (ServerPlayer) p); //It fails here if (value) { ResearchUtil.markResearchAsUpdated(p, key); } }); }