Skip to content

Commit ab1c19b

Browse files
authored
Merge pull request #9 from xGabou/codex/make-mod-configurable-for-admin-use-only
Add whitelist for identity swaps
2 parents f7f7ea4 + c3bd627 commit ab1c19b

5 files changed

Lines changed: 32 additions & 3 deletions

File tree

common/src/main/java/draylar/identity/api/platform/IdentityConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ public static IdentityConfig getInstance() {
7676

7777
public abstract boolean enableSwaps();
7878

79+
/**
80+
* Players listed here may swap identities even when {@link #enableSwaps()} is false.
81+
* Names are compared case-insensitively.
82+
*/
83+
public abstract List<String> allowedSwappers();
84+
7985
public abstract int hostilityTime();
8086

8187
public abstract boolean wardenIsBlinded();

common/src/main/java/draylar/identity/impl/tick/MenuKeyPressHandler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ public void tick(MinecraftClient client) {
1313
assert client.player != null;
1414

1515
if(IdentityClient.MENU_KEY.wasPressed()) {
16-
if(IdentityConfig.getInstance().enableClientSwapMenu() || client.player.hasPermissionLevel(3)) {
16+
if(IdentityConfig.getInstance().enableClientSwapMenu() ||
17+
client.player.hasPermissionLevel(3) ||
18+
IdentityConfig.getInstance().allowedSwappers().stream()
19+
.anyMatch(p -> p.equalsIgnoreCase(client.player.getGameProfile().getName()))) {
1720
MinecraftClient.getInstance().setScreen(new IdentityScreen());
1821
}
1922
}

common/src/main/java/draylar/identity/network/impl/SwapPackets.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ public static void registerIdentityRequestPacketHandler() {
2525

2626
context.getPlayer().getServer().execute(() -> {
2727
// Ensure player has permission to switch identities
28-
if(IdentityConfig.getInstance().enableSwaps() || context.getPlayer().hasPermissionLevel(3)) {
28+
if(IdentityConfig.getInstance().enableSwaps() ||
29+
context.getPlayer().hasPermissionLevel(3) ||
30+
IdentityConfig.getInstance().allowedSwappers().stream()
31+
.anyMatch(p -> p.equalsIgnoreCase(context.getPlayer().getGameProfile().getName()))) {
2932
// player type shouldn't be sent, but we still check regardless
3033
if(entityType.equals(EntityType.PLAYER)) {
3134
PlayerIdentity.updateIdentity((ServerPlayerEntity) context.getPlayer(), null, null);
@@ -43,7 +46,10 @@ public static void registerIdentityRequestPacketHandler() {
4346
} else {
4447
// Swap back to player if server allows it
4548
context.getPlayer().getServer().execute(() -> {
46-
if(IdentityConfig.getInstance().enableSwaps() || context.getPlayer().hasPermissionLevel(3)) {
49+
if(IdentityConfig.getInstance().enableSwaps() ||
50+
context.getPlayer().hasPermissionLevel(3) ||
51+
IdentityConfig.getInstance().allowedSwappers().stream()
52+
.anyMatch(p -> p.equalsIgnoreCase(context.getPlayer().getGameProfile().getName()))) {
4753
PlayerIdentity.updateIdentity((ServerPlayerEntity) context.getPlayer(), null, null);
4854
}
4955

fabric/src/main/java/draylar/identity/fabric/config/IdentityFabricConfig.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ public class IdentityFabricConfig extends IdentityConfig implements Config {
7878
@Comment(value = "If set to false, only operators can switch identities. Used on the server; guaranteed to be authoritative.")
7979
public boolean enableSwaps = true;
8080

81+
@Comment(value = "List of player names allowed to swap identities when swaps are disabled.")
82+
public List<String> allowedSwappers = new ArrayList<>();
83+
8184
@Comment(value = "In blocks, how far can the Enderman ability teleport?")
8285
public int endermanAbilityTeleportDistance = 32;
8386

@@ -338,6 +341,11 @@ public boolean enableSwaps() {
338341
return enableSwaps;
339342
}
340343

344+
@Override
345+
public List<String> allowedSwappers() {
346+
return allowedSwappers;
347+
}
348+
341349
@Override
342350
public int hostilityTime() {
343351
return hostilityTime;

forge/src/main/java/draylar/identity/forge/config/IdentityForgeConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class IdentityForgeConfig extends IdentityConfig {
4444
public int maxHealth = 20;
4545
public boolean enableClientSwapMenu = true;
4646
public boolean enableSwaps = true;
47+
public List<String> allowedSwappers = new ArrayList<>();
4748
public int endermanAbilityTeleportDistance = 32;
4849
public boolean showPlayerNametag = false;
4950
public boolean forceChangeNew = false;
@@ -279,6 +280,11 @@ public boolean enableSwaps() {
279280
return enableSwaps;
280281
}
281282

283+
@Override
284+
public List<String> allowedSwappers() {
285+
return allowedSwappers;
286+
}
287+
282288
@Override
283289
public int hostilityTime() {
284290
return hostilityTime;

0 commit comments

Comments
 (0)