From 7593e1a01c648718f405ca0a9a45d9d67283a705 Mon Sep 17 00:00:00 2001 From: wizjany Date: Mon, 20 May 2019 23:48:50 -0400 Subject: [PATCH] Initial update to 1.14. --- worldguard-bukkit/build.gradle | 2 +- .../listener/BlockStateAsBlockFunction.java | 8 +- .../listener/ChestProtectionListener.java | 11 +- .../listener/EventAbstractionListener.java | 55 ++-- .../bukkit/listener/RegionFlagsListener.java | 19 +- .../listener/WorldGuardEntityListener.java | 58 +++- .../listener/WorldGuardPlayerListener.java | 71 +---- .../worldguard/bukkit/util/Materials.java | 250 ++++++++++-------- .../bukkit/util/report/ServerReport.java | 7 +- .../worldguard/protection/flags/Flags.java | 1 + 10 files changed, 235 insertions(+), 247 deletions(-) diff --git a/worldguard-bukkit/build.gradle b/worldguard-bukkit/build.gradle index cbb4f7d4..c45453e7 100644 --- a/worldguard-bukkit/build.gradle +++ b/worldguard-bukkit/build.gradle @@ -10,7 +10,7 @@ dependencies { compile project(path: ':worldguard-core', configuration: 'shadow') - api 'org.bukkit:bukkit:1.13-R0.1-SNAPSHOT' + api 'org.bukkit:bukkit:1.14.2-R0.1-SNAPSHOT' api ('com.sk89q.worldedit:worldedit-bukkit:7.0.1-SNAPSHOT') { exclude group: 'io.papermc', module: 'paperlib' } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockStateAsBlockFunction.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockStateAsBlockFunction.java index 9d1de712..e72350df 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockStateAsBlockFunction.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/BlockStateAsBlockFunction.java @@ -19,16 +19,16 @@ package com.sk89q.worldguard.bukkit.listener; -import com.google.common.base.Function; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import javax.annotation.Nullable; -class BlockStateAsBlockFunction implements Function { +final class BlockStateAsBlockFunction { + private BlockStateAsBlockFunction() { + } - @Override - public Block apply(@Nullable BlockState blockState) { + static Block apply(@Nullable BlockState blockState) { return blockState != null ? blockState.getBlock() : null; } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java index 974863b0..5511afcc 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/ChestProtectionListener.java @@ -29,6 +29,7 @@ import com.sk89q.worldguard.bukkit.event.block.UseBlockEvent; import org.bukkit.ChatColor; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.SignChangeEvent; @@ -135,7 +136,7 @@ public void onSignChange(SignChangeEvent event) { BukkitWorldConfiguration wcfg = (BukkitWorldConfiguration) getWorldConfig(WorldGuardPlugin.inst().wrapPlayer(player)); if (wcfg.signChestProtection) { - if (event.getLine(0).equalsIgnoreCase("[Lock]")) { + if ("[Lock]".equalsIgnoreCase(event.getLine(0))) { if (wcfg.isChestProtectedPlacement(BukkitAdapter.adapt(event.getBlock().getLocation()), WorldGuardPlugin.inst().wrapPlayer(player))) { player.sendMessage(ChatColor.DARK_RED + "You do not own the adjacent chest."); event.getBlock().breakNaturally(); @@ -143,7 +144,7 @@ public void onSignChange(SignChangeEvent event) { return; } - if (event.getBlock().getType() != Material.SIGN) { + if (!Tag.STANDING_SIGNS.isTagged(event.getBlock().getType())) { player.sendMessage(ChatColor.RED + "The [Lock] sign must be a sign post, not a wall sign."); @@ -152,7 +153,7 @@ public void onSignChange(SignChangeEvent event) { return; } - if (!event.getLine(1).equalsIgnoreCase(player.getName())) { + if (!player.getName().equalsIgnoreCase(event.getLine(1))) { player.sendMessage(ChatColor.RED + "The first owner line must be your name."); @@ -164,7 +165,7 @@ public void onSignChange(SignChangeEvent event) { Material below = event.getBlock().getRelative(0, -1, 0).getType(); if (below == Material.TNT || below == Material.SAND - || below == Material.GRAVEL || below == Material.SIGN) { + || below == Material.GRAVEL || Tag.STANDING_SIGNS.isTagged(below)) { player.sendMessage(ChatColor.RED + "That is not a safe block that you're putting this sign on."); @@ -178,7 +179,7 @@ public void onSignChange(SignChangeEvent event) { + "A chest or double chest above is now protected."); } } else if (!wcfg.disableSignChestProtectionCheck) { - if (event.getLine(0).equalsIgnoreCase("[Lock]")) { + if ("[Lock]".equalsIgnoreCase(event.getLine(0))) { player.sendMessage(ChatColor.RED + "WorldGuard's sign chest protection is disabled."); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java index 57531b95..78ead4bc 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java @@ -21,7 +21,6 @@ import static com.sk89q.worldguard.bukkit.cause.Cause.create; -import com.google.common.collect.Lists; import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; @@ -125,6 +124,7 @@ import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.player.PlayerShearEntityEvent; +import org.bukkit.event.player.PlayerTakeLecternBookEvent; import org.bukkit.event.player.PlayerUnleashEntityEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; @@ -137,6 +137,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -173,10 +174,7 @@ public void onBlockBreak(BlockBreakEvent event) { @EventHandler(ignoreCancelled = true) public void onBlockMultiPlace(BlockMultiPlaceEvent event) { - List blocks = new ArrayList<>(); - for (BlockState bs : event.getReplacedBlockStates()) { - blocks.add(bs.getBlock()); - } + List blocks = event.getReplacedBlockStates().stream().map(BlockStateAsBlockFunction::apply).collect(Collectors.toList()); Events.fireToCancel(event, new PlaceBlockEvent(event, create(event.getPlayer()), event.getBlock().getWorld(), blocks, event.getBlock().getType())); } @@ -187,7 +185,7 @@ public void onBlockPlace(BlockPlaceEvent event) { BlockState previousState = event.getBlockReplacedState(); // Some blocks, like tall grass and fire, get replaced - if (previousState.getType() != Material.AIR) { + if (previousState.getType() != Material.AIR && previousState.getType() != event.getBlockReplacedState().getType()) { Events.fireToCancel(event, new BreakBlockEvent(event, create(event.getPlayer()), previousState.getLocation(), previousState.getType())); } @@ -239,7 +237,7 @@ public void onBlockBurn(BlockBurnEvent event) { @EventHandler(ignoreCancelled = true) public void onStructureGrowEvent(StructureGrowEvent event) { int originalCount = event.getBlocks().size(); - List blockList = Lists.transform(event.getBlocks(), new BlockStateAsBlockFunction()); + List blockList = event.getBlocks().stream().map(BlockStateAsBlockFunction::apply).collect(Collectors.toList()); Player player = event.getPlayer(); if (player != null) { @@ -253,8 +251,6 @@ public void onStructureGrowEvent(StructureGrowEvent event) { } } - // TODO: Handle EntityCreatePortalEvent? - @EventHandler(ignoreCancelled = true) public void onEntityChangeBlock(EntityChangeBlockEvent event) { Block block = event.getBlock(); @@ -268,8 +264,9 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { // Fire two events: one as BREAK and one as PLACE if (event.getTo() != Material.AIR && event.getBlock().getType() != Material.AIR) { - Events.fireToCancel(event, new BreakBlockEvent(event, create(entity), block)); - Events.fireToCancel(event, new PlaceBlockEvent(event, create(entity), block.getLocation(), to)); + if (!Events.fireToCancel(event, new BreakBlockEvent(event, create(entity), block))) { + Events.fireToCancel(event, new PlaceBlockEvent(event, create(entity), block.getLocation(), to)); + } } else { if (event.getTo() == Material.AIR) { // Track the source so later we can create a proper chain of causes @@ -304,11 +301,6 @@ public void onEntityChangeBlock(EntityChangeBlockEvent event) { @EventHandler(ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent event) { Entity entity = event.getEntity(); - if (event.getYield() == 0 && event.blockList().isEmpty()) { - // avoids ender dragon spam - return; - } - Events.fireBulkEventToCancel(event, new BreakBlockEvent(event, create(entity), event.getLocation().getWorld(), event.blockList(), Material.AIR)); } @@ -626,27 +618,7 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { Events.fireToCancel(event, new SpawnEntityEvent(event, Cause.unknown(), event.getEntity())); } break; - case NATURAL: - case JOCKEY: - case CHUNK_GEN: - case SPAWNER: - case LIGHTNING: - case BUILD_SNOWMAN: - case BUILD_IRONGOLEM: - case BUILD_WITHER: - case VILLAGE_DEFENSE: - case VILLAGE_INVASION: - case BREEDING: - case SLIME_SPLIT: - case REINFORCEMENTS: - case NETHER_PORTAL: - case INFECTION: - case CURED: - case OCELOT_BABY: - case SILVERFISH_BLOCK: - case MOUNT: - case CUSTOM: - case DEFAULT: + default: } } @@ -797,7 +769,7 @@ public void onEntityUnleash(EntityUnleashEvent event) { if (event instanceof PlayerUnleashEntityEvent) { PlayerUnleashEntityEvent playerEvent = (PlayerUnleashEntityEvent) event; Events.fireToCancel(playerEvent, new UseEntityEvent(playerEvent, create(playerEvent.getPlayer()), event.getEntity())); - } // TODO: Raise anyway? + } } @EventHandler(ignoreCancelled = true) @@ -981,6 +953,13 @@ public void onBlockExplode(BlockExplodeEvent event) { Events.fireBulkEventToCancel(event, eventToFire); } + @EventHandler(ignoreCancelled = true) + public void onTakeLecternBook(PlayerTakeLecternBookEvent event) { + final UseBlockEvent useEvent = new UseBlockEvent(event, create(event.getPlayer()), event.getLectern().getBlock()); + useEvent.getRelevantFlags().add(Flags.CHEST_ACCESS); + Events.fireToCancel(event, useEvent); + } + /** * Handle the right click of a block while an item is held. * diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java index fa5bbb71..df5be57f 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java @@ -109,6 +109,10 @@ public void onBreakBlock(final BreakBlockEvent event) { if (event.getCause().find(EntityType.ENDERMAN) != null) { event.filter(testState(query, Flags.ENDER_BUILD), false); } + + if (event.getCause().find(EntityType.RAVAGER) != null) { + event.filter(testState(query, Flags.RAVAGER_RAVAGE), false); + } } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) @@ -126,21 +130,18 @@ public void onEntityDamage(EntityDamageEvent event) { return; } } else { - try { - if (entity instanceof Player && event.getCause() == DamageCause.FLY_INTO_WALL) { - LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer((Player) entity); - if (!query.testState(BukkitAdapter.adapt(entity.getLocation()), localPlayer, Flags.FALL_DAMAGE)) { - event.setCancelled(true); - return; - } + if (entity instanceof Player && event.getCause() == DamageCause.FLY_INTO_WALL) { + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer((Player) entity); + if (!query.testState(BukkitAdapter.adapt(entity.getLocation()), localPlayer, Flags.FALL_DAMAGE)) { + event.setCancelled(true); + return; } - } catch (NoSuchFieldError ignored) { } } if (event instanceof EntityDamageByEntityEvent) { Entity damager = (((EntityDamageByEntityEvent) event)).getDamager(); - if (damager != null && damager.getType() == EntityType.FIREWORK) { + if (damager.getType() == EntityType.FIREWORK) { if (!query.testState(BukkitAdapter.adapt(entity.getLocation()), (RegionAssociable) null, Flags.FIREWORK_DAMAGE)) { event.setCancelled(true); return; diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java index ffac396e..303a46d6 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java @@ -20,6 +20,7 @@ package com.sk89q.worldguard.bukkit.listener; import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration; @@ -31,11 +32,14 @@ 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.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.RegionQuery; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Creeper; import org.bukkit.entity.EnderCrystal; @@ -62,7 +66,6 @@ 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; @@ -74,6 +77,7 @@ import org.bukkit.event.entity.ExplosionPrimeEvent; import org.bukkit.event.entity.PigZapEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.world.PortalCreateEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.projectiles.ProjectileSource; @@ -102,9 +106,6 @@ public WorldGuardEntityListener(WorldGuardPlugin plugin) { */ public void registerEvents() { plugin.getServer().getPluginManager().registerEvents(this, plugin); - if (!EntityCreatePortalEvent.class.isAnnotationPresent(Deprecated.class)) { - plugin.getServer().getPluginManager().registerEvents(new UselessIn114Listener(), plugin); - } } @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @@ -669,17 +670,48 @@ public void onCreatureSpawn(CreatureSpawnEvent event) { } } - private static class UselessIn114Listener implements Listener { - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onCreatePortal(EntityCreatePortalEvent event) { - ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); - WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getEntity().getWorld())); + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onCreatePortal(PortalCreateEvent event) { + ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); + final com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getWorld()); + WorldConfiguration wcfg = cfg.get(world); - switch (event.getEntityType()) { - case ENDER_DRAGON: - if (wcfg.blockEnderDragonPortalCreation) event.setCancelled(true); - break; + if (wcfg.regionNetherPortalProtection + && event.getReason() == PortalCreateEvent.CreateReason.NETHER_PAIR + && !event.getBlocks().isEmpty()) { + final RegionManager regionManager = WorldGuard.getInstance().getPlatform().getRegionContainer() + .get(world); + if (regionManager == null) return; + LocalPlayer associable = null; + if (event.getEntity() instanceof Player) { + associable = plugin.wrapPlayer(((Player) event.getEntity())); } + if (WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(associable, world)) { + return; + } + BlockVector3 min = null; + BlockVector3 max = null; + for (BlockState block : event.getBlocks()) { + BlockVector3 loc = BlockVector3.at(block.getX(), block.getY(), block.getZ()); + min = min == null ? loc : loc.getMinimum(min); + max = max == null ? loc : loc.getMaximum(max); + } + ProtectedCuboidRegion target = new ProtectedCuboidRegion("__portal_check", true, min, max); + final ApplicableRegionSet regions = regionManager.getApplicableRegions(target); + if (!regions.testState(associable, Flags.BUILD, Flags.BLOCK_PLACE)) { + if (associable != null) { + // NB there is no way to cancel the teleport without PTA (since PlayerPortal doesn't have block info) + // removing PTA was a mistake + associable.print("Destination is an a protected area."); + } + event.setCancelled(true); + } + } + + // NOTE: as of right now, bukkit doesn't fire this event for this (despite deprecating EntityCreatePortalEvent for it) + // maybe one day this code will be useful + if (event.getEntity() instanceof EnderDragon && wcfg.blockEnderDragonPortalCreation) { + event.setCancelled(true); } } diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java index 3d2b41a6..4eec25bd 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java @@ -31,8 +31,6 @@ import com.sk89q.worldguard.config.WorldConfiguration; import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.flags.Flags; -import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.RegionQuery; import com.sk89q.worldguard.session.MoveType; @@ -41,9 +39,7 @@ import com.sk89q.worldguard.util.Entities; import com.sk89q.worldguard.util.command.CommandFilter; import org.bukkit.ChatColor; -import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.TravelAgent; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Entity; @@ -60,20 +56,18 @@ import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; -import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.PluginManager; +import javax.annotation.Nullable; import java.util.Iterator; import java.util.Set; import java.util.logging.Logger; import java.util.regex.Pattern; -import javax.annotation.Nullable; - /** * Handles all events thrown in relation to a player. */ @@ -143,7 +137,7 @@ public void onPlayerJoin(PlayerJoinEvent event) { if (removed > 10) { log.info("Halt-Act: " + removed + " entities (>10) auto-removed from " - + player.getWorld().toString()); + + player.getWorld()); } } @@ -181,7 +175,7 @@ public void onPlayerChat(AsyncPlayerChatEvent event) { anyRemoved = true; } } - if (anyRemoved && event.getRecipients().size() == 0 && wcfg.regionCancelEmptyChatEvents) { + if (anyRemoved && event.getRecipients().isEmpty() && wcfg.regionCancelEmptyChatEvents) { event.setCancelled(true); } } @@ -368,7 +362,6 @@ public void onItemHeldChange(PlayerItemHeldEvent event) { @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { - World world = event.getFrom().getWorld(); Player player = event.getPlayer(); LocalPlayer localPlayer = plugin.wrapPlayer(player); ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); @@ -392,7 +385,9 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { message = set.queryValue(localPlayer, Flags.ENTRY_DENY_MESSAGE); } if (cancel) { - player.sendMessage(message); + if (message != null) { + player.sendMessage(message); + } event.setCancelled(true); return; } @@ -410,7 +405,9 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { message = set.queryValue(localPlayer, Flags.ENTRY_DENY_MESSAGE); } if (cancel) { - player.sendMessage(message); + if (message != null) { + player.sendMessage(message); + } event.setCancelled(true); return; } @@ -425,56 +422,6 @@ public void onPlayerTeleport(PlayerTeleportEvent event) { } } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) - public void onPlayerPortal(PlayerPortalEvent event) { - if (event.getTo() == null) { // apparently this counts as a cancelled event, implementation specific though - return; - } - ConfigurationManager cfg = WorldGuard.getInstance().getPlatform().getGlobalStateManager(); - LocalPlayer localPlayer = plugin.wrapPlayer(event.getPlayer()); - WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getTo().getWorld())); - if (!wcfg.regionNetherPortalProtection) return; - if (event.getCause() != TeleportCause.NETHER_PORTAL) { - return; - } - try { - if (!event.useTravelAgent()) { // either end travel (even though we checked cause) or another plugin is fucking with us, shouldn't create a portal though - return; - } - } catch (NoSuchMethodError ignored) { - return; - } - TravelAgent pta = event.getPortalTravelAgent(); - if (pta == null) { // possible, but shouldn't create a portal - return; - } - if (pta.findPortal(event.getTo()) != null) { - return; // portal exists...it shouldn't make a new one - } - // HOPEFULLY covered everything the server can throw at us...proceed protection checking - // a lot of that is implementation specific though - - // hackily estimate the area that could be effected by this event, since the server refuses to tell us - int radius = pta.getCreationRadius(); - Location min = event.getTo().clone().subtract(radius, radius, radius); - Location max = event.getTo().clone().add(radius, radius, radius); - com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getTo().getWorld()); - - ProtectedRegion check = new ProtectedCuboidRegion("__portalcheck__", BukkitAdapter.adapt(min.getBlock().getLocation()).toVector().toBlockPoint(), - BukkitAdapter.adapt(max.getBlock().getLocation()).toVector().toBlockPoint()); - - if (wcfg.useRegions && !WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(localPlayer, world)) { - RegionManager mgr = WorldGuard.getInstance().getPlatform().getRegionContainer().get(world); - if (mgr == null) return; - ApplicableRegionSet set = mgr.getApplicableRegions(check); - if (!set.testState(plugin.wrapPlayer(event.getPlayer()), Flags.BUILD)) { - event.getPlayer().sendMessage(ChatColor.RED + "Destination is in a protected area."); - event.setCancelled(true); - return; - } - } - } - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java index ea62c3b5..35ddb086 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java @@ -52,7 +52,6 @@ public final class Materials { private static final Map MATERIAL_FLAGS = new EnumMap<>(Material.class); private static final Set DAMAGE_EFFECTS = new HashSet<>(); - private static Set shulkerBoxes = new HashSet<>(); static { @@ -123,20 +122,10 @@ public final class Materials { MATERIAL_FLAGS.put(Material.PISTON, 0); MATERIAL_FLAGS.put(Material.PISTON_HEAD, 0); MATERIAL_FLAGS.put(Material.MOVING_PISTON, 0); - MATERIAL_FLAGS.put(Material.DANDELION, 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.RED_MUSHROOM, 0); MATERIAL_FLAGS.put(Material.GOLD_BLOCK, 0); @@ -234,7 +223,6 @@ public final class Materials { MATERIAL_FLAGS.put(Material.EMERALD_BLOCK, 0); MATERIAL_FLAGS.put(Material.COMMAND_BLOCK, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.BEACON, MODIFIED_ON_RIGHT); - MATERIAL_FLAGS.put(Material.COBBLESTONE_WALL, 0); MATERIAL_FLAGS.put(Material.ANVIL, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.CHIPPED_ANVIL, MODIFIED_ON_RIGHT); MATERIAL_FLAGS.put(Material.DAMAGED_ANVIL, MODIFIED_ON_RIGHT); @@ -405,7 +393,6 @@ public final class Materials { MATERIAL_FLAGS.put(Material.MAGENTA_STAINED_GLASS, 0); MATERIAL_FLAGS.put(Material.MAGENTA_STAINED_GLASS_PANE, 0); MATERIAL_FLAGS.put(Material.MAGENTA_TERRACOTTA, 0); - MATERIAL_FLAGS.put(Material.MOSSY_COBBLESTONE_WALL, 0); MATERIAL_FLAGS.put(Material.MUSHROOM_STEM, 0); MATERIAL_FLAGS.put(Material.OBSERVER, 0); MATERIAL_FLAGS.put(Material.ORANGE_STAINED_GLASS, 0); @@ -446,6 +433,26 @@ public final class Materials { MATERIAL_FLAGS.put(Material.YELLOW_STAINED_GLASS_PANE, 0); MATERIAL_FLAGS.put(Material.YELLOW_TERRACOTTA, 0); + MATERIAL_FLAGS.put(Material.BAMBOO, 0); + MATERIAL_FLAGS.put(Material.BAMBOO_SAPLING, 0); + MATERIAL_FLAGS.put(Material.BARREL, MODIFIED_ON_RIGHT); + MATERIAL_FLAGS.put(Material.BELL, MODIFIED_ON_RIGHT); + MATERIAL_FLAGS.put(Material.BLAST_FURNACE, MODIFIED_ON_RIGHT); + MATERIAL_FLAGS.put(Material.CAMPFIRE, MODIFIED_ON_RIGHT | MODIFIED_ON_LEFT); + MATERIAL_FLAGS.put(Material.CARTOGRAPHY_TABLE, 0); + MATERIAL_FLAGS.put(Material.COMPOSTER, MODIFIED_ON_RIGHT); + MATERIAL_FLAGS.put(Material.FLETCHING_TABLE, 0); + MATERIAL_FLAGS.put(Material.GRINDSTONE, 0); + MATERIAL_FLAGS.put(Material.JIGSAW, MODIFIED_ON_RIGHT | MODIFIED_ON_LEFT); + MATERIAL_FLAGS.put(Material.LANTERN, 0); + MATERIAL_FLAGS.put(Material.LECTERN, 0); + MATERIAL_FLAGS.put(Material.LOOM, 0); + MATERIAL_FLAGS.put(Material.SCAFFOLDING, 0); + MATERIAL_FLAGS.put(Material.SMITHING_TABLE, 0); + MATERIAL_FLAGS.put(Material.SMOKER, MODIFIED_ON_RIGHT); + MATERIAL_FLAGS.put(Material.STONECUTTER, 0); + MATERIAL_FLAGS.put(Material.SWEET_BERRY_BUSH, MODIFIED_ON_RIGHT); + MATERIAL_FLAGS.put(Material.IRON_SHOVEL, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.IRON_PICKAXE, 0); MATERIAL_FLAGS.put(Material.IRON_AXE, MODIFIES_BLOCKS); @@ -538,9 +545,13 @@ public final class Materials { MATERIAL_FLAGS.put(Material.GLOWSTONE_DUST, 0); MATERIAL_FLAGS.put(Material.COD, 0); MATERIAL_FLAGS.put(Material.COOKED_COD, 0); - MATERIAL_FLAGS.put(Material.INK_SAC, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.INK_SAC, 0); + MATERIAL_FLAGS.put(Material.BLACK_DYE, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.BLUE_DYE, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.BROWN_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.CYAN_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.GRAY_DYE, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.GREEN_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.LIGHT_BLUE_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.LIGHT_GRAY_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.LIME_DYE, MODIFIES_BLOCKS); @@ -548,7 +559,10 @@ public final class Materials { MATERIAL_FLAGS.put(Material.ORANGE_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.PINK_DYE, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.PURPLE_DYE, MODIFIES_BLOCKS); - MATERIAL_FLAGS.put(Material.COCOA_BEANS, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.RED_DYE, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.WHITE_DYE, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.YELLOW_DYE, MODIFIES_BLOCKS); + MATERIAL_FLAGS.put(Material.COCOA_BEANS, 0); MATERIAL_FLAGS.put(Material.BONE_MEAL, MODIFIES_BLOCKS); MATERIAL_FLAGS.put(Material.BONE, 0); MATERIAL_FLAGS.put(Material.SUGAR, 0); @@ -622,6 +636,7 @@ public final class Materials { MATERIAL_FLAGS.put(Material.RABBIT_FOOT, 0); MATERIAL_FLAGS.put(Material.RABBIT_HIDE, 0); MATERIAL_FLAGS.put(Material.ARMOR_STAND, 0); + MATERIAL_FLAGS.put(Material.LEATHER_HORSE_ARMOR, 0); MATERIAL_FLAGS.put(Material.IRON_HORSE_ARMOR, 0); MATERIAL_FLAGS.put(Material.GOLDEN_HORSE_ARMOR, 0); MATERIAL_FLAGS.put(Material.DIAMOND_HORSE_ARMOR, 0); @@ -667,18 +682,15 @@ public final class Materials { MATERIAL_FLAGS.put(Material.TROPICAL_FISH, 0); MATERIAL_FLAGS.put(Material.TROPICAL_FISH_BUCKET, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_11, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_13, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_BLOCKS, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_CAT, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_CHIRP, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_FAR, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_MALL, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_MELLOHI, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_STAL, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_STRAD, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_WAIT, 0); - MATERIAL_FLAGS.put(Material.MUSIC_DISC_WARD, 0); + MATERIAL_FLAGS.put(Material.CREEPER_BANNER_PATTERN, 0); + MATERIAL_FLAGS.put(Material.FLOWER_BANNER_PATTERN, 0); + MATERIAL_FLAGS.put(Material.GLOBE_BANNER_PATTERN, 0); + MATERIAL_FLAGS.put(Material.MOJANG_BANNER_PATTERN, 0); + MATERIAL_FLAGS.put(Material.SKULL_BANNER_PATTERN, 0); + MATERIAL_FLAGS.put(Material.CROSSBOW, 0); + MATERIAL_FLAGS.put(Material.SUSPICIOUS_STEW, 0); + MATERIAL_FLAGS.put(Material.SWEET_BERRIES, 0); + // Fake tags for (Material m : shulkerBoxes) { @@ -728,6 +740,24 @@ public final class Materials { for (Material pot : Tag.FLOWER_POTS.getValues()) { MATERIAL_FLAGS.put(pot, MODIFIED_ON_RIGHT); } + for (Material wall : Tag.WALLS.getValues()) { + MATERIAL_FLAGS.put(wall, 0); + } + for (Material sign : Tag.SIGNS.getValues()) { + MATERIAL_FLAGS.put(sign, 0); + } + for (Material flower : Tag.SMALL_FLOWERS.getValues()) { + MATERIAL_FLAGS.put(flower, 0); + } + for (Material bed : Tag.BEDS.getValues()) { + MATERIAL_FLAGS.put(bed, 0); + } + for (Material musicDisc : Tag.ITEMS_MUSIC_DISCS.getValues()) { + MATERIAL_FLAGS.put(musicDisc, 0); + } + for (Material bannerPat : Tag.ITEMS_BANNERS.getValues()) { + MATERIAL_FLAGS.put(bannerPat, 0); + } Stream.concat(Stream.concat( Tag.CORAL_BLOCKS.getValues().stream(), Tag.CORALS.getValues().stream()), @@ -739,57 +769,51 @@ public final class Materials { } }); - try { - MATERIAL_FLAGS.put(Material.SIGN, 0); - MATERIAL_FLAGS.put(Material.WALL_SIGN, 0); - MATERIAL_FLAGS.put(Material.DANDELION_YELLOW, MODIFIES_BLOCKS); - MATERIAL_FLAGS.put(Material.ROSE_RED, MODIFIES_BLOCKS); - MATERIAL_FLAGS.put(Material.CACTUS_GREEN, MODIFIES_BLOCKS); - } catch (NoSuchFieldError ignored) { // missing fields in 1.14 - } - // Check for missing items/blocks for (Material material : Material.values()) { + //noinspection deprecation if (material.isLegacy()) continue; // 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 material definition for " + (material.isBlock() ? "block " : "item ") + material.name()); - MATERIAL_FLAGS.put(material, MODIFIED_ON_LEFT | MODIFIED_ON_RIGHT); } } - //DAMAGE_EFFECTS.add(PotionEffectType.ABSORPTION); - DAMAGE_EFFECTS.add(PotionEffectType.BLINDNESS); - DAMAGE_EFFECTS.add(PotionEffectType.CONFUSION); - //DAMAGE_EFFECTS.add(PotionEffectType.DAMAGE_RESISTANCE); - //DAMAGE_EFFECTS.add(PotionEffectType.FAST_DIGGING); - //DAMAGE_EFFECTS.add(PotionEffectType.FIRE_RESISTANCE); - DAMAGE_EFFECTS.add(PotionEffectType.HARM); - //DAMAGE_EFFECTS.add(PotionEffectType.HEAL); - //DAMAGE_EFFECTS.add(PotionEffectType.HEALTH_BOOST); - DAMAGE_EFFECTS.add(PotionEffectType.HUNGER); - //DAMAGE_EFFECTS.add(PotionEffectType.INCREASE_DAMAGE); - //DAMAGE_EFFECTS.add(PotionEffectType.INVISIBILITY); - //DAMAGE_EFFECTS.add(PotionEffectType.JUMP); - //DAMAGE_EFFECTS.add(PotionEffectType.NIGHT_VISION); - DAMAGE_EFFECTS.add(PotionEffectType.POISON); - //DAMAGE_EFFECTS.add(PotionEffectType.REGENERATION); - //DAMAGE_EFFECTS.add(PotionEffectType.SATURATION); +// DAMAGE_EFFECTS.add(PotionEffectType.SPEED); DAMAGE_EFFECTS.add(PotionEffectType.SLOW); +// DAMAGE_EFFECTS.add(PotionEffectType.FAST_DIGGING); DAMAGE_EFFECTS.add(PotionEffectType.SLOW_DIGGING); - //DAMAGE_EFFECTS.add(PotionEffectType.SPEED); - //DAMAGE_EFFECTS.add(PotionEffectType.WATER_BREATHING); +// DAMAGE_EFFECTS.add(PotionEffectType.INCREASE_DAMAGE); +// DAMAGE_EFFECTS.add(PotionEffectType.HEAL); + DAMAGE_EFFECTS.add(PotionEffectType.HARM); +// DAMAGE_EFFECTS.add(PotionEffectType.JUMP); + DAMAGE_EFFECTS.add(PotionEffectType.CONFUSION); +// DAMAGE_EFFECTS.add(PotionEffectType.REGENERATION); +// DAMAGE_EFFECTS.add(PotionEffectType.DAMAGE_RESISTANCE); +// DAMAGE_EFFECTS.add(PotionEffectType.FIRE_RESISTANCE); +// DAMAGE_EFFECTS.add(PotionEffectType.WATER_BREATHING); +// DAMAGE_EFFECTS.add(PotionEffectType.INVISIBILITY); + DAMAGE_EFFECTS.add(PotionEffectType.BLINDNESS); +// DAMAGE_EFFECTS.add(PotionEffectType.NIGHT_VISION); + DAMAGE_EFFECTS.add(PotionEffectType.HUNGER); DAMAGE_EFFECTS.add(PotionEffectType.WEAKNESS); + DAMAGE_EFFECTS.add(PotionEffectType.POISON); DAMAGE_EFFECTS.add(PotionEffectType.WITHER); - - DAMAGE_EFFECTS.add(PotionEffectType.LEVITATION); // considered by game so I guess +// DAMAGE_EFFECTS.add(PotionEffectType.HEALTH_BOOST); +// DAMAGE_EFFECTS.add(PotionEffectType.ABSORPTION); +// DAMAGE_EFFECTS.add(PotionEffectType.SATURATION); + DAMAGE_EFFECTS.add(PotionEffectType.GLOWING); + DAMAGE_EFFECTS.add(PotionEffectType.LEVITATION); +// DAMAGE_EFFECTS.add(PotionEffectType.LUCK); DAMAGE_EFFECTS.add(PotionEffectType.UNLUCK); - +// DAMAGE_EFFECTS.add(PotionEffectType.SLOW_FALLING); +// DAMAGE_EFFECTS.add(PotionEffectType.CONDUIT_POWER); +// DAMAGE_EFFECTS.add(PotionEffectType.DOLPHINS_GRACE); + DAMAGE_EFFECTS.add(PotionEffectType.BAD_OMEN); +// DAMAGE_EFFECTS.add(PotionEffectType.HERO_OF_THE_VILLAGE); } private Materials() { @@ -824,7 +848,6 @@ public static Material getBucketBlockMaterial(Material type) { case LAVA_BUCKET: return Material.LAVA; case WATER_BUCKET: - return Material.WATER; default: return Material.WATER; } @@ -867,7 +890,7 @@ public static boolean isLiquid(Material material) { * @return true if a water block */ public static boolean isWater(Material material) { - return material == Material.WATER; + return material == Material.WATER || material == Material.BUBBLE_COLUMN; } /** @@ -926,6 +949,7 @@ public static boolean isMinecart(Material material) { || material == Material.FURNACE_MINECART || material == Material.CHEST_MINECART; } + /** * Test whether the given material is a Boat. * @@ -951,14 +975,18 @@ public static boolean isInventoryBlock(Material material) { || material == Material.TRAPPED_CHEST || material == Material.HOPPER || material == Material.DROPPER + || material == Material.BARREL + || material == Material.BLAST_FURNACE + || material == Material.SMOKER || shulkerBoxes.contains(material); } public static boolean isSpawnEgg(Material material) { - switch(material) { + switch (material) { case SPIDER_SPAWN_EGG: case BAT_SPAWN_EGG: case BLAZE_SPAWN_EGG: + case CAT_SPAWN_EGG: case CAVE_SPIDER_SPAWN_EGG: case CHICKEN_SPAWN_EGG: case COD_SPAWN_EGG: @@ -971,6 +999,7 @@ public static boolean isSpawnEgg(Material material) { case ENDERMAN_SPAWN_EGG: case ENDERMITE_SPAWN_EGG: case EVOKER_SPAWN_EGG: + case FOX_SPAWN_EGG: case GHAST_SPAWN_EGG: case GUARDIAN_SPAWN_EGG: case HORSE_SPAWN_EGG: @@ -980,12 +1009,15 @@ public static boolean isSpawnEgg(Material material) { case MOOSHROOM_SPAWN_EGG: case MULE_SPAWN_EGG: case OCELOT_SPAWN_EGG: + case PANDA_SPAWN_EGG: case PARROT_SPAWN_EGG: case PHANTOM_SPAWN_EGG: case PIG_SPAWN_EGG: + case PILLAGER_SPAWN_EGG: case POLAR_BEAR_SPAWN_EGG: case PUFFERFISH_SPAWN_EGG: case RABBIT_SPAWN_EGG: + case RAVAGER_SPAWN_EGG: case SALMON_SPAWN_EGG: case SHEEP_SPAWN_EGG: case SHULKER_SPAWN_EGG: @@ -995,11 +1027,13 @@ public static boolean isSpawnEgg(Material material) { case SLIME_SPAWN_EGG: case SQUID_SPAWN_EGG: case STRAY_SPAWN_EGG: + case TRADER_LLAMA_SPAWN_EGG: case TROPICAL_FISH_SPAWN_EGG: case TURTLE_SPAWN_EGG: case VEX_SPAWN_EGG: case VILLAGER_SPAWN_EGG: case VINDICATOR_SPAWN_EGG: + case WANDERING_TRADER_SPAWN_EGG: case WITCH_SPAWN_EGG: case WITHER_SKELETON_SPAWN_EGG: case WOLF_SPAWN_EGG: @@ -1021,6 +1055,8 @@ public static EntityType getEntitySpawnEgg(Material material) { return EntityType.BAT; case BLAZE_SPAWN_EGG: return EntityType.BLAZE; + case CAT_SPAWN_EGG: + return EntityType.CAT; case CAVE_SPIDER_SPAWN_EGG: return EntityType.CAVE_SPIDER; case CHICKEN_SPAWN_EGG: @@ -1045,6 +1081,8 @@ public static EntityType getEntitySpawnEgg(Material material) { return EntityType.ENDERMITE; case EVOKER_SPAWN_EGG: return EntityType.EVOKER; + case FOX_SPAWN_EGG: + return EntityType.FOX; case GHAST_SPAWN_EGG: return EntityType.GHAST; case GUARDIAN_SPAWN_EGG: @@ -1063,18 +1101,22 @@ public static EntityType getEntitySpawnEgg(Material material) { return EntityType.MULE; case OCELOT_SPAWN_EGG: return EntityType.OCELOT; + case PANDA_SPAWN_EGG: + return EntityType.PANDA; case PARROT_SPAWN_EGG: return EntityType.PARROT; case PHANTOM_SPAWN_EGG: return EntityType.PHANTOM; - case PIG_SPAWN_EGG: - return EntityType.PIG; + case PILLAGER_SPAWN_EGG: + return EntityType.PILLAGER; case POLAR_BEAR_SPAWN_EGG: return EntityType.POLAR_BEAR; case PUFFERFISH_SPAWN_EGG: return EntityType.PUFFERFISH; case RABBIT_SPAWN_EGG: return EntityType.RABBIT; + case RAVAGER_SPAWN_EGG: + return EntityType.RAVAGER; case SALMON_SPAWN_EGG: return EntityType.SALMON; case SHEEP_SPAWN_EGG: @@ -1093,6 +1135,8 @@ public static EntityType getEntitySpawnEgg(Material material) { return EntityType.SQUID; case STRAY_SPAWN_EGG: return EntityType.STRAY; + case TRADER_LLAMA_SPAWN_EGG: + return EntityType.TRADER_LLAMA; case TROPICAL_FISH_SPAWN_EGG: return EntityType.TROPICAL_FISH; case TURTLE_SPAWN_EGG: @@ -1103,6 +1147,8 @@ public static EntityType getEntitySpawnEgg(Material material) { return EntityType.VILLAGER; case VINDICATOR_SPAWN_EGG: return EntityType.VINDICATOR; + case WANDERING_TRADER_SPAWN_EGG: + return EntityType.WANDERING_TRADER; case WITCH_SPAWN_EGG: return EntityType.WITCH; case WITHER_SKELETON_SPAWN_EGG: @@ -1117,33 +1163,14 @@ public static EntityType getEntitySpawnEgg(Material material) { return EntityType.ZOMBIE; case ZOMBIE_VILLAGER_SPAWN_EGG: return EntityType.ZOMBIE_VILLAGER; - default: - return EntityType.PIG; // Uhhh + case PIG_SPAWN_EGG: + default: // Uhh + return EntityType.PIG; } } 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: - case YELLOW_BED: - return true; - default: - return false; - } + return Tag.BEDS.isTagged(material); } /** @@ -1174,28 +1201,33 @@ public static boolean isCrop(Material type) { */ public static boolean isUseFlagApplicable(Material material) { if (Tag.BUTTONS.isTagged(material) - || Tag.DOORS.isTagged(material) - || Tag.WOODEN_PRESSURE_PLATES.isTagged(material) - || Tag.WOODEN_TRAPDOORS.isTagged(material)) { + || Tag.DOORS.isTagged(material) + || Tag.WOODEN_PRESSURE_PLATES.isTagged(material) + || Tag.WOODEN_TRAPDOORS.isTagged(material)) { return true; } switch (material) { - case LEVER: return true; - case TRIPWIRE: return true; - case ENCHANTING_TABLE: return true; - case BEACON: return true; - case ANVIL: return true; - case DAMAGED_ANVIL: return true; - case CHIPPED_ANVIL: return true; - case STONE_PRESSURE_PLATE: return true; - case HEAVY_WEIGHTED_PRESSURE_PLATE: return true; - case LIGHT_WEIGHTED_PRESSURE_PLATE: return true; - case OAK_FENCE_GATE: return true; - case SPRUCE_FENCE_GATE: return true; - case BIRCH_FENCE_GATE: return true; - case JUNGLE_FENCE_GATE: return true; - case DARK_OAK_FENCE_GATE: return true; - case ACACIA_FENCE_GATE: return true; + case LEVER: + case LECTERN: + case ACACIA_FENCE_GATE: + case DARK_OAK_FENCE_GATE: + case JUNGLE_FENCE_GATE: + case BIRCH_FENCE_GATE: + case SPRUCE_FENCE_GATE: + case OAK_FENCE_GATE: + case LIGHT_WEIGHTED_PRESSURE_PLATE: + case HEAVY_WEIGHTED_PRESSURE_PLATE: + case STONE_PRESSURE_PLATE: + case ANVIL: + case DAMAGED_ANVIL: + case CHIPPED_ANVIL: + case ENCHANTING_TABLE: + case BELL: + case LOOM: + case CARTOGRAPHY_TABLE: + case STONECUTTER: + case GRINDSTONE: + return true; default: return false; } } @@ -1294,7 +1326,7 @@ public static boolean isArmor(Material type) { case GOLDEN_CHESTPLATE: case GOLDEN_LEGGINGS: case GOLDEN_BOOTS: - //case TURTLE_HELMET: + case TURTLE_HELMET: return true; default: return false; diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java index a74805b1..a9be6539 100644 --- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java +++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java @@ -30,13 +30,8 @@ public ServerReport() { Server server = Bukkit.getServer(); - try { - append("Server ID", server.getServerId()); - append("Server Name", server.getServerName()); - } catch (NoSuchMethodError ignored) { - } append("Bukkit Version", server.getBukkitVersion()); - append("Implementation", server.getVersion()); + append("Implementation", server.getName() + " " + server.getVersion()); append("Player Count", "%d/%d", Bukkit.getOnlinePlayers().size(), server.getMaxPlayers()); append("Server Class Source", server.getClass().getProtectionDomain().getCodeSource().getLocation()); diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java index cf3cae25..45cceac4 100644 --- a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java +++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java @@ -91,6 +91,7 @@ public final class Flags { public static final StateFlag WITHER_DAMAGE = register(new StateFlag("wither-damage", true)); public static final StateFlag ENDER_BUILD = register(new StateFlag("enderman-grief", true)); public static final StateFlag SNOWMAN_TRAILS = register(new StateFlag("snowman-trails", true)); + public static final StateFlag RAVAGER_RAVAGE = register(new StateFlag("ravager-grief", true)); public static final StateFlag ENTITY_PAINTING_DESTROY = register(new StateFlag("entity-painting-destroy", true)); public static final StateFlag ENTITY_ITEM_FRAME_DESTROY = register(new StateFlag("entity-item-frame-destroy", true));