Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Worldguard properties update #441

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
package com.denizenscript.depenizen.bukkit.bridges;

import com.denizenscript.denizen.objects.CuboidTag;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizen.objects.WorldTag;
import com.denizenscript.denizen.utilities.depends.Depends;
import com.denizenscript.denizencore.DenizenCore;
import com.denizenscript.denizencore.objects.ObjectFetcher;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import com.denizenscript.denizencore.tags.TagManager;
import com.denizenscript.depenizen.bukkit.Bridge;
import com.denizenscript.depenizen.bukkit.commands.worldguard.RegionCommand;
import com.denizenscript.depenizen.bukkit.objects.worldguard.WorldGuardRegionTag;
import com.denizenscript.depenizen.bukkit.properties.worldguard.WorldGuardCuboidProperties;
import com.denizenscript.depenizen.bukkit.properties.worldguard.WorldGuardLocationProperties;
import com.denizenscript.depenizen.bukkit.properties.worldguard.WorldGuardNPCExtensions;
import com.denizenscript.depenizen.bukkit.properties.worldguard.WorldGuardPlayerProperties;
import com.denizenscript.depenizen.bukkit.properties.worldguard.WorldGuardWorldProperties;
import com.denizenscript.depenizen.bukkit.properties.worldguard.*;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.managers.RegionManager;
Expand All @@ -29,11 +21,13 @@ public class WorldGuardBridge extends Bridge {
public void init() {
instance = this;
ObjectFetcher.registerWithObjectFetcher(WorldGuardRegionTag.class, WorldGuardRegionTag.tagProcessor);
PropertyParser.registerProperty(WorldGuardLocationProperties.class, LocationTag.class);
PropertyParser.registerProperty(WorldGuardPlayerProperties.class, PlayerTag.class);
PropertyParser.registerProperty(WorldGuardCuboidProperties.class, CuboidTag.class);
PropertyParser.registerProperty(WorldGuardWorldProperties.class, WorldTag.class);
WorldGuardNPCExtensions.register();
WorldGuardLocationExtensions.register();
WorldGuardPlayerExtensions.register();
WorldGuardCuboidExtensions.register();
WorldGuardWorldExtensions.register();
if (Depends.citizens != null) {
WorldGuardNPCExtensions.register();
}
DenizenCore.commandRegistry.registerCommand(RegionCommand.class);

// <--[tag]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.denizenscript.depenizen.bukkit.properties.worldguard;

import com.denizenscript.denizen.objects.CuboidTag;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.depenizen.bukkit.objects.worldguard.WorldGuardRegionTag;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;

public class WorldGuardCuboidExtensions {

public static ApplicableRegionSet getApplicableRegions(CuboidTag cuboid) {
LocationTag low = cuboid.getLow(0);
LocationTag high = cuboid.getHigh(0);
BlockVector3 vecLow = BlockVector3.at(low.getX(), low.getY(), low.getZ());
BlockVector3 vecHigh = BlockVector3.at(high.getX(), high.getY(), high.getZ());
ProtectedCuboidRegion region = new ProtectedCuboidRegion("FAKE_REGION", vecLow, vecHigh);
return WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(cuboid.getWorld().getWorld())).getApplicableRegions(region);
}

public static void register() {

// <--[tag]
// @attribute <CuboidTag.has_region>
// @returns ElementTag(Boolean)
// @plugin Depenizen, WorldGuard
// @description
// Returns whether the cuboid contains any region.
// -->
CuboidTag.tagProcessor.registerTag(ElementTag.class, "has_region", (attribute, area) -> {
return new ElementTag(getApplicableRegions(area).size() > 0);
});

// <--[tag]
// @attribute <CuboidTag.regions>
// @returns ListTag(WorldGuardRegionTag)
// @plugin Depenizen, WorldGuard
// @description
// Returns a list of regions that are in this cuboid.
// -->
CuboidTag.tagProcessor.registerTag(ListTag.class, "regions", (attribute, area) -> {
ListTag regionList = new ListTag();
for (ProtectedRegion protectedRegion : getApplicableRegions(area)) {
regionList.addObject(new WorldGuardRegionTag(protectedRegion, area.getWorld().getWorld()));
}
return regionList;
});
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.denizenscript.depenizen.bukkit.properties.worldguard;

import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.depenizen.bukkit.objects.worldguard.WorldGuardRegionTag;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;

import java.util.Set;

public class WorldGuardLocationExtensions {

public static Set<ProtectedRegion> getApplicableRegions(LocationTag loc) {
return WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(loc)).getRegions();
}

public static void register() {

// <--[tag]
// @attribute <LocationTag.in_region[(<name>|...)]>
// @returns ElementTag(Boolean)
// @plugin Depenizen, WorldGuard
// @description
// If a region name or list of names is specified, returns whether the
// location is in one of the listed regions, otherwise returns whether
// the location is in any region.
// -->
LocationTag.tagProcessor.registerTag(ElementTag.class, "in_region", (attribute, loc) -> {
Set<ProtectedRegion> queryRegions = getApplicableRegions(loc);
if (attribute.hasParam()) {
ListTag regions = attribute.paramAsType(ListTag.class);
for (ProtectedRegion region : queryRegions) {
for (String id : regions) {
if (id.equalsIgnoreCase(region.getId())) {
return new ElementTag(true);
}
}
}
return new ElementTag(false);
}
return new ElementTag(!queryRegions.isEmpty());
});

// <--[tag]
// @attribute <LocationTag.regions>
// @returns ListTag(WorldGuardRegionTag)
// @plugin Depenizen, WorldGuard
// @description
// Returns a list of regions that the location is in.
// -->
LocationTag.tagProcessor.registerTag(ListTag.class, "regions", (attribute, loc) -> {
Set<ProtectedRegion> queryRegions = getApplicableRegions(loc);
ListTag regions = new ListTag(queryRegions.size());
for (ProtectedRegion region : queryRegions) {
regions.addObject(new WorldGuardRegionTag(region, loc.getWorld()));
}
return regions;
});
}

}
Loading