mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-12-21 00:28:23 +01:00
More is working! DO NOT USE THIS YET or I will have to personally slap you.
This commit is contained in:
parent
0dd92e5189
commit
20afbdf264
@ -24,7 +24,6 @@
|
|||||||
import com.sk89q.worldguard.blacklist.loggers.ConsoleLoggerHandler;
|
import com.sk89q.worldguard.blacklist.loggers.ConsoleLoggerHandler;
|
||||||
import com.sk89q.worldguard.blacklist.loggers.DatabaseLoggerHandler;
|
import com.sk89q.worldguard.blacklist.loggers.DatabaseLoggerHandler;
|
||||||
import com.sk89q.worldguard.blacklist.loggers.FileLoggerHandler;
|
import com.sk89q.worldguard.blacklist.loggers.FileLoggerHandler;
|
||||||
import com.sk89q.worldguard.protection.GlobalFlags;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -175,19 +174,6 @@ private void loadConfiguration() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GlobalFlags globalFlags = new GlobalFlags();
|
|
||||||
globalFlags.canBuild = config.getBoolean("regions.default.build", true);
|
|
||||||
globalFlags.canAccessChests = config.getBoolean("regions.default.chest-access", false);
|
|
||||||
globalFlags.canPvP = config.getBoolean("regions.default.pvp", true);
|
|
||||||
globalFlags.canLighter = config.getBoolean("regions.default.lighter", true);
|
|
||||||
globalFlags.canTnt = config.getBoolean("regions.default.tnt", true);
|
|
||||||
globalFlags.allowCreeper = config.getBoolean("regions.default.creeper", true);
|
|
||||||
globalFlags.allowMobDamage = config.getBoolean("regions.default.mobdamage", true);
|
|
||||||
globalFlags.canLeverandbutton = config.getBoolean("regions.default.leverandbutton", true);
|
|
||||||
globalFlags.canPlaceVehicle = config.getBoolean("regions.default.placevehicle", true);
|
|
||||||
globalFlags.allowWaterflow = config.getBoolean("regions.default.waterflow", true);
|
|
||||||
plugin.getGlobalRegionManager().setGlobalFlags(worldName, globalFlags);
|
|
||||||
|
|
||||||
boolean useBlacklistAsWhitelist = config.getBoolean("blacklist.use-as-whitelist", false);
|
boolean useBlacklistAsWhitelist = config.getBoolean("blacklist.use-as-whitelist", false);
|
||||||
|
|
||||||
// Console log configuration
|
// Console log configuration
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.sk89q.worldguard.bukkit;
|
package com.sk89q.worldguard.bukkit;
|
||||||
|
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlags;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import org.bukkit.event.Event.Priority;
|
import org.bukkit.event.Event.Priority;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
@ -68,14 +67,14 @@ public void registerEvents() {
|
|||||||
|
|
||||||
PluginManager pm = plugin.getServer().getPluginManager();
|
PluginManager pm = plugin.getServer().getPluginManager();
|
||||||
|
|
||||||
pm.registerEvent(Event.Type.BLOCK_DAMAGED, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.BLOCK_DAMAGE, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_BREAK, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.BLOCK_BREAK, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_FLOW, this, Priority.Normal, plugin);
|
pm.registerEvent(Event.Type.BLOCK_FROMTO, this, Priority.Normal, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_IGNITE, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.BLOCK_IGNITE, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_PHYSICS, this, Priority.Normal, plugin);
|
pm.registerEvent(Event.Type.BLOCK_PHYSICS, this, Priority.Normal, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_INTERACT, this, Priority.High, plugin);
|
//pm.registerEvent(Event.Type.BLOCK_INTERACT, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_PLACED, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.BLOCK_PLACE, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_RIGHTCLICKED, this, Priority.High, plugin);
|
//pm.registerEvent(Event.Type.BLOCK_RIGHTCLICK, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.BLOCK_BURN, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.BLOCK_BURN, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.REDSTONE_CHANGE, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.REDSTONE_CHANGE, this, Priority.High, plugin);
|
||||||
}
|
}
|
||||||
@ -247,7 +246,7 @@ public void onBlockFlow(BlockFromToEvent event) {
|
|||||||
Vector pt = toVector(blockFrom.getLocation());
|
Vector pt = toVector(blockFrom.getLocation());
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(world.getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(world.getName());
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).isStateFlagAllowed(DefaultFlag.WATER_FLOW)) {
|
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.WATER_FLOW)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -293,18 +292,18 @@ public void onBlockIgnite(BlockIgniteEvent event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cause == IgniteCause.FLINT_AND_STEEL
|
if (cause == IgniteCause.FLINT_AND_STEEL
|
||||||
&& !set.isStateFlagAllowed(DefaultFlag.LIGHTER)) {
|
&& !set.allows(DefaultFlag.LIGHTER)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFireSpread && set.isStateFlagAllowed(DefaultFlag.FIRE_SPREAD)) {
|
if (isFireSpread && set.allows(DefaultFlag.FIRE_SPREAD)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cause == IgniteCause.LAVA && !set.isStateFlagAllowed(DefaultFlag.LAVA_FIRE)) {
|
if (cause == IgniteCause.LAVA && !set.allows(DefaultFlag.LAVA_FIRE)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -419,7 +418,7 @@ public void onBlockPhysics(BlockPhysicsEvent event) {
|
|||||||
* Called when a block is interacted with
|
* Called when a block is interacted with
|
||||||
*
|
*
|
||||||
* @param event Relevant event details
|
* @param event Relevant event details
|
||||||
*/
|
*//*
|
||||||
@Override
|
@Override
|
||||||
public void onBlockInteract(BlockInteractEvent event) {
|
public void onBlockInteract(BlockInteractEvent event) {
|
||||||
|
|
||||||
@ -448,7 +447,7 @@ public void onBlockInteract(BlockInteractEvent event) {
|
|||||||
|
|
||||||
if (!plugin.hasPermission(player, "region.bypass")) {
|
if (!plugin.hasPermission(player, "region.bypass")) {
|
||||||
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
|
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
|
||||||
if (!set.isStateFlagAllowed(DefaultFlag.CHEST_ACCESS) && !set.canBuild(localPlayer)) {
|
if (!set.allows(DefaultFlag.CHEST_ACCESS) && !set.canBuild(localPlayer)) {
|
||||||
player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
|
player.sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -463,7 +462,7 @@ public void onBlockInteract(BlockInteractEvent event) {
|
|||||||
ApplicableRegionSet applicableRegions = mgr.getApplicableRegions(pt);
|
ApplicableRegionSet applicableRegions = mgr.getApplicableRegions(pt);
|
||||||
LocalPlayer localPlayer = plugin.wrapPlayer((Player)entity);
|
LocalPlayer localPlayer = plugin.wrapPlayer((Player)entity);
|
||||||
|
|
||||||
if (!applicableRegions.isStateFlagAllowed(DefaultFlag.LEVER_AND_BUTTON, localPlayer)) {
|
if (!applicableRegions.canUse(localPlayer)) {
|
||||||
((Player)entity).sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
|
((Player)entity).sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -480,7 +479,7 @@ public void onBlockInteract(BlockInteractEvent event) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a player places a block
|
* Called when a player places a block
|
||||||
@ -538,9 +537,9 @@ public void onBlockPlace(BlockPlaceEvent event) {
|
|||||||
*
|
*
|
||||||
* @param event Relevant event details
|
* @param event Relevant event details
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
@Override
|
@Override
|
||||||
public void onBlockRightClick(BlockRightClickEvent event) {
|
public void onBlockRightClick(BlockRightClickEvent event) {
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Block blockClicked = event.getBlock();
|
Block blockClicked = event.getBlock();
|
||||||
|
|
||||||
@ -639,7 +638,7 @@ public void onBlockRightClick(BlockRightClickEvent event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when redstone changes
|
* Called when redstone changes
|
||||||
|
@ -60,7 +60,7 @@ public void registerEvents() {
|
|||||||
|
|
||||||
PluginManager pm = plugin.getServer().getPluginManager();
|
PluginManager pm = plugin.getServer().getPluginManager();
|
||||||
|
|
||||||
pm.registerEvent(Event.Type.ENTITY_DAMAGED, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.ENTITY_DAMAGE, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.ENTITY_EXPLODE, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.ENTITY_EXPLODE, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.CREATURE_SPAWN, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.CREATURE_SPAWN, this, Priority.High, plugin);
|
||||||
}
|
}
|
||||||
@ -115,7 +115,7 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
|||||||
Vector pt = toVector(defender.getLocation());
|
Vector pt = toVector(defender.getLocation());
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).isStateFlagAllowed(DefaultFlag.PVP)) {
|
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.PVP)) {
|
||||||
((Player) attacker).sendMessage(ChatColor.DARK_RED + "You are in a no-PvP area.");
|
((Player) attacker).sendMessage(ChatColor.DARK_RED + "You are in a no-PvP area.");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -134,13 +134,13 @@ public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
|||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
||||||
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
|
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
|
||||||
|
|
||||||
if (!set.isStateFlagAllowed(DefaultFlag.MOB_DAMAGE)) {
|
if (!set.allows(DefaultFlag.MOB_DAMAGE)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attacker instanceof Creeper) {
|
if (attacker instanceof Creeper) {
|
||||||
if (!set.isStateFlagAllowed(DefaultFlag.CREEPER_EXPLOSION)) {
|
if (!set.allows(DefaultFlag.CREEPER_EXPLOSION)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) {
|
|||||||
Vector pt = toVector(defender.getLocation());
|
Vector pt = toVector(defender.getLocation());
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).isStateFlagAllowed(DefaultFlag.PVP)) {
|
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.PVP)) {
|
||||||
((Player) attacker).sendMessage(ChatColor.DARK_RED + "You are in a no-PvP area.");
|
((Player) attacker).sendMessage(ChatColor.DARK_RED + "You are in a no-PvP area.");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -183,7 +183,7 @@ public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) {
|
|||||||
Vector pt = toVector(defender.getLocation());
|
Vector pt = toVector(defender.getLocation());
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld().getName());
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).isStateFlagAllowed(DefaultFlag.MOB_DAMAGE)) {
|
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.MOB_DAMAGE)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -288,7 +288,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
|
|||||||
Vector pt = toVector(l);
|
Vector pt = toVector(l);
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(wcfg.getWorldName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(wcfg.getWorldName());
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).isStateFlagAllowed(DefaultFlag.CREEPER_EXPLOSION)) {
|
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.CREEPER_EXPLOSION)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -303,7 +303,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
|
|||||||
Vector pt = toVector(l);
|
Vector pt = toVector(l);
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(wcfg.getWorldName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(wcfg.getWorldName());
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).isStateFlagAllowed(DefaultFlag.TNT)) {
|
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.TNT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -328,11 +328,13 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
|
|||||||
cancelEvent = true;
|
cancelEvent = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Monsters and stuff
|
||||||
|
/*
|
||||||
if (wcfg.useRegions) {
|
if (wcfg.useRegions) {
|
||||||
Vector pt = toVector(event.getEntity().getLocation());
|
Vector pt = toVector(event.getEntity().getLocation());
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(event.getEntity().getWorld().getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(event.getEntity().getWorld().getName());
|
||||||
|
|
||||||
Boolean flagValue = mgr.getApplicableRegions(pt).getStringFlag(DefaultFlag.DENY_SPAWN, true).getValue("").contains(creaType.getName());
|
Boolean flagValue = mgr.getApplicableRegions(pt).getFlag(DefaultFlag.DENY_SPAWN).getValue("").contains(creaType.getName());
|
||||||
if (flagValue != null) {
|
if (flagValue != null) {
|
||||||
if (flagValue) {
|
if (flagValue) {
|
||||||
cancelEvent = true;
|
cancelEvent = true;
|
||||||
@ -340,7 +342,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
|
|||||||
cancelEvent = false;
|
cancelEvent = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (cancelEvent) {
|
if (cancelEvent) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
import com.sk89q.worldguard.blacklist.events.ItemUseBlacklistEvent;
|
import com.sk89q.worldguard.blacklist.events.ItemUseBlacklistEvent;
|
||||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlag.RegionGroup;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -65,7 +64,7 @@ public WorldGuardPlayerListener(WorldGuardPlugin plugin) {
|
|||||||
public void registerEvents() {
|
public void registerEvents() {
|
||||||
PluginManager pm = plugin.getServer().getPluginManager();
|
PluginManager pm = plugin.getServer().getPluginManager();
|
||||||
|
|
||||||
pm.registerEvent(Event.Type.PLAYER_ITEM, this, Priority.High, plugin);
|
//pm.registerEvent(Event.Type.PLAYER_ITEM, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.PLAYER_DROP_ITEM, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, this, Priority.High, plugin);
|
pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, this, Priority.High, plugin);
|
||||||
pm.registerEvent(Event.Type.PLAYER_JOIN, this, Priority.Normal, plugin);
|
pm.registerEvent(Event.Type.PLAYER_JOIN, this, Priority.Normal, plugin);
|
||||||
@ -122,7 +121,7 @@ public void onPlayerQuit(PlayerEvent event) {
|
|||||||
* Called when a player uses an item
|
* Called when a player uses an item
|
||||||
*
|
*
|
||||||
* @param event Relevant event details
|
* @param event Relevant event details
|
||||||
*/
|
*//*
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerItem(PlayerItemEvent event) {
|
public void onPlayerItem(PlayerItemEvent event) {
|
||||||
|
|
||||||
@ -185,7 +184,7 @@ public void onPlayerItem(PlayerItemEvent event) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a player attempts to log in to the server
|
* Called when a player attempts to log in to the server
|
||||||
@ -271,7 +270,7 @@ public void onPlayerPickupItem(PlayerPickupItemEvent event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerRespawn(PlayerRespawnEvent event) {
|
public void onPlayerRespawn(PlayerRespawnEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -303,5 +302,5 @@ public void onPlayerRespawn(PlayerRespawnEvent event) {
|
|||||||
event.setRespawnLocation(spawn);
|
event.setRespawnLocation(spawn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,6 @@
|
|||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import com.sk89q.worldguard.protection.GlobalRegionManager;
|
import com.sk89q.worldguard.protection.GlobalRegionManager;
|
||||||
import com.sk89q.worldguard.protection.TimedFlagsTimer;
|
import com.sk89q.worldguard.protection.TimedFlagsTimer;
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -83,8 +82,6 @@ public class WorldGuardPlugin extends JavaPlugin {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
getDataFolder().mkdirs();
|
getDataFolder().mkdirs();
|
||||||
|
|
||||||
DefaultFlag.init();
|
|
||||||
|
|
||||||
configuration = new GlobalConfiguration(this);
|
configuration = new GlobalConfiguration(this);
|
||||||
configuration.load();
|
configuration.load();
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ public void onVehicleCreate(VehicleCreateEvent event) {
|
|||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(vhcl.getWorld().getName());
|
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(vhcl.getWorld().getName());
|
||||||
ApplicableRegionSet applicableRegions = mgr.getApplicableRegions(pt);
|
ApplicableRegionSet applicableRegions = mgr.getApplicableRegions(pt);
|
||||||
|
|
||||||
if (!applicableRegions.isStateFlagAllowed(DefaultFlag.PLACE_VEHICLE)) {
|
if (!applicableRegions.allows(DefaultFlag.PLACE_VEHICLE)) {
|
||||||
vhcl.remove();
|
vhcl.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,115 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.nijiko.coelho.iConomy.iConomy;
|
|
||||||
import com.nijiko.coelho.iConomy.system.*;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlags;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author DarkLiKally
|
|
||||||
*/
|
|
||||||
public class CommandBuyRegion extends WgCommand {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("Only players may use this command");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (cfg.getiConomy() == null) {
|
|
||||||
sender.sendMessage("iConomy is not installed on this Server.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 1, 2);
|
|
||||||
|
|
||||||
plugin.checkPermission(player, "regions.buy");
|
|
||||||
|
|
||||||
String id = args[0];
|
|
||||||
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(player.getWorld().getName());
|
|
||||||
ProtectedRegion region = mgr.getRegion(id);
|
|
||||||
if (region != null) {
|
|
||||||
RegionFlags flags = region.getFlags();
|
|
||||||
|
|
||||||
if (flags.getBooleanFlag(DefaultFlag.BUYABLE).getValue(false)) {
|
|
||||||
if (args.length == 2) {
|
|
||||||
if (args[1].equalsIgnoreCase("info")) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "Region " + id + " costs " +
|
|
||||||
iConomy.getBank().format(flags.getDoubleFlag(DefaultFlag.PRICE).getValue()));
|
|
||||||
if (iConomy.getBank().hasAccount(player.getName())) {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "You have " +
|
|
||||||
iConomy.getBank().format(
|
|
||||||
iConomy.getBank().getAccount(player.getName()).getBalance()));
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "You have not enough money.");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "Usage: /buyregion <region id> (info)");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (iConomy.getBank().hasAccount(player.getName())) {
|
|
||||||
Account account = iConomy.getBank().getAccount(player.getName());
|
|
||||||
double balance = account.getBalance();
|
|
||||||
double regionPrice = flags.getDoubleFlag(DefaultFlag.PRICE).getValue();
|
|
||||||
|
|
||||||
if (balance >= regionPrice) {
|
|
||||||
account.subtract(regionPrice);
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "You have bought the region " + id + " for " +
|
|
||||||
iConomy.getBank().format(regionPrice));
|
|
||||||
DefaultDomain owners = region.getOwners();
|
|
||||||
owners.addPlayer(player.getName());
|
|
||||||
region.setOwners(owners);
|
|
||||||
flags.getBooleanFlag(DefaultFlag.BUYABLE).setValue(false);
|
|
||||||
account.save();
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "You have not enough money.");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.YELLOW + "You have not enough money.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "Region: " + id + " is not buyable");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "Region: " + id + " not defined");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,194 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.command.PluginCommand;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandHandler implements CommandExecutor {
|
|
||||||
|
|
||||||
private WorldGuardPlugin wg;
|
|
||||||
private Map<String, WgCommand> commandMap;
|
|
||||||
|
|
||||||
public static int CMD_LIST_SIZE = 9;
|
|
||||||
|
|
||||||
public CommandHandler(WorldGuardPlugin wg)
|
|
||||||
{
|
|
||||||
this.wg = wg;
|
|
||||||
this.commandMap = new HashMap<String, WgCommand>();
|
|
||||||
|
|
||||||
WgCommand regionHandler = new RegionCommandHandler();
|
|
||||||
|
|
||||||
// commands that DO support console as sender
|
|
||||||
this.commandMap.put("allowfire", new CommandAllowFire());
|
|
||||||
this.commandMap.put("god", new CommandGod());
|
|
||||||
this.commandMap.put("heal", new CommandHeal());
|
|
||||||
this.commandMap.put("region", regionHandler);
|
|
||||||
this.commandMap.put("rd", regionHandler);
|
|
||||||
this.commandMap.put("rc", regionHandler);
|
|
||||||
this.commandMap.put("rf", regionHandler);
|
|
||||||
this.commandMap.put("ri", regionHandler);
|
|
||||||
this.commandMap.put("rlist", regionHandler);
|
|
||||||
this.commandMap.put("rp", regionHandler);
|
|
||||||
this.commandMap.put("reloadwg", new CommandReloadWG());
|
|
||||||
this.commandMap.put("slay", new CommandSlay());
|
|
||||||
this.commandMap.put("stopfire", new CommandStopFire());
|
|
||||||
|
|
||||||
// commands that DO NOT support console as sender
|
|
||||||
this.commandMap.put("stack", new CommandStack());
|
|
||||||
this.commandMap.put("locate", new CommandLocate());
|
|
||||||
this.commandMap.put("buyregion", new CommandBuyRegion());
|
|
||||||
this.commandMap.put("tpregrion", new CommandTpRegion());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void registerCommands()
|
|
||||||
{
|
|
||||||
for(String cmd : this.commandMap.keySet())
|
|
||||||
{
|
|
||||||
PluginCommand command = wg.getCommand(cmd);
|
|
||||||
if(command != null)
|
|
||||||
{
|
|
||||||
command.setExecutor(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
|
|
||||||
|
|
||||||
try {
|
|
||||||
String cmdName = cmd.getName().toLowerCase();
|
|
||||||
WgCommand wgcmd = commandMap.get(cmdName);
|
|
||||||
if (wgcmd == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
String senderName = sender instanceof Player ? ((Player)sender).getName() : "Console";
|
|
||||||
|
|
||||||
wgcmd.handle(sender, senderName, cmdName, args, wg.getGlobalConfiguration(), wg);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} catch (InsufficientArgumentsException e) {
|
|
||||||
if (e.getHelp() != null) {
|
|
||||||
sender.sendMessage(ChatColor.RED + e.getHelp());
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (InsufficientPermissionsException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "You don't have sufficient permission.");
|
|
||||||
return true;
|
|
||||||
} catch (CommandHandlingException e) {
|
|
||||||
return true;
|
|
||||||
} catch (Throwable t) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "ERROR: " + t.getMessage());
|
|
||||||
t.printStackTrace();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to make sure that there are enough but not too many arguments.
|
|
||||||
*
|
|
||||||
* @param args
|
|
||||||
* @param min
|
|
||||||
* @param max -1 for no maximum
|
|
||||||
* @throws InsufficientArgumentsException
|
|
||||||
*/
|
|
||||||
public static void checkArgs(String[] args, int min, int max)
|
|
||||||
throws InsufficientArgumentsException {
|
|
||||||
if (args.length < min || (max != -1 && args.length > max)) {
|
|
||||||
throw new InsufficientArgumentsException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks to make sure that there are enough but not too many arguments.
|
|
||||||
*
|
|
||||||
* @param args
|
|
||||||
* @param min
|
|
||||||
* @param max -1 for no maximum
|
|
||||||
* @param help
|
|
||||||
* @throws InsufficientArgumentsException
|
|
||||||
*/
|
|
||||||
public static void checkArgs(String[] args, int min, int max, String help)
|
|
||||||
throws InsufficientArgumentsException {
|
|
||||||
if (args.length < min || (max != -1 && args.length > max)) {
|
|
||||||
throw new InsufficientArgumentsException(help);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thrown when command handling has raised an exception.
|
|
||||||
*
|
|
||||||
* @author sk89q
|
|
||||||
*/
|
|
||||||
public static class CommandHandlingException extends Exception {
|
|
||||||
private static final long serialVersionUID = 7912130636812036780L;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thrown when a player has insufficient permissions.
|
|
||||||
*
|
|
||||||
* @author sk89q
|
|
||||||
*/
|
|
||||||
public static class InsufficientPermissionsException extends CommandHandlingException {
|
|
||||||
private static final long serialVersionUID = 9087662707619954750L;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Thrown when a command wasn't given sufficient arguments.
|
|
||||||
*
|
|
||||||
* @author sk89q
|
|
||||||
*/
|
|
||||||
public static class InsufficientArgumentsException extends CommandHandlingException {
|
|
||||||
private static final long serialVersionUID = 4153597953889773788L;
|
|
||||||
private final String help;
|
|
||||||
|
|
||||||
public InsufficientArgumentsException() {
|
|
||||||
help = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public InsufficientArgumentsException(String msg) {
|
|
||||||
this.help = msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getHelp() {
|
|
||||||
return help;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import com.sk89q.worldguard.util.RegionUtil;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionAddMember extends WgRegionCommand {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
|
|
||||||
boolean cmdIsOwner = command.equalsIgnoreCase("addowner");
|
|
||||||
|
|
||||||
String permOwn;
|
|
||||||
String permAll;
|
|
||||||
|
|
||||||
if (cmdIsOwner) {
|
|
||||||
CommandHandler.checkArgs(args, 2, -1, "/region addowner <id> [player1 [group1 [players/groups...]]]");
|
|
||||||
permOwn = "region.addowner.own";
|
|
||||||
permAll = "region.addowner";
|
|
||||||
} else {
|
|
||||||
CommandHandler.checkArgs(args, 2, -1, "/region addmember <id> [player1 [group1 [players/groups...]]]");
|
|
||||||
permOwn = "region.addmember.own";
|
|
||||||
permAll = "region.addmember";
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
if (!mgr.hasRegion(id)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "A region with ID '"
|
|
||||||
+ id + "' doesn't exist.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion existing = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (existing.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, permOwn);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
plugin.checkPermission(sender, permAll);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plugin.checkPermission(sender, permAll);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cmdIsOwner) {
|
|
||||||
RegionUtil.addToDomain(existing.getOwners(), args, 1);
|
|
||||||
} else {
|
|
||||||
RegionUtil.addToDomain(existing.getMembers(), args, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
mgr.save();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region updated!");
|
|
||||||
sender.sendMessage(ChatColor.GRAY + "Current owners: "
|
|
||||||
+ existing.getOwners().toUserFriendlyString());
|
|
||||||
sender.sendMessage(ChatColor.GRAY + "Current members: "
|
|
||||||
+ existing.getMembers().toUserFriendlyString());
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionDelete extends WgRegionCommand {
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 0, 1, "/region delete <id>");
|
|
||||||
|
|
||||||
try {
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
|
|
||||||
if (!mgr.hasRegion(id)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "A region with ID '"
|
|
||||||
+ id + "' doesn't exist.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion existing = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (existing.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.delete.own");
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.delete");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.delete");
|
|
||||||
}
|
|
||||||
|
|
||||||
mgr.removeRegion(id);
|
|
||||||
mgr.save();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region removed!");
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,143 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitUtil;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.flags.FlagDatabase;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.LocationFlag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlag.FlagDataType;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionFlag extends WgRegionCommand {
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 2, -1, "/region flag <regionid> <name> (<value>) [no value to unset flag]");
|
|
||||||
|
|
||||||
try {
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
String nameStr = args[1];
|
|
||||||
String valueStr = null;
|
|
||||||
|
|
||||||
if (args.length == 3) {
|
|
||||||
valueStr = args[2];
|
|
||||||
} else if (args.length > 3) {
|
|
||||||
StringBuilder tmp = new StringBuilder();
|
|
||||||
for (int i = 2; i < args.length; i++) {
|
|
||||||
tmp.append(args[i]);
|
|
||||||
}
|
|
||||||
valueStr = tmp.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
ProtectedRegion region = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (region == null) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Could not find a region by that ID.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (region.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.flag.own");
|
|
||||||
} else if (region.isMember(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.flag.member");
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.flag");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.flag");
|
|
||||||
}
|
|
||||||
|
|
||||||
Flag nfo = FlagDatabase.getFlagInfoFromName(nameStr);
|
|
||||||
|
|
||||||
if (nfo == null) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Unknown flag specified.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nfo instanceof LocationFlag) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Flag not supported in console mode.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
Player player = (Player) sender;
|
|
||||||
LocationFlag lInfo = (LocationFlag)nfo;
|
|
||||||
|
|
||||||
Location l = player.getLocation();
|
|
||||||
|
|
||||||
if (valueStr != null && valueStr.equals("set")) {
|
|
||||||
|
|
||||||
if (region.contains(BukkitUtil.toVector(l))) {
|
|
||||||
region.getFlags().getLocationFlag(lInfo).setValue(l);
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " set to current location");
|
|
||||||
return true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "You must set the " + nameStr + " location inside the region it belongs to.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (valueStr == null || valueStr.equals("delete")) {
|
|
||||||
region.getFlags().getLocationFlag(lInfo).setValue((Location) null);
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " removed.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!region.getFlags().getFlag(nfo).setValue(valueStr)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Invalid value '" + valueStr + "' for flag " + nameStr);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
mgr.save();
|
|
||||||
if (valueStr == null) {
|
|
||||||
valueStr = "null";
|
|
||||||
}
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated. Flag " + nameStr + " set to " + valueStr);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,101 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
|
||||||
import com.sk89q.worldguard.protection.flags.FlagDatabase;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlags;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionInfo extends WgRegionCommand {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 1, 1, "/region info <id>");
|
|
||||||
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
if (!mgr.hasRegion(id)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "A region with ID '"
|
|
||||||
+ id + "' doesn't exist.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion region = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (region.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.info.own");
|
|
||||||
} else if (region.isMember(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.info.member");
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.info");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.info");
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionFlags flags = region.getFlags();
|
|
||||||
DefaultDomain owners = region.getOwners();
|
|
||||||
DefaultDomain members = region.getMembers();
|
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region: " + id
|
|
||||||
+ ChatColor.GRAY + " (type: " + region.getTypeName() + ")");
|
|
||||||
sender.sendMessage(ChatColor.BLUE + "Priority: " + region.getPriority());
|
|
||||||
|
|
||||||
StringBuilder s = new StringBuilder();
|
|
||||||
|
|
||||||
for (Flag nfo : FlagDatabase.getFlagInfoList()) {
|
|
||||||
if (s.length() > 0) {
|
|
||||||
s.append(", ");
|
|
||||||
}
|
|
||||||
|
|
||||||
s.append(nfo.name + ": " + flags.getFlag(nfo).toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.BLUE + "Flags: " + s.toString());
|
|
||||||
sender.sendMessage(ChatColor.BLUE + "Parent: "
|
|
||||||
+ (region.getParent() == null ? "(none)" : region.getParent().getId()));
|
|
||||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + "Owners: "
|
|
||||||
+ owners.toUserFriendlyString());
|
|
||||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + "Members: "
|
|
||||||
+ members.toUserFriendlyString());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionList extends WgRegionCommand {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
plugin.checkPermission(sender, "region.list");
|
|
||||||
CommandHandler.checkArgs(args, 0, 1, "/region list [page]");
|
|
||||||
|
|
||||||
int page = 0;
|
|
||||||
|
|
||||||
if (args.length >= 1) {
|
|
||||||
try {
|
|
||||||
page = Math.max(0, Integer.parseInt(args[0]) - 1);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
page = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
Map<String, ProtectedRegion> regions = mgr.getRegions();
|
|
||||||
int size = regions.size();
|
|
||||||
int pages = (int) Math.ceil(size / (float) CommandHandler.CMD_LIST_SIZE);
|
|
||||||
|
|
||||||
String[] regionIDList = new String[size];
|
|
||||||
int index = 0;
|
|
||||||
for (String id : regions.keySet()) {
|
|
||||||
regionIDList[index] = id;
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
Arrays.sort(regionIDList);
|
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.RED + "Regions (page "
|
|
||||||
+ (page + 1) + " of " + pages + "):");
|
|
||||||
|
|
||||||
if (page < pages) {
|
|
||||||
for (int i = page * CommandHandler.CMD_LIST_SIZE; i < page * CommandHandler.CMD_LIST_SIZE + CommandHandler.CMD_LIST_SIZE; i++) {
|
|
||||||
if (i >= size) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sender.sendMessage(ChatColor.YELLOW.toString() + (i + 1) + ". " + regionIDList[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionLoad extends WgRegionCommand {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
plugin.checkPermission(sender, "region.load");
|
|
||||||
CommandHandler.checkArgs(args, 0, 0, "/region load");
|
|
||||||
|
|
||||||
try {
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
mgr.load();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region database loaded from file!");
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to load: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,93 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionPriority extends WgRegionCommand {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 1, 2, "/region priority <id> (<value>)");
|
|
||||||
|
|
||||||
try {
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
|
|
||||||
if (!mgr.hasRegion(id)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "A region with ID '"
|
|
||||||
+ id + "' doesn't exist.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion existing = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (existing.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.priority.own");
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.priority");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.priority");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length > 1) {
|
|
||||||
try {
|
|
||||||
Integer prio = Integer.valueOf(args[1]);
|
|
||||||
existing.setPriority(prio);
|
|
||||||
mgr.save();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Priority of region " + existing.getId() + " set to " + prio.toString());
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Not a valid number: " + args[1]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Priority of region " + existing.getId() + " is " + existing.getPriority());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,109 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import com.sk89q.worldguard.util.RegionUtil;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionRemoveMember extends WgRegionCommand {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
boolean cmdIsOwner = command.equalsIgnoreCase("removeowner");
|
|
||||||
String permOwn;
|
|
||||||
String permAll;
|
|
||||||
|
|
||||||
if (cmdIsOwner) {
|
|
||||||
CommandHandler.checkArgs(args, 2, -1, "/region removeowner <id> [player1 [group1 [players/groups...]]]");
|
|
||||||
permOwn = "region.removeowner.own";
|
|
||||||
permAll = "region.removeowner";
|
|
||||||
} else {
|
|
||||||
CommandHandler.checkArgs(args, 2, -1, "/region removemember <id> [player1 [group1 [players/groups...]]]");
|
|
||||||
permOwn = "region.removemember.own";
|
|
||||||
permAll = "region.removemember";
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
if (!mgr.hasRegion(id)) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "A region with ID '"
|
|
||||||
+ id + "' doesn't exist.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion existing = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (existing.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, permOwn);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
plugin.checkPermission(sender, permAll);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plugin.checkPermission(sender, permAll);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (cmdIsOwner) {
|
|
||||||
RegionUtil.removeFromDomain(existing.getOwners(), args, 1);
|
|
||||||
} else {
|
|
||||||
RegionUtil.removeFromDomain(existing.getMembers(), args, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
mgr.save();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region updated!");
|
|
||||||
sender.sendMessage(ChatColor.GRAY + "Current owners: "
|
|
||||||
+ existing.getOwners().toUserFriendlyString());
|
|
||||||
sender.sendMessage(ChatColor.GRAY + "Current members: "
|
|
||||||
+ existing.getMembers().toUserFriendlyString());
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionSave extends WgRegionCommand {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
plugin.checkPermission(sender, "region.save");
|
|
||||||
CommandHandler.checkArgs(args, 0, 0, "/region save");
|
|
||||||
|
|
||||||
try {
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
mgr.save();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region database saved to file!");
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,110 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion.CircularInheritanceException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandRegionSetParent extends WgRegionCommand {
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg,
|
|
||||||
WorldConfiguration wcfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 1, 2, "/region setparent <id> <parent-id>");
|
|
||||||
|
|
||||||
String id = args[0].toLowerCase();
|
|
||||||
String parentId = args.length > 1 ? args[1].toLowerCase() : null;
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(wcfg.getWorldName());
|
|
||||||
|
|
||||||
ProtectedRegion region = mgr.getRegion(id);
|
|
||||||
|
|
||||||
if (region == null) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Could not find a region with ID: " + id);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (region.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.setparent.own");
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.setparent");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.setparent");
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion parent = null;
|
|
||||||
|
|
||||||
// Set a parent
|
|
||||||
if (parentId != null) {
|
|
||||||
parent = mgr.getRegion(parentId);
|
|
||||||
|
|
||||||
if (parent == null) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Could not find a region with ID: " + parentId);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
|
|
||||||
if (parent.isOwner(BukkitPlayer.wrapPlayer(plugin, player))) {
|
|
||||||
plugin.checkPermission(sender, "region.setparent.own");
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.setparent");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
plugin.checkPermission(sender, "region.setparent");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
region.setParent(parent);
|
|
||||||
|
|
||||||
mgr.save();
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Region '" + id + "' updated.");
|
|
||||||
} catch (CircularInheritanceException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Circular inheritance detected. The operation failed.");
|
|
||||||
} catch (IOException e) {
|
|
||||||
sender.sendMessage(ChatColor.RED + "Region database failed to save: "
|
|
||||||
+ e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.LoggerToChatHandler;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Michael
|
|
||||||
*/
|
|
||||||
public class CommandReloadWG extends WgCommand {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
plugin.checkPermission(sender, "reload");
|
|
||||||
CommandHandler.checkArgs(args, 0, 0);
|
|
||||||
|
|
||||||
LoggerToChatHandler handler = null;
|
|
||||||
Logger minecraftLogger = null;
|
|
||||||
if (sender instanceof Player) {
|
|
||||||
Player player = (Player) sender;
|
|
||||||
handler = new LoggerToChatHandler(player);
|
|
||||||
handler.setLevel(Level.ALL);
|
|
||||||
minecraftLogger = Logger.getLogger("Minecraft");
|
|
||||||
minecraftLogger.addHandler(handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
cfg.unload();
|
|
||||||
cfg.load();
|
|
||||||
|
|
||||||
sender.sendMessage("WorldGuard configuration reloaded.");
|
|
||||||
} catch (Throwable t) {
|
|
||||||
sender.sendMessage("Error while reloading: "
|
|
||||||
+ t.getMessage());
|
|
||||||
} finally {
|
|
||||||
if (handler != null) {
|
|
||||||
minecraftLogger.removeHandler(handler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,89 +0,0 @@
|
|||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.bukkit.commands;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.GlobalConfiguration;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.bukkit.commands.CommandHandler.CommandHandlingException;
|
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlag.RegionGroup;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author wallnuss
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class CommandTpRegion extends WgCommand {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handle(CommandSender sender, String senderName,
|
|
||||||
String command, String[] args, GlobalConfiguration cfg, WorldGuardPlugin plugin)
|
|
||||||
throws CommandHandlingException {
|
|
||||||
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("Only players may use this command");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = (Player) sender;
|
|
||||||
plugin.checkPermission(sender, "region.teleport");
|
|
||||||
|
|
||||||
CommandHandler.checkArgs(args, 1, 2, "/tpregion <region name> {spawn}");
|
|
||||||
|
|
||||||
String id = args[0];
|
|
||||||
Boolean spawn = false;
|
|
||||||
if (args.length == 2 && args[1].equals("spawn")) {
|
|
||||||
plugin.checkPermission(sender, "region.teleport.spawn");
|
|
||||||
spawn = true;
|
|
||||||
}
|
|
||||||
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().get(player.getWorld().getName());
|
|
||||||
ProtectedRegion region = mgr.getRegion(id);
|
|
||||||
if (region != null) {
|
|
||||||
|
|
||||||
RegionGroup flagright;
|
|
||||||
if (spawn) {
|
|
||||||
flagright = region.getFlags().getRegionGroupFlag(DefaultFlag.SPAWN_PERM).getValue(RegionGroup.ALL);
|
|
||||||
} else {
|
|
||||||
flagright = region.getFlags().getRegionGroupFlag(DefaultFlag.TELE_PERM).getValue(RegionGroup.ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalPlayer lPlayer = BukkitPlayer.wrapPlayer(plugin, player);
|
|
||||||
if (flagright == RegionGroup.OWNER) {
|
|
||||||
if (!region.isOwner(lPlayer)) {
|
|
||||||
plugin.checkPermission(sender, "region.teleport.override");
|
|
||||||
}
|
|
||||||
} else if (flagright == RegionGroup.MEMBER) {
|
|
||||||
if (!region.isMember(lPlayer)) {
|
|
||||||
plugin.checkPermission(sender, "region.teleport.override");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Location location = null;
|
|
||||||
|
|
||||||
if (spawn) {
|
|
||||||
location = region.getFlags().getLocationFlag(DefaultFlag.SPAWN_LOC).getValue(cfg.getWorldGuardPlugin().getServer());
|
|
||||||
} else {
|
|
||||||
location = region.getFlags().getLocationFlag(DefaultFlag.TELE_LOC).getValue(cfg.getWorldGuardPlugin().getServer());
|
|
||||||
}
|
|
||||||
if (location != null) {
|
|
||||||
player.teleportTo(location);
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "Region: " + id + " has no teleport/spawn location assign.");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
player.sendMessage(ChatColor.RED + "Region: " + id + " not defined");
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -31,14 +31,11 @@
|
|||||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
import com.sk89q.worldedit.bukkit.selections.*;
|
import com.sk89q.worldedit.bukkit.selections.*;
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import com.sk89q.worldguard.bukkit.BukkitPlayer;
|
|
||||||
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
import com.sk89q.worldguard.bukkit.WorldConfiguration;
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
import com.sk89q.worldguard.domains.DefaultDomain;
|
||||||
import com.sk89q.worldguard.protection.ApplicableRegionSet;
|
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||||
import com.sk89q.worldguard.protection.flags.FlagDatabase;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
import com.sk89q.worldguard.protection.flags.RegionFlags;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.*;
|
import com.sk89q.worldguard.protection.regions.*;
|
||||||
import com.sk89q.worldguard.util.RegionUtil;
|
import com.sk89q.worldguard.util.RegionUtil;
|
||||||
@ -160,7 +157,7 @@ public static void claim(CommandContext args, WorldGuardPlugin plugin,
|
|||||||
throw new CommandException("This region already exists and you don't own it.");
|
throw new CommandException("This region already exists and you don't own it.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
ApplicableRegionSet regions = mgr.getApplicableRegions(region);
|
ApplicableRegionSet regions = mgr.getApplicableRegions(region);
|
||||||
|
|
||||||
// Check if this region overlaps any other region
|
// Check if this region overlaps any other region
|
||||||
@ -175,7 +172,7 @@ public static void claim(CommandContext args, WorldGuardPlugin plugin,
|
|||||||
throw new CommandException("You may only claim regions inside " +
|
throw new CommandException("You may only claim regions inside " +
|
||||||
"existing regions that you or your group own.");
|
"existing regions that you or your group own.");
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
if (plugin.getGlobalConfiguration().getiConomy() != null && wcfg.useiConomy && wcfg.buyOnClaim) {
|
if (plugin.getGlobalConfiguration().getiConomy() != null && wcfg.useiConomy && wcfg.buyOnClaim) {
|
||||||
if (iConomy.getBank().hasAccount(player.getName())) {
|
if (iConomy.getBank().hasAccount(player.getName())) {
|
||||||
@ -236,10 +233,10 @@ public static void info(CommandContext args, WorldGuardPlugin plugin,
|
|||||||
player = plugin.checkPlayer(sender);
|
player = plugin.checkPlayer(sender);
|
||||||
localPlayer = plugin.wrapPlayer(player);
|
localPlayer = plugin.wrapPlayer(player);
|
||||||
world = player.getWorld();
|
world = player.getWorld();
|
||||||
args.getString(0).toLowerCase();
|
id = args.getString(0).toLowerCase();
|
||||||
} else {
|
} else {
|
||||||
world = plugin.matchWorld(sender, args.getString(0));
|
world = plugin.matchWorld(sender, args.getString(0));
|
||||||
args.getString(1).toLowerCase();
|
id = args.getString(1).toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(world.getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(world.getName());
|
||||||
@ -262,7 +259,6 @@ public static void info(CommandContext args, WorldGuardPlugin plugin,
|
|||||||
plugin.checkPermission(sender, "region.info");
|
plugin.checkPermission(sender, "region.info");
|
||||||
}
|
}
|
||||||
|
|
||||||
RegionFlags flags = region.getFlags();
|
|
||||||
DefaultDomain owners = region.getOwners();
|
DefaultDomain owners = region.getOwners();
|
||||||
DefaultDomain members = region.getMembers();
|
DefaultDomain members = region.getMembers();
|
||||||
|
|
||||||
@ -272,12 +268,12 @@ public static void info(CommandContext args, WorldGuardPlugin plugin,
|
|||||||
|
|
||||||
StringBuilder s = new StringBuilder();
|
StringBuilder s = new StringBuilder();
|
||||||
|
|
||||||
for (Flag nfo : FlagDatabase.getFlagInfoList()) {
|
for (Flag<?> flag : DefaultFlag.getFlags()) {
|
||||||
if (s.length() > 0) {
|
if (s.length() > 0) {
|
||||||
s.append(", ");
|
s.append(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
s.append(nfo.name + ": " + flags.getFlag(nfo).toString());
|
s.append(flag.getName() + ": " + String.valueOf(region.getFlag(flag)));
|
||||||
}
|
}
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.BLUE + "Flags: " + s.toString());
|
sender.sendMessage(ChatColor.BLUE + "Flags: " + s.toString());
|
||||||
@ -287,6 +283,5 @@ public static void info(CommandContext args, WorldGuardPlugin plugin,
|
|||||||
+ owners.toUserFriendlyString());
|
+ owners.toUserFriendlyString());
|
||||||
sender.sendMessage(ChatColor.LIGHT_PURPLE + "Members: "
|
sender.sendMessage(ChatColor.LIGHT_PURPLE + "Members: "
|
||||||
+ members.toUserFriendlyString());
|
+ members.toUserFriendlyString());
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,10 +19,15 @@
|
|||||||
package com.sk89q.worldguard.protection;
|
package com.sk89q.worldguard.protection;
|
||||||
|
|
||||||
import com.sk89q.worldguard.protection.flags.*;
|
import com.sk89q.worldguard.protection.flags.*;
|
||||||
|
import com.sk89q.worldguard.protection.flags.StateFlag.State;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a setFlag of regions and their rules as applied to one point or
|
* Represents a setFlag of regions and their rules as applied to one point or
|
||||||
@ -32,9 +37,8 @@
|
|||||||
*/
|
*/
|
||||||
public class ApplicableRegionSet {
|
public class ApplicableRegionSet {
|
||||||
|
|
||||||
private Iterator<ProtectedRegion> applicable;
|
private Collection<ProtectedRegion> applicable;
|
||||||
private ProtectedRegion globalRegion;
|
private ProtectedRegion globalRegion;
|
||||||
private ProtectedRegion affectedRegion;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct the object.
|
* Construct the object.
|
||||||
@ -42,7 +46,7 @@ public class ApplicableRegionSet {
|
|||||||
* @param applicable
|
* @param applicable
|
||||||
* @param globalRegion
|
* @param globalRegion
|
||||||
*/
|
*/
|
||||||
public ApplicableRegionSet(Iterator<ProtectedRegion> applicable,
|
public ApplicableRegionSet(Collection<ProtectedRegion> applicable,
|
||||||
ProtectedRegion globalRegion) {
|
ProtectedRegion globalRegion) {
|
||||||
this.applicable = applicable;
|
this.applicable = applicable;
|
||||||
this.globalRegion = globalRegion;
|
this.globalRegion = globalRegion;
|
||||||
@ -55,25 +59,27 @@ public ApplicableRegionSet(Iterator<ProtectedRegion> applicable,
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean canBuild(LocalPlayer player) {
|
public boolean canBuild(LocalPlayer player) {
|
||||||
return isFlagAllowed(DefaultFlag.BUILD, player);
|
return internalGetState(DefaultFlag.BUILD, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks a flag.
|
* Checks if a player can build in an area.
|
||||||
*
|
*
|
||||||
* @param player
|
* @param player
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean allowsFlag(String flag) {
|
public boolean canUse(LocalPlayer player) {
|
||||||
boolean def = true;
|
return internalGetState(DefaultFlag.USE, player);
|
||||||
|
|
||||||
if (flag.equals(AreaFlags.FLAG_CHEST_ACCESS)) {
|
|
||||||
def = global.canAccessChests;
|
|
||||||
} else if (flag.equals(AreaFlags.FLAG_PVP)) {
|
|
||||||
def = global.canPvP;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return isFlagAllowed(flag, def, null);
|
/**
|
||||||
|
* Gets the state of a state flag. This cannot be used for the build flag.
|
||||||
|
*
|
||||||
|
* @param flag
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean allows(StateFlag flag) {
|
||||||
|
return internalGetState(flag, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,12 +91,33 @@ public boolean allowsFlag(String flag) {
|
|||||||
* null to not check owners and members
|
* null to not check owners and members
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private boolean getState(StateFlag flag, LocalPlayer player) {
|
private boolean internalGetState(StateFlag flag, LocalPlayer player) {
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
boolean allowed = false; // Used for ALLOW override
|
boolean allowed = false; // Used for ALLOW override
|
||||||
|
boolean def = false;
|
||||||
|
|
||||||
|
// Handle defaults
|
||||||
|
if (globalRegion != null) {
|
||||||
|
State globalState = globalRegion.getFlag(flag);
|
||||||
|
|
||||||
|
// The global region has this flag set
|
||||||
|
if (globalState != null) {
|
||||||
|
def = (globalState == State.ALLOW);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// There is no global region, so let's use the hard-coded default
|
||||||
|
def = flag.getDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
// The player argument is used if and only if the flag is the build
|
||||||
|
// flag -- in which case, if there are any regions in this area, we
|
||||||
|
// default to FALSE, otherwise true if there are no defined regions.
|
||||||
|
// However, other flags are different -- if there are regions defined,
|
||||||
|
// we default to the global region value.
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
allowed = def;
|
allowed = def;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lastPriority = 0;
|
int lastPriority = 0;
|
||||||
|
|
||||||
// The algorithm is as follows:
|
// The algorithm is as follows:
|
||||||
@ -111,33 +138,40 @@ private boolean getState(StateFlag flag, LocalPlayer player) {
|
|||||||
Set<ProtectedRegion> needsClear = new HashSet<ProtectedRegion>();
|
Set<ProtectedRegion> needsClear = new HashSet<ProtectedRegion>();
|
||||||
Set<ProtectedRegion> hasCleared = new HashSet<ProtectedRegion>();
|
Set<ProtectedRegion> hasCleared = new HashSet<ProtectedRegion>();
|
||||||
|
|
||||||
while (applicable.hasNext()) {
|
Iterator<ProtectedRegion> it = applicable.iterator();
|
||||||
ProtectedRegion region = applicable.next();
|
|
||||||
|
|
||||||
// Ignore non-build regions
|
while (it.hasNext()) {
|
||||||
if (player != null
|
ProtectedRegion region = it.next();
|
||||||
&& region.getFlags().get(AreaFlags.FLAG_PASSTHROUGH) == State.ALLOW) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allow DENY to override everything
|
|
||||||
if (region.getFlags().get(flag) == State.DENY) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Forget about regions that allow it, although make sure the
|
|
||||||
// default state is now to allow
|
|
||||||
if (region.getFlags().get(flag) == State.ALLOW) {
|
|
||||||
allowed = true;
|
|
||||||
found = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ignore lower priority regions
|
// Ignore lower priority regions
|
||||||
if (found && region.getPriority() < lastPriority) {
|
if (found && region.getPriority() < lastPriority) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ignore non-build regions
|
||||||
|
if (player != null
|
||||||
|
&& region.getFlag(DefaultFlag.PASSTHROUGH) == State.ALLOW) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
State v = region.getFlag(flag);
|
||||||
|
|
||||||
|
// Allow DENY to override everything
|
||||||
|
if (v == State.DENY) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Forget about regions that allow it, although make sure the
|
||||||
|
// default state is now to allow
|
||||||
|
if (v == State.ALLOW) {
|
||||||
|
allowed = true;
|
||||||
|
found = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For the build flag, the flags are conditional and are based
|
||||||
|
// on membership, so we have to check for parent-child
|
||||||
|
// relationships
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
if (hasCleared.contains(region)) {
|
if (hasCleared.contains(region)) {
|
||||||
// Already cleared, so do nothing
|
// Already cleared, so do nothing
|
||||||
@ -180,59 +214,62 @@ private void clearParents(Set<ProtectedRegion> needsClear,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether this set has any regions affected (discounting
|
* Gets the value of a flag. Do not use this for state flags.
|
||||||
* a global region).
|
|
||||||
*
|
*
|
||||||
|
* @param flag
|
||||||
|
* @param <T>
|
||||||
|
* @param <V>
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public boolean isAnyRegionAffected() {
|
public <T extends Flag<V>, V> V getFlag(T flag) {
|
||||||
return applicable.size() > 0;
|
int lastPriority = 0;
|
||||||
|
boolean found = false;
|
||||||
|
|
||||||
|
Map<ProtectedRegion, V> needsClear = new HashMap<ProtectedRegion, V>();
|
||||||
|
Set<ProtectedRegion> hasCleared = new HashSet<ProtectedRegion>();
|
||||||
|
|
||||||
|
Iterator<ProtectedRegion> it = applicable.iterator();
|
||||||
|
|
||||||
|
while (it.hasNext()) {
|
||||||
|
ProtectedRegion region = it.next();
|
||||||
|
|
||||||
|
// Ignore lower priority regions
|
||||||
|
if (found && region.getPriority() < lastPriority) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasCleared.contains(region)) {
|
||||||
|
// Already cleared, so do nothing
|
||||||
|
} else if (region.getFlag(flag) != null){
|
||||||
|
clearParents(needsClear, hasCleared, region);
|
||||||
|
|
||||||
|
needsClear.put(region, region.getFlag(flag));
|
||||||
|
}
|
||||||
|
|
||||||
|
found = true;
|
||||||
|
lastPriority = region.getPriority();
|
||||||
|
}
|
||||||
|
|
||||||
|
return needsClear.values().iterator().next();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the affected region.
|
* Clear a region's parents for getFlag().
|
||||||
*
|
*
|
||||||
* @return
|
* @param needsClear
|
||||||
|
* @param hasCleared
|
||||||
|
* @param region
|
||||||
*/
|
*/
|
||||||
public ProtectedRegion _getAffectedRegion() {
|
private void clearParents(Map<ProtectedRegion, ?> needsClear,
|
||||||
if (affectedRegion != null) {
|
Set<ProtectedRegion> hasCleared, ProtectedRegion region) {
|
||||||
return affectedRegion;
|
ProtectedRegion parent = region.getParent();
|
||||||
|
|
||||||
|
while (parent != null) {
|
||||||
|
if (needsClear.remove(parent) == null) {
|
||||||
|
hasCleared.add(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
affectedRegion = null;
|
parent = parent.getParent();
|
||||||
Iterator<ProtectedRegion> iter = applicable.iterator();
|
|
||||||
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
ProtectedRegion region = iter.next();
|
|
||||||
|
|
||||||
if (affectedRegion == null
|
|
||||||
|| affectedRegion.getPriority() < region.getPriority()) {
|
|
||||||
affectedRegion = region;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return affectedRegion;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether a player is an owner of any region in this set.
|
|
||||||
*
|
|
||||||
* @param player
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public boolean _isOwner(LocalPlayer player) {
|
|
||||||
|
|
||||||
return affectedRegion != null ? affectedRegion.isOwner(player) : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether a player is a member of the region or any of its parents.
|
|
||||||
*
|
|
||||||
* @param player
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public boolean _isMember(LocalPlayer player) {
|
|
||||||
return affectedRegion != null ? affectedRegion.isMember(player) : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,11 +15,10 @@
|
|||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.sk89q.worldguard.protection;
|
package com.sk89q.worldguard.protection;
|
||||||
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
import com.sk89q.worldguard.protection.flags.DefaultFlag;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -33,27 +32,29 @@
|
|||||||
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
|
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Timer for handling flags that require a constant timer..
|
||||||
*
|
*
|
||||||
* @author Michael
|
* @author Michael
|
||||||
*/
|
*/
|
||||||
public class TimedFlagsTimer implements Runnable {
|
public class TimedFlagsTimer implements Runnable {
|
||||||
|
|
||||||
WorldGuardPlugin wg;
|
private WorldGuardPlugin plugin;
|
||||||
|
|
||||||
Map<String, TimedFlagPlayerInfo> playerData;
|
private Map<String, TimedFlagPlayerInfo> playerData;
|
||||||
|
|
||||||
|
/**
|
||||||
public TimedFlagsTimer(WorldGuardPlugin wg)
|
* Construct the object.
|
||||||
{
|
*
|
||||||
this.wg = wg;
|
* @param plugin
|
||||||
this.playerData = new HashMap<String, TimedFlagPlayerInfo> ();
|
*/
|
||||||
|
public TimedFlagsTimer(WorldGuardPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.playerData = new HashMap<String, TimedFlagPlayerInfo>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private TimedFlagPlayerInfo getPlayerInfo(String name)
|
private TimedFlagPlayerInfo getPlayerInfo(String name) {
|
||||||
{
|
|
||||||
TimedFlagPlayerInfo ret = playerData.get(name);
|
TimedFlagPlayerInfo ret = playerData.get(name);
|
||||||
if(ret == null)
|
if (ret == null) {
|
||||||
{
|
|
||||||
ret = new TimedFlagPlayerInfo();
|
ret = new TimedFlagPlayerInfo();
|
||||||
playerData.put(name, ret);
|
playerData.put(name, ret);
|
||||||
}
|
}
|
||||||
@ -62,34 +63,36 @@ private TimedFlagPlayerInfo getPlayerInfo(String name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
|
/*
|
||||||
//get players
|
// get players
|
||||||
Player[] players = wg.getServer().getOnlinePlayers();
|
Player[] players = plugin.getServer().getOnlinePlayers();
|
||||||
|
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
|
|
||||||
TimedFlagPlayerInfo nfo = getPlayerInfo(player.getName());
|
TimedFlagPlayerInfo nfo = getPlayerInfo(player.getName());
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
|
|
||||||
//check healing flag
|
// check healing flag
|
||||||
if(nfo.sheduledHealTick != null && now >= nfo.sheduledHealTick)
|
if (nfo.sheduledHealTick != null && now >= nfo.sheduledHealTick) {
|
||||||
{
|
|
||||||
player.setHealth(player.getHealth() + nfo.sheduledHealAmount);
|
player.setHealth(player.getHealth() + nfo.sheduledHealAmount);
|
||||||
nfo.sheduledHealTick = null;
|
nfo.sheduledHealTick = null;
|
||||||
nfo.lastHealTick = now;
|
nfo.lastHealTick = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(player.getWorld().getName() == null) {
|
if (player.getWorld().getName() == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
RegionManager mgr = wg.getGlobalRegionManager().get(player.getWorld().getName());
|
RegionManager mgr = plugin.getGlobalRegionManager().get(
|
||||||
ApplicableRegionSet regions = mgr.getApplicableRegions(toVector(player.getLocation()));
|
player.getWorld().getName());
|
||||||
|
ApplicableRegionSet regions = mgr
|
||||||
|
.getApplicableRegions(toVector(player.getLocation()));
|
||||||
|
|
||||||
int healDelay = regions.getIntegerFlag(DefaultFlag.HEAL_DELAY, true).getValue(-1);
|
Integer healDelay = regions.getFlag(DefaultFlag.HEAL_DELAY);
|
||||||
|
|
||||||
if (healDelay > 0) {
|
if (healDelay > 0) {
|
||||||
healDelay *= 1000;
|
healDelay *= 1000;
|
||||||
int healAmount = regions.getIntegerFlag(DefaultFlag.HEAL_AMOUNT, true).getValue(1);
|
int healAmount = regions.getIntegerFlag(
|
||||||
|
DefaultFlag.HEAL_AMOUNT, true).getValue(1);
|
||||||
if (now - nfo.lastHealTick > healDelay) {
|
if (now - nfo.lastHealTick > healDelay) {
|
||||||
if (player.getHealth() < 20) {
|
if (player.getHealth() < 20) {
|
||||||
if (player.getHealth() + healAmount > 20) {
|
if (player.getHealth() + healAmount > 20) {
|
||||||
@ -104,16 +107,17 @@ public void run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check greeting/farewell flag
|
||||||
//check greeting/farewell flag
|
|
||||||
String newRegionName = regions.getAffectedRegionId();
|
String newRegionName = regions.getAffectedRegionId();
|
||||||
|
|
||||||
if (newRegionName != null) {
|
if (newRegionName != null) {
|
||||||
|
|
||||||
|
if (nfo.lastRegion == null
|
||||||
if (nfo.lastRegion == null || !newRegionName.equals(nfo.lastRegion)) {
|
|| !newRegionName.equals(nfo.lastRegion)) {
|
||||||
String newGreetMsg = regions.getStringFlag(DefaultFlag.GREET_MESSAGE, true).getValue();
|
String newGreetMsg = regions.getStringFlag(
|
||||||
String farewellMsg = regions.getStringFlag(DefaultFlag.FAREWELL_MESSAGE, true).getValue();
|
DefaultFlag.GREET_MESSAGE, true).getValue();
|
||||||
|
String farewellMsg = regions.getStringFlag(
|
||||||
|
DefaultFlag.FAREWELL_MESSAGE, true).getValue();
|
||||||
|
|
||||||
if (nfo.lastFarewellMsg != null) {
|
if (nfo.lastFarewellMsg != null) {
|
||||||
player.sendMessage(nfo.lastFarewellMsg);
|
player.sendMessage(nfo.lastFarewellMsg);
|
||||||
@ -122,8 +126,11 @@ public void run() {
|
|||||||
if (newGreetMsg != null) {
|
if (newGreetMsg != null) {
|
||||||
player.sendMessage(newGreetMsg);
|
player.sendMessage(newGreetMsg);
|
||||||
}
|
}
|
||||||
if (regions.getBooleanFlag(DefaultFlag.NOTIFY_GREET, false).getValue(false)) {
|
if (regions.getBooleanFlag(DefaultFlag.NOTIFY_GREET, false)
|
||||||
broadcastNotification(ChatColor.YELLOW + "Player " + player.getName() + " entered region " + newRegionName);
|
.getValue(false)) {
|
||||||
|
broadcastNotification(ChatColor.YELLOW + "Player "
|
||||||
|
+ player.getName() + " entered region "
|
||||||
|
+ newRegionName);
|
||||||
}
|
}
|
||||||
nfo.lastFarewellMsg = farewellMsg;
|
nfo.lastFarewellMsg = farewellMsg;
|
||||||
nfo.lastRegion = newRegionName;
|
nfo.lastRegion = newRegionName;
|
||||||
@ -134,29 +141,31 @@ public void run() {
|
|||||||
player.sendMessage(nfo.lastFarewellMsg);
|
player.sendMessage(nfo.lastFarewellMsg);
|
||||||
nfo.lastFarewellMsg = null;
|
nfo.lastFarewellMsg = null;
|
||||||
}
|
}
|
||||||
if (regions.getBooleanFlag(DefaultFlag.NOTIFY_FAREWELL, false).getValue(false)) {
|
if (regions.getBooleanFlag(DefaultFlag.NOTIFY_FAREWELL,
|
||||||
broadcastNotification(ChatColor.YELLOW + "Player " + player.getName() + " left region " + nfo.lastRegion);
|
false).getValue(false)) {
|
||||||
|
broadcastNotification(ChatColor.YELLOW + "Player "
|
||||||
|
+ player.getName() + " left region "
|
||||||
|
+ nfo.lastRegion);
|
||||||
}
|
}
|
||||||
nfo.lastRegion = null;
|
nfo.lastRegion = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//check passthrough flag
|
// check passthrough flag
|
||||||
LocalPlayer lplayer = BukkitPlayer.wrapPlayer(wg, player);
|
LocalPlayer lplayer = BukkitPlayer.wrapPlayer(plugin, player);
|
||||||
if(!regions.isStateFlagAllowed(DefaultFlag.PASSTHROUGH, lplayer))
|
if (!regions.isStateFlagAllowed(DefaultFlag.PASSTHROUGH, lplayer)) {
|
||||||
{
|
|
||||||
Location newLoc = player.getLocation().clone();
|
Location newLoc = player.getLocation().clone();
|
||||||
newLoc.setX(newLoc.getBlockX() - 30);
|
newLoc.setX(newLoc.getBlockX() - 30);
|
||||||
newLoc.setY(newLoc.getWorld().getHighestBlockYAt(newLoc) + 1);
|
newLoc.setY(newLoc.getWorld().getHighestBlockYAt(newLoc) + 1);
|
||||||
player.teleportTo(newLoc);
|
player.teleportTo(newLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastNotification(String msg) {
|
public void broadcastNotification(String msg) {
|
||||||
for (Player player : wg.getServer().getOnlinePlayers()) {
|
for (Player player : plugin.getServer().getOnlinePlayers()) {
|
||||||
if (wg.hasPermission(player, "notify_onenter")) {
|
if (plugin.hasPermission(player, "notify_onenter")) {
|
||||||
player.sendMessage(msg);
|
player.sendMessage(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
35
src/com/sk89q/worldguard/protection/flags/BooleanFlag.java
Normal file
35
src/com/sk89q/worldguard/protection/flags/BooleanFlag.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// $Id$
|
||||||
|
/*
|
||||||
|
* WorldGuard
|
||||||
|
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.sk89q.worldguard.protection.flags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author sk89q
|
||||||
|
*/
|
||||||
|
public class BooleanFlag extends Flag<Boolean> {
|
||||||
|
|
||||||
|
public BooleanFlag(String name, char legacyCode) {
|
||||||
|
super(name, legacyCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanFlag(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -22,36 +22,47 @@
|
|||||||
*
|
*
|
||||||
* @author sk89q
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class DefaultFlag {
|
public final class DefaultFlag {
|
||||||
|
|
||||||
public static final Flag<?> PASSTHROUGH = new StateFlag("passthrough", 'z');
|
public static final StateFlag PASSTHROUGH = new StateFlag("passthrough", 'z', false);
|
||||||
public static final Flag<?> BUILD = new StateFlag("build", 'b');
|
public static final StateFlag BUILD = new StateFlag("build", 'b', true);
|
||||||
public static final Flag<?> PVP = new StateFlag("pvp", 'p');
|
public static final StateFlag PVP = new StateFlag("pvp", 'p', true);
|
||||||
public static final Flag<?> MOB_DAMAGE = new StateFlag("mob-damage", 'm');
|
public static final StateFlag MOB_DAMAGE = new StateFlag("mob-damage", 'm', true);
|
||||||
public static final Flag<?> CREEPER_EXPLOSION = new StateFlag("creeper-explosion", 'c');
|
public static final StateFlag CREEPER_EXPLOSION = new StateFlag("creeper-explosion", 'c', true);
|
||||||
public static final Flag<?> TNT = new StateFlag("tnt", 't');
|
public static final StateFlag TNT = new StateFlag("tnt", 't', true);
|
||||||
public static final Flag<?> LIGHTER = new StateFlag("lighter", 'l');
|
public static final StateFlag LIGHTER = new StateFlag("lighter", 'l', true);
|
||||||
public static final Flag<?> FIRE_SPREAD = new StateFlag("fire-spread", 'f');
|
public static final StateFlag FIRE_SPREAD = new StateFlag("fire-spread", 'f', true);
|
||||||
public static final Flag<?> LAVA_FIRE = new StateFlag("lava-fire", 'F');
|
public static final StateFlag LAVA_FIRE = new StateFlag("lava-fire", 'F', true);
|
||||||
public static final Flag<?> CHEST_ACCESS = new StateFlag("chest-access", 'C');
|
public static final StateFlag CHEST_ACCESS = new StateFlag("chest-access", 'C', true);
|
||||||
public static final Flag<?> WATER_FLOW = new StateFlag("water-flow");
|
public static final StateFlag WATER_FLOW = new StateFlag("water-flow", true);
|
||||||
public static final Flag<?> LEVER_AND_BUTTON = new StateFlag("interface");
|
public static final StateFlag USE = new StateFlag("use", true);
|
||||||
public static final Flag<?> PLACE_VEHICLE = new StateFlag("vehicle-place");
|
public static final StateFlag PLACE_VEHICLE = new StateFlag("vehicle-place", true);
|
||||||
public static final Flag<?> GREET_MESSAGE = new StringFlag("greet-message");
|
public static final StringFlag GREET_MESSAGE = new StringFlag("greet-message");
|
||||||
public static final Flag<?> FAREWELL_MESSAGE = new StringFlag("farewell-message");
|
public static final StringFlag FAREWELL_MESSAGE = new StringFlag("farewell-message");
|
||||||
public static final Flag<?> NOTIFY_GREET = new StateFlag("notify-greet");
|
public static final BooleanFlag NOTIFY_GREET = new BooleanFlag("notify-greet");
|
||||||
public static final Flag<?> NOTIFY_FAREWELL = new StateFlag("notify-farewell");
|
public static final BooleanFlag NOTIFY_FAREWELL = new BooleanFlag("notify-farewell");
|
||||||
public static final Flag<?> DENY_SPAWN = new StringFlag("deny-spawn");
|
public static final StringFlag DENY_SPAWN = new StringFlag("deny-spawn");
|
||||||
public static final Flag<?> HEAL_DELAY = new IntegerFlag("heal-delay");
|
public static final IntegerFlag HEAL_DELAY = new IntegerFlag("heal-delay");
|
||||||
public static final Flag<?> HEAL_AMOUNT = new IntegerFlag("heal-amount");
|
public static final IntegerFlag HEAL_AMOUNT = new IntegerFlag("heal-amount");
|
||||||
public static final Flag<?> TELE_LOC = new LocationFlag("teleport-loc");
|
public static final LocationFlag TELE_LOC = new LocationFlag("teleport-loc");
|
||||||
public static final Flag<?> TELE_PERM = new RegionGroupFlag("teleport-groups");
|
public static final RegionGroupFlag TELE_PERM = new RegionGroupFlag("teleport-groups");
|
||||||
public static final Flag<?> SPAWN_LOC = new LocationFlag("teleport-location");
|
public static final LocationFlag SPAWN_LOC = new LocationFlag("teleport-location");
|
||||||
public static final Flag<?> SPAWN_PERM = new RegionGroupFlag("spawn-groups");
|
public static final RegionGroupFlag SPAWN_PERM = new RegionGroupFlag("spawn-groups");
|
||||||
public static final Flag<?> BUYABLE = new StateFlag("buyable");
|
public static final BooleanFlag BUYABLE = new BooleanFlag("buyable");
|
||||||
public static final Flag<?> PRICE = new DoubleFlag("price");
|
public static final DoubleFlag PRICE = new DoubleFlag("price");
|
||||||
|
|
||||||
|
public static final Flag<?>[] flagsList = new Flag<?>[] {
|
||||||
|
PASSTHROUGH, BUILD, PVP, MOB_DAMAGE, CREEPER_EXPLOSION,
|
||||||
|
TNT, LIGHTER, FIRE_SPREAD, LAVA_FIRE, CHEST_ACCESS, WATER_FLOW,
|
||||||
|
USE, PLACE_VEHICLE, GREET_MESSAGE, FAREWELL_MESSAGE, NOTIFY_GREET,
|
||||||
|
NOTIFY_FAREWELL, DENY_SPAWN, HEAL_DELAY, HEAL_AMOUNT, TELE_LOC,
|
||||||
|
TELE_PERM, SPAWN_LOC, SPAWN_PERM, BUYABLE, PRICE
|
||||||
|
};
|
||||||
|
|
||||||
private DefaultFlag() {
|
private DefaultFlag() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Flag<?>[] getFlags() {
|
||||||
|
return flagsList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Michael
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class DoubleFlag extends Flag {
|
public class DoubleFlag extends Flag<Double> {
|
||||||
|
|
||||||
public DoubleFlag(String name, char legacyCode) {
|
public DoubleFlag(String name, char legacyCode) {
|
||||||
super(name, legacyCode);
|
super(name, legacyCode);
|
||||||
|
@ -46,6 +46,4 @@ public char getLegacyCode() {
|
|||||||
return legacyCode;
|
return legacyCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract T getDefault();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Michael
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class IntegerFlag extends Flag {
|
public class IntegerFlag extends Flag<Integer> {
|
||||||
|
|
||||||
public IntegerFlag(String name, char legacyCode) {
|
public IntegerFlag(String name, char legacyCode) {
|
||||||
super(name, legacyCode);
|
super(name, legacyCode);
|
||||||
|
@ -18,12 +18,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.sk89q.worldguard.protection.flags;
|
package com.sk89q.worldguard.protection.flags;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Michael
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class LocationFlag extends Flag {
|
public class LocationFlag extends Flag<Location> {
|
||||||
|
|
||||||
public LocationFlag(String name, char legacyCode) {
|
public LocationFlag(String name, char legacyCode) {
|
||||||
super(name, legacyCode);
|
super(name, legacyCode);
|
||||||
|
@ -20,9 +20,9 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Michael
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class RegionGroupFlag extends Flag {
|
public class RegionGroupFlag extends Flag<String> {
|
||||||
|
|
||||||
public RegionGroupFlag(String name, char legacyCode) {
|
public RegionGroupFlag(String name, char legacyCode) {
|
||||||
super(name, legacyCode);
|
super(name, legacyCode);
|
||||||
|
@ -20,27 +20,29 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Michael
|
* @author sk89q
|
||||||
*/
|
*/
|
||||||
public class StateFlag extends Flag<StateFlag.State> {
|
public class StateFlag extends Flag<StateFlag.State> {
|
||||||
|
|
||||||
public enum State {
|
public enum State {
|
||||||
NONE,
|
|
||||||
ALLOW,
|
ALLOW,
|
||||||
DENY
|
DENY
|
||||||
}
|
}
|
||||||
|
|
||||||
public StateFlag(String name, char legacyCode) {
|
private boolean def;
|
||||||
|
|
||||||
|
public StateFlag(String name, char legacyCode, boolean def) {
|
||||||
super(name, legacyCode);
|
super(name, legacyCode);
|
||||||
|
this.def = def;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StateFlag(String name) {
|
public StateFlag(String name, boolean def) {
|
||||||
super(name);
|
super(name);
|
||||||
|
this.def = def;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public boolean getDefault() {
|
||||||
public State getDefault() {
|
return def;
|
||||||
return State.NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
*
|
*
|
||||||
* @author Michael
|
* @author Michael
|
||||||
*/
|
*/
|
||||||
public class StringFlag extends Flag {
|
public class StringFlag extends Flag<String> {
|
||||||
|
|
||||||
public StringFlag(String name, char legacyCode) {
|
public StringFlag(String name, char legacyCode) {
|
||||||
super(name, legacyCode);
|
super(name, legacyCode);
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.PriorityQueue;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import com.sk89q.worldedit.Vector;
|
import com.sk89q.worldedit.Vector;
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
@ -138,8 +139,8 @@ public ProtectedRegion getRegion(String id) {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
||||||
|
PriorityQueue<ProtectedRegion> appRegions =
|
||||||
List<ProtectedRegion> appRegions = new ArrayList<ProtectedRegion>();
|
new PriorityQueue<ProtectedRegion>();
|
||||||
|
|
||||||
for (ProtectedRegion region : regions.values()) {
|
for (ProtectedRegion region : regions.values()) {
|
||||||
if (region.contains(pt)) {
|
if (region.contains(pt)) {
|
||||||
@ -147,7 +148,7 @@ public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ApplicableRegionSet(appRegions);
|
return new ApplicableRegionSet(appRegions, regions.get("__global__"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -155,7 +156,7 @@ public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
/*@Override
|
||||||
public ApplicableRegionSet getApplicableRegions(ProtectedRegion checkRegion) {
|
public ApplicableRegionSet getApplicableRegions(ProtectedRegion checkRegion) {
|
||||||
|
|
||||||
List<ProtectedRegion> appRegions = new ArrayList<ProtectedRegion>();
|
List<ProtectedRegion> appRegions = new ArrayList<ProtectedRegion>();
|
||||||
@ -168,8 +169,8 @@ public ApplicableRegionSet getApplicableRegions(ProtectedRegion checkRegion) {
|
|||||||
intersectRegions = new ArrayList<ProtectedRegion>();
|
intersectRegions = new ArrayList<ProtectedRegion>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ApplicableRegionSet(intersectRegions);
|
return new ApplicableRegionSet(intersectRegions, regions.get("__global__"));
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of region IDs that contain a point.
|
* Get a list of region IDs that contain a point.
|
||||||
|
@ -1,185 +0,0 @@
|
|||||||
// $Id$
|
|
||||||
/*
|
|
||||||
* WorldGuard
|
|
||||||
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.sk89q.worldguard.protection.managers;
|
|
||||||
|
|
||||||
import com.sk89q.worldguard.protection.GlobalFlags;
|
|
||||||
import com.sk89q.worldguard.protection.databases.JSONDatabase;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class keeps track of region information for every world. It loads
|
|
||||||
* world region information as needed.
|
|
||||||
*
|
|
||||||
* @author sk89q
|
|
||||||
* @author Redecouverte
|
|
||||||
*/
|
|
||||||
public class GlobalRegionManager {
|
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger("Minecraft.WorldGuard");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Path to the folder that region data is stored within.
|
|
||||||
*/
|
|
||||||
protected File dataFolder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Map of managers per-world.
|
|
||||||
*/
|
|
||||||
private HashMap<String, RegionManager> managers;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stores the list of modification dates for the world files. This allows
|
|
||||||
* WorldGuard to reload files as needed.
|
|
||||||
*/
|
|
||||||
private HashMap<String, Long> lastModified;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct the object.
|
|
||||||
*/
|
|
||||||
public GlobalRegionManager() {
|
|
||||||
managers = new HashMap<String, RegionManager>();
|
|
||||||
lastModified = new HashMap<String, Long>();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unload region information.
|
|
||||||
*/
|
|
||||||
public void unload() {
|
|
||||||
managers.clear();
|
|
||||||
lastModified.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the path for a world's regions file.
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
protected File getPath(String name) {
|
|
||||||
return new File(dataFolder,
|
|
||||||
"name" + File.separator + "regions.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unload region information for a world.
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
*/
|
|
||||||
public void unload(String name) {
|
|
||||||
RegionManager manager = managers.get(name);
|
|
||||||
|
|
||||||
if (manager != null) {
|
|
||||||
managers.remove(name);
|
|
||||||
lastModified.remove(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unload all region information.
|
|
||||||
*/
|
|
||||||
public void unloadAll() {
|
|
||||||
managers.clear();
|
|
||||||
lastModified.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load region information for a world.
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
*/
|
|
||||||
public void load(String name) {
|
|
||||||
File file = getPath(name);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Create a manager
|
|
||||||
RegionManager manager = new FlatRegionManager(
|
|
||||||
new GlobalFlags(), new JSONDatabase(file));
|
|
||||||
managers.put(name, manager);
|
|
||||||
manager.load();
|
|
||||||
|
|
||||||
// Store the last modification date so we can track changes
|
|
||||||
lastModified.put(name, file.lastModified());
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.warning("WorldGuard: Failed to load regions from file "
|
|
||||||
+ file.getAbsolutePath() + " : " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reloads the region information from file when region databases
|
|
||||||
* have changed.
|
|
||||||
*/
|
|
||||||
public void reloadChanged() {
|
|
||||||
for (String name : managers.keySet()) {
|
|
||||||
|
|
||||||
File file = getPath(name);
|
|
||||||
|
|
||||||
Long oldDate = lastModified.get(name);
|
|
||||||
|
|
||||||
if (oldDate == null) {
|
|
||||||
oldDate = 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (file.lastModified() > oldDate) {
|
|
||||||
load(name);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the region manager for a particular world.
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public RegionManager get(String name) {
|
|
||||||
RegionManager manager = managers.get(name);
|
|
||||||
|
|
||||||
if (manager == null) {
|
|
||||||
load(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return manager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the global flags for a particular world.
|
|
||||||
*
|
|
||||||
* @param name
|
|
||||||
* @param globalflags
|
|
||||||
*/
|
|
||||||
public void setGlobalFlags(String name, GlobalFlags globalflags) {
|
|
||||||
if (globalflags != null) {
|
|
||||||
RegionManager ret = managers.get(name);
|
|
||||||
|
|
||||||
if (ret != null) {
|
|
||||||
ret.setGlobalFlags(globalflags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -21,6 +21,7 @@
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.PriorityQueue;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import org.khelekore.prtree.MBRConverter;
|
import org.khelekore.prtree.MBRConverter;
|
||||||
import org.khelekore.prtree.PRTree;
|
import org.khelekore.prtree.PRTree;
|
||||||
@ -154,8 +155,8 @@ public void removeRegion(String id) {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
||||||
|
PriorityQueue<ProtectedRegion> appRegions =
|
||||||
List<ProtectedRegion> appRegions = new ArrayList<ProtectedRegion>();
|
new PriorityQueue<ProtectedRegion>();
|
||||||
|
|
||||||
int x = pt.getBlockX();
|
int x = pt.getBlockX();
|
||||||
int z = pt.getBlockZ();
|
int z = pt.getBlockZ();
|
||||||
@ -166,10 +167,10 @@ public ApplicableRegionSet getApplicableRegions(Vector pt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ApplicableRegionSet(appRegions);
|
return new ApplicableRegionSet(appRegions, regions.get("__global__"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/*@Override
|
||||||
public ApplicableRegionSet getApplicableRegions(ProtectedRegion checkRegion) {
|
public ApplicableRegionSet getApplicableRegions(ProtectedRegion checkRegion) {
|
||||||
List<ProtectedRegion> appRegions = new ArrayList<ProtectedRegion>();
|
List<ProtectedRegion> appRegions = new ArrayList<ProtectedRegion>();
|
||||||
appRegions.addAll(regions.values());
|
appRegions.addAll(regions.values());
|
||||||
@ -181,8 +182,8 @@ public ApplicableRegionSet getApplicableRegions(ProtectedRegion checkRegion) {
|
|||||||
intersectRegions = new ArrayList<ProtectedRegion>();
|
intersectRegions = new ArrayList<ProtectedRegion>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ApplicableRegionSet(intersectRegions);
|
return new ApplicableRegionSet(intersectRegions, regions.get("__global__"));
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of region IDs that contain a point.
|
* Get a list of region IDs that contain a point.
|
||||||
|
@ -125,8 +125,8 @@ public void save() throws IOException {
|
|||||||
* @param region
|
* @param region
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public abstract ApplicableRegionSet getApplicableRegions(
|
/*public abstract ApplicableRegionSet getApplicableRegions(
|
||||||
ProtectedRegion region);
|
ProtectedRegion region);*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list of region IDs that contain a point.
|
* Get a list of region IDs that contain a point.
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
// $Id$
|
||||||
|
/*
|
||||||
|
* WorldGuard
|
||||||
|
* Copyright (C) 2010 sk89q <http://www.sk89q.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.sk89q.worldguard.protection.regions;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import com.sk89q.worldedit.BlockVector;
|
||||||
|
import com.sk89q.worldedit.Vector;
|
||||||
|
import com.sk89q.worldguard.protection.UnsupportedIntersectionException;
|
||||||
|
|
||||||
|
public class GlobalProtectedRegion extends ProtectedRegion {
|
||||||
|
|
||||||
|
public GlobalProtectedRegion(String id) {
|
||||||
|
super(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockVector getMinimumPoint() {
|
||||||
|
return new BlockVector(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockVector getMaximumPoint() {
|
||||||
|
return new BlockVector(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int countBlocks() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(Vector pt) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTypeName() {
|
||||||
|
return "global";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ProtectedRegion> getIntersectingRegions(
|
||||||
|
List<ProtectedRegion> regions)
|
||||||
|
throws UnsupportedIntersectionException {
|
||||||
|
return new ArrayList<ProtectedRegion>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -253,7 +253,7 @@ public boolean isMember(LocalPlayer player) {
|
|||||||
* @param <T>
|
* @param <T>
|
||||||
* @param <V>
|
* @param <V>
|
||||||
* @param flag
|
* @param flag
|
||||||
* @return
|
* @return value or null if isn't defined
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T extends Flag<V>, V> V getFlag(T flag) {
|
public <T extends Flag<V>, V> V getFlag(T flag) {
|
||||||
@ -262,7 +262,7 @@ public <T extends Flag<V>, V> V getFlag(T flag) {
|
|||||||
if (obj != null) {
|
if (obj != null) {
|
||||||
val = (V) obj;
|
val = (V) obj;
|
||||||
} else {
|
} else {
|
||||||
return flag.getDefault();
|
return null;
|
||||||
}
|
}
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -317,9 +317,9 @@ public int compareTo(ProtectedRegion other) {
|
|||||||
*/
|
*/
|
||||||
public abstract String getTypeName();
|
public abstract String getTypeName();
|
||||||
|
|
||||||
|
public abstract List<ProtectedRegion> getIntersectingRegions(
|
||||||
public abstract List<ProtectedRegion> getIntersectingRegions(List<ProtectedRegion> regions) throws UnsupportedIntersectionException;
|
List<ProtectedRegion> regions)
|
||||||
|
throws UnsupportedIntersectionException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thrown when setting a curParent would create a circular inheritance
|
* Thrown when setting a curParent would create a circular inheritance
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
import com.sk89q.worldguard.protection.managers.FlatRegionManager;
|
import com.sk89q.worldguard.protection.managers.FlatRegionManager;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
|
import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
||||||
@ -33,7 +34,6 @@
|
|||||||
import com.sk89q.worldguard.TestPlayer;
|
import com.sk89q.worldguard.TestPlayer;
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
import com.sk89q.worldguard.domains.DefaultDomain;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class ApplicableRegionSetTest {
|
public class ApplicableRegionSetTest {
|
||||||
static String COURTYARD_ID = "courtyard";
|
static String COURTYARD_ID = "courtyard";
|
||||||
@ -47,6 +47,7 @@ public class ApplicableRegionSetTest {
|
|||||||
Vector outside = new Vector(15, 15, 15);
|
Vector outside = new Vector(15, 15, 15);
|
||||||
Vector inNoFire = new Vector(150, 150, 150);
|
Vector inNoFire = new Vector(150, 150, 150);
|
||||||
RegionManager manager;
|
RegionManager manager;
|
||||||
|
ProtectedRegion globalRegion;
|
||||||
ProtectedRegion courtyard;
|
ProtectedRegion courtyard;
|
||||||
ProtectedRegion fountain;
|
ProtectedRegion fountain;
|
||||||
TestPlayer player1;
|
TestPlayer player1;
|
||||||
@ -54,7 +55,9 @@ public class ApplicableRegionSetTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
manager = new FlatRegionManager(new GlobalFlags(), null);
|
setUpGlobalRegion();
|
||||||
|
|
||||||
|
manager = new FlatRegionManager(null);
|
||||||
|
|
||||||
setUpPlayers();
|
setUpPlayers();
|
||||||
setUpCourtyardRegion();
|
setUpCourtyardRegion();
|
||||||
@ -71,6 +74,10 @@ void setUpPlayers() {
|
|||||||
player2.addGroup(MEMBER_GROUP);
|
player2.addGroup(MEMBER_GROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setUpGlobalRegion() {
|
||||||
|
globalRegion = new GlobalProtectedRegion("__global__");
|
||||||
|
}
|
||||||
|
|
||||||
void setUpCourtyardRegion() {
|
void setUpCourtyardRegion() {
|
||||||
DefaultDomain domain = new DefaultDomain();
|
DefaultDomain domain = new DefaultDomain();
|
||||||
domain.addGroup(COURTYARD_GROUP);
|
domain.addGroup(COURTYARD_GROUP);
|
||||||
@ -111,7 +118,7 @@ void setUpNoFireRegion() throws Exception {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNonBuildFlag() {
|
public void testNonBuildFlag() {
|
||||||
ApplicableRegionSet appl;
|
/*ApplicableRegionSet appl;
|
||||||
|
|
||||||
// Outside
|
// Outside
|
||||||
appl = manager.getApplicableRegions(outside);
|
appl = manager.getApplicableRegions(outside);
|
||||||
@ -125,7 +132,7 @@ public void testNonBuildFlag() {
|
|||||||
|
|
||||||
// Inside no fire zone
|
// Inside no fire zone
|
||||||
appl = manager.getApplicableRegions(inNoFire);
|
appl = manager.getApplicableRegions(inNoFire);
|
||||||
//assertFalse(appl.isStateFlagAllowed(AreaFlags.FLAG_FIRE_SPREAD));
|
//assertFalse(appl.isStateFlagAllowed(AreaFlags.FLAG_FIRE_SPREAD));*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -28,7 +28,6 @@
|
|||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import static org.junit.Assert.*;
|
|
||||||
import com.sk89q.worldedit.BlockVector;
|
import com.sk89q.worldedit.BlockVector;
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
import com.sk89q.worldguard.domains.DefaultDomain;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user