Skip to content

Commit b3ae14b

Browse files
committed
Removed commands for custom domains.
Adding/Removing custom domains are now in /rg addmember/delmember/addowner/delowner
1 parent 4f1be02 commit b3ae14b

8 files changed

Lines changed: 89 additions & 115 deletions

File tree

worldguard-core/src/main/java/com/sk89q/worldguard/commands/region/MemberCommands.java

Lines changed: 12 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ public void addMember(CommandContext args, Actor sender) throws CommandException
8181
DomainInputResolver resolver = new DomainInputResolver(
8282
WorldGuard.getInstance().getProfileService(), args.getParsedPaddedSlice(1, 0));
8383
resolver.setLocatorPolicy(args.hasFlag('n') ? UserLocatorPolicy.NAME_ONLY : UserLocatorPolicy.UUID_ONLY);
84+
resolver.setActor(sender);
85+
resolver.setRegion(region);
8486

8587

8688
final String description = String.format("Adding members to the region '%s' on '%s'", region.getId(), world.getName());
@@ -115,7 +117,8 @@ public void addOwner(CommandContext args, Actor sender) throws CommandException
115117
DomainInputResolver resolver = new DomainInputResolver(
116118
WorldGuard.getInstance().getProfileService(), args.getParsedPaddedSlice(1, 0));
117119
resolver.setLocatorPolicy(args.hasFlag('n') ? UserLocatorPolicy.NAME_ONLY : UserLocatorPolicy.UUID_ONLY);
118-
120+
resolver.setActor(sender);
121+
resolver.setRegion(region);
119122

120123
final String description = String.format("Adding owners to the region '%s' on '%s'", region.getId(), world.getName());
121124
AsyncCommandBuilder.wrap(checkedAddOwners(sender, manager, region, world, resolver), sender)
@@ -188,6 +191,8 @@ public void removeMember(CommandContext args, Actor sender) throws CommandExcept
188191
DomainInputResolver resolver = new DomainInputResolver(
189192
WorldGuard.getInstance().getProfileService(), args.getParsedPaddedSlice(1, 0));
190193
resolver.setLocatorPolicy(args.hasFlag('n') ? UserLocatorPolicy.NAME_ONLY : UserLocatorPolicy.UUID_AND_NAME);
194+
resolver.setActor(sender);
195+
resolver.setRegion(region);
191196

192197
callable = resolver;
193198
}
@@ -231,6 +236,8 @@ public void removeOwner(CommandContext args, Actor sender) throws CommandExcepti
231236
DomainInputResolver resolver = new DomainInputResolver(
232237
WorldGuard.getInstance().getProfileService(), args.getParsedPaddedSlice(1, 0));
233238
resolver.setLocatorPolicy(args.hasFlag('n') ? UserLocatorPolicy.NAME_ONLY : UserLocatorPolicy.UUID_AND_NAME);
239+
resolver.setActor(sender);
240+
resolver.setRegion(region);
234241

235242
callable = resolver;
236243
}
@@ -244,98 +251,7 @@ public void removeOwner(CommandContext args, Actor sender) throws CommandExcepti
244251
.buildAndExec(worldGuard.getExecutorService());
245252
}
246253

247-
248-
/**
249-
* Modify a custom domain for owner.
250-
*
251-
* @param args the arguments
252-
* @param sender the sender
253-
* @throws CommandException any error
254-
*/
255-
@Command(aliases = {"ownerdomain"},
256-
usage = "<id> <domain> [-w world] [value]",
257-
flags = "w:",
258-
desc = "Set flags",
259-
min = 2)
260-
public void ownerDomain(CommandContext args, Actor sender) throws CommandException {
261-
domain(args, sender, true);
262-
}
263-
264-
/**
265-
* Modify a custom domain for member.
266-
*
267-
* @param args the arguments
268-
* @param sender the sender
269-
* @throws CommandException any error
270-
*/
271-
@Command(aliases = {"memberdomain"},
272-
usage = "<id> <domain> [-w world] [value]",
273-
flags = "w:",
274-
desc = "Set flags",
275-
min = 2)
276-
public void onMemberDomain(CommandContext args, Actor sender) throws CommandException {
277-
domain(args, sender, false);
278-
}
279-
280-
private void domain(CommandContext args, Actor sender, boolean isOwner) throws CommandException {
281-
warnAboutSaveFailures(sender);
282-
283-
World world = checkWorld(args, sender, 'w'); // Get the world
284-
String domainName = args.getString(1);
285-
String value = args.argsLength() >= 3 ? args.getJoinedStrings(2) : null;
286-
DomainRegistry domainRegistry = WorldGuard.getInstance().getDomainRegistry();
287-
RegionPermissionModel permModel = getPermissionModel(sender);
288-
289-
// Lookup the existing region
290-
RegionManager manager = checkRegionManager(world);
291-
ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), true);
292-
293-
// Check permissions
294-
if (!permModel.mayModifyCustomDomain(existing, isOwner, domainName)) {
295-
throw new CommandPermissionsException();
296-
}
297-
String regionId = existing.getId();
298-
299-
DomainFactory<?> domainFactory = domainRegistry.get(domainName);
300-
301-
// We didn't find the domain, so let's print a list of domains that the user
302-
// can use, and do nothing afterwards
303-
if (domainFactory == null) {
304-
AsyncCommandBuilder.wrap(new DomainListBuilder(domainRegistry, permModel, existing, world,
305-
regionId, sender, domainName, isOwner), sender)
306-
.registerWithSupervisor(WorldGuard.getInstance().getSupervisor(), "Domain list for invalid domain command.")
307-
.onSuccess((Component) null, sender::print)
308-
.onFailure((Component) null, WorldGuard.getInstance().getExceptionConverter())
309-
.buildAndExec(WorldGuard.getInstance().getExecutorService());
310-
return;
311-
}
312-
313-
DefaultDomain usedDomain = isOwner ? existing.getOwners() : existing.getMembers();
314-
315-
// Set the flag value if a value was set
316-
if (value != null) {
317-
// Set the flag if [value] was given even if [-g group] was given as well
318-
try {
319-
CustomDomain customDomain = domainFactory.create(domainName);
320-
setDomain(existing, usedDomain, customDomain, sender, value);
321-
} catch (InvalidDomainFormat e) {
322-
throw new CommandException(e.getMessage());
323-
}
324-
// No value? Clear the flag, if -g isn't specified
325-
} else {
326-
usedDomain.removeCustomDomain(domainName);
327-
}
328-
329-
RegionPrintoutBuilder printout = new RegionPrintoutBuilder(world.getName(), existing, null, sender);
330-
printout.append(SubtleFormat.wrap("(Current domains:"));
331-
printout.newline();
332-
printout.appendDomain();
333-
printout.append(SubtleFormat.wrap(")"));
334-
printout.send(sender);
335-
checkSpawnOverlap(sender, world, existing);
336-
337-
}
338-
254+
// TODO: Implement a list for available domains. Maybe /rg domains? or /rg addmembers/addowners/delmembers/delowners?
339255
private static class DomainListBuilder implements Callable<Component> {
340256
private final DomainRegistry domainRegistry;
341257
private final RegionPermissionModel permModel;
@@ -375,11 +291,11 @@ public Component call() {
375291

376292
final HoverEvent clickToSet = HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("Click to set"));
377293
for (int i = 0; i < domainList.size(); i++) {
378-
String flag = domainList.get(i);
294+
String domainName = domainList.get(i);
379295

380-
builder.append(TextComponent.of(flag, i % 2 == 0 ? TextColor.GRAY : TextColor.WHITE)
296+
builder.append(TextComponent.of(domainName, i % 2 == 0 ? TextColor.GRAY : TextColor.WHITE)
381297
.hoverEvent(clickToSet).clickEvent(ClickEvent.of(ClickEvent.Action.SUGGEST_COMMAND,
382-
"/rg " + (isOwner ? "ownerdomains" : "memberdomains") +" -w \"" + world.getName() + "\" " + regionId + " " + flag + " ")));
298+
"/rg " + (isOwner ? "addowner" : "addmember") +" -w \"" + world.getName() + "\" " + regionId + " " + domainName + ":")));
383299
if (i < domainList.size() + 1) {
384300
builder.append(TextComponent.of(", "));
385301
}

worldguard-core/src/main/java/com/sk89q/worldguard/commands/region/RegionCommands.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public void define(CommandContext args, Actor sender) throws CommandException {
160160
region = checkRegionFromSelection(sender, id);
161161
}
162162

163-
RegionAdder task = new RegionAdder(manager, region);
163+
RegionAdder task = new RegionAdder(manager, region, sender);
164164
task.addOwnersFromCommand(args, 2);
165165

166166
final String description = String.format("Adding region '%s'", region.getId());
@@ -214,7 +214,7 @@ public void redefine(CommandContext args, Actor sender) throws CommandException
214214

215215
region.copyFrom(existing);
216216

217-
RegionAdder task = new RegionAdder(manager, region);
217+
RegionAdder task = new RegionAdder(manager, region, sender);
218218

219219
final String description = String.format("Updating region '%s'", region.getId());
220220
AsyncCommandBuilder.wrap(task, sender)

worldguard-core/src/main/java/com/sk89q/worldguard/commands/region/RegionCommandsBase.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -426,13 +426,4 @@ protected static <V> V setFlag(ProtectedRegion region, Flag<V> flag, Actor sende
426426
region.setFlag(flag, val);
427427
return val;
428428
}
429-
430-
/**
431-
* Utility method to set a custom domain
432-
*/
433-
protected static void setDomain(ProtectedRegion region, DefaultDomain target, CustomDomain domain, Actor sender, String value) throws InvalidDomainFormat {
434-
domain.parseInput(CustomDomainContext.create().setSender(sender).setInput(value).setObject("region", region).build());
435-
target.addCustomDomain(domain);
436-
}
437-
438429
}

worldguard-core/src/main/java/com/sk89q/worldguard/commands/task/RegionAdder.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package com.sk89q.worldguard.commands.task;
2121

2222
import com.sk89q.minecraft.util.commands.CommandContext;
23+
import com.sk89q.worldedit.extension.platform.Actor;
2324
import com.sk89q.worldguard.WorldGuard;
2425
import com.sk89q.worldguard.domains.DefaultDomain;
2526
import com.sk89q.worldguard.protection.managers.RegionManager;
@@ -39,22 +40,34 @@ public class RegionAdder implements Callable<ProtectedRegion> {
3940

4041
private final RegionManager manager;
4142
private final ProtectedRegion region;
43+
private final Actor actor;
4244
@Nullable
4345
private String[] ownersInput;
4446
private UserLocatorPolicy locatorPolicy = UserLocatorPolicy.UUID_ONLY;
4547

4648
/**
4749
* Create a new instance.
4850
*
49-
* @param manager the manage
51+
* @param manager the manager
5052
* @param region the region
5153
*/
5254
public RegionAdder(RegionManager manager, ProtectedRegion region) {
55+
this(manager, region, null);
56+
}
57+
58+
/**
59+
* Create a new instance.
60+
* @param manager the manager
61+
* @param region the region
62+
* @param actor the actor
63+
*/
64+
public RegionAdder(RegionManager manager, ProtectedRegion region, Actor actor) {
5365
checkNotNull(manager);
5466
checkNotNull(region);
5567

5668
this.manager = manager;
5769
this.region = region;
70+
this.actor = actor;
5871
}
5972

6073
/**
@@ -75,6 +88,9 @@ public ProtectedRegion call() throws Exception {
7588
if (ownersInput != null) {
7689
DomainInputResolver resolver = new DomainInputResolver(WorldGuard.getInstance().getProfileService(), ownersInput);
7790
resolver.setLocatorPolicy(locatorPolicy);
91+
resolver.setActor(actor);
92+
resolver.setRegion(region);
93+
7894
DefaultDomain domain = resolver.call();
7995
region.getOwners().addAll(domain);
8096
}

worldguard-core/src/main/java/com/sk89q/worldguard/domains/CustomDomain.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ public String getName() {
8181
*/
8282
public static boolean isValidName(String name) {
8383
checkNotNull(name, "name");
84-
return VALID_NAME.matcher(name).matches();
84+
// g is already reserved by the group domain
85+
return VALID_NAME.matcher(name).matches() && !name.equalsIgnoreCase("g");
8586
}
8687

8788

worldguard-core/src/main/java/com/sk89q/worldguard/domains/DefaultDomain.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public void removeAll(DefaultDomain other) {
260260
removeGroup(group);
261261
}
262262
for (CustomDomain domain : other.getCustomDomains()) {
263-
removeCustomDomain(domain);
263+
removeCustomDomain(domain.getName());
264264
}
265265
}
266266

@@ -549,7 +549,7 @@ public boolean isDirty() {
549549
public void setDirty(boolean dirty) {
550550
playerDomain.setDirty(dirty);
551551
groupDomain.setDirty(dirty);
552-
customDomainsChanged = true;
552+
customDomainsChanged = dirty;
553553
customDomains.forEach(d -> d.setDirty(dirty));
554554
}
555555

worldguard-core/src/main/java/com/sk89q/worldguard/protection/util/DomainInputResolver.java

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121

2222
import com.google.common.base.Function;
2323
import com.google.common.base.Joiner;
24+
import com.sk89q.worldedit.extension.platform.Actor;
25+
import com.sk89q.worldguard.WorldGuard;
26+
import com.sk89q.worldguard.domains.CustomDomain;
27+
import com.sk89q.worldguard.domains.registry.CustomDomainContext;
28+
import com.sk89q.worldguard.domains.registry.DomainFactory;
29+
import com.sk89q.worldguard.domains.registry.InvalidDomainFormat;
30+
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
2431
import com.sk89q.worldguard.util.profile.Profile;
2532
import com.sk89q.worldguard.util.profile.resolver.ProfileService;
2633
import com.sk89q.worldguard.util.profile.util.UUIDs;
@@ -43,6 +50,7 @@
4350
public class DomainInputResolver implements Callable<DefaultDomain> {
4451

4552
private static final Pattern GROUP_PATTERN = Pattern.compile("(?i)^[G]:(.+)$");
53+
private static final Pattern CUSTOM_PATTERN = Pattern.compile("(?i)^([A-Za-z0-9\\-]{1,40}):(.*)$");
4654

4755
/**
4856
* The policy for locating users.
@@ -56,6 +64,8 @@ public enum UserLocatorPolicy {
5664
private final ProfileService profileService;
5765
private final String[] input;
5866
private UserLocatorPolicy locatorPolicy = UserLocatorPolicy.UUID_ONLY;
67+
private ProtectedRegion region;
68+
private Actor actor;
5969

6070
/**
6171
* Create a new instance.
@@ -89,15 +99,49 @@ public void setLocatorPolicy(UserLocatorPolicy locatorPolicy) {
8999
this.locatorPolicy = locatorPolicy;
90100
}
91101

102+
/**
103+
* Set the region for the Resolver
104+
* @param region the region
105+
*/
106+
public void setRegion(ProtectedRegion region) {
107+
this.region = region;
108+
}
109+
110+
/**
111+
* Get the current region from the Resolver
112+
* @return the region
113+
*/
114+
public @Nullable ProtectedRegion getRegion() {
115+
return region;
116+
}
117+
118+
/**
119+
* Set the actor of the Resolver
120+
* @param actor the actor
121+
*/
122+
public void setActor(Actor actor) {
123+
this.actor = actor;
124+
}
125+
92126
@Override
93-
public DefaultDomain call() throws UnresolvedNamesException {
127+
public DefaultDomain call() throws UnresolvedNamesException, InvalidDomainFormat {
94128
DefaultDomain domain = new DefaultDomain();
95129
List<String> namesToQuery = new ArrayList<>();
96130

97131
for (String s : input) {
98-
Matcher m = GROUP_PATTERN.matcher(s);
99-
if (m.matches()) {
100-
domain.addGroup(m.group(1));
132+
Matcher groupMatcher = GROUP_PATTERN.matcher(s);
133+
Matcher customMatcher = CUSTOM_PATTERN.matcher(s);
134+
if (groupMatcher.matches()) {
135+
domain.addGroup(groupMatcher.group(1));
136+
} else if (customMatcher.matches()) {
137+
String domainName = customMatcher.group(1);
138+
DomainFactory<?> domainFactory = WorldGuard.getInstance().getDomainRegistry().get(domainName);
139+
if (domainFactory == null) {
140+
throw new InvalidDomainFormat("No domain named '" + domainName + "' found.");
141+
}
142+
CustomDomain customDomain = domainFactory.create(domainName);
143+
customDomain.parseInput(CustomDomainContext.create()
144+
.setSender(actor).setInput(customMatcher.group(2)).setObject("region", region).build());
101145
} else {
102146
UUID uuid = parseUUID(s);
103147
if (uuid != null) {

worldguard-core/src/main/java/com/sk89q/worldguard/util/WorldGuardExceptionConverter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.sk89q.worldedit.util.auth.AuthorizationException;
2727
import com.sk89q.worldedit.util.formatting.component.InvalidComponentException;
2828
import com.sk89q.worldguard.WorldGuard;
29+
import com.sk89q.worldguard.domains.registry.InvalidDomainFormat;
2930
import com.sk89q.worldguard.protection.managers.storage.StorageException;
3031
import com.sk89q.worldguard.protection.util.UnresolvedNamesException;
3132

@@ -91,6 +92,11 @@ public void convert(UnresolvedNamesException e) throws CommandException {
9192
throw newCommandException(e.getMessage(), e);
9293
}
9394

95+
@ExceptionMatch
96+
public void convert(InvalidDomainFormat e) throws CommandException {
97+
throw newCommandException(e.getMessage(), e);
98+
}
99+
94100
@ExceptionMatch
95101
public void convert(AuthorizationException e) throws CommandException {
96102
throw newCommandException("You don't have permission to do that.", e);

0 commit comments

Comments
 (0)