It compiles.

This commit is contained in:
Matthew Miller 2018-07-22 13:06:01 +10:00
parent 89db0d9fee
commit 2e8d14c995
41 changed files with 1018 additions and 689 deletions

View File

@ -22,6 +22,7 @@
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; import com.sk89q.worldguard.internal.platform.WorldGuardPlatform;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry; import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry;
@ -40,7 +41,7 @@ public static WorldGuard getInstance() {
} }
public WorldGuard() { public WorldGuard() {
flagRegistry.setInitialized(true); Flags.registerAll();
} }
/** /**

View File

@ -19,6 +19,7 @@
package com.sk89q.worldguard.config; package com.sk89q.worldguard.config;
import com.sk89q.worldedit.world.registry.LegacyMapper;
import com.sk89q.worldguard.blacklist.Blacklist; import com.sk89q.worldguard.blacklist.Blacklist;
import com.sk89q.worldguard.util.report.Unreported; import com.sk89q.worldguard.util.report.Unreported;
@ -66,4 +67,23 @@ public Blacklist getBlacklist() {
public String getWorldName() { public String getWorldName() {
return this.worldName; return this.worldName;
} }
public String convertLegacyItem(String legacy) {
String item = legacy;
try {
String[] splitter = item.split(":", 2);
int id = 0;
byte data = 0;
if (splitter.length == 1) {
id = Integer.parseInt(item);
} else {
id = Integer.parseInt(splitter[0]);
data = Byte.parseByte(splitter[1]);
}
item = LegacyMapper.getInstance().getItemFromLegacy(id, data).getId();
} catch (Throwable e) {
}
return item;
}
} }

View File

@ -17,14 +17,14 @@
* 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.bukkit.protection; package com.sk89q.worldguard.protection;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.protection.regions.RegionQuery;
import com.sk89q.worldguard.domains.Association; import com.sk89q.worldguard.domains.Association;
import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.association.RegionAssociable; import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.bukkit.Location;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List; import java.util.List;

View File

@ -40,115 +40,115 @@ public final class Flags {
public static final StateFlag PASSTHROUGH = register(new StateFlag("passthrough", false)); public static final StateFlag PASSTHROUGH = register(new StateFlag("passthrough", false));
// This flag is unlike the others. It forces the checking of region membership // This flag is unlike the others. It forces the checking of region membership
public static final StateFlag BUILD = new BuildFlag("build", true); public static final StateFlag BUILD = register(new BuildFlag("build", true));
// These flags are used in tandem with the BUILD flag - if the player can // These flags are used in tandem with the BUILD flag - if the player can
// build, then the following flags do not need to be checked (although they // build, then the following flags do not need to be checked (although they
// are still checked for DENY), so they are false by default // are still checked for DENY), so they are false by default
public static final StateFlag BLOCK_BREAK = new StateFlag("block-break", false); public static final StateFlag BLOCK_BREAK = register(new StateFlag("block-break", false));
public static final StateFlag BLOCK_PLACE = new StateFlag("block-place", false); public static final StateFlag BLOCK_PLACE = register(new StateFlag("block-place", false));
public static final StateFlag USE = new StateFlag("use", false); public static final StateFlag USE = register(new StateFlag("use", false));
public static final StateFlag INTERACT = new StateFlag("interact", false); public static final StateFlag INTERACT = register(new StateFlag("interact", false));
public static final StateFlag DAMAGE_ANIMALS = new StateFlag("damage-animals", false); public static final StateFlag DAMAGE_ANIMALS = register(new StateFlag("damage-animals", false));
public static final StateFlag PVP = new StateFlag("pvp", false); public static final StateFlag PVP = register(new StateFlag("pvp", false));
public static final StateFlag SLEEP = new StateFlag("sleep", false); public static final StateFlag SLEEP = register(new StateFlag("sleep", false));
public static final StateFlag TNT = new StateFlag("tnt", false); public static final StateFlag TNT = register(new StateFlag("tnt", false));
public static final StateFlag CHEST_ACCESS = new StateFlag("chest-access", false); public static final StateFlag CHEST_ACCESS = register(new StateFlag("chest-access", false));
public static final StateFlag PLACE_VEHICLE = new StateFlag("vehicle-place", false); public static final StateFlag PLACE_VEHICLE = register(new StateFlag("vehicle-place", false));
public static final StateFlag DESTROY_VEHICLE = new StateFlag("vehicle-destroy", false); public static final StateFlag DESTROY_VEHICLE = register(new StateFlag("vehicle-destroy", false));
public static final StateFlag LIGHTER = new StateFlag("lighter", false); public static final StateFlag LIGHTER = register(new StateFlag("lighter", false));
public static final StateFlag RIDE = new StateFlag("ride", false); public static final StateFlag RIDE = register(new StateFlag("ride", false));
public static final StateFlag POTION_SPLASH = new StateFlag("potion-splash", false); public static final StateFlag POTION_SPLASH = register(new StateFlag("potion-splash", false));
// These flags are similar to the ones above (used in tandem with BUILD), // These flags are similar to the ones above (used in tandem with BUILD),
// but their defaults are set to TRUE because it is more user friendly. // but their defaults are set to TRUE because it is more user friendly.
// However, it is not possible to disable these flags by default in all // However, it is not possible to disable these flags by default in all
// regions because setting DENY in __global__ would also override the // regions because setting DENY in __global__ would also override the
// BUILD flag. In the future, StateFlags will need a DISALLOW state. // BUILD flag. In the future, StateFlags will need a DISALLOW state.
public static final StateFlag ITEM_PICKUP = new StateFlag("item-pickup", true); // Intentionally true public static final StateFlag ITEM_PICKUP = register(new StateFlag("item-pickup", true)); // Intentionally true
public static final StateFlag ITEM_DROP = new StateFlag("item-drop", true); // Intentionally true public static final StateFlag ITEM_DROP = register(new StateFlag("item-drop", true)); // Intentionally true
public static final StateFlag EXP_DROPS = new StateFlag("exp-drops", true); // Intentionally true public static final StateFlag EXP_DROPS = register(new StateFlag("exp-drops", true)); // Intentionally true
// These flags adjust behavior and are not checked in tandem with the // These flags adjust behavior and are not checked in tandem with the
// BUILD flag so they need to be TRUE for their defaults. // BUILD flag so they need to be TRUE for their defaults.
public static final StateFlag MOB_DAMAGE = new StateFlag("mob-damage", true); public static final StateFlag MOB_DAMAGE = register(new StateFlag("mob-damage", true));
public static final StateFlag MOB_SPAWNING = new StateFlag("mob-spawning", true); public static final StateFlag MOB_SPAWNING = register(new StateFlag("mob-spawning", true));
public static final StateFlag CREEPER_EXPLOSION = new StateFlag("creeper-explosion", true); public static final StateFlag CREEPER_EXPLOSION = register(new StateFlag("creeper-explosion", true));
public static final StateFlag ENDERDRAGON_BLOCK_DAMAGE = new StateFlag("enderdragon-block-damage", true); public static final StateFlag ENDERDRAGON_BLOCK_DAMAGE = register(new StateFlag("enderdragon-block-damage", true));
public static final StateFlag GHAST_FIREBALL = new StateFlag("ghast-fireball", true); public static final StateFlag GHAST_FIREBALL = register(new StateFlag("ghast-fireball", true));
public static final StateFlag FIREWORK_DAMAGE = new StateFlag("firework-damage", true); public static final StateFlag FIREWORK_DAMAGE = register(new StateFlag("firework-damage", true));
public static final StateFlag OTHER_EXPLOSION = new StateFlag("other-explosion", true); public static final StateFlag OTHER_EXPLOSION = register(new StateFlag("other-explosion", true));
public static final StateFlag WITHER_DAMAGE = new StateFlag("wither-damage", true); public static final StateFlag WITHER_DAMAGE = register(new StateFlag("wither-damage", true));
public static final StateFlag FIRE_SPREAD = new StateFlag("fire-spread", true); public static final StateFlag FIRE_SPREAD = register(new StateFlag("fire-spread", true));
public static final StateFlag LAVA_FIRE = new StateFlag("lava-fire", true); public static final StateFlag LAVA_FIRE = register(new StateFlag("lava-fire", true));
public static final StateFlag LIGHTNING = new StateFlag("lightning", true); public static final StateFlag LIGHTNING = register(new StateFlag("lightning", true));
public static final StateFlag WATER_FLOW = new StateFlag("water-flow", true); public static final StateFlag WATER_FLOW = register(new StateFlag("water-flow", true));
public static final StateFlag LAVA_FLOW = new StateFlag("lava-flow", true); public static final StateFlag LAVA_FLOW = register(new StateFlag("lava-flow", true));
public static final StateFlag PISTONS = new StateFlag("pistons", true); public static final StateFlag PISTONS = register(new StateFlag("pistons", true));
public static final StateFlag SNOW_FALL = new StateFlag("snow-fall", true); public static final StateFlag SNOW_FALL = register(new StateFlag("snow-fall", true));
public static final StateFlag SNOW_MELT = new StateFlag("snow-melt", true); public static final StateFlag SNOW_MELT = register(new StateFlag("snow-melt", true));
public static final StateFlag ICE_FORM = new StateFlag("ice-form", true); public static final StateFlag ICE_FORM = register(new StateFlag("ice-form", true));
public static final StateFlag ICE_MELT = new StateFlag("ice-melt", true); public static final StateFlag ICE_MELT = register(new StateFlag("ice-melt", true));
public static final StateFlag MUSHROOMS = new StateFlag("mushroom-growth", true); public static final StateFlag MUSHROOMS = register(new StateFlag("mushroom-growth", true));
public static final StateFlag LEAF_DECAY = new StateFlag("leaf-decay", true); public static final StateFlag LEAF_DECAY = register(new StateFlag("leaf-decay", true));
public static final StateFlag GRASS_SPREAD = new StateFlag("grass-growth", true); public static final StateFlag GRASS_SPREAD = register(new StateFlag("grass-growth", true));
public static final StateFlag MYCELIUM_SPREAD = new StateFlag("mycelium-spread", true); public static final StateFlag MYCELIUM_SPREAD = register(new StateFlag("mycelium-spread", true));
public static final StateFlag VINE_GROWTH = new StateFlag("vine-growth", true); public static final StateFlag VINE_GROWTH = register(new StateFlag("vine-growth", true));
public static final StateFlag SOIL_DRY = new StateFlag("soil-dry", true); public static final StateFlag SOIL_DRY = register(new StateFlag("soil-dry", true));
public static final StateFlag ENDER_BUILD = new StateFlag("enderman-grief", true); public static final StateFlag ENDER_BUILD = register(new StateFlag("enderman-grief", true));
public static final StateFlag INVINCIBILITY = new StateFlag("invincible", false); public static final StateFlag INVINCIBILITY = register(new StateFlag("invincible", false));
public static final StateFlag SEND_CHAT = new StateFlag("send-chat", true); public static final StateFlag SEND_CHAT = register(new StateFlag("send-chat", true));
public static final StateFlag RECEIVE_CHAT = new StateFlag("receive-chat", true); public static final StateFlag RECEIVE_CHAT = register(new StateFlag("receive-chat", true));
public static final StateFlag ENTRY = new StateFlag("entry", true, RegionGroup.NON_MEMBERS); public static final StateFlag ENTRY = register(new StateFlag("entry", true, RegionGroup.NON_MEMBERS));
public static final StateFlag EXIT = new StateFlag("exit", true, RegionGroup.NON_MEMBERS); public static final StateFlag EXIT = register(new StateFlag("exit", true, RegionGroup.NON_MEMBERS));
public static final StateFlag ENDERPEARL = new StateFlag("enderpearl", true); public static final StateFlag ENDERPEARL = register(new StateFlag("enderpearl", true));
public static final StateFlag CHORUS_TELEPORT = new StateFlag("chorus-fruit-teleport", true); public static final StateFlag CHORUS_TELEPORT = register(new StateFlag("chorus-fruit-teleport", true));
public static final StateFlag ENTITY_PAINTING_DESTROY = new StateFlag("entity-painting-destroy", true); public static final StateFlag ENTITY_PAINTING_DESTROY = register(new StateFlag("entity-painting-destroy", true));
public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = new StateFlag("entity-item-frame-destroy", true); public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = register(new StateFlag("entity-item-frame-destroy", true));
public static final StateFlag FALL_DAMAGE = new StateFlag("fall-damage", true); public static final StateFlag FALL_DAMAGE = register(new StateFlag("fall-damage", true));
// FlagUtil that adjust behaviors that aren't state flags // FlagUtil that adjust behaviors that aren't state flags
public static final StringFlag DENY_MESSAGE = new StringFlag("deny-message", public static final StringFlag DENY_MESSAGE = register(new StringFlag("deny-message",
ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!")) ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!"))
.append(new StyledFragment(Style.GRAY).append(" Sorry, but you can't %what% here.")))); .append(new StyledFragment(Style.GRAY).append(" Sorry, but you can't %what% here.")))));
public static final StringFlag ENTRY_DENY_MESSAGE = new StringFlag("entry-deny-message", public static final StringFlag ENTRY_DENY_MESSAGE = register(new StringFlag("entry-deny-message",
ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!")) ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!"))
.append(new StyledFragment(Style.GRAY).append(" You are not permitted to enter this area.")))); .append(new StyledFragment(Style.GRAY).append(" You are not permitted to enter this area.")))));
public static final StringFlag EXIT_DENY_MESSAGE = new StringFlag("exit-deny-message", public static final StringFlag EXIT_DENY_MESSAGE = register(new StringFlag("exit-deny-message",
ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!")) ColorCodeBuilder.asColorCodes(new StyledFragment().append(new StyledFragment(Style.RED, Style.BOLD).append("Hey!"))
.append(new StyledFragment(Style.GRAY).append(" You are not permitted to leave this area.")))); .append(new StyledFragment(Style.GRAY).append(" You are not permitted to leave this area.")))));
public static final BooleanFlag EXIT_OVERRIDE = new BooleanFlag("exit-override"); public static final BooleanFlag EXIT_OVERRIDE = register(new BooleanFlag("exit-override"));
public static final StateFlag EXIT_VIA_TELEPORT = new StateFlag("exit-via-teleport", true); public static final StateFlag EXIT_VIA_TELEPORT = register(new StateFlag("exit-via-teleport", true));
public static final StringFlag GREET_MESSAGE = new StringFlag("greeting"); public static final StringFlag GREET_MESSAGE = register(new StringFlag("greeting"));
public static final StringFlag FAREWELL_MESSAGE = new StringFlag("farewell"); public static final StringFlag FAREWELL_MESSAGE = register(new StringFlag("farewell"));
public static final BooleanFlag NOTIFY_ENTER = new BooleanFlag("notify-enter"); public static final BooleanFlag NOTIFY_ENTER = register(new BooleanFlag("notify-enter"));
public static final BooleanFlag NOTIFY_LEAVE = new BooleanFlag("notify-leave"); public static final BooleanFlag NOTIFY_LEAVE = register(new BooleanFlag("notify-leave"));
public static final SetFlag<EntityType> DENY_SPAWN = new SetFlag<>("deny-spawn", new EntityTypeFlag(null)); public static final SetFlag<EntityType> DENY_SPAWN = register(new SetFlag<>("deny-spawn", new EntityTypeFlag(null)));
public static final Flag<GameMode> GAME_MODE = new GameModeTypeFlag("game-mode"); public static final Flag<GameMode> GAME_MODE = register(new GameModeTypeFlag("game-mode"));
public static final StringFlag TIME_LOCK = new StringFlag("time-lock"); public static final StringFlag TIME_LOCK = register(new StringFlag("time-lock"));
public static final Flag<WeatherType> WEATHER_LOCK = new WeatherTypeFlag("weather-lock"); public static final Flag<WeatherType> WEATHER_LOCK = register(new WeatherTypeFlag("weather-lock"));
public static final IntegerFlag HEAL_DELAY = new IntegerFlag("heal-delay"); public static final IntegerFlag HEAL_DELAY = register(new IntegerFlag("heal-delay"));
public static final IntegerFlag HEAL_AMOUNT = new IntegerFlag("heal-amount"); public static final IntegerFlag HEAL_AMOUNT = register(new IntegerFlag("heal-amount"));
public static final DoubleFlag MIN_HEAL = new DoubleFlag("heal-min-health"); public static final DoubleFlag MIN_HEAL = register(new DoubleFlag("heal-min-health"));
public static final DoubleFlag MAX_HEAL = new DoubleFlag("heal-max-health"); public static final DoubleFlag MAX_HEAL = register(new DoubleFlag("heal-max-health"));
public static final IntegerFlag FEED_DELAY = new IntegerFlag("feed-delay"); public static final IntegerFlag FEED_DELAY = register(new IntegerFlag("feed-delay"));
public static final IntegerFlag FEED_AMOUNT = new IntegerFlag("feed-amount"); public static final IntegerFlag FEED_AMOUNT = register(new IntegerFlag("feed-amount"));
public static final IntegerFlag MIN_FOOD = new IntegerFlag("feed-min-hunger"); public static final IntegerFlag MIN_FOOD = register(new IntegerFlag("feed-min-hunger"));
public static final IntegerFlag MAX_FOOD = new IntegerFlag("feed-max-hunger"); public static final IntegerFlag MAX_FOOD = register(new IntegerFlag("feed-max-hunger"));
// public static final IntegerFlag MAX_PLAYERS = new IntegerFlag("max-players-allowed"); // public static final IntegerFlag MAX_PLAYERS = register(new IntegerFlag("max-players-allowed"));
// public static final StringFlag MAX_PLAYERS_MESSAGE = new StringFlag("max-players-reject-message"); // public static final StringFlag MAX_PLAYERS_MESSAGE = register(new StringFlag("max-players-reject-message"));
public static final LocationFlag TELE_LOC = new LocationFlag("teleport", RegionGroup.MEMBERS); public static final LocationFlag TELE_LOC = register(new LocationFlag("teleport", RegionGroup.MEMBERS));
public static final LocationFlag SPAWN_LOC = new LocationFlag("spawn", RegionGroup.MEMBERS); public static final LocationFlag SPAWN_LOC = register(new LocationFlag("spawn", RegionGroup.MEMBERS));
public static final SetFlag<String> BLOCKED_CMDS = register(new SetFlag<>("blocked-cmds", new CommandStringFlag(null))); public static final SetFlag<String> BLOCKED_CMDS = register(new SetFlag<>("blocked-cmds", new CommandStringFlag(null)));
public static final SetFlag<String> ALLOWED_CMDS = register(new SetFlag<>("allowed-cmds", new CommandStringFlag(null))); public static final SetFlag<String> ALLOWED_CMDS = register(new SetFlag<>("allowed-cmds", new CommandStringFlag(null)));
// these 3 are not used by worldguard and should be re-implemented in plugins that may use them using custom flag api // these 3 are not used by worldguard and should be re-implemented in plugins that may use them using custom flag api
@Deprecated @Deprecated
public static final StateFlag ENABLE_SHOP = new StateFlag("allow-shop", false); public static final StateFlag ENABLE_SHOP = register(new StateFlag("allow-shop", false));
@Deprecated @Deprecated
public static final BooleanFlag BUYABLE = new BooleanFlag("buyable"); public static final BooleanFlag BUYABLE = register(new BooleanFlag("buyable"));
@Deprecated @Deprecated
public static final DoubleFlag PRICE = new DoubleFlag("price"); public static final DoubleFlag PRICE = register(new DoubleFlag("price"));
private Flags() { private Flags() {
} }
@ -179,4 +179,5 @@ public static Flag<?> fuzzyMatchFlag(FlagRegistry flagRegistry, String id) {
return null; return null;
} }
public static void registerAll() {}
} }

View File

@ -23,6 +23,7 @@
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -65,6 +66,13 @@ public interface FlagRegistry extends Iterable<Flag<?>> {
@Nullable @Nullable
Flag<?> get(String name); Flag<?> get(String name);
/**
* Get all flags
*
* @return All flags
*/
List<Flag<?>> getAll();
/** /**
* Unmarshal a raw map of values into a map of flags with their * Unmarshal a raw map of values into a map of flags with their
* unmarshalled values. * unmarshalled values.

View File

@ -21,12 +21,14 @@
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.collect.Iterators; import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.Flag;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
@ -41,7 +43,7 @@ public class SimpleFlagRegistry implements FlagRegistry {
private final Object lock = new Object(); private final Object lock = new Object();
private final ConcurrentMap<String, Flag<?>> flags = Maps.newConcurrentMap(); private final ConcurrentMap<String, Flag<?>> flags = Maps.newConcurrentMap();
private boolean initialized; private boolean initialized = false;
public boolean isInitialized() { public boolean isInitialized() {
return initialized; return initialized;
@ -98,6 +100,11 @@ public Flag<?> get(String name) {
return flags.get(name.toLowerCase()); return flags.get(name.toLowerCase());
} }
@Override
public List<Flag<?>> getAll() {
return Lists.newArrayList(this.flags.values());
}
private Flag<?> getOrCreate(String name) { private Flag<?> getOrCreate(String name) {
Flag<?> flag = get(name); Flag<?> flag = get(name);

View File

@ -64,7 +64,7 @@ public Session(SessionManager manager) {
* *
* @param handler A new handler * @param handler A new handler
*/ */
void register(Handler handler) { public void register(Handler handler) {
handlers.put(handler.getClass(), handler); handlers.put(handler.getClass(), handler);
} }
@ -95,7 +95,7 @@ public <T extends Handler> T getHandler(Class<T> type) {
* *
* @param player The player * @param player The player
*/ */
void initialize(LocalPlayer player) { public void initialize(LocalPlayer player) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
Location location = player.getLocation(); Location location = player.getLocation();
ApplicableRegionSet set = query.getApplicableRegions(location); ApplicableRegionSet set = query.getApplicableRegions(location);
@ -113,7 +113,7 @@ void initialize(LocalPlayer player) {
* *
* @param player The player * @param player The player
*/ */
void tick(LocalPlayer player) { public void tick(LocalPlayer player) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
Location location = player.getLocation(); Location location = player.getLocation();
ApplicableRegionSet set = query.getApplicableRegions(location); ApplicableRegionSet set = query.getApplicableRegions(location);
@ -128,7 +128,7 @@ void tick(LocalPlayer player) {
* *
* @param player The player * @param player The player
*/ */
void resetState(LocalPlayer player) { public void resetState(LocalPlayer player) {
initialize(player); initialize(player);
needRefresh.set(true); needRefresh.set(true);
} }

View File

@ -22,12 +22,12 @@
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
class WorldPlayerTuple { public class WorldPlayerTuple {
final World world; private final World world;
final LocalPlayer player; private final LocalPlayer player;
WorldPlayerTuple(World world, LocalPlayer player) { public WorldPlayerTuple(World world, LocalPlayer player) {
this.world = world; this.world = world;
this.player = player; this.player = player;
} }
@ -45,6 +45,14 @@ public boolean equals(Object o) {
return true; return true;
} }
public LocalPlayer getPlayer() {
return player;
}
public World getWorld() {
return world;
}
@Override @Override
public int hashCode() { public int hashCode() {
int result = world.hashCode(); int result = world.hashCode();

View File

@ -1,3 +1,22 @@
/*
* WorldGuard, a suite of tools for Minecraft
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldGuard team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser 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 Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldguard.bukkit; package com.sk89q.worldguard.bukkit;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;

View File

@ -208,6 +208,6 @@ public static Target createTarget(ItemStack item) {
*/ */
public static Target createTarget(Material material) { public static Target createTarget(Material material) {
checkNotNull(material); checkNotNull(material);
return new ItemTarget(BukkitAdapter.adapt(material)); return new ItemTarget(BukkitAdapter.asItemType(material));
} }
} }

View File

@ -22,6 +22,7 @@
import com.sk89q.util.yaml.YAMLFormat; import com.sk89q.util.yaml.YAMLFormat;
import com.sk89q.util.yaml.YAMLProcessor; import com.sk89q.util.yaml.YAMLProcessor;
import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.blacklist.Blacklist; import com.sk89q.worldguard.blacklist.Blacklist;
import com.sk89q.worldguard.blacklist.BlacklistLoggerHandler; import com.sk89q.worldguard.blacklist.BlacklistLoggerHandler;
@ -127,7 +128,7 @@ public class BukkitWorldConfiguration extends YamlWorldConfiguration {
public boolean disableMobDamage; public boolean disableMobDamage;
public boolean highFreqFlags; public boolean highFreqFlags;
public boolean checkLiquidFlow; public boolean checkLiquidFlow;
public int regionWand; public String regionWand;
public Set<EntityType> blockCreatureSpawn; public Set<EntityType> blockCreatureSpawn;
public boolean allowTamedSpawns; public boolean allowTamedSpawns;
// public boolean useiConomy; // public boolean useiConomy;
@ -361,7 +362,7 @@ public void loadConfiguration() {
explosionFlagCancellation = getBoolean("regions.explosion-flags-block-entity-damage", true); explosionFlagCancellation = getBoolean("regions.explosion-flags-block-entity-damage", true);
highFreqFlags = getBoolean("regions.high-frequency-flags", false); highFreqFlags = getBoolean("regions.high-frequency-flags", false);
checkLiquidFlow = getBoolean("regions.protect-against-liquid-flow", false); checkLiquidFlow = getBoolean("regions.protect-against-liquid-flow", false);
regionWand = getInt("regions.wand", 334); regionWand = convertLegacyItem(getString("regions.wand", ItemTypes.LEATHER.getId()));
maxClaimVolume = getInt("regions.max-claim-volume", 30000); maxClaimVolume = getInt("regions.max-claim-volume", 30000);
claimOnlyInsideExistingRegions = getBoolean("regions.claim-only-inside-existing-regions", false); claimOnlyInsideExistingRegions = getBoolean("regions.claim-only-inside-existing-regions", false);
boundedLocationFlags = getBoolean("regions.location-flags-only-inside-regions", false); boundedLocationFlags = getBoolean("regions.location-flags-only-inside-regions", false);

View File

@ -1,3 +1,22 @@
/*
* WorldGuard, a suite of tools for Minecraft
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldGuard team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser 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 Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldguard.bukkit; package com.sk89q.worldguard.bukkit;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
@ -11,7 +30,7 @@
import com.sk89q.worldguard.protection.flags.FlagContext; import com.sk89q.worldguard.protection.flags.FlagContext;
import com.sk89q.worldguard.protection.flags.FlagContextCreateEvent; import com.sk89q.worldguard.protection.flags.FlagContextCreateEvent;
import com.sk89q.worldguard.protection.regions.RegionContainer; import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.session.BukkitSessionManager; import com.sk89q.worldguard.bukkit.session.BukkitSessionManager;
import com.sk89q.worldguard.session.SessionManager; import com.sk89q.worldguard.session.SessionManager;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View File

@ -73,11 +73,12 @@
import com.sk89q.worldguard.bukkit.util.Events; import com.sk89q.worldguard.bukkit.util.Events;
import com.sk89q.worldguard.protection.GlobalRegionManager; import com.sk89q.worldguard.protection.GlobalRegionManager;
import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.registry.SimpleFlagRegistry;
import com.sk89q.worldguard.protection.managers.storage.StorageException; import com.sk89q.worldguard.protection.managers.storage.StorageException;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.util.UnresolvedNamesException; import com.sk89q.worldguard.protection.util.UnresolvedNamesException;
import com.sk89q.worldguard.session.BukkitSessionManager; import com.sk89q.worldguard.bukkit.session.BukkitSessionManager;
import com.sk89q.worldguard.util.concurrent.EvenMoreExecutors; import com.sk89q.worldguard.util.concurrent.EvenMoreExecutors;
import com.sk89q.worldguard.util.logging.ClassSourceValidator; import com.sk89q.worldguard.util.logging.ClassSourceValidator;
import com.sk89q.worldguard.util.logging.RecordMessagePrefixer; import com.sk89q.worldguard.util.logging.RecordMessagePrefixer;
@ -255,6 +256,8 @@ public void run() {
ProcessPlayerEvent event = new ProcessPlayerEvent(player); ProcessPlayerEvent event = new ProcessPlayerEvent(player);
Events.fire(event); Events.fire(event);
} }
((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).setInitialized(true);
} }
@Override @Override

View File

@ -19,11 +19,11 @@
package com.sk89q.worldguard.bukkit.chest; package com.sk89q.worldguard.bukkit.chest;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
@ -52,26 +52,26 @@ public boolean isProtectedPlacement(Location block, LocalPlayer player) {
} }
private boolean isProtectedSignAround(Location searchBlock, LocalPlayer player) { private boolean isProtectedSignAround(Location searchBlock, LocalPlayer player) {
Block side; Location side;
Boolean res; Boolean res;
side = searchBlock; side = searchBlock;
res = isProtectedSign(side, player); res = isProtectedSign(side, player);
if (res != null && res) return res; if (res != null && res) return res;
side = searchBlock.getRelative(-1, 0, 0); side = searchBlock.setX(searchBlock.getX() - 1);
res = isProtectedSignAndChest(side, player); res = isProtectedSignAndChest(side, player);
if (res != null && res) return res; if (res != null && res) return res;
side = searchBlock.getRelative(1, 0, 0); side = searchBlock.setX(searchBlock.getX() + 1);
res = isProtectedSignAndChest(side, player); res = isProtectedSignAndChest(side, player);
if (res != null && res) return res; if (res != null && res) return res;
side = searchBlock.getRelative(0, 0, -1); side = searchBlock.setZ(searchBlock.getZ() - 1);
res = isProtectedSignAndChest(side, player); res = isProtectedSignAndChest(side, player);
if (res != null && res) return res; if (res != null && res) return res;
side = searchBlock.getRelative(0, 0, 1); side = searchBlock.setZ(searchBlock.getZ() + 1);
res = isProtectedSignAndChest(side, player); res = isProtectedSignAndChest(side, player);
if (res != null && res) return res; if (res != null && res) return res;
@ -94,7 +94,7 @@ private Boolean isProtectedSign(Sign sign, LocalPlayer player) {
} }
private Boolean isProtectedSign(Location block, LocalPlayer player) { private Boolean isProtectedSign(Location block, LocalPlayer player) {
BlockState state = block.getState(); BlockState state = BukkitAdapter.adapt(block).getBlock().getState();
if (!(state instanceof Sign)) { if (!(state instanceof Sign)) {
return null; return null;
} }
@ -102,7 +102,7 @@ private Boolean isProtectedSign(Location block, LocalPlayer player) {
} }
private Boolean isProtectedSignAndChest(Location block, LocalPlayer player) { private Boolean isProtectedSignAndChest(Location block, LocalPlayer player) {
if (!isChest(block.getRelative(0, 1, 0).getTypeId())) { if (!isChest(player.getExtent().getBlock(block.setY(block.getY() + 1).toVector()).getBlockType())) {
return null; return null;
} }
return isProtectedSign(block, player); return isProtectedSign(block, player);
@ -114,28 +114,28 @@ private boolean isProtectedSignAndChestBinary(Location block, LocalPlayer player
} }
public boolean isAdjacentChestProtected(Location searchBlock, LocalPlayer player) { public boolean isAdjacentChestProtected(Location searchBlock, LocalPlayer player) {
Block side; Location side;
Boolean res; boolean res;
side = searchBlock; side = searchBlock;
res = isProtected(side, player); res = isProtected(side, player);
if (res != null && res) return res; if (res) return res;
side = searchBlock.getRelative(-1, 0, 0); side = searchBlock.setX(searchBlock.getX() - 1);
res = isProtected(side, player); res = isProtected(side, player);
if (res != null && res) return res; if (res) return res;
side = searchBlock.getRelative(1, 0, 0); side = searchBlock.setX(searchBlock.getX() + 1);
res = isProtected(side, player); res = isProtected(side, player);
if (res != null && res) return res; if (res) return res;
side = searchBlock.getRelative(0, 0, -1); side = searchBlock.setZ(searchBlock.getZ() - 1);
res = isProtected(side, player); res = isProtected(side, player);
if (res != null && res) return res; if (res) return res;
side = searchBlock.getRelative(0, 0, 1); side = searchBlock.setZ(searchBlock.getZ() + 1);
res = isProtected(side, player); res = isProtected(side, player);
if (res != null && res) return res; if (res) return res;
return false; return false;
} }

View File

@ -23,11 +23,10 @@
import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.minecraft.util.commands.CommandPermissions; import com.sk89q.minecraft.util.commands.CommandPermissions;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.session.Session; import com.sk89q.worldguard.session.Session;
import com.sk89q.worldguard.session.handler.GodMode; import com.sk89q.worldguard.session.handler.GodMode;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -65,9 +64,10 @@ public void god(CommandContext args, CommandSender sender) throws CommandExcepti
} }
for (Player player : targets) { for (Player player : targets) {
Session session = plugin.getSessionManager().get(player); LocalPlayer localPlayer = plugin.wrapPlayer(player);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer);
if (GodMode.set(player, session, true)) { if (GodMode.set(localPlayer, session, true)) {
player.setFireTicks(0); player.setFireTicks(0);
// Tell the user // Tell the user
@ -284,8 +284,7 @@ public void stack(CommandContext args, CommandSender sender) throws CommandExcep
// Same type? // Same type?
// Blocks store their color in the damage value // Blocks store their color in the damage value
if (item2.getType() == item.getType() && if (item2.getType() == item.getType() &&
((!ItemType.usesDamageValue(item.getTypeId()) && ignoreDamaged) (ignoreDamaged || item.getDurability() == item2.getDurability()) &&
|| item.getDurability() == item2.getDurability()) &&
((item.getItemMeta() == null && item2.getItemMeta() == null) ((item.getItemMeta() == null && item2.getItemMeta() == null)
|| (item.getItemMeta() != null && || (item.getItemMeta() != null &&
item.getItemMeta().equals(item2.getItemMeta())))) { item.getItemMeta().equals(item2.getItemMeta())))) {

View File

@ -19,6 +19,8 @@
package com.sk89q.worldguard.bukkit.commands; package com.sk89q.worldguard.bukkit.commands;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.World; import org.bukkit.World;
@ -54,7 +56,8 @@ public void stopFire(CommandContext args, CommandSender sender) throws CommandEx
world = plugin.matchWorld(sender, args.getString(0)); world = plugin.matchWorld(sender, args.getString(0));
} }
BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(world); BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(world));
if (!wcfg.fireSpreadDisableToggle) { if (!wcfg.fireSpreadDisableToggle) {
plugin.getServer().broadcastMessage( plugin.getServer().broadcastMessage(
@ -83,7 +86,8 @@ public void allowFire(CommandContext args, CommandSender sender) throws CommandE
world = plugin.matchWorld(sender, args.getString(0)); world = plugin.matchWorld(sender, args.getString(0));
} }
BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(world); BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(world));
if (wcfg.fireSpreadDisableToggle) { if (wcfg.fireSpreadDisableToggle) {
plugin.getServer().broadcastMessage(ChatColor.YELLOW plugin.getServer().broadcastMessage(ChatColor.YELLOW
@ -102,7 +106,7 @@ public void allowFire(CommandContext args, CommandSender sender) throws CommandE
@CommandPermissions({"worldguard.halt-activity"}) @CommandPermissions({"worldguard.halt-activity"})
public void stopLag(CommandContext args, CommandSender sender) throws CommandException { public void stopLag(CommandContext args, CommandSender sender) throws CommandException {
ConfigurationManager configManager = plugin.getGlobalStateManager(); ConfigurationManager configManager = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
if (args.hasFlag('i')) { if (args.hasFlag('i')) {
if (configManager.activityHaltToggle) { if (configManager.activityHaltToggle) {

View File

@ -25,7 +25,10 @@
import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.minecraft.util.commands.CommandPermissionsException; import com.sk89q.minecraft.util.commands.CommandPermissionsException;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.commands.AsyncCommandHelper; import com.sk89q.worldguard.bukkit.commands.AsyncCommandHelper;
import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.domains.DefaultDomain;
@ -56,13 +59,13 @@ public void addMember(CommandContext args, CommandSender sender) throws CommandE
World world = checkWorld(args, sender, 'w'); // Get the world World world = checkWorld(args, sender, 'w'); // Get the world
String id = args.getString(0); String id = args.getString(0);
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion region = checkExistingRegion(manager, id, true); ProtectedRegion region = checkExistingRegion(manager, id, true);
id = region.getId(); id = region.getId();
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayAddMembers(region)) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayAddMembers(region)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -92,6 +95,7 @@ public void addOwner(CommandContext args, CommandSender sender) throws CommandEx
warnAboutSaveFailures(sender); warnAboutSaveFailures(sender);
World world = checkWorld(args, sender, 'w'); // Get the world World world = checkWorld(args, sender, 'w'); // Get the world
com.sk89q.worldedit.world.World weWorld = BukkitAdapter.adapt(world);
Player player = null; Player player = null;
LocalPlayer localPlayer = null; LocalPlayer localPlayer = null;
@ -102,7 +106,7 @@ public void addOwner(CommandContext args, CommandSender sender) throws CommandEx
String id = args.getString(0); String id = args.getString(0);
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, weWorld);
ProtectedRegion region = checkExistingRegion(manager, id, true); ProtectedRegion region = checkExistingRegion(manager, id, true);
id = region.getId(); id = region.getId();
@ -114,7 +118,7 @@ public void addOwner(CommandContext args, CommandSender sender) throws CommandEx
if (flag != null && flag && owners != null && owners.size() == 0) { if (flag != null && flag && owners != null && owners.size() == 0) {
// TODO: Move this to an event // TODO: Move this to an event
if (!plugin.hasPermission(player, "worldguard.region.unlimited")) { if (!plugin.hasPermission(player, "worldguard.region.unlimited")) {
int maxRegionCount = plugin.getGlobalStateManager().get(world).getMaxRegionCount(player); int maxRegionCount = ((BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(weWorld)).getMaxRegionCount(player);
if (maxRegionCount >= 0 && manager.getRegionCountOfPlayer(localPlayer) if (maxRegionCount >= 0 && manager.getRegionCountOfPlayer(localPlayer)
>= maxRegionCount) { >= maxRegionCount) {
throw new CommandException("You already own the maximum allowed amount of regions."); throw new CommandException("You already own the maximum allowed amount of regions.");
@ -123,7 +127,7 @@ public void addOwner(CommandContext args, CommandSender sender) throws CommandEx
plugin.checkPermission(sender, "worldguard.region.addowner.unclaimed." + id.toLowerCase()); plugin.checkPermission(sender, "worldguard.region.addowner.unclaimed." + id.toLowerCase());
} else { } else {
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayAddOwners(region)) { if (!getPermissionModel(localPlayer).mayAddOwners(region)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
} }
@ -156,11 +160,11 @@ public void removeMember(CommandContext args, CommandSender sender) throws Comma
World world = checkWorld(args, sender, 'w'); // Get the world World world = checkWorld(args, sender, 'w'); // Get the world
String id = args.getString(0); String id = args.getString(0);
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion region = checkExistingRegion(manager, id, true); ProtectedRegion region = checkExistingRegion(manager, id, true);
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayRemoveMembers(region)) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayRemoveMembers(region)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -203,11 +207,11 @@ public void removeOwner(CommandContext args, CommandSender sender) throws Comman
World world = checkWorld(args, sender, 'w'); // Get the world World world = checkWorld(args, sender, 'w'); // Get the world
String id = args.getString(0); String id = args.getString(0);
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion region = checkExistingRegion(manager, id, true); ProtectedRegion region = checkExistingRegion(manager, id, true);
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayRemoveOwners(region)) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayRemoveOwners(region)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }

View File

@ -28,8 +28,10 @@
import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.minecraft.util.commands.CommandPermissionsException; import com.sk89q.minecraft.util.commands.CommandPermissionsException;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.bukkit.BukkitRegionContainer; import com.sk89q.worldguard.bukkit.BukkitRegionContainer;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
@ -106,15 +108,16 @@ public RegionCommands(WorldGuardPlugin plugin) {
public void define(CommandContext args, CommandSender sender) throws CommandException { public void define(CommandContext args, CommandSender sender) throws CommandException {
warnAboutSaveFailures(sender); warnAboutSaveFailures(sender);
Player player = plugin.checkPlayer(sender); Player player = plugin.checkPlayer(sender);
LocalPlayer localPlayer = plugin.wrapPlayer(player);
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayDefine()) { if (!getPermissionModel(localPlayer).mayDefine()) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
String id = checkRegionId(args.getString(0), false); String id = checkRegionId(args.getString(0), false);
RegionManager manager = checkRegionManager(plugin, player.getWorld()); RegionManager manager = checkRegionManager(plugin, localPlayer.getWorld());
checkRegionDoesNotExist(manager, id, true); checkRegionDoesNotExist(manager, id, true);
@ -124,7 +127,7 @@ public void define(CommandContext args, CommandSender sender) throws CommandExce
region = new GlobalProtectedRegion(id); region = new GlobalProtectedRegion(id);
} else { } else {
region = checkRegionFromSelection(player, id); region = checkRegionFromSelection(player, id);
warnAboutDimensions(player, region); warnAboutDimensions(localPlayer, region);
informNewUser(player, manager, region); informNewUser(player, manager, region);
} }
@ -157,16 +160,17 @@ public void redefine(CommandContext args, CommandSender sender) throws CommandEx
warnAboutSaveFailures(sender); warnAboutSaveFailures(sender);
Player player = plugin.checkPlayer(sender); Player player = plugin.checkPlayer(sender);
LocalPlayer localPlayer = plugin.wrapPlayer(player);
World world = player.getWorld(); World world = player.getWorld();
String id = checkRegionId(args.getString(0), false); String id = checkRegionId(args.getString(0), false);
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, localPlayer.getWorld());
ProtectedRegion existing = checkExistingRegion(manager, id, false); ProtectedRegion existing = checkExistingRegion(manager, id, false);
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayRedefine(existing)) { if (!getPermissionModel(localPlayer).mayRedefine(existing)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -176,7 +180,7 @@ public void redefine(CommandContext args, CommandSender sender) throws CommandEx
region = new GlobalProtectedRegion(id); region = new GlobalProtectedRegion(id);
} else { } else {
region = checkRegionFromSelection(player, id); region = checkRegionFromSelection(player, id);
warnAboutDimensions(player, region); warnAboutDimensions(localPlayer, region);
informNewUser(player, manager, region); informNewUser(player, manager, region);
} }
@ -213,7 +217,7 @@ public void claim(CommandContext args, CommandSender sender) throws CommandExcep
Player player = plugin.checkPlayer(sender); Player player = plugin.checkPlayer(sender);
LocalPlayer localPlayer = plugin.wrapPlayer(player); LocalPlayer localPlayer = plugin.wrapPlayer(player);
RegionPermissionModel permModel = getPermissionModel(sender); RegionPermissionModel permModel = getPermissionModel(localPlayer);
// Check permissions // Check permissions
if (!permModel.mayClaim()) { if (!permModel.mayClaim()) {
@ -222,12 +226,13 @@ public void claim(CommandContext args, CommandSender sender) throws CommandExcep
String id = checkRegionId(args.getString(0), false); String id = checkRegionId(args.getString(0), false);
RegionManager manager = checkRegionManager(plugin, player.getWorld()); RegionManager manager = checkRegionManager(plugin, localPlayer.getWorld());
checkRegionDoesNotExist(manager, id, false); checkRegionDoesNotExist(manager, id, false);
ProtectedRegion region = checkRegionFromSelection(player, id); ProtectedRegion region = checkRegionFromSelection(player, id);
BukkitWorldConfiguration wcfg = plugin.getGlobalStateManager().get(player.getWorld()); BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(localPlayer.getWorld());
// Check whether the player has created too many regions // Check whether the player has created too many regions
if (!permModel.mayClaimRegionsUnbounded()) { if (!permModel.mayClaimRegionsUnbounded()) {
@ -310,19 +315,19 @@ public void claim(CommandContext args, CommandSender sender) throws CommandExcep
min = 0, max = 1) min = 0, max = 1)
public void select(CommandContext args, CommandSender sender) throws CommandException { public void select(CommandContext args, CommandSender sender) throws CommandException {
Player player = plugin.checkPlayer(sender); Player player = plugin.checkPlayer(sender);
World world = player.getWorld(); LocalPlayer localPlayer = plugin.wrapPlayer(player);
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, localPlayer.getWorld());
ProtectedRegion existing; ProtectedRegion existing;
// If no arguments were given, get the region that the player is inside // If no arguments were given, get the region that the player is inside
if (args.argsLength() == 0) { if (args.argsLength() == 0) {
existing = checkRegionStandingIn(manager, player); existing = checkRegionStandingIn(manager, localPlayer);
} else { } else {
existing = checkExistingRegion(manager, args.getString(0), false); existing = checkExistingRegion(manager, args.getString(0), false);
} }
// Check permissions // Check permissions
if (!getPermissionModel(sender).maySelect(existing)) { if (!getPermissionModel(localPlayer).maySelect(existing)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -346,10 +351,11 @@ public void info(CommandContext args, CommandSender sender) throws CommandExcept
warnAboutSaveFailures(sender); warnAboutSaveFailures(sender);
World world = checkWorld(args, sender, 'w'); // Get the world World world = checkWorld(args, sender, 'w'); // Get the world
RegionPermissionModel permModel = getPermissionModel(sender); Actor actor = plugin.getWorldEdit().wrapCommandSender(sender);
RegionPermissionModel permModel = getPermissionModel(actor);
// Lookup the existing region // Lookup the existing region
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion existing; ProtectedRegion existing;
if (args.argsLength() == 0) { // Get region from where the player is if (args.argsLength() == 0) { // Get region from where the player is
@ -358,7 +364,7 @@ public void info(CommandContext args, CommandSender sender) throws CommandExcept
"the region with /region info -w world_name region_name."); "the region with /region info -w world_name region_name.");
} }
existing = checkRegionStandingIn(manager, (Player) sender, true); existing = checkRegionStandingIn(manager, plugin.wrapPlayer((Player) sender), true);
} else { // Get region from the ID } else { // Get region from the ID
existing = checkExistingRegion(manager, args.getString(0), true); existing = checkExistingRegion(manager, args.getString(0), true);
} }
@ -412,6 +418,7 @@ public void list(CommandContext args, CommandSender sender) throws CommandExcept
World world = checkWorld(args, sender, 'w'); // Get the world World world = checkWorld(args, sender, 'w'); // Get the world
String ownedBy; String ownedBy;
Actor actor = plugin.getWorldEdit().wrapCommandSender(sender);
// Get page // Get page
int page = args.getInteger(0, 1) - 1; int page = args.getInteger(0, 1) - 1;
@ -427,14 +434,14 @@ public void list(CommandContext args, CommandSender sender) throws CommandExcept
} }
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayList(ownedBy)) { if (!getPermissionModel(actor).mayList(ownedBy)) {
ownedBy = sender.getName(); // assume they only want their own ownedBy = sender.getName(); // assume they only want their own
if (!getPermissionModel(sender).mayList(ownedBy)) { if (!getPermissionModel(actor).mayList(ownedBy)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
} }
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
RegionLister task = new RegionLister(plugin, manager, sender); RegionLister task = new RegionLister(plugin, manager, sender);
task.setPage(page); task.setPage(page);
@ -469,8 +476,9 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept
String flagName = args.getString(1); String flagName = args.getString(1);
String value = args.argsLength() >= 3 ? args.getJoinedStrings(2) : null; String value = args.argsLength() >= 3 ? args.getJoinedStrings(2) : null;
RegionGroup groupValue = null; RegionGroup groupValue = null;
FlagRegistry flagRegistry = plugin.getFlagRegistry(); FlagRegistry flagRegistry = WorldGuard.getInstance().getFlagRegistry();
RegionPermissionModel permModel = getPermissionModel(sender); Actor actor = plugin.getWorldEdit().wrapCommandSender(sender);
RegionPermissionModel permModel = getPermissionModel(actor);
if (args.hasFlag('e')) { if (args.hasFlag('e')) {
if (value != null) { if (value != null) {
@ -486,7 +494,7 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept
} }
// Lookup the existing region // Lookup the existing region
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), true); ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), true);
// Check permissions // Check permissions
@ -556,7 +564,7 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept
// Parse the [-g group] separately so entire command can abort if parsing // Parse the [-g group] separately so entire command can abort if parsing
// the [value] part throws an error. // the [value] part throws an error.
try { try {
groupValue = groupFlag.parseInput(FlagContext.create().setSender(sender).setInput(group).setObject("region", existing).build()); groupValue = groupFlag.parseInput(FlagContext.create().setSender(actor).setInput(group).setObject("region", existing).build());
} catch (InvalidFlagFormat e) { } catch (InvalidFlagFormat e) {
throw new CommandException(e.getMessage()); throw new CommandException(e.getMessage());
} }
@ -567,7 +575,7 @@ public void flag(CommandContext args, CommandSender sender) throws CommandExcept
if (value != null) { if (value != null) {
// Set the flag if [value] was given even if [-g group] was given as well // Set the flag if [value] was given even if [-g group] was given as well
try { try {
setFlag(existing, foundFlag, sender, value); setFlag(existing, foundFlag, actor, value);
} catch (InvalidFlagFormat e) { } catch (InvalidFlagFormat e) {
throw new CommandException(e.getMessage()); throw new CommandException(e.getMessage());
} }
@ -637,11 +645,11 @@ public void setPriority(CommandContext args, CommandSender sender) throws Comman
int priority = args.getInteger(1); int priority = args.getInteger(1);
// Lookup the existing region // Lookup the existing region
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), false); ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), false);
// Check permissions // Check permissions
if (!getPermissionModel(sender).maySetPriority(existing)) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).maySetPriority(existing)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -672,7 +680,7 @@ public void setParent(CommandContext args, CommandSender sender) throws CommandE
ProtectedRegion child; ProtectedRegion child;
// Lookup the existing region // Lookup the existing region
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
// Get parent and child // Get parent and child
child = checkExistingRegion(manager, args.getString(0), false); child = checkExistingRegion(manager, args.getString(0), false);
@ -683,7 +691,7 @@ public void setParent(CommandContext args, CommandSender sender) throws CommandE
} }
// Check permissions // Check permissions
if (!getPermissionModel(sender).maySetParent(child, parent)) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).maySetParent(child, parent)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -739,11 +747,11 @@ public void remove(CommandContext args, CommandSender sender) throws CommandExce
boolean unsetParent = args.hasFlag('u'); boolean unsetParent = args.hasFlag('u');
// Lookup the existing region // Lookup the existing region
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), true); ProtectedRegion existing = checkExistingRegion(manager, args.getString(0), true);
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayDelete(existing)) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayDelete(existing)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -788,12 +796,12 @@ public void load(CommandContext args, final CommandSender sender) throws Command
} }
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayForceLoadRegions()) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayForceLoadRegions()) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
if (world != null) { if (world != null) {
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
if (manager == null) { if (manager == null) {
throw new CommandException("No region manager exists for world '" + world.getName() + "'."); throw new CommandException("No region manager exists for world '" + world.getName() + "'.");
@ -805,10 +813,10 @@ public void load(CommandContext args, final CommandSender sender) throws Command
.forRegionDataLoad(world, false); .forRegionDataLoad(world, false);
} else { } else {
// Load regions for all worlds // Load regions for all worlds
List<RegionManager> managers = new ArrayList<RegionManager>(); List<RegionManager> managers = new ArrayList<>();
for (World w : Bukkit.getServer().getWorlds()) { for (World w : Bukkit.getServer().getWorlds()) {
RegionManager manager = plugin.getRegionContainer().get(w); RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
if (manager != null) { if (manager != null) {
managers.add(manager); managers.add(manager);
} }
@ -847,12 +855,12 @@ public void save(CommandContext args, final CommandSender sender) throws Command
} }
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayForceSaveRegions()) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayForceSaveRegions()) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
if (world != null) { if (world != null) {
RegionManager manager = checkRegionManager(plugin, world); RegionManager manager = checkRegionManager(plugin, BukkitAdapter.adapt(world));
if (manager == null) { if (manager == null) {
throw new CommandException("No region manager exists for world '" + world.getName() + "'."); throw new CommandException("No region manager exists for world '" + world.getName() + "'.");
@ -864,10 +872,10 @@ public void save(CommandContext args, final CommandSender sender) throws Command
.forRegionDataSave(world, false); .forRegionDataSave(world, false);
} else { } else {
// Save for all worlds // Save for all worlds
List<RegionManager> managers = new ArrayList<RegionManager>(); List<RegionManager> managers = new ArrayList<>();
for (World w : Bukkit.getServer().getWorlds()) { for (World w : Bukkit.getServer().getWorlds()) {
RegionManager manager = plugin.getRegionContainer().get(w); RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer().get(BukkitAdapter.adapt(w));
if (manager != null) { if (manager != null) {
managers.add(manager); managers.add(manager);
} }
@ -896,7 +904,7 @@ public void save(CommandContext args, final CommandSender sender) throws Command
desc = "Migrate from one Protection Database to another.", min = 2, max = 2) desc = "Migrate from one Protection Database to another.", min = 2, max = 2)
public void migrateDB(CommandContext args, CommandSender sender) throws CommandException { public void migrateDB(CommandContext args, CommandSender sender) throws CommandException {
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayMigrateRegionStore()) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayMigrateRegionStore()) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -920,7 +928,7 @@ public void migrateDB(CommandContext args, CommandSender sender) throws CommandE
"Please ensure you have made a backup of your data, and then re-enter the command with -y tacked on at the end to proceed."); "Please ensure you have made a backup of your data, and then re-enter the command with -y tacked on at the end to proceed.");
} }
ConfigurationManager config = plugin.getGlobalStateManager(); ConfigurationManager config = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
RegionDriver fromDriver = config.regionStoreDriverMap.get(from); RegionDriver fromDriver = config.regionStoreDriverMap.get(from);
RegionDriver toDriver = config.regionStoreDriverMap.get(to); RegionDriver toDriver = config.regionStoreDriverMap.get(to);
@ -932,7 +940,7 @@ public void migrateDB(CommandContext args, CommandSender sender) throws CommandE
throw new CommandException("The driver specified as 'to' does not seem to be supported in your version of WorldGuard."); throw new CommandException("The driver specified as 'to' does not seem to be supported in your version of WorldGuard.");
} }
DriverMigration migration = new DriverMigration(fromDriver, toDriver, plugin.getFlagRegistry()); DriverMigration migration = new DriverMigration(fromDriver, toDriver, WorldGuard.getInstance().getFlagRegistry());
LoggerToChatHandler handler = null; LoggerToChatHandler handler = null;
Logger minecraftLogger = null; Logger minecraftLogger = null;
@ -945,7 +953,7 @@ public void migrateDB(CommandContext args, CommandSender sender) throws CommandE
} }
try { try {
BukkitRegionContainer container = plugin.getRegionContainer(); BukkitRegionContainer container = (BukkitRegionContainer) WorldGuard.getInstance().getPlatform().getRegionContainer();
sender.sendMessage(ChatColor.YELLOW + "Now performing migration... this may take a while."); sender.sendMessage(ChatColor.YELLOW + "Now performing migration... this may take a while.");
container.migrate(migration); container.migrate(migration);
sender.sendMessage(ChatColor.YELLOW + sender.sendMessage(ChatColor.YELLOW +
@ -973,7 +981,7 @@ public void migrateDB(CommandContext args, CommandSender sender) throws CommandE
desc = "Migrate loaded databases to use UUIDs", max = 0) desc = "Migrate loaded databases to use UUIDs", max = 0)
public void migrateUuid(CommandContext args, CommandSender sender) throws CommandException { public void migrateUuid(CommandContext args, CommandSender sender) throws CommandException {
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayMigrateRegionNames()) { if (!getPermissionModel(plugin.getWorldEdit().wrapCommandSender(sender)).mayMigrateRegionNames()) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }
@ -988,10 +996,10 @@ public void migrateUuid(CommandContext args, CommandSender sender) throws Comman
} }
try { try {
ConfigurationManager config = plugin.getGlobalStateManager(); ConfigurationManager config = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitRegionContainer container = plugin.getRegionContainer(); BukkitRegionContainer container = (BukkitRegionContainer) WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionDriver driver = container.getDriver(); RegionDriver driver = container.getDriver();
UUIDMigration migration = new UUIDMigration(driver, plugin.getProfileService(), plugin.getFlagRegistry()); UUIDMigration migration = new UUIDMigration(driver, plugin.getProfileService(), WorldGuard.getInstance().getFlagRegistry());
migration.setKeepUnresolvedNames(config.keepUnresolvedNames); migration.setKeepUnresolvedNames(config.keepUnresolvedNames);
sender.sendMessage(ChatColor.YELLOW + "Now performing migration... this may take a while."); sender.sendMessage(ChatColor.YELLOW + "Now performing migration... this may take a while.");
container.migrate(migration); container.migrate(migration);
@ -1020,14 +1028,15 @@ public void migrateUuid(CommandContext args, CommandSender sender) throws Comman
min = 1, max = 1) min = 1, max = 1)
public void teleport(CommandContext args, CommandSender sender) throws CommandException { public void teleport(CommandContext args, CommandSender sender) throws CommandException {
Player player = plugin.checkPlayer(sender); Player player = plugin.checkPlayer(sender);
LocalPlayer localPlayer = plugin.wrapPlayer(player);
Location teleportLocation; Location teleportLocation;
// Lookup the existing region // Lookup the existing region
RegionManager regionManager = checkRegionManager(plugin, player.getWorld()); RegionManager regionManager = checkRegionManager(plugin, localPlayer.getWorld());
ProtectedRegion existing = checkExistingRegion(regionManager, args.getString(0), false); ProtectedRegion existing = checkExistingRegion(regionManager, args.getString(0), false);
// Check permissions // Check permissions
if (!getPermissionModel(sender).mayTeleportTo(existing)) { if (!getPermissionModel(localPlayer).mayTeleportTo(existing)) {
throw new CommandPermissionsException(); throw new CommandPermissionsException();
} }

View File

@ -19,18 +19,23 @@
package com.sk89q.worldguard.bukkit.commands.region; package com.sk89q.worldguard.bukkit.commands.region;
import com.google.common.base.Function;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.Iterables;
import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.CuboidSelection; import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.bukkit.selections.Polygonal2DSelection; import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.bukkit.selections.Selection; import com.sk89q.worldedit.regions.Polygonal2DRegion;
import com.sk89q.worldguard.bukkit.BukkitRegionContainer; import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import com.sk89q.worldedit.regions.selector.Polygonal2DRegionSelector;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.internal.permission.RegionPermissionModel; import com.sk89q.worldguard.internal.permission.RegionPermissionModel;
import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.ApplicableRegionSet;
@ -42,6 +47,7 @@
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -61,7 +67,7 @@ protected RegionCommandsBase() {
* @param sender the sender * @param sender the sender
* @return the permission model * @return the permission model
*/ */
protected static RegionPermissionModel getPermissionModel(CommandSender sender) { protected static RegionPermissionModel getPermissionModel(Actor sender) {
return new RegionPermissionModel(sender); return new RegionPermissionModel(sender);
} }
@ -154,7 +160,7 @@ protected static ProtectedRegion checkExistingRegion(RegionManager regionManager
* @return a region * @return a region
* @throws CommandException thrown if no region was found * @throws CommandException thrown if no region was found
*/ */
protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManager, Player player) throws CommandException { protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManager, LocalPlayer player) throws CommandException {
return checkRegionStandingIn(regionManager, player, false); return checkRegionStandingIn(regionManager, player, false);
} }
@ -173,13 +179,13 @@ protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManag
* @return a region * @return a region
* @throws CommandException thrown if no region was found * @throws CommandException thrown if no region was found
*/ */
protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManager, Player player, boolean allowGlobal) throws CommandException { protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManager, LocalPlayer player, boolean allowGlobal) throws CommandException {
ApplicableRegionSet set = regionManager.getApplicableRegions(player.getLocation()); ApplicableRegionSet set = regionManager.getApplicableRegions(player.getLocation().toVector());
if (set.size() == 0) { if (set.size() == 0) {
if (allowGlobal) { if (allowGlobal) {
ProtectedRegion global = checkExistingRegion(regionManager, "__global__", true); ProtectedRegion global = checkExistingRegion(regionManager, "__global__", true);
player.sendMessage(ChatColor.GRAY + "You're not standing in any " + player.printDebug("You're not standing in any " +
"regions. Using the global region for this world instead."); "regions. Using the global region for this world instead.");
return global; return global;
} }
@ -213,18 +219,17 @@ protected static ProtectedRegion checkRegionStandingIn(RegionManager regionManag
* @return the selection * @return the selection
* @throws CommandException thrown on an error * @throws CommandException thrown on an error
*/ */
protected static Selection checkSelection(Player player) throws CommandException { protected static Region checkSelection(Player player) throws CommandException {
WorldEditPlugin worldEdit = WorldGuardPlugin.inst().getWorldEdit(); WorldEditPlugin worldEdit = WorldGuardPlugin.inst().getWorldEdit();
Selection selection = worldEdit.getSelection(player); com.sk89q.worldedit.entity.Player wePlayer = worldEdit.wrapPlayer(player);
try {
if (selection == null) { return WorldEdit.getInstance().getSessionManager().get(wePlayer).getRegionSelector(wePlayer.getWorld()).getRegion();
} catch (IncompleteRegionException e) {
throw new CommandException( throw new CommandException(
"Please select an area first. " + "Please select an area first. " +
"Use WorldEdit to make a selection! " + "Use WorldEdit to make a selection! " +
"(wiki: http://wiki.sk89q.com/wiki/WorldEdit)."); "(wiki: http://wiki.sk89q.com/wiki/WorldEdit).");
} }
return selection;
} }
/** /**
@ -248,14 +253,14 @@ protected static void checkRegionDoesNotExist(RegionManager manager, String id,
* @param world the world * @param world the world
* @throws CommandException thrown if the manager is null * @throws CommandException thrown if the manager is null
*/ */
protected static RegionManager checkRegionManager(WorldGuardPlugin plugin, World world) throws CommandException { protected static RegionManager checkRegionManager(WorldGuardPlugin plugin, com.sk89q.worldedit.world.World world) throws CommandException {
if (!plugin.getGlobalStateManager().get(world).useRegions) { if (!WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(world).useRegions) {
throw new CommandException("Region support is disabled in the target world. " + throw new CommandException("Region support is disabled in the target world. " +
"It can be enabled per-world in WorldGuard's configuration files. " + "It can be enabled per-world in WorldGuard's configuration files. " +
"However, you may need to restart your server afterwards."); "However, you may need to restart your server afterwards.");
} }
RegionManager manager = plugin.getRegionContainer().get(world); RegionManager manager = WorldGuard.getInstance().getPlatform().getRegionContainer().get(world);
if (manager == null) { if (manager == null) {
throw new CommandException("Region data failed to load for this world. " + throw new CommandException("Region data failed to load for this world. " +
"Please ask a server administrator to read the logs to identify the reason."); "Please ask a server administrator to read the logs to identify the reason.");
@ -272,17 +277,17 @@ protected static RegionManager checkRegionManager(WorldGuardPlugin plugin, World
* @throws CommandException thrown on an error * @throws CommandException thrown on an error
*/ */
protected static ProtectedRegion checkRegionFromSelection(Player player, String id) throws CommandException { protected static ProtectedRegion checkRegionFromSelection(Player player, String id) throws CommandException {
Selection selection = checkSelection(player); Region selection = checkSelection(player);
// Detect the type of region from WorldEdit // Detect the type of region from WorldEdit
if (selection instanceof Polygonal2DSelection) { if (selection instanceof Polygonal2DRegion) {
Polygonal2DSelection polySel = (Polygonal2DSelection) selection; Polygonal2DRegion polySel = (Polygonal2DRegion) selection;
int minY = polySel.getNativeMinimumPoint().getBlockY(); int minY = polySel.getMinimumPoint().getBlockY();
int maxY = polySel.getNativeMaximumPoint().getBlockY(); int maxY = polySel.getMaximumPoint().getBlockY();
return new ProtectedPolygonalRegion(id, polySel.getNativePoints(), minY, maxY); return new ProtectedPolygonalRegion(id, polySel.getPoints(), minY, maxY);
} else if (selection instanceof CuboidSelection) { } else if (selection instanceof CuboidRegion) {
BlockVector min = selection.getNativeMinimumPoint().toBlockVector(); BlockVector min = selection.getMinimumPoint().toBlockVector();
BlockVector max = selection.getNativeMaximumPoint().toBlockVector(); BlockVector max = selection.getMaximumPoint().toBlockVector();
return new ProtectedCuboidRegion(id, min, max); return new ProtectedCuboidRegion(id, min, max);
} else { } else {
throw new CommandException("Sorry, you can only use cuboids and polygons for WorldGuard regions."); throw new CommandException("Sorry, you can only use cuboids and polygons for WorldGuard regions.");
@ -295,7 +300,7 @@ protected static ProtectedRegion checkRegionFromSelection(Player player, String
* @param sender the sender to send the message to * @param sender the sender to send the message to
*/ */
protected static void warnAboutSaveFailures(CommandSender sender) { protected static void warnAboutSaveFailures(CommandSender sender) {
BukkitRegionContainer container = WorldGuardPlugin.inst().getRegionContainer(); RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
Set<RegionManager> failures = container.getSaveFailures(); Set<RegionManager> failures = container.getSaveFailures();
if (failures.size() > 0) { if (failures.size() > 0) {
@ -313,10 +318,10 @@ protected static void warnAboutSaveFailures(CommandSender sender) {
* @param sender the sender to send the message to * @param sender the sender to send the message to
* @param region the region * @param region the region
*/ */
protected static void warnAboutDimensions(CommandSender sender, ProtectedRegion region) { protected static void warnAboutDimensions(Actor sender, ProtectedRegion region) {
int height = region.getMaximumPoint().getBlockY() - region.getMinimumPoint().getBlockY(); int height = region.getMaximumPoint().getBlockY() - region.getMinimumPoint().getBlockY();
if (height <= 2) { if (height <= 2) {
sender.sendMessage(ChatColor.GRAY + "(Warning: The height of the region was " + (height + 1) + " block(s).)"); sender.printDebug("(Warning: The height of the region was " + (height + 1) + " block(s).)");
} }
} }
@ -346,25 +351,26 @@ protected static void informNewUser(CommandSender sender, RegionManager manager,
*/ */
protected static void setPlayerSelection(Player player, ProtectedRegion region) throws CommandException { protected static void setPlayerSelection(Player player, ProtectedRegion region) throws CommandException {
WorldEditPlugin worldEdit = WorldGuardPlugin.inst().getWorldEdit(); WorldEditPlugin worldEdit = WorldGuardPlugin.inst().getWorldEdit();
com.sk89q.worldedit.entity.Player wePlayer = worldEdit.wrapPlayer(player);
World world = player.getWorld(); LocalSession session = WorldEdit.getInstance().getSessionManager().get(wePlayer);
// Set selection // Set selection
if (region instanceof ProtectedCuboidRegion) { if (region instanceof ProtectedCuboidRegion) {
ProtectedCuboidRegion cuboid = (ProtectedCuboidRegion) region; ProtectedCuboidRegion cuboid = (ProtectedCuboidRegion) region;
Vector pt1 = cuboid.getMinimumPoint(); Vector pt1 = cuboid.getMinimumPoint();
Vector pt2 = cuboid.getMaximumPoint(); Vector pt2 = cuboid.getMaximumPoint();
CuboidSelection selection = new CuboidSelection(world, pt1, pt2);
worldEdit.setSelection(player, selection); session.setRegionSelector(wePlayer.getWorld(), new CuboidRegionSelector(wePlayer.getWorld(), pt1, pt2));
player.sendMessage(ChatColor.YELLOW + "Region selected as a cuboid."); player.sendMessage(ChatColor.YELLOW + "Region selected as a cuboid.");
} else if (region instanceof ProtectedPolygonalRegion) { } else if (region instanceof ProtectedPolygonalRegion) {
ProtectedPolygonalRegion poly2d = (ProtectedPolygonalRegion) region; ProtectedPolygonalRegion poly2d = (ProtectedPolygonalRegion) region;
Polygonal2DSelection selection = new Polygonal2DSelection( Polygonal2DRegionSelector selector = new Polygonal2DRegionSelector(
world, poly2d.getPoints(), wePlayer.getWorld(), poly2d.getPoints(),
poly2d.getMinimumPoint().getBlockY(), poly2d.getMinimumPoint().getBlockY(),
poly2d.getMaximumPoint().getBlockY() ); poly2d.getMaximumPoint().getBlockY() );
worldEdit.setSelection(player, selection); session.setRegionSelector(wePlayer.getWorld(), selector);
player.sendMessage(ChatColor.YELLOW + "Region selected as a polygon."); player.sendMessage(ChatColor.YELLOW + "Region selected as a polygon.");
} else if (region instanceof GlobalProtectedRegion) { } else if (region instanceof GlobalProtectedRegion) {
@ -387,7 +393,7 @@ protected static void setPlayerSelection(Player player, ProtectedRegion region)
* @param value the value * @param value the value
* @throws InvalidFlagFormat thrown if the value is invalid * @throws InvalidFlagFormat thrown if the value is invalid
*/ */
protected static <V> void setFlag(ProtectedRegion region, Flag<V> flag, CommandSender sender, String value) throws InvalidFlagFormat { protected static <V> void setFlag(ProtectedRegion region, Flag<V> flag, Actor sender, String value) throws InvalidFlagFormat {
region.setFlag(flag, flag.parseInput(FlagContext.create().setSender(sender).setInput(value).setObject("region", region).build())); region.setFlag(flag, flag.parseInput(FlagContext.create().setSender(sender).setInput(value).setObject("region", region).build()));
} }

View File

@ -21,7 +21,7 @@
import com.sk89q.squirrelid.cache.ProfileCache; import com.sk89q.squirrelid.cache.ProfileCache;
import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.RegionGroupFlag; import com.sk89q.worldguard.protection.flags.RegionGroupFlag;
@ -29,12 +29,13 @@
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import javax.annotation.Nullable;
/** /**
* Create a region printout, as used in /region info to show information about * Create a region printout, as used in /region info to show information about
* a region. * a region.
@ -105,7 +106,7 @@ public void appendFlags() {
public void appendFlagsList(boolean useColors) { public void appendFlagsList(boolean useColors) {
boolean hasFlags = false; boolean hasFlags = false;
for (Flag<?> flag : WorldGuardPlugin.inst().getFlagRegistry()) { for (Flag<?> flag : WorldGuard.getInstance().getFlagRegistry()) {
Object val = region.getFlag(flag), group = null; Object val = region.getFlag(flag), group = null;
// No value // No value

View File

@ -21,6 +21,7 @@
import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.blacklist.target.ItemTarget; import com.sk89q.worldguard.blacklist.target.ItemTarget;
import com.sk89q.worldguard.blacklist.target.Target; import com.sk89q.worldguard.blacklist.target.Target;
import com.sk89q.worldguard.blacklist.target.TargetMatcher; import com.sk89q.worldguard.blacklist.target.TargetMatcher;
@ -55,19 +56,19 @@ public boolean test(Target target) {
} }
public boolean test(Material material) { public boolean test(Material material) {
return test(new ItemTarget(material)); return test(new ItemTarget(BukkitAdapter.asItemType(material)));
} }
public boolean test(Block block) { public boolean test(Block block) {
return test(new ItemTarget(block.getTypeId(), block.getData())); return test(new ItemTarget(BukkitAdapter.asItemType(block.getType())));
} }
public boolean test(BlockState state) { public boolean test(BlockState state) {
return test(new ItemTarget(state.getType())); return test(new ItemTarget(BukkitAdapter.asItemType(state.getType())));
} }
public boolean test(ItemStack itemStack) { public boolean test(ItemStack itemStack) {
return test(new ItemTarget(itemStack.getTypeId())); return test(new ItemTarget(BukkitAdapter.asItemType(itemStack.getType())));
} }
@Override @Override

View File

@ -66,7 +66,7 @@ public void onPlaceBlock(final PlaceBlockEvent event) {
} }
event.filter(target -> { event.filter(target -> {
if (wcfg.getChestProtection().isChest(BukkitAdapter.adapt(event.getEffectiveMaterial())) && wcfg.isChestProtected(BukkitAdapter.adapt(target.getBlock().getLocation()), if (wcfg.getChestProtection().isChest(BukkitAdapter.asBlockType(event.getEffectiveMaterial())) && wcfg.isChestProtected(BukkitAdapter.adapt(target.getBlock().getLocation()),
WorldGuardPlugin.inst().wrapPlayer(player))) { WorldGuardPlugin.inst().wrapPlayer(player))) {
sendMessage(event, player, ChatColor.DARK_RED + "This spot is for a chest that you don't have permission for."); sendMessage(event, player, ChatColor.DARK_RED + "This spot is for a chest that you don't have permission for.");
return false; return false;

View File

@ -20,6 +20,8 @@
package com.sk89q.worldguard.bukkit.listener; package com.sk89q.worldguard.bukkit.listener;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.cause.Cause; import com.sk89q.worldguard.bukkit.cause.Cause;
@ -70,6 +72,8 @@
import org.bukkit.event.world.StructureGrowEvent; import org.bukkit.event.world.StructureGrowEvent;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SpawnEggMeta;
import org.bukkit.material.Dispenser; import org.bukkit.material.Dispenser;
import org.bukkit.material.MaterialData; import org.bukkit.material.MaterialData;
import org.bukkit.material.PistonExtensionMaterial; import org.bukkit.material.PistonExtensionMaterial;
@ -247,7 +251,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (event.isCancelled() && !wasCancelled && entity instanceof FallingBlock) { if (event.isCancelled() && !wasCancelled && entity instanceof FallingBlock) {
FallingBlock fallingBlock = (FallingBlock) entity; FallingBlock fallingBlock = (FallingBlock) entity;
ItemStack itemStack = new ItemStack(fallingBlock.getMaterial(), 1, fallingBlock.getBlockData()); ItemStack itemStack = new ItemStack(fallingBlock.getBlockData().getMaterial(), 1);
Item item = block.getWorld().dropItem(fallingBlock.getLocation(), itemStack); Item item = block.getWorld().dropItem(fallingBlock.getLocation(), itemStack);
item.setVelocity(new Vector()); item.setVelocity(new Vector());
if (Events.fireAndTestCancel(new SpawnEntityEvent(event, create(block, entity), item))) { if (Events.fireAndTestCancel(new SpawnEntityEvent(event, create(block, entity), item))) {
@ -281,8 +285,8 @@ public void onBlockPistonRetract(BlockPistonRetractEvent event) {
blocks = new ArrayList<>(event.getBlocks()); blocks = new ArrayList<>(event.getBlocks());
} catch (NoSuchMethodError e) { } catch (NoSuchMethodError e) {
blocks = Lists.newArrayList(event.getRetractLocation().getBlock()); blocks = Lists.newArrayList(event.getRetractLocation().getBlock());
if (piston.getType() == Material.PISTON_MOVING_PIECE) { if (piston.getType() == Material.MOVING_PISTON) {
direction = new PistonExtensionMaterial(Material.PISTON_STICKY_BASE.getId(), piston.getData()).getFacing(); direction = new PistonExtensionMaterial(Material.STICKY_PISTON, piston.getData()).getFacing();
} }
} }
int originalSize = blocks.size(); int originalSize = blocks.size();
@ -409,7 +413,7 @@ public void onPlayerInteract(PlayerInteractEvent event) {
// emit a "use block here" event where the player is // emit a "use block here" event where the player is
// standing, which is a hack to protect items that don't // standing, which is a hack to protect items that don't
// throw events // throw events
if (item != null && getWorldConfig(player.getWorld()).blockUseAtFeet.test(item)) { if (item != null && getWorldConfig(BukkitAdapter.adapt(player.getWorld())).blockUseAtFeet.test(item)) {
if (Events.fireAndTestCancel(new UseBlockEvent(event, cause, player.getLocation().getBlock()))) { if (Events.fireAndTestCancel(new UseBlockEvent(event, cause, player.getLocation().getBlock()))) {
event.setCancelled(true); event.setCancelled(true);
} }
@ -516,7 +520,7 @@ public void onPlayerBucketFill(PlayerBucketFillEvent event) {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onBlockFromTo(BlockFromToEvent event) { public void onBlockFromTo(BlockFromToEvent event) {
BukkitWorldConfiguration config = getWorldConfig(event.getBlock().getWorld()); BukkitWorldConfiguration config = getWorldConfig(BukkitAdapter.adapt(event.getBlock().getWorld()));
// This only applies to regions but nothing else cares about high // This only applies to regions but nothing else cares about high
// frequency events at the moment // frequency events at the moment
@ -562,7 +566,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
case DISPENSE_EGG: case DISPENSE_EGG:
case EGG: case EGG:
case SPAWNER_EGG: case SPAWNER_EGG:
if (getWorldConfig(event.getEntity().getWorld()).strictEntitySpawn) { if (getWorldConfig(BukkitAdapter.adapt(event.getEntity().getWorld())).strictEntitySpawn) {
Events.fireToCancel(event, new SpawnEntityEvent(event, Cause.unknown(), event.getEntity())); Events.fireToCancel(event, new SpawnEntityEvent(event, Cause.unknown(), event.getEntity()));
} }
break; break;
@ -655,7 +659,7 @@ public void onExpBottle(ExpBottleEvent event) {
if (shooter instanceof Player) { if (shooter instanceof Player) {
Player player = (Player) shooter; Player player = (Player) shooter;
if (player.getGameMode() != GameMode.CREATIVE) { if (player.getGameMode() != GameMode.CREATIVE) {
player.getInventory().addItem(new ItemStack(Material.EXP_BOTTLE, 1)); player.getInventory().addItem(new ItemStack(Material.EXPERIENCE_BOTTLE, 1));
} }
} }
} }
@ -794,7 +798,8 @@ public void onInventoryMoveItem(InventoryMoveItemEvent event) {
InventoryHolder sourceHolder = event.getSource().getHolder(); InventoryHolder sourceHolder = event.getSource().getHolder();
InventoryHolder targetHolder = event.getDestination().getHolder(); InventoryHolder targetHolder = event.getDestination().getHolder();
if (causeHolder instanceof Hopper && getPlugin().getGlobalStateManager().get(((Hopper) causeHolder).getWorld()).ignoreHopperMoveEvents) { if (causeHolder instanceof Hopper
&& ((BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(((Hopper) causeHolder).getWorld()))).ignoreHopperMoveEvents) {
return; return;
} }
@ -934,10 +939,10 @@ private static <T extends Event & Cancellable> void handleBlockRightClick(T even
} }
// Handle created spawn eggs // Handle created spawn eggs
if (item != null && item.getType() == Material.MONSTER_EGG) { if (item != null && Materials.isSpawnEgg(item.getType())) {
MaterialData data = item.getData(); ItemMeta data = item.getItemMeta();
if (data instanceof SpawnEgg) { if (data instanceof SpawnEggMeta) {
@Nullable EntityType type = ((SpawnEgg) data).getSpawnedType(); @Nullable EntityType type = ((SpawnEggMeta) data).getSpawnedType();
if (type == null) { if (type == null) {
type = EntityType.SHEEP; // Haven't investigated why it's sometimes null type = EntityType.SHEEP; // Haven't investigated why it's sometimes null
} }
@ -979,11 +984,11 @@ private static <T extends Event & Cancellable> void handleInventoryHolderUse(T o
} }
private boolean hasInteractBypass(Block block) { private boolean hasInteractBypass(Block block) {
return getWorldConfig(block.getWorld()).allowAllInteract.test(block); return getWorldConfig(BukkitAdapter.adapt(block.getWorld())).allowAllInteract.test(block);
} }
private boolean hasInteractBypass(World world, ItemStack item) { private boolean hasInteractBypass(World world, ItemStack item) {
return getWorldConfig(world).allowAllInteract.test(item); return getWorldConfig(BukkitAdapter.adapt(world)).allowAllInteract.test(item);
} }
private boolean isBlockModifiedOnClick(Block block, boolean rightClick) { private boolean isBlockModifiedOnClick(Block block, boolean rightClick) {

View File

@ -19,6 +19,8 @@
package com.sk89q.worldguard.bukkit.listener; package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.session.MoveType; import com.sk89q.worldguard.session.MoveType;
@ -54,19 +56,19 @@ public void registerEvents() {
@EventHandler @EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) { public void onPlayerRespawn(PlayerRespawnEvent event) {
Player player = event.getPlayer(); LocalPlayer player = plugin.wrapPlayer(event.getPlayer());
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player);
session.testMoveTo(player, event.getRespawnLocation(), MoveType.RESPAWN, true); session.testMoveTo(player, BukkitAdapter.adapt(event.getRespawnLocation()), MoveType.RESPAWN, true);
} }
@EventHandler @EventHandler
public void onVehicleEnter(VehicleEnterEvent event) { public void onVehicleEnter(VehicleEnterEvent event) {
Entity entity = event.getEntered(); Entity entity = event.getEntered();
if (entity instanceof Player) { if (entity instanceof Player) {
Player player = (Player) entity; LocalPlayer player = plugin.wrapPlayer((Player) entity);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player);
if (null != session.testMoveTo(player, event.getVehicle().getLocation(), MoveType.EMBARK, true)) { if (null != session.testMoveTo(player, BukkitAdapter.adapt(event.getVehicle().getLocation()), MoveType.EMBARK, true)) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@ -75,9 +77,10 @@ public void onVehicleEnter(VehicleEnterEvent event) {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerMove(PlayerMoveEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer);
final Location override = session.testMoveTo(player, event.getTo(), MoveType.MOVE); final Location override = BukkitAdapter.adapt(session.testMoveTo(localPlayer, BukkitAdapter.adapt(event.getTo()), MoveType.MOVE));
if (override != null) { if (override != null) {
override.setX(override.getBlockX() + 0.5); override.setX(override.getBlockX() + 0.5);

View File

@ -35,7 +35,7 @@
import com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent; import com.sk89q.worldguard.bukkit.event.entity.SpawnEntityEvent;
import com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent; import com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent;
import com.sk89q.worldguard.bukkit.internal.WGMetadata; import com.sk89q.worldguard.bukkit.internal.WGMetadata;
import com.sk89q.worldguard.bukkit.protection.DelayedRegionOverlapAssociation; import com.sk89q.worldguard.protection.DelayedRegionOverlapAssociation;
import com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent; import com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent;
import com.sk89q.worldguard.bukkit.util.Entities; import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.bukkit.util.Events; import com.sk89q.worldguard.bukkit.util.Events;
@ -104,12 +104,13 @@ private void tellErrorMessage(DelegateEvent event, Cause cause, Location locatio
if (rootCause instanceof Player) { if (rootCause instanceof Player) {
Player player = (Player) rootCause; Player player = (Player) rootCause;
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
Long lastTime = WGMetadata.getIfPresent(player, DENY_MESSAGE_KEY, Long.class); Long lastTime = WGMetadata.getIfPresent(player, DENY_MESSAGE_KEY, Long.class);
if (lastTime == null || now - lastTime >= LAST_MESSAGE_DELAY) { if (lastTime == null || now - lastTime >= LAST_MESSAGE_DELAY) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
String message = query.queryValue(location, player, Flags.DENY_MESSAGE); String message = query.queryValue(BukkitAdapter.adapt(location), localPlayer, Flags.DENY_MESSAGE);
if (message != null && !message.isEmpty()) { if (message != null && !message.isEmpty()) {
player.sendMessage(message.replace("%what%", what)); player.sendMessage(message.replace("%what%", what));
} }
@ -158,10 +159,10 @@ private RegionAssociable createRegionAssociable(Cause cause) {
return getPlugin().wrapOfflinePlayer((OfflinePlayer) rootCause); return getPlugin().wrapOfflinePlayer((OfflinePlayer) rootCause);
} else if (rootCause instanceof Entity) { } else if (rootCause instanceof Entity) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
return new DelayedRegionOverlapAssociation(query, ((Entity) rootCause).getLocation()); return new DelayedRegionOverlapAssociation(query, BukkitAdapter.adapt(((Entity) rootCause).getLocation()));
} else if (rootCause instanceof Block) { } else if (rootCause instanceof Block) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
return new DelayedRegionOverlapAssociation(query, ((Block) rootCause).getLocation()); return new DelayedRegionOverlapAssociation(query, BukkitAdapter.adapt(((Block) rootCause).getLocation()));
} else { } else {
return Associables.constant(Association.NON_MEMBER); return Associables.constant(Association.NON_MEMBER);
} }
@ -170,7 +171,7 @@ private RegionAssociable createRegionAssociable(Cause cause) {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlaceBlock(final PlaceBlockEvent event) { public void onPlaceBlock(final PlaceBlockEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
final Material type = event.getEffectiveMaterial(); final Material type = event.getEffectiveMaterial();
@ -180,52 +181,49 @@ public void onPlaceBlock(final PlaceBlockEvent event) {
// Don't check liquid flow unless it's enabled // Don't check liquid flow unless it's enabled
if (event.getCause().getRootCause() instanceof Block if (event.getCause().getRootCause() instanceof Block
&& Materials.isLiquid(type) && Materials.isLiquid(type)
&& !getWorldConfig(event.getWorld()).checkLiquidFlow) { && !getWorldConfig(BukkitAdapter.adapt(event.getWorld())).checkLiquidFlow) {
return; return;
} }
event.filter(new Predicate<Location>() { event.filter((Predicate<Location>) target -> {
@Override boolean canPlace;
public boolean apply(Location target) { String what;
boolean canPlace;
String what;
/* Flint and steel, fire charge, etc. */ /* Flint and steel, fire charge, etc. */
if (type == Material.FIRE) { if (type == Material.FIRE) {
Block block = event.getCause().getFirstBlock(); Block block = event.getCause().getFirstBlock();
boolean fire = block != null && block.getType() == Material.FIRE; boolean fire = block != null && block.getType() == Material.FIRE;
boolean lava = block != null && Materials.isLava(block.getType()); boolean lava = block != null && Materials.isLava(block.getType());
List<StateFlag> flags = new ArrayList<StateFlag>(); List<StateFlag> flags = new ArrayList<>();
flags.add(Flags.BLOCK_PLACE); flags.add(Flags.BLOCK_PLACE);
flags.add(Flags.LIGHTER); flags.add(Flags.LIGHTER);
if (fire) flags.add(Flags.FIRE_SPREAD); if (fire) flags.add(Flags.FIRE_SPREAD);
if (lava) flags.add(Flags.LAVA_FIRE); if (lava) flags.add(Flags.LAVA_FIRE);
canPlace = query.testBuild(target, associable, combine(event, flags.toArray(new StateFlag[flags.size()]))); canPlace = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, flags.toArray(new StateFlag[flags.size()])));
what = "place fire"; what = "place fire";
/* Everything else */ /* Everything else */
} else { } else {
canPlace = query.testBuild(target, associable, combine(event, Flags.BLOCK_PLACE)); canPlace = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.BLOCK_PLACE));
try { try {
event.setSilent(type == Material.FROSTED_ICE); event.setSilent(type == Material.FROSTED_ICE);
} catch (NoSuchFieldError ignored) {} // back compat } catch (NoSuchFieldError ignored) {} // back compat
what = "place that block"; what = "place that block";
}
if (!canPlace) {
tellErrorMessage(event, event.getCause(), target, what);
return false;
}
return true;
} }
if (!canPlace) {
tellErrorMessage(event, event.getCause(), target, what);
return false;
}
return true;
}); });
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onBreakBlock(final BreakBlockEvent event) { public void onBreakBlock(final BreakBlockEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
@ -233,30 +231,27 @@ public void onBreakBlock(final BreakBlockEvent event) {
if (!event.isCancelled()) { if (!event.isCancelled()) {
final RegionAssociable associable = createRegionAssociable(event.getCause()); final RegionAssociable associable = createRegionAssociable(event.getCause());
event.filter(new Predicate<Location>() { event.filter((Predicate<Location>) target -> {
@Override boolean canBreak;
public boolean apply(Location target) { String what;
boolean canBreak;
String what;
/* TNT */ /* TNT */
if (event.getCause().find(EntityType.PRIMED_TNT, EntityType.MINECART_TNT) != null) { if (event.getCause().find(EntityType.PRIMED_TNT, EntityType.MINECART_TNT) != null) {
canBreak = query.testBuild(target, associable, combine(event, Flags.BLOCK_BREAK, Flags.TNT)); canBreak = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.BLOCK_BREAK, Flags.TNT));
what = "use dynamite"; what = "use dynamite";
/* Everything else */ /* Everything else */
} else { } else {
canBreak = query.testBuild(target, associable, combine(event, Flags.BLOCK_BREAK)); canBreak = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.BLOCK_BREAK));
what = "break that block"; what = "break that block";
}
if (!canBreak) {
tellErrorMessage(event, event.getCause(), target, what);
return false;
}
return true;
} }
if (!canBreak) {
tellErrorMessage(event, event.getCause(), target, what);
return false;
}
return true;
}); });
} }
} }
@ -264,64 +259,61 @@ public boolean apply(Location target) {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onUseBlock(final UseBlockEvent event) { public void onUseBlock(final UseBlockEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
final Material type = event.getEffectiveMaterial(); final Material type = event.getEffectiveMaterial();
final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); final RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
final RegionAssociable associable = createRegionAssociable(event.getCause()); final RegionAssociable associable = createRegionAssociable(event.getCause());
event.filter(new Predicate<Location>() { event.filter((Predicate<Location>) target -> {
@Override boolean canUse;
public boolean apply(Location target) { String what;
boolean canUse;
String what;
/* Saplings, etc. */ /* Saplings, etc. */
if (Materials.isConsideredBuildingIfUsed(type)) { if (Materials.isConsideredBuildingIfUsed(type)) {
canUse = query.testBuild(target, associable, combine(event)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event));
what = "use that"; what = "use that";
/* Inventory */ /* Inventory */
} else if (Materials.isInventoryBlock(type)) { } else if (Materials.isInventoryBlock(type)) {
canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.CHEST_ACCESS)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.CHEST_ACCESS));
what = "open that"; what = "open that";
/* Beds */ /* Beds */
} else if (type == Material.BED_BLOCK) { } else if (Materials.isBed(type)) {
canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.SLEEP)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.SLEEP));
what = "sleep"; what = "sleep";
/* TNT */ /* TNT */
} else if (type == Material.TNT) { } else if (type == Material.TNT) {
canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.TNT)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.TNT));
what = "use explosives"; what = "use explosives";
/* Legacy USE flag */ /* Legacy USE flag */
} else if (Materials.isUseFlagApplicable(type)) { } else if (Materials.isUseFlagApplicable(type)) {
canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT, Flags.USE)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT, Flags.USE));
what = "use that"; what = "use that";
/* Everything else */ /* Everything else */
} else { } else {
canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT));
what = "use that"; what = "use that";
}
if (!canUse) {
tellErrorMessage(event, event.getCause(), target, what);
return false;
}
return true;
} }
if (!canUse) {
tellErrorMessage(event, event.getCause(), target, what);
return false;
}
return true;
}); });
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onSpawnEntity(SpawnEntityEvent event) { public void onSpawnEntity(SpawnEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
Location target = event.getTarget(); Location target = event.getTarget();
@ -335,26 +327,26 @@ public void onSpawnEntity(SpawnEntityEvent event) {
/* Vehicles */ /* Vehicles */
if (Entities.isVehicle(type)) { if (Entities.isVehicle(type)) {
canSpawn = query.testBuild(target, associable, combine(event, Flags.PLACE_VEHICLE)); canSpawn = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.PLACE_VEHICLE));
what = "place vehicles"; what = "place vehicles";
/* Item pickup */ /* Item pickup */
} else if (event.getEntity() instanceof Item) { } else if (event.getEntity() instanceof Item) {
canSpawn = query.testBuild(target, associable, combine(event, Flags.ITEM_DROP)); canSpawn = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.ITEM_DROP));
what = "drop items"; what = "drop items";
/* XP drops */ /* XP drops */
} else if (type == EntityType.EXPERIENCE_ORB) { } else if (type == EntityType.EXPERIENCE_ORB) {
canSpawn = query.testBuild(target, associable, combine(event, Flags.EXP_DROPS)); canSpawn = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.EXP_DROPS));
what = "drop XP"; what = "drop XP";
} else if (Entities.isAoECloud(type)) { } else if (Entities.isAoECloud(type)) {
canSpawn = query.testBuild(target, associable, combine(event, Flags.POTION_SPLASH)); canSpawn = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.POTION_SPLASH));
what = "use lingering potions"; what = "use lingering potions";
/* Everything else */ /* Everything else */
} else { } else {
canSpawn = query.testBuild(target, associable, combine(event)); canSpawn = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event));
if (event.getEntity() instanceof Item) { if (event.getEntity() instanceof Item) {
what = "drop items"; what = "drop items";
@ -372,7 +364,7 @@ public void onSpawnEntity(SpawnEntityEvent event) {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onDestroyEntity(DestroyEntityEvent event) { public void onDestroyEntity(DestroyEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
Location target = event.getTarget(); Location target = event.getTarget();
@ -385,17 +377,17 @@ public void onDestroyEntity(DestroyEntityEvent event) {
/* Vehicles */ /* Vehicles */
if (Entities.isVehicle(type)) { if (Entities.isVehicle(type)) {
canDestroy = query.testBuild(target, associable, combine(event, Flags.DESTROY_VEHICLE)); canDestroy = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.DESTROY_VEHICLE));
what = "break vehicles"; what = "break vehicles";
/* Item pickup */ /* Item pickup */
} else if (event.getEntity() instanceof Item || event.getEntity() instanceof ExperienceOrb) { } else if (event.getEntity() instanceof Item || event.getEntity() instanceof ExperienceOrb) {
canDestroy = query.testBuild(target, associable, combine(event, Flags.ITEM_PICKUP)); canDestroy = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.ITEM_PICKUP));
what = "pick up items"; what = "pick up items";
/* Everything else */ /* Everything else */
} else { } else {
canDestroy = query.testBuild(target, associable, combine(event)); canDestroy = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event));
what = "break things"; what = "break things";
} }
@ -408,7 +400,7 @@ public void onDestroyEntity(DestroyEntityEvent event) {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onUseEntity(UseEntityEvent event) { public void onUseEntity(UseEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause if (isWhitelisted(event.getCause(), event.getWorld(), false)) return; // Whitelisted cause
Location target = event.getTarget(); Location target = event.getTarget();
@ -421,22 +413,22 @@ public void onUseEntity(UseEntityEvent event) {
/* Hostile / ambient mob override */ /* Hostile / ambient mob override */
if (Entities.isHostile(event.getEntity()) || Entities.isAmbient(event.getEntity()) if (Entities.isHostile(event.getEntity()) || Entities.isAmbient(event.getEntity())
|| Entities.isNPC(event.getEntity()) || Entities.isVehicle(event.getEntity().getType())) { || Entities.isNPC(event.getEntity()) || Entities.isVehicle(event.getEntity().getType())) {
canUse = event.getRelevantFlags().isEmpty() || query.queryState(target, associable, combine(event)) != State.DENY; canUse = event.getRelevantFlags().isEmpty() || query.queryState(BukkitAdapter.adapt(target), associable, combine(event)) != State.DENY;
what = "use that"; what = "use that";
/* Paintings, item frames, etc. */ /* Paintings, item frames, etc. */
} else if (Entities.isConsideredBuildingIfUsed(event.getEntity())) { } else if (Entities.isConsideredBuildingIfUsed(event.getEntity())) {
canUse = query.testBuild(target, associable, combine(event)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event));
what = "change that"; what = "change that";
/* Ridden on use */ /* Ridden on use */
} else if (Entities.isRiddenOnUse(event.getEntity())) { } else if (Entities.isRiddenOnUse(event.getEntity())) {
canUse = query.testBuild(target, associable, combine(event, Flags.RIDE, Flags.INTERACT)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.RIDE, Flags.INTERACT));
what = "ride that"; what = "ride that";
/* Everything else */ /* Everything else */
} else { } else {
canUse = query.testBuild(target, associable, combine(event, Flags.INTERACT)); canUse = query.testBuild(BukkitAdapter.adapt(target), associable, combine(event, Flags.INTERACT));
what = "use that"; what = "use that";
} }
@ -449,7 +441,7 @@ public void onUseEntity(UseEntityEvent event) {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onDamageEntity(DamageEntityEvent event) { public void onDamageEntity(DamageEntityEvent event) {
if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed if (event.getResult() == Result.ALLOW) return; // Don't care about events that have been pre-allowed
if (!isRegionSupportEnabled(event.getWorld())) return; // Region support disabled if (!isRegionSupportEnabled(BukkitAdapter.adapt(event.getWorld()))) return; // Region support disabled
// Whitelist check is below // Whitelist check is below
com.sk89q.worldedit.util.Location target = BukkitAdapter.adapt(event.getTarget()); com.sk89q.worldedit.util.Location target = BukkitAdapter.adapt(event.getTarget());

View File

@ -112,7 +112,7 @@ public void onBlockBreak(BlockBreakEvent event) {
if (!wcfg.itemDurability) { if (!wcfg.itemDurability) {
ItemStack held = player.getItemInHand(); ItemStack held = player.getItemInHand();
if (held.getType() != Material.AIR && !(ItemType.usesDamageValue(held.getTypeId())|| BlockType.usesData(held.getTypeId()))) { if (held.getType() != Material.AIR) {
held.setDurability((short) 0); held.setDurability((short) 0);
player.setItemInHand(held); player.setItemInHand(held);
} }
@ -198,8 +198,7 @@ public void onBlockFromTo(BlockFromToEvent event) {
} }
if (wcfg.highFreqFlags && isLava if (wcfg.highFreqFlags && isLava
&& !plugin.getGlobalRegionManager().allows(Flags.LAVA_FLOW, && !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(blockFrom.getLocation()), (RegionAssociable) null, Flags.LAVA_FLOW))) {
BukkitAdapter.adapt(blockFrom.getLocation()))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -485,8 +484,7 @@ public void onLeavesDecay(LeavesDecayEvent event) {
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
if (!plugin.getGlobalRegionManager().allows(Flags.LEAF_DECAY, if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(event.getBlock().getLocation()), (RegionAssociable) null, Flags.LEAF_DECAY))) {
BukkitAdapter.adapt(event.getBlock().getLocation()))) {
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -19,28 +19,58 @@
package com.sk89q.worldguard.bukkit.listener; package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.blocks.BlockID; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.bukkit.*; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.util.Entities; import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.protection.regions.RegionQuery;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.*; import org.bukkit.entity.Creeper;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.Enderman;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Tameable;
import org.bukkit.entity.Wither;
import org.bukkit.entity.WitherSkull;
import org.bukkit.entity.Wolf;
import org.bukkit.entity.minecart.ExplosiveMinecart; import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.*; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.CreeperPowerEvent;
import org.bukkit.event.entity.EntityBreakDoorEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCreatePortalEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent;
import org.bukkit.event.entity.PigZapEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.projectiles.ProjectileSource; import org.bukkit.projectiles.ProjectileSource;
@ -77,7 +107,7 @@ public void onEntityInteract(EntityInteractEvent event) {
Block block = event.getBlock(); Block block = event.getBlock();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(entity.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(entity.getWorld()));
if (block.getType() == Material.FARMLAND) { if (block.getType() == Material.FARMLAND) {
if (/* entity instanceof Creature && // catch for any entity (not thrown for players) */ if (/* entity instanceof Creature && // catch for any entity (not thrown for players) */
@ -89,7 +119,8 @@ public void onEntityInteract(EntityInteractEvent event) {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onEntityDeath(EntityDeathEvent event) { public void onEntityDeath(EntityDeathEvent event) {
BukkitWorldConfiguration wcfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(event.getEntity().getWorld()); BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(event.getEntity().getWorld()));
if (event instanceof PlayerDeathEvent && wcfg.disableDeathMessages) { if (event instanceof PlayerDeathEvent && wcfg.disableDeathMessages) {
((PlayerDeathEvent) event).setDeathMessage(""); ((PlayerDeathEvent) event).setDeathMessage("");
@ -101,7 +132,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) {
DamageCause type = event.getCause(); DamageCause type = event.getCause();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(defender.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(defender.getWorld()));
if (defender instanceof Wolf && ((Wolf) defender).isTamed()) { if (defender instanceof Wolf && ((Wolf) defender).isTamed()) {
if (wcfg.antiWolfDumbness && !(type == DamageCause.VOID)) { if (wcfg.antiWolfDumbness && !(type == DamageCause.VOID)) {
@ -148,7 +179,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) {
if (type == DamageCause.BLOCK_EXPLOSION if (type == DamageCause.BLOCK_EXPLOSION
&& (wcfg.blockOtherExplosions && (wcfg.blockOtherExplosions
|| (wcfg.explosionFlagCancellation || (wcfg.explosionFlagCancellation
&& !plugin.getGlobalRegionManager().allows(Flags.OTHER_EXPLOSION, defender.getLocation())))) { && !plugin.getGlobalRegionManager().allows(Flags.OTHER_EXPLOSION, BukkitAdapter.adapt(defender.getLocation()))))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -165,7 +196,8 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
Entity attacker = event.getDamager(); Entity attacker = event.getDamager();
Entity defender = event.getEntity(); Entity defender = event.getEntity();
BukkitWorldConfiguration wcfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(defender.getWorld()); BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(BukkitAdapter.adapt(defender.getWorld()));
if (defender instanceof ItemFrame) { if (defender instanceof ItemFrame) {
if (checkItemFrameProtection(attacker, (ItemFrame) defender)) { if (checkItemFrameProtection(attacker, (ItemFrame) defender)) {
@ -183,7 +215,7 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
// this isn't handled elsewhere because ender crystal explosions don't carry a player cause // this isn't handled elsewhere because ender crystal explosions don't carry a player cause
// in the same way that creepers or tnt can // in the same way that creepers or tnt can
if (wcfg.useRegions && wcfg.explosionFlagCancellation) { if (wcfg.useRegions && wcfg.explosionFlagCancellation) {
if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()) if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(defender.getLocation()))
.testState(null, Flags.OTHER_EXPLOSION)) { .testState(null, Flags.OTHER_EXPLOSION)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -230,7 +262,7 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()); ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(localPlayer.getLocation());
if (!set.allows(Flags.MOB_DAMAGE, localPlayer) && !(attacker instanceof Tameable)) { if (!set.allows(Flags.MOB_DAMAGE, localPlayer) && !(attacker instanceof Tameable)) {
event.setCancelled(true); event.setCancelled(true);
@ -260,7 +292,7 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) {
} }
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(defender.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(defender.getWorld()));
if (defender instanceof Player) { if (defender instanceof Player) {
Player player = (Player) defender; Player player = (Player) defender;
LocalPlayer localPlayer = plugin.wrapPlayer(player); LocalPlayer localPlayer = plugin.wrapPlayer(player);
@ -273,7 +305,7 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) {
return; return;
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()).allows(Flags.MOB_DAMAGE, localPlayer)) { if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(localPlayer.getLocation()).allows(Flags.MOB_DAMAGE, localPlayer)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -293,7 +325,7 @@ private void onEntityDamageByProjectile(EntityDamageByEntityEvent event) {
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery(); RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
if (!query.testState(defender.getLocation(), (Player) defender, Flags.GHAST_FIREBALL) && wcfg.explosionFlagCancellation) { if (!query.testState(localPlayer.getLocation(), localPlayer, Flags.GHAST_FIREBALL) && wcfg.explosionFlagCancellation) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -329,7 +361,7 @@ public void onEntityDamage(EntityDamageEvent event) {
DamageCause type = event.getCause(); DamageCause type = event.getCause();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(defender.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(defender.getWorld()));
if (defender instanceof Wolf && ((Wolf) defender).isTamed()) { if (defender instanceof Wolf && ((Wolf) defender).isTamed()) {
if (wcfg.antiWolfDumbness) { if (wcfg.antiWolfDumbness) {
@ -348,7 +380,7 @@ public void onEntityDamage(EntityDamageEvent event) {
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(defender.getLocation()); ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(localPlayer.getLocation());
if (!set.allows(Flags.MOB_DAMAGE, plugin.wrapPlayer(player))) { if (!set.allows(Flags.MOB_DAMAGE, plugin.wrapPlayer(player))) {
event.setCancelled(true); event.setCancelled(true);
@ -412,7 +444,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
Location l = event.getLocation(); Location l = event.getLocation();
World world = l.getWorld(); World world = l.getWorld();
BukkitWorldConfiguration wcfg = cfg.get(world); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
Entity ent = event.getEntity(); Entity ent = event.getEntity();
if (cfg.activityHaltToggle) { if (cfg.activityHaltToggle) {
@ -469,7 +501,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
// allow wither skull blocking since there is no dedicated flag atm // allow wither skull blocking since there is no dedicated flag atm
if (wcfg.useRegions) { if (wcfg.useRegions) {
for (Block block : event.blockList()) { for (Block block : event.blockList()) {
if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(block.getLocation()).allows(Flags.GHAST_FIREBALL)) { if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation())).allows(Flags.GHAST_FIREBALL)) {
event.blockList().clear(); event.blockList().clear();
if (wcfg.explosionFlagCancellation) event.setCancelled(true); if (wcfg.explosionFlagCancellation) event.setCancelled(true);
return; return;
@ -487,7 +519,8 @@ public void onEntityExplode(EntityExplodeEvent event) {
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
for (Block block : event.blockList()) { for (Block block : event.blockList()) {
if (!plugin.getGlobalRegionManager().allows(Flags.WITHER_DAMAGE, block.getLocation())) { if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(block.getLocation()),
(RegionAssociable) null, Flags.WITHER_DAMAGE))) {
event.blockList().clear(); event.blockList().clear();
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -501,9 +534,8 @@ public void onEntityExplode(EntityExplodeEvent event) {
return; return;
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
for (Block block : event.blockList()) { for (Block block : event.blockList()) {
if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(block.getLocation()).allows(Flags.OTHER_EXPLOSION)) { if (!WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation())).allows(Flags.OTHER_EXPLOSION)) {
event.blockList().clear(); event.blockList().clear();
if (wcfg.explosionFlagCancellation) event.setCancelled(true); if (wcfg.explosionFlagCancellation) event.setCancelled(true);
return; return;
@ -515,7 +547,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
if (wcfg.signChestProtection) { if (wcfg.signChestProtection) {
for (Block block : event.blockList()) { for (Block block : event.blockList()) {
if (wcfg.isChestProtected(block)) { if (wcfg.isChestProtected(BukkitAdapter.adapt(block.getLocation()))) {
event.blockList().clear(); event.blockList().clear();
return; return;
} }
@ -530,7 +562,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onExplosionPrime(ExplosionPrimeEvent event) { public void onExplosionPrime(ExplosionPrimeEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
Entity ent = event.getEntity(); Entity ent = event.getEntity();
if (cfg.activityHaltToggle) { if (cfg.activityHaltToggle) {
@ -577,7 +609,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
return; return;
} }
BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
// allow spawning of creatures from plugins // allow spawning of creatures from plugins
if (!wcfg.blockPluginSpawning && event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.CUSTOM) { if (!wcfg.blockPluginSpawning && event.getSpawnReason() == CreatureSpawnEvent.SpawnReason.CUSTOM) {
@ -605,14 +637,15 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
Location eventLoc = event.getLocation(); Location eventLoc = event.getLocation();
if (wcfg.useRegions && cfg.useRegionsCreatureSpawnEvent) { if (wcfg.useRegions && cfg.useRegionsCreatureSpawnEvent) {
ApplicableRegionSet set = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(eventLoc); ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(eventLoc));
if (!set.allows(Flags.MOB_SPAWNING)) { if (!set.allows(Flags.MOB_SPAWNING)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
Set<EntityType> entityTypes = set.getFlag(Flags.DENY_SPAWN); Set<com.sk89q.worldedit.world.entity.EntityType> entityTypes = set.getFlag(Flags.DENY_SPAWN);
if (entityTypes != null && entityTypes.contains(entityType)) { if (entityTypes != null && entityTypes.contains(entityType)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -630,7 +663,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onCreatePortal(EntityCreatePortalEvent event) { public void onCreatePortal(EntityCreatePortalEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
switch (event.getEntityType()) { switch (event.getEntityType()) {
case ENDER_DRAGON: case ENDER_DRAGON:
@ -642,7 +675,7 @@ public void onCreatePortal(EntityCreatePortalEvent event) {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPigZap(PigZapEvent event) { public void onPigZap(PigZapEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
if (wcfg.disablePigZap) { if (wcfg.disablePigZap) {
event.setCancelled(true); event.setCancelled(true);
@ -652,7 +685,7 @@ public void onPigZap(PigZapEvent event) {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onCreeperPower(CreeperPowerEvent event) { public void onCreeperPower(CreeperPowerEvent event) {
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(event.getEntity().getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld()));
if (wcfg.disableCreeperPower) { if (wcfg.disableCreeperPower) {
event.setCancelled(true); event.setCancelled(true);
@ -666,7 +699,7 @@ public void onEntityRegainHealth(EntityRegainHealthEvent event) {
World world = ent.getWorld(); World world = ent.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(world); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
if (wcfg.disableHealthRegain) { if (wcfg.disableHealthRegain) {
event.setCancelled(true); event.setCancelled(true);
@ -686,7 +719,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
Location location = block.getLocation(); Location location = block.getLocation();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(ent.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(ent.getWorld()));
if (ent instanceof Enderman) { if (ent instanceof Enderman) {
if (wcfg.disableEndermanGriefing) { if (wcfg.disableEndermanGriefing) {
event.setCancelled(true); event.setCancelled(true);
@ -694,7 +727,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
if (!plugin.getGlobalRegionManager().allows(Flags.ENDER_BUILD, location)) { if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(location), (RegionAssociable) null, Flags.ENDER_BUILD))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -705,7 +738,7 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
return; return;
} }
if (wcfg.useRegions) { if (wcfg.useRegions) {
if (!plugin.getGlobalRegionManager().allows(Flags.WITHER_DAMAGE, location)) { if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(location), (RegionAssociable) null, Flags.WITHER_DAMAGE))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -728,13 +761,11 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) {
private boolean checkItemFrameProtection(Entity attacker, ItemFrame defender) { private boolean checkItemFrameProtection(Entity attacker, ItemFrame defender) {
World world = attacker.getWorld(); World world = attacker.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(world); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
if (wcfg.useRegions) { if (wcfg.useRegions) {
// bukkit throws this event when a player attempts to remove an item from a frame // bukkit throws this event when a player attempts to remove an item from a frame
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
if (!(attacker instanceof Player)) { if (!(attacker instanceof Player)) {
if (!plugin.getGlobalRegionManager().allows( if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(defender.getLocation()), (RegionAssociable) null, Flags.ENTITY_ITEM_FRAME_DESTROY))) {
Flags.ENTITY_ITEM_FRAME_DESTROY, defender.getLocation())) {
return true; return true;
} }
} }

View File

@ -24,7 +24,9 @@
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Creeper; import org.bukkit.entity.Creeper;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -89,8 +91,7 @@ public void onHangingBreak(HangingBreakEvent event) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (wcfg.useRegions && !plugin.getGlobalRegionManager().allows(Flags.CREEPER_EXPLOSION, if (wcfg.useRegions && !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(hanging.getLocation()), (RegionAssociable) null, Flags.CREEPER_EXPLOSION))) {
BukkitAdapter.adapt(hanging.getLocation()))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -101,12 +102,12 @@ public void onHangingBreak(HangingBreakEvent event) {
if (hanging instanceof Painting if (hanging instanceof Painting
&& (wcfg.blockEntityPaintingDestroy && (wcfg.blockEntityPaintingDestroy
|| (wcfg.useRegions || (wcfg.useRegions
&& !plugin.getGlobalRegionManager().allows(Flags.ENTITY_PAINTING_DESTROY, BukkitAdapter.adapt(hanging.getLocation()))))) { && !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(hanging.getLocation()), (RegionAssociable) null, Flags.ENTITY_PAINTING_DESTROY))))) {
event.setCancelled(true); event.setCancelled(true);
} else if (hanging instanceof ItemFrame } else if (hanging instanceof ItemFrame
&& (wcfg.blockEntityItemFrameDestroy && (wcfg.blockEntityItemFrameDestroy
|| (wcfg.useRegions || (wcfg.useRegions
&& !plugin.getGlobalRegionManager().allows(Flags.ENTITY_ITEM_FRAME_DESTROY, BukkitAdapter.adapt(hanging.getLocation()))))) { && !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(BukkitAdapter.adapt(hanging.getLocation()), (RegionAssociable) null, Flags.ENTITY_ITEM_FRAME_DESTROY))))) {
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -19,18 +19,19 @@
package com.sk89q.worldguard.bukkit.listener; package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.gamemode.GameMode;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitUtil; import com.sk89q.worldguard.bukkit.BukkitUtil;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent; import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent;
import com.sk89q.worldguard.bukkit.util.Events; import com.sk89q.worldguard.bukkit.util.Events;
import com.sk89q.worldguard.config.ConfigurationManager;
import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion;
@ -39,8 +40,8 @@
import com.sk89q.worldguard.session.handler.GameModeFlag; import com.sk89q.worldguard.session.handler.GameModeFlag;
import com.sk89q.worldguard.util.command.CommandFilter; import com.sk89q.worldguard.util.command.CommandFilter;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.TravelAgent; import org.bukkit.TravelAgent;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@ -64,12 +65,13 @@
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import javax.annotation.Nullable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.logging.Logger; import java.util.logging.Logger;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.annotation.Nullable;
/** /**
* Handles all events thrown in relation to a player. * Handles all events thrown in relation to a player.
*/ */
@ -99,13 +101,16 @@ public void registerEvents() {
@EventHandler @EventHandler
public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) { public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
BukkitWorldConfiguration wcfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(player.getWorld()); LocalPlayer localPlayer = plugin.wrapPlayer(player);
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().getIfPresent(player); BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(localPlayer.getWorld());
Session session = WorldGuard.getInstance().getPlatform().getSessionManager().getIfPresent(localPlayer);
if (session != null) { if (session != null) {
GameModeFlag handler = session.getHandler(GameModeFlag.class); GameModeFlag handler = session.getHandler(GameModeFlag.class);
if (handler != null && wcfg.useRegions && !plugin.getGlobalRegionManager().hasBypass(player, player.getWorld())) { if (handler != null && wcfg.useRegions && !WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer,
localPlayer.getWorld())) {
GameMode expected = handler.getSetGameMode(); GameMode expected = handler.getSetGameMode();
if (handler.getOriginalGameMode() != null && expected != null && expected != event.getNewGameMode()) { if (handler.getOriginalGameMode() != null && expected != null && expected != BukkitAdapter.adapt(event.getNewGameMode())) {
log.info("Game mode change on " + player.getName() + " has been blocked due to the region GAMEMODE flag"); log.info("Game mode change on " + player.getName() + " has been blocked due to the region GAMEMODE flag");
event.setCancelled(true); event.setCancelled(true);
} }
@ -116,10 +121,11 @@ public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
@EventHandler @EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player);
World world = player.getWorld(); World world = player.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(world); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(localPlayer.getWorld());
if (cfg.activityHaltToggle) { if (cfg.activityHaltToggle) {
player.sendMessage(ChatColor.YELLOW player.sendMessage(ChatColor.YELLOW
@ -147,7 +153,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
Events.fire(new ProcessPlayerEvent(player)); Events.fire(new ProcessPlayerEvent(player));
WorldGuard.getInstance().getPlatform().getSessionManager().get(player); // Initializes a session WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer); // Initializes a session
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
@ -157,7 +163,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) {
BukkitWorldConfiguration wcfg = BukkitWorldConfiguration wcfg =
(BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(localPlayer.getWorld()); (BukkitWorldConfiguration) WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(localPlayer.getWorld());
if (wcfg.useRegions) { if (wcfg.useRegions) {
if (!plugin.getGlobalRegionManager().allows(Flags.SEND_CHAT, localPlayer.getLocation(), localPlayer)) { if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(localPlayer.getLocation(), localPlayer, Flags.SEND_CHAT))) {
player.sendMessage(ChatColor.RED + "You don't have permission to chat in this region!"); player.sendMessage(ChatColor.RED + "You don't have permission to chat in this region!");
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -166,7 +172,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) {
for (Iterator<Player> i = event.getRecipients().iterator(); i.hasNext();) { for (Iterator<Player> i = event.getRecipients().iterator(); i.hasNext();) {
Player rPlayer = i.next(); Player rPlayer = i.next();
LocalPlayer rLocal = plugin.wrapPlayer(rPlayer); LocalPlayer rLocal = plugin.wrapPlayer(rPlayer);
if (!plugin.getGlobalRegionManager().allows(Flags.RECEIVE_CHAT, rLocal.getLocation(), rLocal)) { if (!StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(rLocal.getLocation(), rLocal, Flags.RECEIVE_CHAT))) {
i.remove(); i.remove();
} }
} }
@ -246,21 +252,22 @@ private void handleBlockRightClick(PlayerInteractEvent event) {
Block block = event.getClickedBlock(); Block block = event.getClickedBlock();
World world = block.getWorld(); World world = block.getWorld();
int type = block.getTypeId(); Material type = block.getType();
Player player = event.getPlayer(); Player player = event.getPlayer();
@Nullable ItemStack item = event.getItem(); @Nullable ItemStack item = event.getItem();
ConfigurationManager cfg = plugin.getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(world); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
// Infinite stack removal // Infinite stack removal
if ((type == BlockID.CHEST if ((type == Material.CHEST
|| type == BlockID.JUKEBOX || type == Material.JUKEBOX
|| type == BlockID.DISPENSER || type == Material.DISPENSER
|| type == BlockID.FURNACE || type == Material.FURNACE
|| type == BlockID.BURNING_FURNACE || type == Material.DROPPER
|| type == BlockID.BREWING_STAND || type == Material.BREWING_STAND
|| type == BlockID.ENCHANTMENT_TABLE) || type == Material.TRAPPED_CHEST
|| type == Material.ENCHANTING_TABLE)
&& wcfg.removeInfiniteStacks && wcfg.removeInfiniteStacks
&& !plugin.hasPermission(player, "worldguard.override.infinite-stack")) { && !plugin.hasPermission(player, "worldguard.override.infinite-stack")) {
for (int slot = 0; slot < 40; slot++) { for (int slot = 0; slot < 40; slot++) {
@ -274,11 +281,12 @@ private void handleBlockRightClick(PlayerInteractEvent event) {
if (wcfg.useRegions) { if (wcfg.useRegions) {
//Block placedIn = block.getRelative(event.getBlockFace()); //Block placedIn = block.getRelative(event.getBlockFace());
ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(block.getLocation()); ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(block.getLocation()));
//ApplicableRegionSet placedInSet = plugin.getRegionContainer().createQuery().getApplicableRegions(placedIn.getLocation()); //ApplicableRegionSet placedInSet = plugin.getRegionContainer().createQuery().getApplicableRegions(placedIn.getLocation());
LocalPlayer localPlayer = plugin.wrapPlayer(player); LocalPlayer localPlayer = plugin.wrapPlayer(player);
if (item != null && item.getTypeId() == wcfg.regionWand && plugin.hasPermission(player, "worldguard.region.wand")) { if (item != null && item.getType().getKey().toString().equals(wcfg.regionWand) && plugin.hasPermission(player, "worldguard.region.wand")) {
if (set.size() > 0) { if (set.size() > 0) {
player.sendMessage(ChatColor.YELLOW + "Can you build? " player.sendMessage(ChatColor.YELLOW + "Can you build? "
+ (set.canBuild(localPlayer) ? "Yes" : "No")); + (set.canBuild(localPlayer) ? "Yes" : "No"));
@ -314,10 +322,10 @@ private void handlePhysicalInteract(PlayerInteractEvent event) {
//int type = block.getTypeId(); //int type = block.getTypeId();
World world = player.getWorld(); World world = player.getWorld();
ConfigurationManager cfg = plugin.getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(world); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
if (block.getTypeId() == BlockID.SOIL && wcfg.disablePlayerCropTrampling) { if (block.getType() == Material.FARMLAND && wcfg.disablePlayerCropTrampling) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -328,17 +336,18 @@ public void onPlayerRespawn(PlayerRespawnEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
Location location = player.getLocation(); Location location = player.getLocation();
ConfigurationManager cfg = plugin.getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(player.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(player.getWorld()));
if (wcfg.useRegions) { if (wcfg.useRegions) {
ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(location); ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(location));
LocalPlayer localPlayer = plugin.wrapPlayer(player); LocalPlayer localPlayer = plugin.wrapPlayer(player);
com.sk89q.worldedit.Location spawn = set.getFlag(Flags.SPAWN_LOC, localPlayer); com.sk89q.worldedit.util.Location spawn = set.getFlag(Flags.SPAWN_LOC, localPlayer);
if (spawn != null) { if (spawn != null) {
event.setRespawnLocation(com.sk89q.worldedit.bukkit.BukkitUtil.toLocation(spawn)); event.setRespawnLocation(BukkitAdapter.adapt(spawn));
} }
} }
} }
@ -347,8 +356,8 @@ public void onPlayerRespawn(PlayerRespawnEvent event) {
public void onItemHeldChange(PlayerItemHeldEvent event) { public void onItemHeldChange(PlayerItemHeldEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
ConfigurationManager cfg = plugin.getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(player.getWorld()); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(player.getWorld()));
if (wcfg.removeInfiniteStacks if (wcfg.removeInfiniteStacks
&& !plugin.hasPermission(player, "worldguard.override.infinite-stack")) { && !plugin.hasPermission(player, "worldguard.override.infinite-stack")) {
@ -365,23 +374,27 @@ public void onItemHeldChange(PlayerItemHeldEvent event) {
public void onPlayerTeleport(PlayerTeleportEvent event) { public void onPlayerTeleport(PlayerTeleportEvent event) {
World world = event.getFrom().getWorld(); World world = event.getFrom().getWorld();
Player player = event.getPlayer(); Player player = event.getPlayer();
ConfigurationManager cfg = plugin.getGlobalStateManager(); LocalPlayer localPlayer = plugin.wrapPlayer(player);
BukkitWorldConfiguration wcfg = cfg.get(world); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(localPlayer.getWorld());
if (wcfg.useRegions) { if (wcfg.useRegions) {
ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(event.getTo()); ApplicableRegionSet set =
ApplicableRegionSet setFrom = plugin.getRegionContainer().createQuery().getApplicableRegions(event.getFrom()); WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(event.getTo()));
LocalPlayer localPlayer = plugin.wrapPlayer(player); ApplicableRegionSet setFrom =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(BukkitAdapter.adapt(event.getFrom()));
if (cfg.usePlayerTeleports) { if (cfg.usePlayerTeleports) {
if (null != plugin.getSessionManager().get(player).testMoveTo(player, event.getTo(), MoveType.TELEPORT)) { if (null != WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer).testMoveTo(localPlayer,
BukkitAdapter.adapt(event.getTo()),
MoveType.TELEPORT)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
if (event.getCause() == TeleportCause.ENDER_PEARL) { if (event.getCause() == TeleportCause.ENDER_PEARL) {
if (!plugin.getGlobalRegionManager().hasBypass(localPlayer, world) if (!WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localPlayer.getWorld())
&& !(set.allows(Flags.ENDERPEARL, localPlayer) && !(set.allows(Flags.ENDERPEARL, localPlayer)
&& setFrom.allows(Flags.ENDERPEARL, localPlayer))) { && setFrom.allows(Flags.ENDERPEARL, localPlayer))) {
player.sendMessage(ChatColor.DARK_RED + "You're not allowed to go there."); player.sendMessage(ChatColor.DARK_RED + "You're not allowed to go there.");
@ -391,7 +404,7 @@ public void onPlayerTeleport(PlayerTeleportEvent event) {
} }
try { try {
if (event.getCause() == TeleportCause.CHORUS_FRUIT) { if (event.getCause() == TeleportCause.CHORUS_FRUIT) {
if (!plugin.getGlobalRegionManager().hasBypass(localPlayer, world)) { if (!WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localPlayer.getWorld())) {
boolean allowFrom = setFrom.allows(Flags.CHORUS_TELEPORT, localPlayer); boolean allowFrom = setFrom.allows(Flags.CHORUS_TELEPORT, localPlayer);
boolean allowTo = set.allows(Flags.CHORUS_TELEPORT, localPlayer); boolean allowTo = set.allows(Flags.CHORUS_TELEPORT, localPlayer);
if (!allowFrom || !allowTo) { if (!allowFrom || !allowTo) {
@ -411,8 +424,9 @@ public void onPlayerPortal(PlayerPortalEvent event) {
if (event.getTo() == null) { // apparently this counts as a cancelled event, implementation specific though if (event.getTo() == null) { // apparently this counts as a cancelled event, implementation specific though
return; return;
} }
ConfigurationManager cfg = plugin.getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = cfg.get(event.getTo().getWorld()); LocalPlayer localPlayer = plugin.wrapPlayer(event.getPlayer());
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(event.getTo().getWorld()));
if (!wcfg.regionNetherPortalProtection) return; if (!wcfg.regionNetherPortalProtection) return;
if (event.getCause() != TeleportCause.NETHER_PORTAL) { if (event.getCause() != TeleportCause.NETHER_PORTAL) {
return; return;
@ -434,12 +448,13 @@ public void onPlayerPortal(PlayerPortalEvent event) {
int radius = pta.getCreationRadius(); int radius = pta.getCreationRadius();
Location min = event.getTo().clone().subtract(radius, radius, radius); Location min = event.getTo().clone().subtract(radius, radius, radius);
Location max = event.getTo().clone().add(radius, radius, radius); Location max = event.getTo().clone().add(radius, radius, radius);
World world = event.getTo().getWorld(); com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getTo().getWorld());
ProtectedRegion check = new ProtectedCuboidRegion("__portalcheck__", BukkitUtil.toVector(min.getBlock()), BukkitUtil.toVector(max.getBlock())); ProtectedRegion check = new ProtectedCuboidRegion("__portalcheck__", BukkitAdapter.adapt(min.getBlock().getLocation()).toVector().toBlockVector(),
BukkitAdapter.adapt(max.getBlock().getLocation()).toVector().toBlockVector());
if (wcfg.useRegions && !plugin.getGlobalRegionManager().hasBypass(event.getPlayer(), world)) { if (wcfg.useRegions && !WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, world)) {
RegionManager mgr = plugin.getRegionContainer().get(event.getTo().getWorld()); RegionManager mgr = WorldGuard.getInstance().getPlatform().getRegionContainer().get(world);
if (mgr == null) return; if (mgr == null) return;
ApplicableRegionSet set = mgr.getApplicableRegions(check); ApplicableRegionSet set = mgr.getApplicableRegions(check);
if (!set.testState(plugin.wrapPlayer(event.getPlayer()), Flags.BUILD)) { if (!set.testState(plugin.wrapPlayer(event.getPlayer()), Flags.BUILD)) {
@ -454,12 +469,12 @@ public void onPlayerPortal(PlayerPortalEvent event) {
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
LocalPlayer localPlayer = plugin.wrapPlayer(player); LocalPlayer localPlayer = plugin.wrapPlayer(player);
World world = player.getWorld(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
ConfigurationManager cfg = plugin.getGlobalStateManager(); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(localPlayer.getWorld());
BukkitWorldConfiguration wcfg = cfg.get(world);
if (wcfg.useRegions && !plugin.getGlobalRegionManager().hasBypass(player, world)) { if (wcfg.useRegions && !WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, localPlayer.getWorld())) {
ApplicableRegionSet set = plugin.getRegionContainer().createQuery().getApplicableRegions(player.getLocation()); ApplicableRegionSet set =
WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().getApplicableRegions(localPlayer.getLocation());
Set<String> allowedCommands = set.queryValue(localPlayer, Flags.ALLOWED_CMDS); Set<String> allowedCommands = set.queryValue(localPlayer, Flags.ALLOWED_CMDS);
Set<String> blockedCommands = set.queryValue(localPlayer, Flags.BLOCKED_CMDS); Set<String> blockedCommands = set.queryValue(localPlayer, Flags.BLOCKED_CMDS);

View File

@ -20,6 +20,7 @@
package com.sk89q.worldguard.bukkit.listener; package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitConfigurationManager;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -46,14 +47,14 @@ public void registerEvents() {
@EventHandler @EventHandler
public void onPluginEnable(PluginEnableEvent event) { public void onPluginEnable(PluginEnableEvent event) {
if (event.getPlugin().getDescription().getName().equalsIgnoreCase("CommandBook")) { if (event.getPlugin().getDescription().getName().equalsIgnoreCase("CommandBook")) {
WorldGuard.getInstance().getPlatform().getGlobalStateManager().updateCommandBookGodMode(); ((BukkitConfigurationManager) WorldGuard.getInstance().getPlatform().getGlobalStateManager()).updateCommandBookGodMode();
} }
} }
@EventHandler @EventHandler
public void onPluginDisable(PluginDisableEvent event) { public void onPluginDisable(PluginDisableEvent event) {
if (event.getPlugin().getDescription().getName().equalsIgnoreCase("CommandBook")) { if (event.getPlugin().getDescription().getName().equalsIgnoreCase("CommandBook")) {
WorldGuard.getInstance().getPlatform().getGlobalStateManager().updateCommandBookGodMode(); ((BukkitConfigurationManager) WorldGuard.getInstance().getPlatform().getGlobalStateManager()).updateCommandBookGodMode();
} }
} }
} }

View File

@ -20,6 +20,7 @@
package com.sk89q.worldguard.bukkit.listener; package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.config.ConfigurationManager; import com.sk89q.worldguard.config.ConfigurationManager;
@ -34,6 +35,9 @@
import org.bukkit.event.vehicle.VehicleMoveEvent; import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.List;
import java.util.stream.Collectors;
public class WorldGuardVehicleListener implements Listener { public class WorldGuardVehicleListener implements Listener {
private WorldGuardPlugin plugin; private WorldGuardPlugin plugin;
@ -57,18 +61,26 @@ public void registerEvents() {
@EventHandler @EventHandler
public void onVehicleMove(VehicleMoveEvent event) { public void onVehicleMove(VehicleMoveEvent event) {
Vehicle vehicle = event.getVehicle(); Vehicle vehicle = event.getVehicle();
if (vehicle.getPassenger() == null || !(vehicle.getPassenger() instanceof Player)) return; if (vehicle.getPassengers().isEmpty()) return;
Player player = (Player) vehicle.getPassenger(); List<LocalPlayer> playerPassengers =
vehicle.getPassengers().stream().filter(ent -> ent instanceof Player).map(ent -> plugin.wrapPlayer((Player) ent)).collect(Collectors.toList());
if (playerPassengers.isEmpty()) {
return;
}
World world = vehicle.getWorld(); World world = vehicle.getWorld();
ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager();
BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world)); BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) cfg.get(BukkitAdapter.adapt(world));
if (wcfg.useRegions) { if (wcfg.useRegions) {
// Did we move a block? // Did we move a block?
if (Locations.isDifferentBlock(event.getFrom(), event.getTo())) { if (Locations.isDifferentBlock(BukkitAdapter.adapt(event.getFrom()), BukkitAdapter.adapt(event.getTo()))) {
if (null != WorldGuard.getInstance().getPlatform().getSessionManager().get(player).testMoveTo(player, event.getTo(), MoveType.RIDE)) { for (LocalPlayer player : playerPassengers) {
vehicle.setVelocity(new Vector(0,0,0)); if (null != WorldGuard.getInstance().getPlatform().getSessionManager().get(player)
vehicle.teleport(event.getFrom()); .testMoveTo(player, BukkitAdapter.adapt(event.getTo()), MoveType.RIDE)) {
vehicle.setVelocity(new Vector(0, 0, 0));
vehicle.teleport(event.getFrom());
return;
}
} }
} }
} }

View File

@ -17,7 +17,7 @@
* 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.session; package com.sk89q.worldguard.bukkit.session;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
@ -26,6 +26,9 @@
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.bukkit.BukkitPlayer; import com.sk89q.worldguard.bukkit.BukkitPlayer;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.session.Session;
import com.sk89q.worldguard.session.SessionManager;
import com.sk89q.worldguard.session.WorldPlayerTuple;
import com.sk89q.worldguard.session.handler.*; import com.sk89q.worldguard.session.handler.*;
import com.sk89q.worldguard.session.handler.Handler.Factory; import com.sk89q.worldguard.session.handler.Handler.Factory;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -64,7 +67,7 @@ public class BukkitSessionManager implements SessionManager, Runnable, Listener
.build(new CacheLoader<WorldPlayerTuple, Boolean>() { .build(new CacheLoader<WorldPlayerTuple, Boolean>() {
@Override @Override
public Boolean load(WorldPlayerTuple tuple) throws Exception { public Boolean load(WorldPlayerTuple tuple) throws Exception {
return plugin.getGlobalRegionManager().hasBypass(tuple.player, tuple.world); return tuple.getPlayer().hasPermission("worldguard.region.bypass." + tuple.getWorld().getName());
} }
}); });

View File

@ -33,6 +33,7 @@
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.logging.Logger;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -41,6 +42,8 @@
*/ */
public final class Materials { public final class Materials {
private static final Logger logger = Logger.getLogger(Materials.class.getSimpleName());
private static final int MODIFIED_ON_RIGHT = 1; private static final int MODIFIED_ON_RIGHT = 1;
private static final int MODIFIED_ON_LEFT = 2; private static final int MODIFIED_ON_LEFT = 2;
private static final int MODIFIES_BLOCKS = 4; private static final int MODIFIES_BLOCKS = 4;
@ -119,8 +122,20 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.PISTON, 0); MATERIAL_FLAGS.put(Material.PISTON, 0);
MATERIAL_FLAGS.put(Material.PISTON_HEAD, 0); MATERIAL_FLAGS.put(Material.PISTON_HEAD, 0);
MATERIAL_FLAGS.put(Material.MOVING_PISTON, 0); MATERIAL_FLAGS.put(Material.MOVING_PISTON, 0);
MATERIAL_FLAGS.put(Material.YELLOW_FLOWER, 0); MATERIAL_FLAGS.put(Material.DANDELION, 0);
MATERIAL_FLAGS.put(Material.RED_ROSE, 0); MATERIAL_FLAGS.put(Material.BLUE_ORCHID, 0);
MATERIAL_FLAGS.put(Material.ALLIUM, 0);
MATERIAL_FLAGS.put(Material.AZURE_BLUET, 0);
MATERIAL_FLAGS.put(Material.ORANGE_TULIP, 0);
MATERIAL_FLAGS.put(Material.PINK_TULIP, 0);
MATERIAL_FLAGS.put(Material.RED_TULIP, 0);
MATERIAL_FLAGS.put(Material.WHITE_TULIP, 0);
MATERIAL_FLAGS.put(Material.OXEYE_DAISY, 0);
MATERIAL_FLAGS.put(Material.SUNFLOWER, 0);
MATERIAL_FLAGS.put(Material.LILAC, 0);
MATERIAL_FLAGS.put(Material.PEONY, 0);
MATERIAL_FLAGS.put(Material.ROSE_BUSH, 0);
MATERIAL_FLAGS.put(Material.POPPY, 0);
MATERIAL_FLAGS.put(Material.BROWN_MUSHROOM, 0); MATERIAL_FLAGS.put(Material.BROWN_MUSHROOM, 0);
MATERIAL_FLAGS.put(Material.RED_MUSHROOM, 0); MATERIAL_FLAGS.put(Material.RED_MUSHROOM, 0);
MATERIAL_FLAGS.put(Material.GOLD_BLOCK, 0); MATERIAL_FLAGS.put(Material.GOLD_BLOCK, 0);
@ -132,7 +147,7 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.OBSIDIAN, 0); MATERIAL_FLAGS.put(Material.OBSIDIAN, 0);
MATERIAL_FLAGS.put(Material.TORCH, 0); MATERIAL_FLAGS.put(Material.TORCH, 0);
MATERIAL_FLAGS.put(Material.FIRE, 0); MATERIAL_FLAGS.put(Material.FIRE, 0);
MATERIAL_FLAGS.put(Material.MOB_SPAWNER, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.SPAWNER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CHEST, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.CHEST, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.REDSTONE_WIRE, 0); MATERIAL_FLAGS.put(Material.REDSTONE_WIRE, 0);
MATERIAL_FLAGS.put(Material.DIAMOND_ORE, 0); MATERIAL_FLAGS.put(Material.DIAMOND_ORE, 0);
@ -141,29 +156,23 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.WHEAT, 0); MATERIAL_FLAGS.put(Material.WHEAT, 0);
MATERIAL_FLAGS.put(Material.FARMLAND, 0); MATERIAL_FLAGS.put(Material.FARMLAND, 0);
MATERIAL_FLAGS.put(Material.FURNACE, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.FURNACE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BURNING_FURNACE, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.SIGN, 0);
MATERIAL_FLAGS.put(Material.SIGN_POST, 0);
MATERIAL_FLAGS.put(Material.WOODEN_DOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.LADDER, 0); MATERIAL_FLAGS.put(Material.LADDER, 0);
MATERIAL_FLAGS.put(Material.RAIL, 0); MATERIAL_FLAGS.put(Material.RAIL, 0);
MATERIAL_FLAGS.put(Material.COBBLESTONE_STAIRS, 0); MATERIAL_FLAGS.put(Material.COBBLESTONE_STAIRS, 0);
MATERIAL_FLAGS.put(Material.WALL_SIGN, 0); MATERIAL_FLAGS.put(Material.WALL_SIGN, 0);
MATERIAL_FLAGS.put(Material.LEVER, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.LEVER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.STONE_PRESSURE_PLATE, 0); MATERIAL_FLAGS.put(Material.STONE_PRESSURE_PLATE, 0);
MATERIAL_FLAGS.put(Material.IRON_DOOR_BLOCK, 0);
MATERIAL_FLAGS.put(Material.WOOD_PLATE, 0);
MATERIAL_FLAGS.put(Material.REDSTONE_ORE, 0); MATERIAL_FLAGS.put(Material.REDSTONE_ORE, 0);
MATERIAL_FLAGS.put(Material.REDSTONE_WALL_TORCH, 0); MATERIAL_FLAGS.put(Material.REDSTONE_WALL_TORCH, 0);
MATERIAL_FLAGS.put(Material.REDSTONE_TORCH, 0); MATERIAL_FLAGS.put(Material.REDSTONE_TORCH, 0);
MATERIAL_FLAGS.put(Material.STONE_BUTTON, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.SNOW, 0); MATERIAL_FLAGS.put(Material.SNOW, 0);
MATERIAL_FLAGS.put(Material.ICE, 0); MATERIAL_FLAGS.put(Material.ICE, 0);
MATERIAL_FLAGS.put(Material.SNOW_BLOCK, 0); MATERIAL_FLAGS.put(Material.SNOW_BLOCK, 0);
MATERIAL_FLAGS.put(Material.CACTUS, 0); MATERIAL_FLAGS.put(Material.CACTUS, 0);
MATERIAL_FLAGS.put(Material.CLAY, 0); MATERIAL_FLAGS.put(Material.CLAY, 0);
MATERIAL_FLAGS.put(Material.SUGAR_CANE, 0);
MATERIAL_FLAGS.put(Material.JUKEBOX, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.JUKEBOX, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.FENCE, 0); MATERIAL_FLAGS.put(Material.OAK_FENCE, 0);
MATERIAL_FLAGS.put(Material.PUMPKIN, 0); MATERIAL_FLAGS.put(Material.PUMPKIN, 0);
MATERIAL_FLAGS.put(Material.NETHERRACK, 0); MATERIAL_FLAGS.put(Material.NETHERRACK, 0);
MATERIAL_FLAGS.put(Material.SOUL_SAND, 0); MATERIAL_FLAGS.put(Material.SOUL_SAND, 0);
@ -172,26 +181,43 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.JACK_O_LANTERN, 0); MATERIAL_FLAGS.put(Material.JACK_O_LANTERN, 0);
MATERIAL_FLAGS.put(Material.CAKE, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.CAKE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.REPEATER, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.REPEATER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.STAINED_GLASS, 0); // MATERIAL_FLAGS.put(Material.STAINED_GLASS, 0);
MATERIAL_FLAGS.put(Material.TRAP_DOOR, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.ACACIA_TRAPDOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.MONSTER_EGGS, 0); MATERIAL_FLAGS.put(Material.BIRCH_TRAPDOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.SMOOTH_BRICK, 0); MATERIAL_FLAGS.put(Material.DARK_OAK_TRAPDOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.HUGE_MUSHROOM_1, 0); MATERIAL_FLAGS.put(Material.JUNGLE_TRAPDOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.HUGE_MUSHROOM_2, 0); MATERIAL_FLAGS.put(Material.OAK_TRAPDOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.IRON_FENCE, 0); MATERIAL_FLAGS.put(Material.SPRUCE_TRAPDOOR, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.THIN_GLASS, 0); MATERIAL_FLAGS.put(Material.INFESTED_STONE, 0);
MATERIAL_FLAGS.put(Material.MELON_BLOCK, 0); MATERIAL_FLAGS.put(Material.INFESTED_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.INFESTED_MOSSY_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.INFESTED_CRACKED_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.INFESTED_CHISELED_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.INFESTED_COBBLESTONE, 0);
MATERIAL_FLAGS.put(Material.STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.MOSSY_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.CRACKED_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.CHISELED_STONE_BRICKS, 0);
MATERIAL_FLAGS.put(Material.BROWN_MUSHROOM_BLOCK, 0);
MATERIAL_FLAGS.put(Material.RED_MUSHROOM_BLOCK, 0);
MATERIAL_FLAGS.put(Material.IRON_BARS, 0);
MATERIAL_FLAGS.put(Material.GLASS_PANE, 0);
MATERIAL_FLAGS.put(Material.MELON, 0);
MATERIAL_FLAGS.put(Material.PUMPKIN_STEM, 0); MATERIAL_FLAGS.put(Material.PUMPKIN_STEM, 0);
MATERIAL_FLAGS.put(Material.MELON_STEM, 0); MATERIAL_FLAGS.put(Material.MELON_STEM, 0);
MATERIAL_FLAGS.put(Material.VINE, 0); MATERIAL_FLAGS.put(Material.VINE, 0);
MATERIAL_FLAGS.put(Material.FENCE_GATE, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.SPRUCE_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.ACACIA_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BIRCH_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.DARK_OAK_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.JUNGLE_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.OAK_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BRICK_STAIRS, 0); MATERIAL_FLAGS.put(Material.BRICK_STAIRS, 0);
MATERIAL_FLAGS.put(Material.MYCEL, 0); MATERIAL_FLAGS.put(Material.MYCELIUM, 0);
MATERIAL_FLAGS.put(Material.WATER_LILY, 0); MATERIAL_FLAGS.put(Material.LILY_PAD, 0);
MATERIAL_FLAGS.put(Material.NETHER_BRICK, 0); MATERIAL_FLAGS.put(Material.NETHER_BRICK, 0);
MATERIAL_FLAGS.put(Material.NETHER_FENCE, 0); MATERIAL_FLAGS.put(Material.NETHER_BRICK_FENCE, 0);
MATERIAL_FLAGS.put(Material.NETHER_BRICK_STAIRS, 0); MATERIAL_FLAGS.put(Material.NETHER_BRICK_STAIRS, 0);
MATERIAL_FLAGS.put(Material.NETHER_WARTS, 0);
MATERIAL_FLAGS.put(Material.ENCHANTING_TABLE, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.ENCHANTING_TABLE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BREWING_STAND, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.BREWING_STAND, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CAULDRON, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.CAULDRON, MODIFIED_ON_RIGHT);
@ -211,9 +237,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.BEACON, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.BEACON, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.COBBLESTONE_WALL, 0); MATERIAL_FLAGS.put(Material.COBBLESTONE_WALL, 0);
MATERIAL_FLAGS.put(Material.FLOWER_POT, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.FLOWER_POT, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CARROT, 0);
MATERIAL_FLAGS.put(Material.POTATO, 0);
MATERIAL_FLAGS.put(Material.WOOD_BUTTON, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.ANVIL, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.ANVIL, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.TRAPPED_CHEST, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.TRAPPED_CHEST, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.HEAVY_WEIGHTED_PRESSURE_PLATE, 0); MATERIAL_FLAGS.put(Material.HEAVY_WEIGHTED_PRESSURE_PLATE, 0);
@ -227,15 +250,17 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.QUARTZ_STAIRS, 0); MATERIAL_FLAGS.put(Material.QUARTZ_STAIRS, 0);
MATERIAL_FLAGS.put(Material.ACTIVATOR_RAIL, 0); MATERIAL_FLAGS.put(Material.ACTIVATOR_RAIL, 0);
MATERIAL_FLAGS.put(Material.DROPPER, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.DROPPER, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.STAINED_CLAY, 0); // MATERIAL_FLAGS.put(Material.STAINED_CLAY, 0);
MATERIAL_FLAGS.put(Material.STAINED_GLASS_PANE, 0); // MATERIAL_FLAGS.put(Material.STAINED_GLASS_PANE, 0);
MATERIAL_FLAGS.put(Material.ACACIA_STAIRS, 0); MATERIAL_FLAGS.put(Material.ACACIA_STAIRS, 0);
MATERIAL_FLAGS.put(Material.DARK_OAK_STAIRS, 0); MATERIAL_FLAGS.put(Material.DARK_OAK_STAIRS, 0);
MATERIAL_FLAGS.put(Material.HAY_BLOCK, 0); MATERIAL_FLAGS.put(Material.HAY_BLOCK, 0);
MATERIAL_FLAGS.put(Material.HARD_CLAY, 0); // MATERIAL_FLAGS.put(Material.HARD_CLAY, 0);
MATERIAL_FLAGS.put(Material.COAL_BLOCK, 0); MATERIAL_FLAGS.put(Material.COAL_BLOCK, 0);
MATERIAL_FLAGS.put(Material.PACKED_ICE, 0); MATERIAL_FLAGS.put(Material.PACKED_ICE, 0);
MATERIAL_FLAGS.put(Material.DOUBLE_PLANT, 0); MATERIAL_FLAGS.put(Material.TALL_GRASS, 0);
MATERIAL_FLAGS.put(Material.TALL_SEAGRASS, 0);
MATERIAL_FLAGS.put(Material.LARGE_FERN, 0);
MATERIAL_FLAGS.put(Material.PRISMARINE, 0); MATERIAL_FLAGS.put(Material.PRISMARINE, 0);
MATERIAL_FLAGS.put(Material.SEA_LANTERN, 0); MATERIAL_FLAGS.put(Material.SEA_LANTERN, 0);
@ -243,11 +268,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.IRON_TRAPDOOR, 0); MATERIAL_FLAGS.put(Material.IRON_TRAPDOOR, 0);
MATERIAL_FLAGS.put(Material.RED_SANDSTONE, 0); MATERIAL_FLAGS.put(Material.RED_SANDSTONE, 0);
MATERIAL_FLAGS.put(Material.RED_SANDSTONE_STAIRS, 0); MATERIAL_FLAGS.put(Material.RED_SANDSTONE_STAIRS, 0);
MATERIAL_FLAGS.put(Material.SPRUCE_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BIRCH_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.JUNGLE_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.DARK_OAK_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.ACACIA_FENCE_GATE, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.SPRUCE_FENCE, 0); MATERIAL_FLAGS.put(Material.SPRUCE_FENCE, 0);
MATERIAL_FLAGS.put(Material.BIRCH_FENCE, 0); MATERIAL_FLAGS.put(Material.BIRCH_FENCE, 0);
MATERIAL_FLAGS.put(Material.JUNGLE_FENCE, 0); MATERIAL_FLAGS.put(Material.JUNGLE_FENCE, 0);
@ -280,12 +300,37 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.RED_NETHER_BRICKS, 0); MATERIAL_FLAGS.put(Material.RED_NETHER_BRICKS, 0);
MATERIAL_FLAGS.put(Material.BONE_BLOCK, 0); MATERIAL_FLAGS.put(Material.BONE_BLOCK, 0);
MATERIAL_FLAGS.put(Material.STRUCTURE_VOID, 0); MATERIAL_FLAGS.put(Material.STRUCTURE_VOID, 0);
for (Material m : shulkerBoxes) {
MATERIAL_FLAGS.put(m, MODIFIED_ON_RIGHT);
}
// 1.12 // 1.12
MATERIAL_FLAGS.put(Material.CONCRETE, 0); MATERIAL_FLAGS.put(Material.BLACK_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.CONCRETE_POWDER, 0); MATERIAL_FLAGS.put(Material.BLUE_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.BROWN_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.CYAN_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.GRAY_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.GREEN_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.LIGHT_BLUE_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.LIGHT_GRAY_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.LIME_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.MAGENTA_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.ORANGE_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.PINK_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.PURPLE_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.RED_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.WHITE_CONCRETE, 0);
MATERIAL_FLAGS.put(Material.BLACK_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.BLUE_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.BROWN_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.CYAN_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.GRAY_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.GREEN_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.LIGHT_BLUE_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.LIGHT_GRAY_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.LIME_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.MAGENTA_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.ORANGE_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.PINK_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.PURPLE_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.RED_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.WHITE_CONCRETE_POWDER, 0);
MATERIAL_FLAGS.put(Material.WHITE_GLAZED_TERRACOTTA, 0); MATERIAL_FLAGS.put(Material.WHITE_GLAZED_TERRACOTTA, 0);
MATERIAL_FLAGS.put(Material.ORANGE_GLAZED_TERRACOTTA, 0); MATERIAL_FLAGS.put(Material.ORANGE_GLAZED_TERRACOTTA, 0);
@ -344,7 +389,7 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.DIAMOND_HOE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.DIAMOND_HOE, MODIFIES_BLOCKS);
MATERIAL_FLAGS.put(Material.GOLDEN_HOE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.GOLDEN_HOE, MODIFIES_BLOCKS);
MATERIAL_FLAGS.put(Material.WHEAT_SEEDS, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.WHEAT_SEEDS, MODIFIES_BLOCKS);
MATERIAL_FLAGS.put(Material.WHEAT, 0); // MATERIAL_FLAGS.put(Material.WHEAT_CROPS, 0); // Where is this?
MATERIAL_FLAGS.put(Material.BREAD, 0); MATERIAL_FLAGS.put(Material.BREAD, 0);
MATERIAL_FLAGS.put(Material.LEATHER_HELMET, 0); MATERIAL_FLAGS.put(Material.LEATHER_HELMET, 0);
MATERIAL_FLAGS.put(Material.LEATHER_CHESTPLATE, 0); MATERIAL_FLAGS.put(Material.LEATHER_CHESTPLATE, 0);
@ -371,7 +416,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.COOKED_PORKCHOP, 0); MATERIAL_FLAGS.put(Material.COOKED_PORKCHOP, 0);
MATERIAL_FLAGS.put(Material.PAINTING, 0); MATERIAL_FLAGS.put(Material.PAINTING, 0);
MATERIAL_FLAGS.put(Material.GOLDEN_APPLE, 0); MATERIAL_FLAGS.put(Material.GOLDEN_APPLE, 0);
MATERIAL_FLAGS.put(Material.SIGN, 0);
MATERIAL_FLAGS.put(Material.BUCKET, 0); MATERIAL_FLAGS.put(Material.BUCKET, 0);
MATERIAL_FLAGS.put(Material.WATER_BUCKET, 0); MATERIAL_FLAGS.put(Material.WATER_BUCKET, 0);
MATERIAL_FLAGS.put(Material.LAVA_BUCKET, 0); MATERIAL_FLAGS.put(Material.LAVA_BUCKET, 0);
@ -383,7 +427,7 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.LEATHER, 0); MATERIAL_FLAGS.put(Material.LEATHER, 0);
MATERIAL_FLAGS.put(Material.MILK_BUCKET, 0); MATERIAL_FLAGS.put(Material.MILK_BUCKET, 0);
MATERIAL_FLAGS.put(Material.BRICK, 0); MATERIAL_FLAGS.put(Material.BRICKS, 0);
MATERIAL_FLAGS.put(Material.CLAY_BALL, 0); MATERIAL_FLAGS.put(Material.CLAY_BALL, 0);
MATERIAL_FLAGS.put(Material.SUGAR_CANE, 0); MATERIAL_FLAGS.put(Material.SUGAR_CANE, 0);
MATERIAL_FLAGS.put(Material.PAPER, 0); MATERIAL_FLAGS.put(Material.PAPER, 0);
@ -412,27 +456,10 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.COCOA_BEANS, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.COCOA_BEANS, MODIFIES_BLOCKS);
MATERIAL_FLAGS.put(Material.BONE, 0); MATERIAL_FLAGS.put(Material.BONE, 0);
MATERIAL_FLAGS.put(Material.SUGAR, 0); MATERIAL_FLAGS.put(Material.SUGAR, 0);
MATERIAL_FLAGS.put(Material.CAKE, 0);
MATERIAL_FLAGS.put(Material.BLACK_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BLUE_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.BROWN_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.CYAN_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.GRAY_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.GREEN_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.LIGHT_BLUE_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.LIGHT_GRAY_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.LIME_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.MAGENTA_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.ORANGE_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.PINK_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.PURPLE_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.RED_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.WHITE_BED, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.REPEATER, 0);
MATERIAL_FLAGS.put(Material.COOKIE, 0); MATERIAL_FLAGS.put(Material.COOKIE, 0);
MATERIAL_FLAGS.put(Material.MAP, 0); MATERIAL_FLAGS.put(Material.MAP, 0);
MATERIAL_FLAGS.put(Material.SHEARS, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.SHEARS, MODIFIES_BLOCKS);
MATERIAL_FLAGS.put(Material.MELON, 0); MATERIAL_FLAGS.put(Material.MELON_SLICE, 0);
MATERIAL_FLAGS.put(Material.PUMPKIN_SEEDS, 0); MATERIAL_FLAGS.put(Material.PUMPKIN_SEEDS, 0);
MATERIAL_FLAGS.put(Material.MELON_SEEDS, 0); MATERIAL_FLAGS.put(Material.MELON_SEEDS, 0);
MATERIAL_FLAGS.put(Material.BEEF, 0); MATERIAL_FLAGS.put(Material.BEEF, 0);
@ -444,25 +471,21 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.BLAZE_ROD, 0); MATERIAL_FLAGS.put(Material.BLAZE_ROD, 0);
MATERIAL_FLAGS.put(Material.GHAST_TEAR, 0); MATERIAL_FLAGS.put(Material.GHAST_TEAR, 0);
MATERIAL_FLAGS.put(Material.GOLD_NUGGET, 0); MATERIAL_FLAGS.put(Material.GOLD_NUGGET, 0);
MATERIAL_FLAGS.put(Material.NETHER_WART_BLOCK, 0); MATERIAL_FLAGS.put(Material.NETHER_WART, 0);
MATERIAL_FLAGS.put(Material.POTION, 0); MATERIAL_FLAGS.put(Material.POTION, 0);
MATERIAL_FLAGS.put(Material.GLASS_BOTTLE, 0); MATERIAL_FLAGS.put(Material.GLASS_BOTTLE, 0);
MATERIAL_FLAGS.put(Material.SPIDER_EYE, 0); MATERIAL_FLAGS.put(Material.SPIDER_EYE, 0);
MATERIAL_FLAGS.put(Material.FERMENTED_SPIDER_EYE, 0); MATERIAL_FLAGS.put(Material.FERMENTED_SPIDER_EYE, 0);
MATERIAL_FLAGS.put(Material.BLAZE_POWDER, 0); MATERIAL_FLAGS.put(Material.BLAZE_POWDER, 0);
MATERIAL_FLAGS.put(Material.MAGMA_CREAM, 0); MATERIAL_FLAGS.put(Material.MAGMA_CREAM, 0);
MATERIAL_FLAGS.put(Material.BREWING_STAND, 0);
MATERIAL_FLAGS.put(Material.CAULDRON, 0);
MATERIAL_FLAGS.put(Material.ENDER_EYE, 0); MATERIAL_FLAGS.put(Material.ENDER_EYE, 0);
MATERIAL_FLAGS.put(Material.GLISTERING_MELON_SLICE, 0); MATERIAL_FLAGS.put(Material.GLISTERING_MELON_SLICE, 0);
MATERIAL_FLAGS.put(Material.MONSTER_EGG, 0);
MATERIAL_FLAGS.put(Material.EXPERIENCE_BOTTLE, 0); MATERIAL_FLAGS.put(Material.EXPERIENCE_BOTTLE, 0);
MATERIAL_FLAGS.put(Material.FIRE_CHARGE, 0); MATERIAL_FLAGS.put(Material.FIRE_CHARGE, 0);
MATERIAL_FLAGS.put(Material.WRITABLE_BOOK, 0); MATERIAL_FLAGS.put(Material.WRITABLE_BOOK, 0);
MATERIAL_FLAGS.put(Material.WRITTEN_BOOK, 0); MATERIAL_FLAGS.put(Material.WRITTEN_BOOK, 0);
MATERIAL_FLAGS.put(Material.EMERALD, 0); MATERIAL_FLAGS.put(Material.EMERALD, 0);
MATERIAL_FLAGS.put(Material.ITEM_FRAME, 0); MATERIAL_FLAGS.put(Material.ITEM_FRAME, 0);
MATERIAL_FLAGS.put(Material.FLOWER_POT, 0);
MATERIAL_FLAGS.put(Material.CARROT, 0); MATERIAL_FLAGS.put(Material.CARROT, 0);
MATERIAL_FLAGS.put(Material.POTATO, 0); MATERIAL_FLAGS.put(Material.POTATO, 0);
MATERIAL_FLAGS.put(Material.BAKED_POTATO, 0); MATERIAL_FLAGS.put(Material.BAKED_POTATO, 0);
@ -487,7 +510,6 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.FIREWORK_ROCKET, 0); MATERIAL_FLAGS.put(Material.FIREWORK_ROCKET, 0);
MATERIAL_FLAGS.put(Material.FIREWORK_STAR, 0); MATERIAL_FLAGS.put(Material.FIREWORK_STAR, 0);
MATERIAL_FLAGS.put(Material.ENCHANTED_BOOK, 0); MATERIAL_FLAGS.put(Material.ENCHANTED_BOOK, 0);
MATERIAL_FLAGS.put(Material.COMPARATOR, 0);
MATERIAL_FLAGS.put(Material.NETHER_BRICKS, 0); MATERIAL_FLAGS.put(Material.NETHER_BRICKS, 0);
MATERIAL_FLAGS.put(Material.QUARTZ, 0); MATERIAL_FLAGS.put(Material.QUARTZ, 0);
MATERIAL_FLAGS.put(Material.TNT_MINECART, 0); MATERIAL_FLAGS.put(Material.TNT_MINECART, 0);
@ -540,9 +562,14 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.MUSIC_DISC_WAIT, 0); MATERIAL_FLAGS.put(Material.MUSIC_DISC_WAIT, 0);
MATERIAL_FLAGS.put(Material.MUSIC_DISC_WARD, 0); MATERIAL_FLAGS.put(Material.MUSIC_DISC_WARD, 0);
// Fake tags
for (Material m : shulkerBoxes) {
MATERIAL_FLAGS.put(m, MODIFIED_ON_RIGHT);
}
// Generated via tag // Generated via tag
for (Material door : Tag.DOORS.getValues()) { for (Material door : Tag.DOORS.getValues()) {
MATERIAL_FLAGS.put(door, 0); MATERIAL_FLAGS.put(door, MODIFIED_ON_RIGHT);
} }
for (Material boat : Tag.ITEMS_BOATS.getValues()) { for (Material boat : Tag.ITEMS_BOATS.getValues()) {
MATERIAL_FLAGS.put(boat, 0); MATERIAL_FLAGS.put(boat, 0);
@ -574,6 +601,26 @@ public final class Materials {
for (Material wool : Tag.WOOL.getValues()) { for (Material wool : Tag.WOOL.getValues()) {
MATERIAL_FLAGS.put(wool, 0); MATERIAL_FLAGS.put(wool, 0);
} }
for (Material plate : Tag.WOODEN_PRESSURE_PLATES.getValues()) {
MATERIAL_FLAGS.put(plate, 0);
}
for (Material button : Tag.BUTTONS.getValues()) {
MATERIAL_FLAGS.put(button, MODIFIED_ON_RIGHT);
}
// Check for missing items/blocks
for (Material material : Material.values()) {
// Add spawn eggs
if (isSpawnEgg(material)) {
MATERIAL_FLAGS.put(material, 0);
} else if (isBed(material)) {
MATERIAL_FLAGS.put(material, MODIFIED_ON_RIGHT);
}
if (!MATERIAL_FLAGS.containsKey(material)) {
logger.fine("Missing item definition for " + material.getKey().toString());
MATERIAL_FLAGS.put(material, 0);
}
}
//DAMAGE_EFFECTS.add(PotionEffectType.ABSORPTION); //DAMAGE_EFFECTS.add(PotionEffectType.ABSORPTION);
DAMAGE_EFFECTS.add(PotionEffectType.BLINDNESS); DAMAGE_EFFECTS.add(PotionEffectType.BLINDNESS);
@ -766,6 +813,88 @@ public static boolean isInventoryBlock(Material material) {
|| shulkerBoxes.contains(material); || shulkerBoxes.contains(material);
} }
public static boolean isSpawnEgg(Material material) {
switch(material) {
case SPIDER_SPAWN_EGG:
case BAT_SPAWN_EGG:
case BLAZE_SPAWN_EGG:
case CAVE_SPIDER_SPAWN_EGG:
case CHICKEN_SPAWN_EGG:
case COD_SPAWN_EGG:
case COW_SPAWN_EGG:
case CREEPER_SPAWN_EGG:
case DOLPHIN_SPAWN_EGG:
case DONKEY_SPAWN_EGG:
case DROWNED_SPAWN_EGG:
case ELDER_GUARDIAN_SPAWN_EGG:
case ENDERMAN_SPAWN_EGG:
case ENDERMITE_SPAWN_EGG:
case EVOKER_SPAWN_EGG:
case GHAST_SPAWN_EGG:
case GUARDIAN_SPAWN_EGG:
case HORSE_SPAWN_EGG:
case HUSK_SPAWN_EGG:
case LLAMA_SPAWN_EGG:
case MAGMA_CUBE_SPAWN_EGG:
case MOOSHROOM_SPAWN_EGG:
case MULE_SPAWN_EGG:
case OCELOT_SPAWN_EGG:
case PARROT_SPAWN_EGG:
case PHANTOM_SPAWN_EGG:
case PIG_SPAWN_EGG:
case POLAR_BEAR_SPAWN_EGG:
case PUFFERFISH_SPAWN_EGG:
case RABBIT_SPAWN_EGG:
case SALMON_SPAWN_EGG:
case SHEEP_SPAWN_EGG:
case SHULKER_SPAWN_EGG:
case SILVERFISH_SPAWN_EGG:
case SKELETON_HORSE_SPAWN_EGG:
case SKELETON_SPAWN_EGG:
case SLIME_SPAWN_EGG:
case SQUID_SPAWN_EGG:
case STRAY_SPAWN_EGG:
case TROPICAL_FISH_SPAWN_EGG:
case TURTLE_SPAWN_EGG:
case VEX_SPAWN_EGG:
case VILLAGER_SPAWN_EGG:
case VINDICATOR_SPAWN_EGG:
case WITCH_SPAWN_EGG:
case WITHER_SKELETON_SPAWN_EGG:
case WOLF_SPAWN_EGG:
case ZOMBIE_HORSE_SPAWN_EGG:
case ZOMBIE_PIGMAN_SPAWN_EGG:
case ZOMBIE_SPAWN_EGG:
case ZOMBIE_VILLAGER_SPAWN_EGG:
return true;
default:
return false;
}
}
public static boolean isBed(Material material) {
switch (material) {
case BLACK_BED:
case BLUE_BED:
case BROWN_BED:
case CYAN_BED:
case GRAY_BED:
case GREEN_BED:
case LIGHT_BLUE_BED:
case LIGHT_GRAY_BED:
case LIME_BED:
case MAGENTA_BED:
case ORANGE_BED:
case PINK_BED:
case PURPLE_BED:
case RED_BED:
case WHITE_BED:
return true;
default:
return false;
}
}
/** /**
* Test whether the given material is affected by * Test whether the given material is affected by
* {@link Flags#USE}. * {@link Flags#USE}.

View File

@ -19,9 +19,11 @@
package com.sk89q.worldguard.bukkit.util.report; package com.sk89q.worldguard.bukkit.util.report;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.blacklist.Blacklist; import com.sk89q.worldguard.blacklist.Blacklist;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.util.report.DataReport; import com.sk89q.worldguard.util.report.DataReport;
@ -39,10 +41,11 @@ public ConfigReport(WorldGuardPlugin plugin) {
List<World> worlds = Bukkit.getServer().getWorlds(); List<World> worlds = Bukkit.getServer().getWorlds();
append("Configuration", new ShallowObjectReport("Configuration", plugin.getGlobalStateManager())); append("Configuration", new ShallowObjectReport("Configuration", WorldGuard.getInstance().getPlatform().getGlobalStateManager()));
for (World world : worlds) { for (World world : worlds) {
BukkitWorldConfiguration config = plugin.getGlobalStateManager().get(world); com.sk89q.worldedit.world.World weWorld = BukkitAdapter.adapt(world);
WorldConfiguration config = WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(weWorld);
DataReport report = new DataReport("World: " + world.getName()); DataReport report = new DataReport("World: " + world.getName());
report.append("UUID", world.getUID()); report.append("UUID", world.getUID());
@ -58,7 +61,7 @@ public ConfigReport(WorldGuardPlugin plugin) {
report.append("Blacklist", "<Disabled>"); report.append("Blacklist", "<Disabled>");
} }
RegionManager regions = plugin.getRegionContainer().get(world); RegionManager regions = WorldGuard.getInstance().getPlatform().getRegionContainer().get(weWorld);
if (regions != null) { if (regions != null) {
DataReport section = new DataReport("Regions"); DataReport section = new DataReport("Regions");
section.append("Region Count", regions.size()); section.append("Region Count", regions.size());

View File

@ -19,7 +19,6 @@
package com.sk89q.worldguard.bukkit.util.report; package com.sk89q.worldguard.bukkit.util.report;
import com.sk89q.worldguard.bukkit.BukkitUtil;
import com.sk89q.worldguard.util.report.DataReport; import com.sk89q.worldguard.util.report.DataReport;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Server; import org.bukkit.Server;
@ -35,7 +34,7 @@ public ServerReport() {
append("Server Name", server.getServerName()); append("Server Name", server.getServerName());
append("Bukkit Version", server.getBukkitVersion()); append("Bukkit Version", server.getBukkitVersion());
append("Implementation", server.getVersion()); append("Implementation", server.getVersion());
append("Player Count", "%d/%d", BukkitUtil.getOnlinePlayers().size(), server.getMaxPlayers()); append("Player Count", "%d/%d", Bukkit.getOnlinePlayers().size(), server.getMaxPlayers());
append("Server Class Source", server.getClass().getProtectionDomain().getCodeSource().getLocation()); append("Server Class Source", server.getClass().getProtectionDomain().getCodeSource().getLocation());

View File

@ -24,18 +24,11 @@
import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.bukkit.BukkitRegionContainer; import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.internal.platform.WorldGuardPlatform; import com.sk89q.worldguard.internal.platform.WorldGuardPlatform;
import com.sk89q.worldguard.protection.association.RegionAssociable; import com.sk89q.worldguard.protection.association.RegionAssociable;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;
/** /**
* This is the legacy class for accessing region data. * This is the legacy class for accessing region data.
@ -45,96 +38,13 @@
@Deprecated @Deprecated
public class GlobalRegionManager { public class GlobalRegionManager {
private final BukkitRegionContainer container;
/** /**
* Create a new instance. * Create a new instance.
* *
* @param container the container * @param container the container
*/ */
public GlobalRegionManager(BukkitRegionContainer container) { public GlobalRegionManager(RegionContainer container) {
checkNotNull(container); checkNotNull(container);
this.container = container;
}
/**
* Get the region manager for a world if one exists.
*
* <p>This method may return {@code null} if region data for the given
* world has not been loaded, has failed to load, or support for regions
* has been disabled.</p>
*
* @param world the world
* @return a region manager, or {@code null} if one is not available
*/
@Nullable
public RegionManager get(World world) {
return container.get(world);
}
/**
* Get an immutable list of loaded {@link RegionManager}s.
*
* @return a list of managers
*/
public List<RegionManager> getLoaded() {
return Collections.unmodifiableList(container.getLoaded());
}
/**
* Create a new region query.
*
* @return a new query
*/
private RegionQuery createQuery() {
return container.createQuery();
}
/**
* Test whether the given player has region protection bypass permission.
*
* @param player the player
* @param world the world
* @return true if a bypass is permitted
* @deprecated use {@link BukkitRegionContainer#createQuery()}
*/
@Deprecated
public boolean hasBypass(LocalPlayer player, World world) {
return player.hasPermission("worldguard.region.bypass." + world.getName());
}
/**
* Test whether the player can build (place, use, destroy blocks and
* entities) at the given position, considering only the build flag
* and the region's members.
*
* <p>This method is not an absolute test as to whether WorldGuard
* would allow or block an event because this method doesn't
* consider flags (i.e. chest-access flags when concerning a chest) or
* other modules in WorldGuard (i.e chest protection).</p>
*
* @param player the player
* @param location the location
* @return true if a bypass is permitted
* @deprecated use {@link BukkitRegionContainer#createQuery()}
*/
@Deprecated
public boolean canBuild(LocalPlayer player, Location location) {
return hasBypass(player, (World) location.getExtent()) || createQuery().testState(location, player, Flags.BUILD);
}
/**
* Test whether the player can place blocks at the given position.
*
* @param player the player
* @param location the location
* @return true if permitted
* @deprecated the construct flag is being removed
*/
@Deprecated
public boolean canConstruct(LocalPlayer player, Location location) {
return canBuild(player, location);
} }
/** /**
@ -143,31 +53,11 @@ public boolean canConstruct(LocalPlayer player, Location location) {
* @param flag the flag * @param flag the flag
* @param location the location * @param location the location
* @return true if set to true * @return true if set to true
* @deprecated use {@link BukkitRegionContainer#createQuery()} * @deprecated use {@link RegionContainer#createQuery()}
*/ */
@Deprecated @Deprecated
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public boolean allows(StateFlag flag, Location location) { public boolean allows(StateFlag flag, Location location) {
return allows(flag, location, null); return StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().queryState(location, (RegionAssociable) null, flag));
} }
/**
* Test the value of a state flag at a location, using the player as the
* relevant actor.
*
* @param flag the flag
* @param location the location
* @param player the actor
* @return true if set to true
* @deprecated use {@link BukkitRegionContainer#createQuery()}
*/
@Deprecated
public boolean allows(StateFlag flag, Location location, @Nullable LocalPlayer player) {
if (player == null) {
return StateFlag.test(createQuery().queryState(location, (RegionAssociable) null, flag));
} else {
return StateFlag.test(createQuery().queryState(location, player, flag));
}
}
} }

View File

@ -2,3 +2,4 @@ name: WorldGuard
main: com.sk89q.worldguard.bukkit.WorldGuardPlugin main: com.sk89q.worldguard.bukkit.WorldGuardPlugin
version: "${project.internalVersion}" version: "${project.internalVersion}"
softdepend: [WorldEdit, CommandBook] softdepend: [WorldEdit, CommandBook]
api-version: 1.13

View File

@ -20,17 +20,27 @@
package com.sk89q.worldguard; package com.sk89q.worldguard;
import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.extent.inventory.BlockBag;
import com.sk89q.worldedit.session.SessionKey;
import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.weather.WeatherType;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import javax.annotation.Nullable;
@org.junit.Ignore @org.junit.Ignore
public class TestPlayer extends LocalPlayer { public class TestPlayer extends LocalPlayer {
private final UUID uuid = UUID.randomUUID(); private final UUID uuid = UUID.randomUUID();
private final String name; private final String name;
private final Set<String> groups = new HashSet<String>(); private final Set<String> groups = new HashSet<>();
public TestPlayer(String name) { public TestPlayer(String name) {
this.name = name; this.name = name;
@ -55,11 +65,6 @@ public boolean hasGroup(String group) {
return groups.contains(group.toLowerCase()); return groups.contains(group.toLowerCase());
} }
@Override
public Vector getPosition() {
return new Vector(0, 0, 0);
}
@Override @Override
public void kick(String msg) { public void kick(String msg) {
System.out.println("TestPlayer{" + this.name + "} kicked!"); System.out.println("TestPlayer{" + this.name + "} kicked!");
@ -70,11 +75,96 @@ public void ban(String msg) {
System.out.println("TestPlayer{" + this.name + "} banned!"); System.out.println("TestPlayer{" + this.name + "} banned!");
} }
@Override
public double getHealth() {
return 0;
}
@Override
public void setHealth(double health) {
}
@Override
public double getMaxHealth() {
return 0;
}
@Override
public double getFoodLevel() {
return 0;
}
@Override
public void setFoodLevel(double foodLevel) {
}
@Override
public double getSaturation() {
return 0;
}
@Override
public void setSaturation(double saturation) {
}
@Override
public WeatherType getPlayerWeather() {
return null;
}
@Override
public void setPlayerWeather(WeatherType weather) {
}
@Override
public void resetPlayerWeather() {
}
@Override
public boolean isPlayerTimeRelative() {
return false;
}
@Override
public long getPlayerTimeOffset() {
return 0;
}
@Override
public void setPlayerTime(long time, boolean relative) {
}
@Override
public void resetPlayerTime() {
}
@Override @Override
public void printRaw(String msg) { public void printRaw(String msg) {
System.out.println("-> TestPlayer{" + this.name + "}: " + msg); System.out.println("-> TestPlayer{" + this.name + "}: " + msg);
} }
@Override
public void printDebug(String msg) {
}
@Override
public void print(String msg) {
}
@Override
public void printError(String msg) {
}
@Override @Override
public String[] getGroups() { public String[] getGroups() {
return groups.toArray(new String[groups.size()]); return groups.toArray(new String[groups.size()]);
@ -84,4 +174,51 @@ public String[] getGroups() {
public boolean hasPermission(String perm) { public boolean hasPermission(String perm) {
return true; return true;
} }
@Override
public World getWorld() {
return null;
}
@Override
public BaseItemStack getItemInHand(HandSide handSide) {
return null;
}
@Override
public void giveItem(BaseItemStack itemStack) {
}
@Override
public BlockBag getInventoryBlockBag() {
return null;
}
@Override
public void setPosition(Vector pos, float pitch, float yaw) {
}
@Nullable
@Override
public BaseEntity getState() {
return null;
}
@Override
public Location getLocation() {
return null;
}
@Override
public SessionKey getSessionKey() {
return null;
}
@Nullable
@Override
public <T> T getFacet(Class<? extends T> cls) {
return null;
}
} }

View File

@ -22,6 +22,7 @@
import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.Vector;
import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.TestPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.RegionGroup; import com.sk89q.worldguard.protection.flags.RegionGroup;
@ -56,8 +57,7 @@ public abstract class RegionEntryExitTest {
TestPlayer builderPlayer; TestPlayer builderPlayer;
protected FlagRegistry getFlagRegistry() { protected FlagRegistry getFlagRegistry() {
FlagRegistry registry = new SimpleFlagRegistry(); return WorldGuard.getInstance().getFlagRegistry();
return registry;
} }
protected abstract RegionManager createRegionManager() throws Exception; protected abstract RegionManager createRegionManager() throws Exception;

View File

@ -23,6 +23,7 @@
import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldedit.BlockVector2D;
import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.Vector;
import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.TestPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag;
@ -61,9 +62,7 @@ public abstract class RegionOverlapTest {
TestPlayer player2; TestPlayer player2;
protected FlagRegistry getFlagRegistry() { protected FlagRegistry getFlagRegistry() {
FlagRegistry registry = new SimpleFlagRegistry(); return WorldGuard.getInstance().getFlagRegistry();
registry.registerAll(Flags.getDefaultFlags());
return registry;
} }
protected abstract RegionManager createRegionManager() throws Exception; protected abstract RegionManager createRegionManager() throws Exception;

View File

@ -23,6 +23,7 @@
import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldedit.BlockVector2D;
import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.Vector;
import com.sk89q.worldguard.TestPlayer; import com.sk89q.worldguard.TestPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.domains.DefaultDomain; import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.flags.StateFlag;
@ -59,9 +60,7 @@ public abstract class RegionPriorityTest {
TestPlayer player2; TestPlayer player2;
protected FlagRegistry getFlagRegistry() { protected FlagRegistry getFlagRegistry() {
FlagRegistry registry = new SimpleFlagRegistry(); return WorldGuard.getInstance().getFlagRegistry();
registry.registerAll(Flags.getDefaultFlags());
return registry;
} }
protected abstract RegionManager createRegionManager() throws Exception; protected abstract RegionManager createRegionManager() throws Exception;