mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-23 22:43:36 +00:00
168 lines
8 KiB
C++
168 lines
8 KiB
C++
#include "minecraft/GameHostOptions.h"
|
|
|
|
namespace GameHostOptions {
|
|
|
|
unsigned int get(unsigned int settings, eGameHostOption option) {
|
|
switch (option) {
|
|
case eGameHostOption_FriendsOfFriends:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_FRIENDSOFFRIENDS);
|
|
case eGameHostOption_Difficulty:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_DIFFICULTY);
|
|
case eGameHostOption_Gamertags:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_GAMERTAGS);
|
|
case eGameHostOption_GameType:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_GAMETYPE) >> 4;
|
|
case eGameHostOption_All:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_ALL);
|
|
case eGameHostOption_Tutorial:
|
|
return ((settings & GAME_HOST_OPTION_BITMASK_GAMERTAGS) |
|
|
GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS |
|
|
GAME_HOST_OPTION_BITMASK_FIRESPREADS |
|
|
GAME_HOST_OPTION_BITMASK_TNT |
|
|
GAME_HOST_OPTION_BITMASK_PVP |
|
|
GAME_HOST_OPTION_BITMASK_STRUCTURES | 1);
|
|
case eGameHostOption_LevelType:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_LEVELTYPE);
|
|
case eGameHostOption_Structures:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_STRUCTURES);
|
|
case eGameHostOption_BonusChest:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_BONUSCHEST);
|
|
case eGameHostOption_HasBeenInCreative:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_BEENINCREATIVE);
|
|
case eGameHostOption_PvP:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_PVP);
|
|
case eGameHostOption_TrustPlayers:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS);
|
|
case eGameHostOption_TNT:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_TNT);
|
|
case eGameHostOption_FireSpreads:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_FIRESPREADS);
|
|
case eGameHostOption_CheatsEnabled:
|
|
return (settings & (GAME_HOST_OPTION_BITMASK_HOSTFLY |
|
|
GAME_HOST_OPTION_BITMASK_HOSTHUNGER |
|
|
GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE));
|
|
case eGameHostOption_HostCanFly:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_HOSTFLY);
|
|
case eGameHostOption_HostCanChangeHunger:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_HOSTHUNGER);
|
|
case eGameHostOption_HostCanBeInvisible:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE);
|
|
case eGameHostOption_BedrockFog:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_BEDROCKFOG);
|
|
case eGameHostOption_DisableSaving:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_DISABLESAVE);
|
|
case eGameHostOption_WasntSaveOwner:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_NOTOWNER);
|
|
case eGameHostOption_WorldSize:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_WORLDSIZE) >>
|
|
GAME_HOST_OPTION_BITMASK_WORLDSIZE_BITSHIFT;
|
|
case eGameHostOption_MobGriefing:
|
|
return !(settings & GAME_HOST_OPTION_BITMASK_MOBGRIEFING);
|
|
case eGameHostOption_KeepInventory:
|
|
return (settings & GAME_HOST_OPTION_BITMASK_KEEPINVENTORY);
|
|
case eGameHostOption_DoMobSpawning:
|
|
return !(settings & GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING);
|
|
case eGameHostOption_DoMobLoot:
|
|
return !(settings & GAME_HOST_OPTION_BITMASK_DOMOBLOOT);
|
|
case eGameHostOption_DoTileDrops:
|
|
return !(settings & GAME_HOST_OPTION_BITMASK_DOTILEDROPS);
|
|
case eGameHostOption_NaturalRegeneration:
|
|
return !(settings & GAME_HOST_OPTION_BITMASK_NATURALREGEN);
|
|
case eGameHostOption_DoDaylightCycle:
|
|
return !(settings & GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE);
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
void set(unsigned int& settings, eGameHostOption option, unsigned int value) {
|
|
auto setBit = [&](unsigned int mask) {
|
|
if (value != 0)
|
|
settings |= mask;
|
|
else
|
|
settings &= ~mask;
|
|
};
|
|
auto setInvertedBit = [&](unsigned int mask) {
|
|
if (value != 1)
|
|
settings |= mask;
|
|
else
|
|
settings &= ~mask;
|
|
};
|
|
|
|
switch (option) {
|
|
case eGameHostOption_FriendsOfFriends:
|
|
setBit(GAME_HOST_OPTION_BITMASK_FRIENDSOFFRIENDS); break;
|
|
case eGameHostOption_Difficulty:
|
|
settings &= ~GAME_HOST_OPTION_BITMASK_DIFFICULTY;
|
|
settings |= (GAME_HOST_OPTION_BITMASK_DIFFICULTY & value); break;
|
|
case eGameHostOption_Gamertags:
|
|
setBit(GAME_HOST_OPTION_BITMASK_GAMERTAGS); break;
|
|
case eGameHostOption_GameType:
|
|
settings &= ~GAME_HOST_OPTION_BITMASK_GAMETYPE;
|
|
settings |= (GAME_HOST_OPTION_BITMASK_GAMETYPE & (value << 4)); break;
|
|
case eGameHostOption_LevelType:
|
|
setBit(GAME_HOST_OPTION_BITMASK_LEVELTYPE); break;
|
|
case eGameHostOption_Structures:
|
|
setBit(GAME_HOST_OPTION_BITMASK_STRUCTURES); break;
|
|
case eGameHostOption_BonusChest:
|
|
setBit(GAME_HOST_OPTION_BITMASK_BONUSCHEST); break;
|
|
case eGameHostOption_HasBeenInCreative:
|
|
setBit(GAME_HOST_OPTION_BITMASK_BEENINCREATIVE); break;
|
|
case eGameHostOption_PvP:
|
|
setBit(GAME_HOST_OPTION_BITMASK_PVP); break;
|
|
case eGameHostOption_TrustPlayers:
|
|
setBit(GAME_HOST_OPTION_BITMASK_TRUSTPLAYERS); break;
|
|
case eGameHostOption_TNT:
|
|
setBit(GAME_HOST_OPTION_BITMASK_TNT); break;
|
|
case eGameHostOption_FireSpreads:
|
|
setBit(GAME_HOST_OPTION_BITMASK_FIRESPREADS); break;
|
|
case eGameHostOption_CheatsEnabled:
|
|
if (value != 0) {
|
|
settings |= GAME_HOST_OPTION_BITMASK_HOSTFLY;
|
|
settings |= GAME_HOST_OPTION_BITMASK_HOSTHUNGER;
|
|
settings |= GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE;
|
|
} else {
|
|
settings &= ~GAME_HOST_OPTION_BITMASK_HOSTFLY;
|
|
settings &= ~GAME_HOST_OPTION_BITMASK_HOSTHUNGER;
|
|
settings &= ~GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE;
|
|
} break;
|
|
case eGameHostOption_HostCanFly:
|
|
setBit(GAME_HOST_OPTION_BITMASK_HOSTFLY); break;
|
|
case eGameHostOption_HostCanChangeHunger:
|
|
setBit(GAME_HOST_OPTION_BITMASK_HOSTHUNGER); break;
|
|
case eGameHostOption_HostCanBeInvisible:
|
|
setBit(GAME_HOST_OPTION_BITMASK_HOSTINVISIBLE); break;
|
|
case eGameHostOption_BedrockFog:
|
|
setBit(GAME_HOST_OPTION_BITMASK_BEDROCKFOG); break;
|
|
case eGameHostOption_DisableSaving:
|
|
setBit(GAME_HOST_OPTION_BITMASK_DISABLESAVE); break;
|
|
case eGameHostOption_WasntSaveOwner:
|
|
setBit(GAME_HOST_OPTION_BITMASK_NOTOWNER); break;
|
|
case eGameHostOption_MobGriefing:
|
|
setInvertedBit(GAME_HOST_OPTION_BITMASK_MOBGRIEFING); break;
|
|
case eGameHostOption_KeepInventory:
|
|
setBit(GAME_HOST_OPTION_BITMASK_KEEPINVENTORY); break;
|
|
case eGameHostOption_DoMobSpawning:
|
|
setInvertedBit(GAME_HOST_OPTION_BITMASK_DOMOBSPAWNING); break;
|
|
case eGameHostOption_DoMobLoot:
|
|
setInvertedBit(GAME_HOST_OPTION_BITMASK_DOMOBLOOT); break;
|
|
case eGameHostOption_DoTileDrops:
|
|
setInvertedBit(GAME_HOST_OPTION_BITMASK_DOTILEDROPS); break;
|
|
case eGameHostOption_NaturalRegeneration:
|
|
setInvertedBit(GAME_HOST_OPTION_BITMASK_NATURALREGEN); break;
|
|
case eGameHostOption_DoDaylightCycle:
|
|
setInvertedBit(GAME_HOST_OPTION_BITMASK_DODAYLIGHTCYCLE); break;
|
|
case eGameHostOption_WorldSize:
|
|
settings &= ~GAME_HOST_OPTION_BITMASK_WORLDSIZE;
|
|
settings |= (GAME_HOST_OPTION_BITMASK_WORLDSIZE &
|
|
(value << GAME_HOST_OPTION_BITMASK_WORLDSIZE_BITSHIFT));
|
|
break;
|
|
case eGameHostOption_All:
|
|
settings = value; break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
} // namespace GameHostOptions
|