1.13 update

Mostly changes with Material.java
This commit is contained in:
Magnus Ulf 2018-12-22 23:59:12 +01:00
parent ad052f762e
commit c0041e60e2
7 changed files with 94 additions and 125 deletions

View File

@ -6,7 +6,8 @@ website: ${project.url}
description: ${project.description} description: ${project.description}
authors: [Cayorion, Madus, Ulumulu1510, MarkehMe, Brettflan] authors: [Cayorion, Madus, Ulumulu1510, MarkehMe, Brettflan]
depend: [MassiveCore] depend: [MassiveCore]
softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, iChat, LocalAreaChat, LWC, nChat, ChatManager, AuthMe, Vault, Spout, WorldEdit, WorldGuard, AuthDB, CaptureThePoints, CombatTag] softdepend: [PermissionsEx, Permissions, Essentials, EssentialsChat, HeroChat, LocalAreaChat, LWC, ChatManager, AuthMe, Vault, WorldEdit, WorldGuard]
api-version: 1.13
permissions: permissions:
# -------------------------------------------- # # -------------------------------------------- #
# THE REAL NODES # THE REAL NODES

View File

@ -68,8 +68,8 @@ public class CmdFactionsSeeChunkOld extends FactionsCommand
{ {
Location loc = new Location(world, blockX, blockY, blockZ); Location loc = new Location(world, blockX, blockY, blockZ);
if (loc.getBlock().getType() != Material.AIR) continue; if (loc.getBlock().getType() != Material.AIR) continue;
int typeId = blockY % 5 == 0 ? Material.GLOWSTONE.getId() : Material.GLASS.getId(); Material type = blockY % 5 == 0 ? Material.GLOWSTONE : Material.GLASS;
VisualizeUtil.addLocation(player, loc, typeId); VisualizeUtil.addLocation(player, loc, type);
} }
} }

View File

@ -10,16 +10,13 @@ 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.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -45,9 +42,9 @@ public class EngineExploit extends Engine
// thanks to ObGenBlocker and WorldGuard for this method // thanks to ObGenBlocker and WorldGuard for this method
Block block = event.getToBlock(); Block block = event.getToBlock();
int source = event.getBlock().getTypeId(); Material source = event.getBlock().getType();
int target = block.getTypeId(); Material target = block.getType();
if ((target == 55 || target == 132) && (source == 0 || source == 10 || source == 11)) if ((target == Material.REDSTONE_WIRE || target == Material.TRIPWIRE) && (source == Material.AIR || source == Material.LAVA))
{ {
block.setType(Material.AIR); block.setType(Material.AIR);
} }
@ -70,8 +67,8 @@ public class EngineExploit extends Engine
// blocks who occupy less than 1 block width or length wise need to be handled differently // blocks who occupy less than 1 block width or length wise need to be handled differently
Material mat = event.getTo().getBlock().getType(); Material mat = event.getTo().getBlock().getType();
if ( if (
((mat == Material.THIN_GLASS || mat == Material.IRON_FENCE) && clippingThrough(target, from, 0.65)) ((mat == Material.GLASS_PANE || mat == Material.IRON_BARS) && clippingThrough(target, from, 0.65))
|| ((mat == Material.FENCE || mat == Material.NETHER_FENCE) && clippingThrough(target, from, 0.45)) || ((MUtil.list(Material.ACACIA_FENCE, Material.BIRCH_FENCE, Material.DARK_OAK_FENCE, Material.JUNGLE_FENCE, Material.NETHER_BRICK_FENCE, Material.OAK_FENCE, Material.SPRUCE_FENCE).contains(mat)) && clippingThrough(target, from, 0.45))
) )
{ {
event.setTo(from); event.setTo(from);
@ -95,42 +92,6 @@ public class EngineExploit extends Engine
|| (target.getZ() > from.getZ() && (target.getZ() - from.getZ() < thickness)) || (target.getZ() > from.getZ() && (target.getZ() - from.getZ() < thickness))
); );
} }
// -------------------------------------------- //
// TNT WATERLOG
// -------------------------------------------- //
// TNT in water/lava doesn't normally destroy any surrounding blocks, which is usually desired behavior.
// But this optional change below provides workaround for waterwalling providing perfect protection,
// and makes cheap (non-obsidian) TNT cannons require minor maintenance between shots.
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void tntWaterlog(EntityExplodeEvent event)
{
if (!MConf.get().handleExploitTNTWaterlog) return;
if (!(event.getEntity() instanceof TNTPrimed)) return;
Block center = event.getLocation().getBlock();
if (!center.isLiquid()) return;
// a single surrounding block in all 6 directions is broken if the material is weak enough
List<Block> targets = new ArrayList<>();
targets.add(center.getRelative(0, 0, 1));
targets.add(center.getRelative(0, 0, -1));
targets.add(center.getRelative(0, 1, 0));
targets.add(center.getRelative(0, -1, 0));
targets.add(center.getRelative(1, 0, 0));
targets.add(center.getRelative(-1, 0, 0));
for (Block target : targets)
{
int id = target.getTypeId();
// ignore air, bedrock, water, lava, obsidian, enchanting table, etc.... too bad we can't get a blast resistance value through Bukkit yet
if (id != 0 && (id < 7 || id > 11) && id != 49 && id != 90 && id != 116 && id != 119 && id != 120 && id != 130)
{
target.breakNaturally();
}
}
}
// -------------------------------------------- // // -------------------------------------------- //
// NETHER PORTAL TRAP // NETHER PORTAL TRAP
@ -240,7 +201,7 @@ public class EngineExploit extends Engine
{ {
for (int z = -(NETHER_TRAP_RADIUS_CHECK); z <= NETHER_TRAP_RADIUS_CHECK; z ++) for (int z = -(NETHER_TRAP_RADIUS_CHECK); z <= NETHER_TRAP_RADIUS_CHECK; z ++)
{ {
if (from.getRelative(x, y, z).getType() == Material.PORTAL) ret.add(from.getRelative(x, y, z)); if (from.getRelative(x, y, z).getType() == Material.NETHER_PORTAL) ret.add(from.getRelative(x, y, z));
} }
} }
} }

View File

@ -487,7 +487,6 @@ public class MConf extends Entity<MConf>
public boolean handleExploitObsidianGenerators = true; public boolean handleExploitObsidianGenerators = true;
public boolean handleExploitEnderPearlClipping = true; public boolean handleExploitEnderPearlClipping = true;
public boolean handleExploitTNTWaterlog = false;
public boolean handleNetherPortalTrap = true; public boolean handleNetherPortalTrap = true;
// -------------------------------------------- // // -------------------------------------------- //

View File

@ -61,7 +61,7 @@ public class EngineWorldGuard extends Engine
// Only do this for players // Only do this for players
if (player == null) return; if (player == null) return;
LocalPlayer wrapperPlayer = WorldGuardPlugin.inst().wrapPlayer(player); LocalPlayer wrapperPlayer = WorldGuardPlugin.inst() .wrapPlayer(player);
if ( ! MConf.get().worldguardCheckWorldsEnabled.contains(player)) return; if ( ! MConf.get().worldguardCheckWorldsEnabled.contains(player)) return;

View File

@ -12,15 +12,12 @@ public class EnumerationUtil
// -------------------------------------------- // // -------------------------------------------- //
public static final BackstringSet<Material> MATERIALS_EDIT_ON_INTERACT = new BackstringSet<>(Material.class, public static final BackstringSet<Material> MATERIALS_EDIT_ON_INTERACT = new BackstringSet<>(Material.class,
"DIODE_BLOCK_OFF", // Minecraft 1.? "REPEATER", // Minecraft 1.?
"DIODE_BLOCK_ON", // Minecraft 1.?
"NOTE_BLOCK", // Minecraft 1.? "NOTE_BLOCK", // Minecraft 1.?
"CAULDRON", // Minecraft 1.? "CAULDRON", // Minecraft 1.?
"SOIL", // Minecraft 1.? "FARMLAND", // Minecraft 1.?
"DAYLIGHT_DETECTOR", // Minecraft 1.5 "DAYLIGHT_DETECTOR", // Minecraft 1.5
"DAYLIGHT_DETECTOR_INVERTED", // Minecraft 1.5 "COMPARATOR" // Minecraft 1.?
"REDSTONE_COMPARATOR_OFF", // Minecraft 1.?
"REDSTONE_COMPARATOR_ON" // Minecraft 1.?
); );
public static boolean isMaterialEditOnInteract(Material material) public static boolean isMaterialEditOnInteract(Material material)
@ -33,17 +30,21 @@ public class EnumerationUtil
// -------------------------------------------- // // -------------------------------------------- //
public static final BackstringSet<Material> MATERIALS_EDIT_TOOL = new BackstringSet<>(Material.class, public static final BackstringSet<Material> MATERIALS_EDIT_TOOL = new BackstringSet<>(Material.class,
"FIREBALL", // Minecraft 1.? "FIRE_CHARGE", // Minecraft 1.?
"FLINT_AND_STEEL", // Minecraft 1.? "FLINT_AND_STEEL", // Minecraft 1.?
"BUCKET", // Minecraft 1.? "BUCKET",
"WATER_BUCKET", // Minecraft 1.? "WATER_BUCKET", // Minecraft 1.?
"LAVA_BUCKET", // Minecraft 1.? "LAVA_BUCKET",// Minecraft 1.?
"COD_BUCKET",// Minecraft 1.13
"PUFFERFISH_BUCKET", // Minecraft 1.13
"SALMON_BUCKET", // Minecraft 1.13
"TROPICAL_FISH_BUCKET", // Minecraft 1.13
"ARMOR_STAND", // Minecraft 1.8 "ARMOR_STAND", // Minecraft 1.8
"END_CRYSTAL", // Minecraft 1.10 "END_CRYSTAL", // Minecraft 1.10
// The duplication bug found in Spigot 1.8 protocol patch // The duplication bug found in Spigot 1.8 protocol patch
// https://github.com/MassiveCraft/Factions/issues/693 // https://github.com/MassiveCraft/Factions/issues/693
"CHEST", // Minecraft 1.? "CHEST", // Minecraft 1.? // TODO why chest?
"SIGN_POST", // Minecraft 1.? "SIGN_POST", // Minecraft 1.?
"TRAPPED_CHEST", // Minecraft 1.? "TRAPPED_CHEST", // Minecraft 1.?
"SIGN", // Minecraft 1.? "SIGN", // Minecraft 1.?
@ -62,19 +63,24 @@ public class EnumerationUtil
// Interacting with these materials placed in the terrain results in door toggling. // Interacting with these materials placed in the terrain results in door toggling.
public static final BackstringSet<Material> MATERIALS_DOOR = new BackstringSet<>(Material.class, public static final BackstringSet<Material> MATERIALS_DOOR = new BackstringSet<>(Material.class,
"WOODEN_DOOR", // Minecraft 1.? "OAK_DOOR",
"ACACIA_DOOR", // Minecraft 1.8 "OAK_TRAPDOOR",
"BIRCH_DOOR", // Minecraft 1.8 "OAK_FENCE_GATE",
"DARK_OAK_DOOR", // Minecraft 1.8 "ACACIA_DOOR",
"JUNGLE_DOOR", // Minecraft 1.8 "ACACIA_TRAPDOOR",
"SPRUCE_DOOR", // Minecraft 1.8 "AKACIA_FENCE_GATE",
"TRAP_DOOR", // Minecraft 1.? "BIRCH_DOOR",
"FENCE_GATE", // Minecraft 1.? "BIRCH_TRAPDOOR",
"ACACIA_FENCE_GATE", // Minecraft 1.8 "BIRCH_FENCE_GATE",
"BIRCH_FENCE_GATE", // Minecraft 1.8 "DARK_OAK_DOOR",
"DARK_OAK_FENCE_GATE", // Minecraft 1.8 "DARK_OAK_TRAPDOOR",
"JUNGLE_FENCE_GATE", // Minecraft 1.8 "DARK_OAK_FENCE_GATE",
"SPRUCE_FENCE_GATE" // Minecraft 1.8 "JUNGLE_DOOR",
"JUNGLE_TRAPDOOR",
"JUNGLE_FENCE_GATE",
"SPRUCE_DOOR",
"SPRUCE_TRAPDOOR",
"SPRUCE_FENCE_GATE"
); );
public static boolean isMaterialDoor(Material material) public static boolean isMaterialDoor(Material material)
@ -87,36 +93,37 @@ public class EnumerationUtil
// -------------------------------------------- // // -------------------------------------------- //
public static final BackstringSet<Material> MATERIALS_CONTAINER = new BackstringSet<>(Material.class, public static final BackstringSet<Material> MATERIALS_CONTAINER = new BackstringSet<>(Material.class,
"DISPENSER", // Minecraft 1.? "DISPENSER",
"CHEST", // Minecraft 1.? "CHEST",
"FURNACE", // Minecraft 1.? "TRAPPED_CHEST",
"BURNING_FURNACE", // Minecraft 1.? "FURNACE",
"JUKEBOX", // Minecraft 1.? "JUKEBOX",
"BREWING_STAND", // Minecraft 1.? "BREWING_STAND",
"ENCHANTMENT_TABLE", // Minecraft 1.? "ENCHANTING_TABLE",
"ANVIL", // Minecraft 1.? "ANVIL",
"BEACON", // Minecraft 1.? "CHIPPED_ANVIL",
"TRAPPED_CHEST", // Minecraft 1.? "DAMAGED_ANVIL",
"HOPPER", // Minecraft 1.? "BEACON",
"DROPPER", // Minecraft 1.? "HOPPER",
"DROPPER",
// The various shulker boxes, they had to make each one a different material -.- // The various shulker boxes, they had to make each one a different material -.-
"BLACK_SHULKER_BOX", // Minecraft 1.11 "BLACK_SHULKER_BOX",
"BLUE_SHULKER_BOX", // Minecraft 1.11 "BLUE_SHULKER_BOX",
"BROWN_SHULKER_BOX", // Minecraft 1.11 "BROWN_SHULKER_BOX",
"CYAN_SHULKER_BOX", // Minecraft 1.11 "CYAN_SHULKER_BOX",
"GRAY_SHULKER_BOX", // Minecraft 1.11 "GRAY_SHULKER_BOX",
"GREEN_SHULKER_BOX", // Minecraft 1.11 "GREEN_SHULKER_BOX",
"LIGHT_BLUE_SHULKER_BOX", // Minecraft 1.11 "LIGHT_BLUE_SHULKER_BOX",
"LIME_SHULKER_BOX", // Minecraft 1.11 "LIME_SHULKER_BOX",
"MAGENTA_SHULKER_BOX", // Minecraft 1.11 "MAGENTA_SHULKER_BOX",
"ORANGE_SHULKER_BOX", // Minecraft 1.11 "ORANGE_SHULKER_BOX",
"PINK_SHULKER_BOX", // Minecraft 1.11 "PINK_SHULKER_BOX",
"PURPLE_SHULKER_BOX", // Minecraft 1.11 "PURPLE_SHULKER_BOX",
"RED_SHULKER_BOX", // Minecraft 1.11 "RED_SHULKER_BOX",
"SILVER_SHULKER_BOX", // Minecraft 1.11 "SILVER_SHULKER_BOX",
"WHITE_SHULKER_BOX", // Minecraft 1.11 "WHITE_SHULKER_BOX",
"YELLOW_SHULKER_BOX" // Minecraft 1.11 "YELLOW_SHULKER_BOX"
); );
public static boolean isMaterialContainer(Material material) public static boolean isMaterialContainer(Material material)
@ -177,15 +184,15 @@ public class EnumerationUtil
"BLAZE", // Minecraft 1.? "BLAZE", // Minecraft 1.?
"CAVE_SPIDER", // Minecraft 1.? "CAVE_SPIDER", // Minecraft 1.?
"CREEPER", // Minecraft 1.? "CREEPER", // Minecraft 1.?
"ELDER_GUARDIAN", // minecraft 1.11 "ELDER_GUARDIAN",
"ENDERMAN", // Minecraft 1.? "ENDERMAN", // Minecraft 1.?
"ENDERMITE", // Minecraft 1.8 "ENDERMITE", // Minecraft 1.8
"ENDER_DRAGON", // Minecraft 1.? "ENDER_DRAGON", // Minecraft 1.?
"EVOKER", // Minecraft 1.11 "EVOKER",
"GUARDIAN", // Minecraft 1.8 "GUARDIAN", // Minecraft 1.8
"GHAST", // Minecraft 1.? "GHAST", // Minecraft 1.?
"GIANT", // Minecraft 1.? "GIANT", // Minecraft 1.?
"HUSK", // Minecraft 1.11 "HUSK",
"MAGMA_CUBE", // Minecraft 1.? "MAGMA_CUBE", // Minecraft 1.?
"PIG_ZOMBIE", // Minecraft 1.? "PIG_ZOMBIE", // Minecraft 1.?
"POLAR_BEAR", // Minecraft 1.10 "POLAR_BEAR", // Minecraft 1.10
@ -194,14 +201,14 @@ public class EnumerationUtil
"SKELETON", // Minecraft 1.? "SKELETON", // Minecraft 1.?
"SLIME", // Minecraft 1.? "SLIME", // Minecraft 1.?
"SPIDER", // Minecraft 1.? "SPIDER", // Minecraft 1.?
"STRAY", // Minecraft 1.11 "STRAY",
"VINDICATOR", // Minecraft 1.11 "VINDICATOR",
"VEX", // Minecraft 1.11 "VEX",
"WITCH", // Minecraft 1.? "WITCH", // Minecraft 1.?
"WITHER", // Minecraft 1.? "WITHER", // Minecraft 1.?
"WITHER_SKELETON", // Minecraft 1.11 "WITHER_SKELETON",
"ZOMBIE", // Minecraft 1.? "ZOMBIE", // Minecraft 1.?
"ZOMBIE_VILLAGER", // Minecraft 1.11 "ZOMBIE_VILLAGER",
"ILLUSIONER" // Minecraft 1.12 "ILLUSIONER" // Minecraft 1.12
); );
@ -218,19 +225,19 @@ public class EnumerationUtil
"BAT", // Minecraft 1.? "BAT", // Minecraft 1.?
"CHICKEN", // Minecraft 1.? "CHICKEN", // Minecraft 1.?
"COW", // Minecraft 1.? "COW", // Minecraft 1.?
"DONKEY", // Minecraft 1.11 "DONKEY",
"HORSE", // Minecraft 1.? "HORSE", // Minecraft 1.?
"LLAMA", // Minecraft 1.11 "LLAMA",
"MULE", // Minecraft 1.11 "MULE",
"MUSHROOM_COW", // Minecraft 1.? "MUSHROOM_COW", // Minecraft 1.?
"OCELOT", // Minecraft 1.? "OCELOT", // Minecraft 1.?
"PIG", // Minecraft 1.? "PIG", // Minecraft 1.?
"RABBIT", // Minecraft 1.? "RABBIT", // Minecraft 1.?
"SHEEP", // Minecraft 1.? "SHEEP", // Minecraft 1.?
"SKELETON_HORSE", // Minecraft 1.11 "SKELETON_HORSE",
"SQUID", // Minecraft 1.? "SQUID", // Minecraft 1.?
"WOLF", // Minecraft 1.? "WOLF", // Minecraft 1.?
"ZOMBIE_HORSE", // Minecraft 1.11 "ZOMBIE_HORSE",
"PARROT" // Minecraft 1.12 "PARROT" // Minecraft 1.12
); );

View File

@ -1,6 +1,7 @@
package com.massivecraft.factions.util; package com.massivecraft.factions.util;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -39,17 +40,17 @@ public class VisualizeUtil
// -------------------------------------------- // // -------------------------------------------- //
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public static void addLocation(Player player, Location location, int typeId, byte data) public static void addLocation(Player player, Location location, Material material, byte data)
{ {
getPlayerLocations(player).add(location); getPlayerLocations(player).add(location);
player.sendBlockChange(location, typeId, data); player.sendBlockChange(location, material, data);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public static void addLocation(Player player, Location location, int typeId) public static void addLocation(Player player, Location location, Material material)
{ {
getPlayerLocations(player).add(location); getPlayerLocations(player).add(location);
player.sendBlockChange(location, typeId, (byte) 0); player.sendBlockChange(location, material, (byte) 0);
} }
// -------------------------------------------- // // -------------------------------------------- //
@ -57,10 +58,10 @@ public class VisualizeUtil
// -------------------------------------------- // // -------------------------------------------- //
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public static void addLocations(Player player, Map<Location, Integer> locationMaterialIds) public static void addLocations(Player player, Map<Location, Material> locationMaterialIds)
{ {
Set<Location> ploc = getPlayerLocations(player); Set<Location> ploc = getPlayerLocations(player);
for (Entry<Location, Integer> entry : locationMaterialIds.entrySet()) for (Entry<Location, Material> entry : locationMaterialIds.entrySet())
{ {
ploc.add(entry.getKey()); ploc.add(entry.getKey());
player.sendBlockChange(entry.getKey(), entry.getValue(), (byte) 0); player.sendBlockChange(entry.getKey(), entry.getValue(), (byte) 0);
@ -68,25 +69,25 @@ public class VisualizeUtil
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public static void addLocations(Player player, Collection<Location> locations, int typeId) public static void addLocations(Player player, Collection<Location> locations, Material material)
{ {
Set<Location> ploc = getPlayerLocations(player); Set<Location> ploc = getPlayerLocations(player);
for (Location location : locations) for (Location location : locations)
{ {
ploc.add(location); ploc.add(location);
player.sendBlockChange(location, typeId, (byte) 0); player.sendBlockChange(location, material, (byte) 0);
} }
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public static void addBlocks(Player player, Collection<Block> blocks, int typeId) public static void addBlocks(Player player, Collection<Block> blocks, Material material)
{ {
Set<Location> ploc = getPlayerLocations(player); Set<Location> ploc = getPlayerLocations(player);
for (Block block : blocks) for (Block block : blocks)
{ {
Location location = block.getLocation(); Location location = block.getLocation();
ploc.add(location); ploc.add(location);
player.sendBlockChange(location, typeId, (byte) 0); player.sendBlockChange(location, material, (byte) 0);
} }
} }
@ -102,7 +103,7 @@ public class VisualizeUtil
for (Location location : locations) for (Location location : locations)
{ {
Block block = location.getWorld().getBlockAt(location); Block block = location.getWorld().getBlockAt(location);
player.sendBlockChange(location, block.getTypeId(), block.getData()); player.sendBlockChange(location, block.getType(), block.getData());
} }
locations.clear(); locations.clear();
} }