Added sign alternative for /buyregion

Added flag for lever and button usability
This commit is contained in:
DarkLiKally 2011-02-28 10:42:34 +01:00
parent 676e744c02
commit 82dc78523f
6 changed files with 72 additions and 1 deletions

View File

@ -83,6 +83,7 @@ regions:
creeper: on
mobdamage: on
waterflow: on
leverandbutton: on
iconomy:
enable: on

View File

@ -18,23 +18,31 @@
*/
package com.sk89q.worldguard.bukkit;
import com.nijiko.coelho.iConomy.iConomy;
import com.nijiko.coelho.iConomy.system.Account;
import com.sk89q.worldguard.protection.regionmanager.RegionManager;
import java.util.Iterator;
import java.util.List;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.World;
import org.bukkit.event.Cancellable;
import org.bukkit.event.block.*;
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
import org.bukkit.inventory.ItemStack;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.blacklist.events.*;
import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.regions.AreaFlags;
import com.sk89q.worldguard.protection.regions.AreaFlags.State;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
public class WorldGuardBlockListener extends BlockListener {
@ -399,6 +407,7 @@ public void onBlockInteract(BlockInteractEvent event) {
}
Block block = event.getBlock();
Material type = block.getType();
LivingEntity entity = event.getEntity();
WorldGuardConfiguration cfg = plugin.getWgConfiguration();
@ -427,6 +436,19 @@ public void onBlockInteract(BlockInteractEvent event) {
}
}
if (wcfg.useRegions && (type == Material.LEVER || type == Material.STONE_BUTTON) && entity instanceof Player) {
Vector pt = toVector(block);
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().getRegionManager(((Player)entity).getWorld().getName());
ApplicableRegionSet applicableRegions = mgr.getApplicableRegions(pt);
LocalPlayer localPlayer = BukkitPlayer.wrapPlayer(cfg, (Player)entity);
if (!applicableRegions.isFlagAllowed(AreaFlags.FLAG_LEVER_AND_BUTTON, true, localPlayer)) {
((Player)entity).sendMessage(ChatColor.DARK_RED + "You don't have permission for this area.");
event.setCancelled(true);
return;
}
}
if (wcfg.getBlacklist() != null && entity instanceof Player) {
Player player = (Player) entity;
@ -547,6 +569,49 @@ public void onBlockRightClick(BlockRightClickEvent event) {
return;
}
}
if (wcfg.useRegions && wcfg.useiConomy && cfg.getiConomy() != null && (type == Material.SIGN || type == Material.WALL_SIGN)) {
if (((Sign)blockClicked).getLine(0) == "[WorldGuard]" && ((Sign)blockClicked).getLine(1) == "For sale") {
String regionId = ((Sign)blockClicked).getLine(2);
String regionComment = ((Sign)blockClicked).getLine(3);
if (regionId != null && regionId != "") {
RegionManager mgr = cfg.getWorldGuardPlugin().getGlobalRegionManager().getRegionManager(player.getWorld().getName());
ProtectedRegion region = mgr.getRegion(regionId);
if (region != null) {
AreaFlags flags = region.getFlags();
if (flags.getBooleanFlag("iconomy", "buyable", false)) {
if (iConomy.getBank().hasAccount(player.getName())) {
Account account = iConomy.getBank().getAccount(player.getName());
double balance = account.getBalance();
int regionPrice = flags.getIntFlag("iconomy", "price");
if (balance >= regionPrice) {
account.subtract(regionPrice);
player.sendMessage(ChatColor.YELLOW + "You have bought the region " + regionId + " for " +
iConomy.getBank().format(regionPrice));
DefaultDomain owners = region.getOwners();
owners.addPlayer(player.getName());
region.setOwners(owners);
flags.setFlag("iconomy", "buyable", false);
account.save();
}
} else {
player.sendMessage(ChatColor.YELLOW + "You have not enough money.");
}
} else {
player.sendMessage(ChatColor.RED + "Region: " + regionId + " is not buyable");
}
} else {
player.sendMessage(ChatColor.DARK_RED + "The region " + regionId + " does not exist.");
}
} else {
player.sendMessage(ChatColor.DARK_RED + "No region specified.");
}
}
}
}
/**

View File

@ -64,6 +64,7 @@ public static enum FlagValueType { STRING, BOOLEAN, INT, FLOAT, DOUBLE, STATE, L
flagList.add(new FlagInfo("teleport", "set", FlagValueType.LOCATION, "teleport", ""));
flagList.add(new FlagInfo("teleport", "delete", FlagValueType.LOCATION, "teleport", ""));
flagList.add(new FlagInfo("teleport", "allow", FlagValueType.STRING, "teleport", "allow"));
flagList.add(new FlagInfo("leverandbutton", null, FlagValueType.STATE, "states", "leverandbutton"));
}
public static FlagInfo getFlagInfo(String name, String subName) {

View File

@ -108,12 +108,14 @@ public boolean allowsFlag(String flag) {
def = global.allowMobDamage;
} else if (flag.equals(AreaFlags.FLAG_WATER_FLOW)) {
def = global.allowWaterflow;
} else if (flag.equals(AreaFlags.FLAG_LEVER_AND_BUTTON)) {
def = global.canLeverandbutton;
}
return isFlagAllowed(flag, def, null);
}
private boolean isFlagAllowed(String flag, boolean def, LocalPlayer player) {
public boolean isFlagAllowed(String flag, boolean def, LocalPlayer player) {
State defState = def ? State.ALLOW : State.DENY;
return getStateAreaFlag("states", flag, defState, true, player) == State.ALLOW;

View File

@ -30,6 +30,7 @@ public class GlobalFlags {
public boolean canPvP = true;
public boolean canLighter = true;
public boolean canTnt = true;
public boolean canLeverandbutton = true;
public boolean allowCreeper = true;
public boolean allowMobDamage = true;
public boolean allowWaterflow = true;

View File

@ -49,6 +49,7 @@ public enum State {
public static final String FLAG_LAVA_FIRE = "lavafirespread";
public static final String FLAG_CHEST_ACCESS = "chest";
public static final String FLAG_WATER_FLOW = "waterflow";
public static final String FLAG_LEVER_AND_BUTTON = "leverandbutton";
/**