From fbb04f3dc954c3abab9b31802fb9b3b4f9571730 Mon Sep 17 00:00:00 2001 From: Kotos Date: Sun, 10 May 2026 23:34:05 +0100 Subject: [PATCH 1/4] Added permissions to the default role. Contains all authorization except admin perms. --- .../com/createcivilization/capitol/common/data/TeamRole.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java b/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java index 3b21122..bf04839 100644 --- a/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java +++ b/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java @@ -35,6 +35,6 @@ public static long ownerPermissions() { } public static long defaultPermissions() { - return Permission.of(); + return 0b111111111111111111100000000L; } } \ No newline at end of file From 8c71a249d614bf78f1c36704f3d252ce31d03e47 Mon Sep 17 00:00:00 2001 From: Kotos Date: Sun, 10 May 2026 23:55:28 +0100 Subject: [PATCH 2/4] Added a "member" role. Members have a wide range of default perms and is auto-assigned when accepting an invite. --- .../capitol/common/data/TeamRole.java | 9 ++++++++- .../common/modules/database/CapitolDatabase.java | 10 ++++++++++ .../capitol/server/commands/invite/InviteCommand.java | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java b/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java index bf04839..df30ba6 100644 --- a/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java +++ b/src/main/java/com/createcivilization/capitol/common/data/TeamRole.java @@ -7,12 +7,16 @@ public record TeamRole(int id, UUID teamId, String name, long permissions) { public static final String OWNER_ROLE_NAME = "owner"; + public static final String MEMBER_ROLE_NAME = "member"; public static final String DEFAULT_ROLE_NAME = "default"; public boolean isOwner() { return OWNER_ROLE_NAME.equals(name); } + public boolean isMemberRole() { + return MEMBER_ROLE_NAME.equals(name); + } public boolean isDefaultRole() { return DEFAULT_ROLE_NAME.equals(name); } @@ -34,7 +38,10 @@ public static long ownerPermissions() { return Permission.of(Permission.values()); } - public static long defaultPermissions() { + public static long memberPermissions() { return 0b111111111111111111100000000L; } + public static long defaultPermissions() { + return 0; + } } \ No newline at end of file diff --git a/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java b/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java index 0c52f20..61ba0fc 100644 --- a/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java +++ b/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java @@ -165,6 +165,16 @@ public TeamRole getDefaultRole(Team team) { return getRoleByName(team, TeamRole.DEFAULT_ROLE_NAME); } + /** + * Convenience method that returns the "member" role for a team. + * + * @param team the team to query + * @return the default {@link TeamRole}, or {@code null} if not found + */ + public TeamRole getMemberRole(Team team) { + return getRoleByName(team, TeamRole.MEMBER_ROLE_NAME); + } + /** * Updates the permission bitfield for a role identified by team and role name. * diff --git a/src/main/java/com/createcivilization/capitol/server/commands/invite/InviteCommand.java b/src/main/java/com/createcivilization/capitol/server/commands/invite/InviteCommand.java index 2c4fad9..fe4cbfa 100644 --- a/src/main/java/com/createcivilization/capitol/server/commands/invite/InviteCommand.java +++ b/src/main/java/com/createcivilization/capitol/server/commands/invite/InviteCommand.java @@ -44,7 +44,7 @@ private static int acceptInvite(CommandContext context) { Team team = resolveInvitedTeam(context, player); if (team == null) return 0; - TeamRole role = DatabaseManager.database.getDefaultRole(team); + TeamRole role = DatabaseManager.database.getMemberRole(team); DatabaseManager.database.addPlayerToTeam(player, team, role); InviteHandler.clearInvites(player); From 3365c5946696c3b0df9d2fd2346143e8eff4b78b Mon Sep 17 00:00:00 2001 From: Kotos Date: Mon, 11 May 2026 00:02:38 +0100 Subject: [PATCH 3/4] Added "member" to initial team creation --- .../capitol/common/modules/database/CapitolDatabase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java b/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java index 61ba0fc..e1cc6a9 100644 --- a/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java +++ b/src/main/java/com/createcivilization/capitol/common/modules/database/CapitolDatabase.java @@ -319,6 +319,7 @@ public void addTeam(Team team) { } addRole(team, TeamRole.OWNER_ROLE_NAME, TeamRole.ownerPermissions()); + addRole(team, TeamRole.MEMBER_ROLE_NAME, TeamRole.memberPermissions()); addRole(team, TeamRole.DEFAULT_ROLE_NAME, TeamRole.defaultPermissions()); } From 6ec6eac6f84d0beb1fe3cccd59b74eddd3540b77 Mon Sep 17 00:00:00 2001 From: Kotos Date: Mon, 11 May 2026 13:10:58 +0100 Subject: [PATCH 4/4] Added check to prevent member role deletion --- .../capitol/server/commands/team/TeamRoleCommand.java | 4 ++++ src/main/resources/assets/capitol/lang/en_us.json | 1 + 2 files changed, 5 insertions(+) diff --git a/src/main/java/com/createcivilization/capitol/server/commands/team/TeamRoleCommand.java b/src/main/java/com/createcivilization/capitol/server/commands/team/TeamRoleCommand.java index d7b7912..4ed22ef 100644 --- a/src/main/java/com/createcivilization/capitol/server/commands/team/TeamRoleCommand.java +++ b/src/main/java/com/createcivilization/capitol/server/commands/team/TeamRoleCommand.java @@ -124,6 +124,10 @@ private static int removeRole(CommandContext context) { return failCommand(context, "commands.capitol.team.role.remove.default"); } + if (Objects.equals(roleName, TeamRole.MEMBER_ROLE_NAME)) { + return failCommand(context, "commands.capitol.team.role.remove.member"); + } + TeamRole role = database.getRoleByName(team, roleName); if (role == null) { diff --git a/src/main/resources/assets/capitol/lang/en_us.json b/src/main/resources/assets/capitol/lang/en_us.json index 515e35d..3e42ada 100644 --- a/src/main/resources/assets/capitol/lang/en_us.json +++ b/src/main/resources/assets/capitol/lang/en_us.json @@ -62,6 +62,7 @@ "commands.capitol.team.role.remove.owner": "You cannot remove owner role.", "commands.capitol.team.role.remove.default": "You cannot remove default role.", + "commands.capitol.team.role.remove.member": "You cannot remove member role.", "commands.capitol.team.role.remove.success": "Deleted role %s", "commands.capitol.team.role.assign.no_permission": "You do not have permission to assign roles",