Merge pull request #33 from spathizilla/master
Worldguard region checking
This commit is contained in:
commit
f9cb5014dc
@ -63,6 +63,8 @@ public class Conf {
|
|||||||
|
|
||||||
public static double autoLeaveAfterDaysOfInactivity = 14.0;
|
public static double autoLeaveAfterDaysOfInactivity = 14.0;
|
||||||
|
|
||||||
|
public static boolean worldGuardChecking = true;
|
||||||
|
|
||||||
public static boolean homesEnabled = true;
|
public static boolean homesEnabled = true;
|
||||||
public static boolean homesMustBeInClaimedTerritory = true;
|
public static boolean homesMustBeInClaimedTerritory = true;
|
||||||
public static boolean homesTeleportToOnDeath = true;
|
public static boolean homesTeleportToOnDeath = true;
|
||||||
|
@ -508,6 +508,12 @@ public class FPlayer {
|
|||||||
FLocation flocation = new FLocation(this);
|
FLocation flocation = new FLocation(this);
|
||||||
Faction otherFaction = Board.getFactionAt(flocation);
|
Faction otherFaction = Board.getFactionAt(flocation);
|
||||||
|
|
||||||
|
if (Worldguard.checkForRegionsInChunk(this.getPlayer().getLocation())) {
|
||||||
|
// Checks for WorldGuard regions in the chunk attempting to be claimed
|
||||||
|
sendMessage("This land is protected");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (myFaction == otherFaction) {
|
if (myFaction == otherFaction) {
|
||||||
if (notifyFailure)
|
if (notifyFailure)
|
||||||
sendMessage("You already own this land.");
|
sendMessage("You already own this land.");
|
||||||
|
@ -151,6 +151,10 @@ public class Factions extends JavaPlugin {
|
|||||||
Econ.setup(this);
|
Econ.setup(this);
|
||||||
Econ.monitorPlugins();
|
Econ.monitorPlugins();
|
||||||
|
|
||||||
|
if(Conf.worldGuardChecking) {
|
||||||
|
Worldguard.init(this);
|
||||||
|
}
|
||||||
|
|
||||||
// Register events
|
// Register events
|
||||||
PluginManager pm = this.getServer().getPluginManager();
|
PluginManager pm = this.getServer().getPluginManager();
|
||||||
pm.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Event.Priority.Highest, this);
|
pm.registerEvent(Event.Type.PLAYER_CHAT, this.playerListener, Event.Priority.Highest, this);
|
||||||
|
@ -147,7 +147,7 @@ public class SpoutFeatures {
|
|||||||
spoutApp.setPlayerTitle(sPlayer, viewed, addTag + "\n" + viewed.getDisplayName());
|
spoutApp.setPlayerTitle(sPlayer, viewed, addTag + "\n" + viewed.getDisplayName());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
spoutApp.resetPlayerTitle(sPlayer, viewed);
|
spoutApp.setPlayerTitle(sPlayer, viewed, viewed.getDisplayName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
115
src/com/massivecraft/factions/Worldguard.java
Normal file
115
src/com/massivecraft/factions/Worldguard.java
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
package com.massivecraft.factions;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
|
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||||
|
import com.sk89q.worldguard.protection.UnsupportedIntersectionException;
|
||||||
|
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
||||||
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
|
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
|
||||||
|
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||||
|
|
||||||
|
import com.sk89q.worldedit.Vector;
|
||||||
|
import com.sk89q.worldedit.BlockVector;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Worldguard Region Checking
|
||||||
|
* Author: Spathizilla
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class Worldguard {
|
||||||
|
private static WorldGuardPlugin wg;
|
||||||
|
private static boolean enabled = false;
|
||||||
|
|
||||||
|
public static void init(Plugin plugin) {
|
||||||
|
Plugin wgplug = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
|
||||||
|
if (wgplug == null || !(wgplug instanceof WorldGuardPlugin)) {
|
||||||
|
enabled = false;
|
||||||
|
wg = null;
|
||||||
|
System.out.println("[Factions] Could not hook to WorldGuard. WorldGuard checks are disabled.");
|
||||||
|
} else {
|
||||||
|
wg = (WorldGuardPlugin) wgplug;
|
||||||
|
enabled = true;
|
||||||
|
System.out.println("[Factions] Successfully hooked to WorldGuard.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isEnabled() {
|
||||||
|
return enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PVP Flag check
|
||||||
|
// Returns:
|
||||||
|
// True: PVP is allowed
|
||||||
|
// False: PVP is disallowed
|
||||||
|
public static boolean isPVP(Player player) {
|
||||||
|
if(isEnabled()) {
|
||||||
|
Location loc = player.getLocation();
|
||||||
|
World world = loc.getWorld();
|
||||||
|
Vector pt = toVector(loc);
|
||||||
|
|
||||||
|
RegionManager regionManager = wg.getRegionManager(world);
|
||||||
|
ApplicableRegionSet set = regionManager.getApplicableRegions(pt);
|
||||||
|
return set.allows(DefaultFlag.PVP);
|
||||||
|
} else {
|
||||||
|
// No WG hooks so we'll always bypass this check.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for Regions in chunk the chunk
|
||||||
|
// Returns:
|
||||||
|
// True: Regions found within chunk
|
||||||
|
// False: No regions found within chunk
|
||||||
|
public static boolean checkForRegionsInChunk(Location loc) {
|
||||||
|
if(isEnabled()) {
|
||||||
|
World world = loc.getWorld();
|
||||||
|
Chunk chunk = world.getChunkAt(loc);
|
||||||
|
int minChunkX = chunk.getX() * 16;
|
||||||
|
int minChunkZ = chunk.getZ() * 16;
|
||||||
|
int maxChunkX = minChunkX + 15;
|
||||||
|
int maxChunkZ = minChunkZ + 15;
|
||||||
|
|
||||||
|
int worldHeight = world.getMaxHeight(); // Allow for heights other than default
|
||||||
|
|
||||||
|
BlockVector minChunk = new BlockVector(minChunkX, 0, minChunkZ);
|
||||||
|
BlockVector maxChunk = new BlockVector(maxChunkX, worldHeight, maxChunkZ);
|
||||||
|
|
||||||
|
RegionManager regionManager = wg.getRegionManager(world);
|
||||||
|
ProtectedCuboidRegion region = new ProtectedCuboidRegion("wgfactionoverlapcheck", minChunk, maxChunk);
|
||||||
|
Map<String, ProtectedRegion> allregions = regionManager.getRegions();
|
||||||
|
List<ProtectedRegion> allregionslist = new ArrayList<ProtectedRegion>(allregions.values());
|
||||||
|
List<ProtectedRegion> overlaps;
|
||||||
|
boolean foundregions = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
overlaps = region.getIntersectingRegions(allregionslist);
|
||||||
|
if(overlaps.isEmpty() || overlaps == null) {
|
||||||
|
foundregions = false;
|
||||||
|
} else {
|
||||||
|
foundregions = true;
|
||||||
|
}
|
||||||
|
} catch (UnsupportedIntersectionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
region = null;
|
||||||
|
allregionslist = null;
|
||||||
|
overlaps = null;
|
||||||
|
|
||||||
|
return foundregions;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user