@@ -1876,6 +1876,7 @@ else if (cmd.getName().equalsIgnoreCase("restrictsubclaim") && player != null) {
18761876 claim .setSubclaimRestrictions (false );
18771877 GriefPrevention .sendMessage (player , TextMode .Success , Messages .SubclaimUnrestricted );
18781878 } else {
1879+ removeInheritedPermissions (claim );
18791880 claim .setSubclaimRestrictions (true );
18801881 GriefPrevention .sendMessage (player , TextMode .Success , Messages .SubclaimRestricted );
18811882 }
@@ -4141,6 +4142,7 @@ public boolean handleRestrictSubclaimCommand(CommandSender sender, String[] args
41414142 claim .setSubclaimRestrictions (false );
41424143 GriefPrevention .sendMessage (player , TextMode .Success , Messages .SubclaimUnrestricted );
41434144 } else {
4145+ removeInheritedPermissions (claim );
41444146 claim .setSubclaimRestrictions (true );
41454147 GriefPrevention .sendMessage (player , TextMode .Success , Messages .SubclaimRestricted );
41464148 }
@@ -4149,6 +4151,47 @@ public boolean handleRestrictSubclaimCommand(CommandSender sender, String[] args
41494151 return true ;
41504152 }
41514153
4154+ private void removeInheritedPermissions (Claim claim ) {
4155+ if (claim .parent == null ) return ;
4156+
4157+ ArrayList <String > parentBuilders = new ArrayList <>();
4158+ ArrayList <String > parentContainers = new ArrayList <>();
4159+ ArrayList <String > parentAccessors = new ArrayList <>();
4160+ ArrayList <String > parentManagers = new ArrayList <>();
4161+ claim .parent .getPermissions (parentBuilders , parentContainers , parentAccessors , parentManagers );
4162+
4163+ ArrayList <String > currentBuilders = new ArrayList <>();
4164+ ArrayList <String > currentContainers = new ArrayList <>();
4165+ ArrayList <String > currentAccessors = new ArrayList <>();
4166+ ArrayList <String > currentManagers = new ArrayList <>();
4167+ claim .getPermissions (currentBuilders , currentContainers , currentAccessors , currentManagers );
4168+
4169+ for (String manager : parentManagers ) {
4170+ claim .managers .remove (manager .toLowerCase ());
4171+ }
4172+
4173+ for (String builder : parentBuilders ) {
4174+ ClaimPermission childPerm = claim .getPermission (builder .toLowerCase ());
4175+ if (childPerm == ClaimPermission .Build ) {
4176+ claim .dropPermission (builder );
4177+ }
4178+ }
4179+
4180+ for (String container : parentContainers ) {
4181+ ClaimPermission childPerm = claim .getPermission (container .toLowerCase ());
4182+ if (childPerm == ClaimPermission .Container ) {
4183+ claim .dropPermission (container );
4184+ }
4185+ }
4186+
4187+ for (String accessor : parentAccessors ) {
4188+ ClaimPermission childPerm = claim .getPermission (accessor .toLowerCase ());
4189+ if (childPerm == ClaimPermission .Access ) {
4190+ claim .dropPermission (accessor );
4191+ }
4192+ }
4193+ }
4194+
41524195 public boolean handleDropsCommand (CommandSender sender , String [] args ) {
41534196 if (!(sender instanceof Player player ))
41544197 return false ;
0 commit comments