forked from LogBlock/LogBlock
Use Tags for Materials in BukkitUtils (#883)
This commit is contained in:
@ -160,7 +160,7 @@ public class BlockChange implements LookupCacheElement {
|
|||||||
msg.addExtra(createTextComponentWithColor("dried ", DESTROY.getColor()));
|
msg.addExtra(createTextComponentWithColor("dried ", DESTROY.getColor()));
|
||||||
msg.addExtra(prettyMaterial(type));
|
msg.addExtra(prettyMaterial(type));
|
||||||
}
|
}
|
||||||
} else if (BukkitUtils.getContainerBlocks().contains(type.getMaterial())) {
|
} else if (BukkitUtils.isContainerBlock(type.getMaterial())) {
|
||||||
msg.addExtra(createTextComponentWithColor("opened ", INTERACT.getColor()));
|
msg.addExtra(createTextComponentWithColor("opened ", INTERACT.getColor()));
|
||||||
msg.addExtra(prettyMaterial(type));
|
msg.addExtra(prettyMaterial(type));
|
||||||
} else if (type instanceof Openable && ((Openable) type).isOpen() != ((Openable) replaced).isOpen()) {
|
} else if (type instanceof Openable && ((Openable) type).isOpen() != ((Openable) replaced).isOpen()) {
|
||||||
|
@ -16,7 +16,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
public class BlockStateCodecShulkerBox implements BlockStateCodec {
|
public class BlockStateCodecShulkerBox implements BlockStateCodec {
|
||||||
@Override
|
@Override
|
||||||
public Material[] getApplicableMaterials() {
|
public Material[] getApplicableMaterials() {
|
||||||
return BukkitUtils.getShulkerBoxBlocks().toArray(new Material[BukkitUtils.getShulkerBoxBlocks().size()]);
|
return BukkitUtils.getShulkerBoxBlocks().toArray(Material[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -20,7 +20,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
public class BlockStateCodecSign implements BlockStateCodec {
|
public class BlockStateCodecSign implements BlockStateCodec {
|
||||||
@Override
|
@Override
|
||||||
public Material[] getApplicableMaterials() {
|
public Material[] getApplicableMaterials() {
|
||||||
return BukkitUtils.getAllSignMaterials().toArray(new Material[BukkitUtils.getAllSignMaterials().size()]);
|
return BukkitUtils.getAllSignMaterials().toArray(Material[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -39,7 +39,7 @@ public class BlockBreakLogging extends LoggingListener {
|
|||||||
final Block origin = event.getBlock();
|
final Block origin = event.getBlock();
|
||||||
final Material type = origin.getType();
|
final Material type = origin.getType();
|
||||||
|
|
||||||
if (wcfg.isLogging(Logging.CHESTACCESS) && BukkitUtils.getContainerBlocks().contains(type) && !BukkitUtils.getShulkerBoxBlocks().contains(type)) {
|
if (wcfg.isLogging(Logging.CHESTACCESS) && BukkitUtils.isContainerBlock(type) && !BukkitUtils.isShulkerBoxBlock(type)) {
|
||||||
consumer.queueContainerBreak(actor, origin.getState());
|
consumer.queueContainerBreak(actor, origin.getState());
|
||||||
} else if (type == Material.ICE) {
|
} else if (type == Material.ICE) {
|
||||||
// When in creative mode ice doesn't form water
|
// When in creative mode ice doesn't form water
|
||||||
|
@ -42,7 +42,7 @@ public class CreatureInteractLogging extends LoggingListener {
|
|||||||
consumer.queueBlock(new Actor("CreatureTrample"), loc, type.createBlockData(), Material.DIRT.createBlockData());
|
consumer.queueBlock(new Actor("CreatureTrample"), loc, type.createBlockData(), Material.DIRT.createBlockData());
|
||||||
// Log the crop on top as being broken
|
// Log the crop on top as being broken
|
||||||
Block trampledCrop = clicked.getRelative(BlockFace.UP);
|
Block trampledCrop = clicked.getRelative(BlockFace.UP);
|
||||||
if (BukkitUtils.getCropBlocks().contains(trampledCrop.getType())) {
|
if (BukkitUtils.isCropBlock(trampledCrop.getType())) {
|
||||||
consumer.queueBlockBreak(new Actor("CreatureTrample"), trampledCrop.getState());
|
consumer.queueBlockBreak(new Actor("CreatureTrample"), trampledCrop.getState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
|
|
||||||
import static de.diddiz.LogBlock.config.Config.getWorldConfig;
|
import static de.diddiz.LogBlock.config.Config.getWorldConfig;
|
||||||
import static de.diddiz.LogBlock.config.Config.logCreeperExplosionsAsPlayerWhoTriggeredThese;
|
import static de.diddiz.LogBlock.config.Config.logCreeperExplosionsAsPlayerWhoTriggeredThese;
|
||||||
import static de.diddiz.LogBlock.util.BukkitUtils.getContainerBlocks;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -117,7 +116,7 @@ public class ExplosionLogging extends LoggingListener {
|
|||||||
}
|
}
|
||||||
for (final Block block : event.blockList()) {
|
for (final Block block : event.blockList()) {
|
||||||
final Material type = block.getType();
|
final Material type = block.getType();
|
||||||
if (wcfg.isLogging(Logging.CHESTACCESS) && getContainerBlocks().contains(type) && !BukkitUtils.getShulkerBoxBlocks().contains(type)) {
|
if (wcfg.isLogging(Logging.CHESTACCESS) && BukkitUtils.isContainerBlock(type) && !BukkitUtils.isShulkerBoxBlock(type)) {
|
||||||
consumer.queueContainerBreak(actor, block.getState());
|
consumer.queueContainerBreak(actor, block.getState());
|
||||||
} else {
|
} else {
|
||||||
consumer.queueBlockBreak(actor, block.getState());
|
consumer.queueBlockBreak(actor, block.getState());
|
||||||
@ -218,7 +217,7 @@ public class ExplosionLogging extends LoggingListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final Material type = block.getType();
|
final Material type = block.getType();
|
||||||
if (wcfg.isLogging(Logging.CHESTACCESS) && getContainerBlocks().contains(type) && !BukkitUtils.getShulkerBoxBlocks().contains(type)) {
|
if (wcfg.isLogging(Logging.CHESTACCESS) && BukkitUtils.isContainerBlock(type) && !BukkitUtils.isShulkerBoxBlock(type)) {
|
||||||
consumer.queueContainerBreak(actor, block.getState());
|
consumer.queueContainerBreak(actor, block.getState());
|
||||||
} else {
|
} else {
|
||||||
consumer.queueBlockBreak(actor, block.getState());
|
consumer.queueBlockBreak(actor, block.getState());
|
||||||
|
@ -45,7 +45,7 @@ public class FluidFlowLogging extends LoggingListener {
|
|||||||
final Block to = event.getToBlock();
|
final Block to = event.getToBlock();
|
||||||
final Material typeTo = to.getType();
|
final Material typeTo = to.getType();
|
||||||
boolean down = event.getFace() == BlockFace.DOWN;
|
boolean down = event.getFace() == BlockFace.DOWN;
|
||||||
final boolean canFlow = BukkitUtils.isEmpty(typeTo) || BukkitUtils.getNonFluidProofBlocks().contains(typeTo);
|
final boolean canFlow = BukkitUtils.isEmpty(typeTo) || BukkitUtils.isNonFluidProofBlock(typeTo);
|
||||||
if (typeFrom == Material.LAVA && wcfg.isLogging(Logging.LAVAFLOW)) {
|
if (typeFrom == Material.LAVA && wcfg.isLogging(Logging.LAVAFLOW)) {
|
||||||
Levelled levelledFrom = (Levelled) blockDataFrom;
|
Levelled levelledFrom = (Levelled) blockDataFrom;
|
||||||
if (canFlow) {
|
if (canFlow) {
|
||||||
@ -73,7 +73,7 @@ public class FluidFlowLogging extends LoggingListener {
|
|||||||
newBlock.setLevel(fromWaterlogged || down ? 1 : Math.min(levelledFrom.getLevel() + 1, levelledFrom.getMaximumLevel()));
|
newBlock.setLevel(fromWaterlogged || down ? 1 : Math.min(levelledFrom.getLevel() + 1, levelledFrom.getMaximumLevel()));
|
||||||
if (BukkitUtils.isEmpty(typeTo)) {
|
if (BukkitUtils.isEmpty(typeTo)) {
|
||||||
consumer.queueBlockPlace(new Actor("WaterFlow", source), to.getLocation(), newBlock);
|
consumer.queueBlockPlace(new Actor("WaterFlow", source), to.getLocation(), newBlock);
|
||||||
} else if (BukkitUtils.getNonFluidProofBlocks().contains(typeTo)) {
|
} else if (BukkitUtils.isNonFluidProofBlock(typeTo)) {
|
||||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), newBlock);
|
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), newBlock);
|
||||||
} else if (typeTo == Material.LAVA) {
|
} else if (typeTo == Material.LAVA) {
|
||||||
int toLevel = ((Levelled) to.getBlockData()).getLevel();
|
int toLevel = ((Levelled) to.getBlockData()).getLevel();
|
||||||
@ -83,7 +83,7 @@ public class FluidFlowLogging extends LoggingListener {
|
|||||||
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), Material.STONE.createBlockData());
|
consumer.queueBlockReplace(new Actor("WaterFlow", source), to.getState(), Material.STONE.createBlockData());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (BukkitUtils.isEmpty(typeTo) || BukkitUtils.getNonFluidProofBlocks().contains(typeTo)) {
|
if (BukkitUtils.isEmpty(typeTo) || BukkitUtils.isNonFluidProofBlock(typeTo)) {
|
||||||
for (final BlockFace face : new BlockFace[] { BlockFace.DOWN, BlockFace.NORTH, BlockFace.WEST, BlockFace.EAST, BlockFace.SOUTH }) {
|
for (final BlockFace face : new BlockFace[] { BlockFace.DOWN, BlockFace.NORTH, BlockFace.WEST, BlockFace.EAST, BlockFace.SOUTH }) {
|
||||||
final Block lower = to.getRelative(face);
|
final Block lower = to.getRelative(face);
|
||||||
if (lower.getType() == Material.LAVA) {
|
if (lower.getType() == Material.LAVA) {
|
||||||
|
@ -178,7 +178,7 @@ public class InteractLogging extends LoggingListener {
|
|||||||
consumer.queueBlock(Actor.actorFromEntity(player), loc, blockData, Material.DIRT.createBlockData());
|
consumer.queueBlock(Actor.actorFromEntity(player), loc, blockData, Material.DIRT.createBlockData());
|
||||||
// Log the crop on top as being broken
|
// Log the crop on top as being broken
|
||||||
Block trampledCrop = clicked.getRelative(BlockFace.UP);
|
Block trampledCrop = clicked.getRelative(BlockFace.UP);
|
||||||
if (BukkitUtils.getCropBlocks().contains(trampledCrop.getType())) {
|
if (BukkitUtils.isCropBlock(trampledCrop.getType())) {
|
||||||
consumer.queueBlockBreak(Actor.actorFromEntity(player), trampledCrop.getState());
|
consumer.queueBlockBreak(Actor.actorFromEntity(player), trampledCrop.getState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import de.diddiz.LogBlock.LogBlock;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -28,6 +27,7 @@ import org.bukkit.Chunk;
|
|||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Tag;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -57,253 +57,165 @@ import org.bukkit.inventory.InventoryHolder;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public class BukkitUtils {
|
public class BukkitUtils {
|
||||||
private static final Set<Set<Integer>> blockEquivalents;
|
|
||||||
|
private static final Map<Material, DyeColor> dyes;
|
||||||
|
private static final Map<EntityType, Material> projectileItems;
|
||||||
|
|
||||||
|
private static final Set<Material> alwaysWaterlogged;
|
||||||
|
private static final Set<Material> concreteBlocks;
|
||||||
|
private static final Set<Material> containerBlocks;
|
||||||
|
private static final Set<Material> doublePlants;
|
||||||
|
private static final Set<Material> fallingEntityKillers;
|
||||||
|
private static final Set<Material> nonFluidProofBlocks;
|
||||||
private static final Set<Material> relativeBreakable;
|
private static final Set<Material> relativeBreakable;
|
||||||
private static final Set<Material> relativeTopBreakable;
|
private static final Set<Material> relativeTopBreakable;
|
||||||
private static final Set<Material> fallingEntityKillers;
|
|
||||||
|
|
||||||
private static final Set<Material> cropBlocks;
|
|
||||||
private static final Set<Material> containerBlocks;
|
|
||||||
private static final Set<Material> shulkerBoxBlocks;
|
|
||||||
|
|
||||||
private static final Set<Material> singleBlockPlants;
|
private static final Set<Material> singleBlockPlants;
|
||||||
private static final Set<Material> doublePlants;
|
|
||||||
|
|
||||||
private static final Set<Material> nonFluidProofBlocks;
|
private static final Tag<Material> allSigns;
|
||||||
|
private static final Tag<Material> bedBlocks;
|
||||||
private static final Set<Material> bedBlocks;
|
private static final Tag<Material> buttons;
|
||||||
|
private static final Tag<Material> candleCakes;
|
||||||
private static final Map<EntityType, Material> projectileItems;
|
private static final Tag<Material> candles;
|
||||||
private static final HashSet<Material> signs;
|
private static final Tag<Material> cropBlocks;
|
||||||
private static final HashSet<Material> wallSigns;
|
private static final Tag<Material> fenceGates;
|
||||||
private static final HashSet<Material> hangingSigns;
|
private static final Tag<Material> hangingSigns;
|
||||||
private static final HashSet<Material> hangingWallSigns;
|
private static final Tag<Material> pressurePlates;
|
||||||
private static final HashSet<Material> allSigns;
|
private static final Tag<Material> shulkerBoxBlocks;
|
||||||
private static final Set<Material> unmodifiableSigns;
|
private static final Tag<Material> slabs;
|
||||||
private static final HashSet<Material> buttons;
|
private static final Tag<Material> woodenDoors;
|
||||||
private static final HashSet<Material> pressurePlates;
|
private static final Tag<Material> woodenTrapdoors;
|
||||||
private static final HashSet<Material> woodenDoors;
|
|
||||||
private static final HashSet<Material> slabs;
|
|
||||||
private static final HashSet<Material> concreteBlocks;
|
|
||||||
private static final HashMap<Material, DyeColor> dyes;
|
|
||||||
private static final HashSet<Material> alwaysWaterlogged;
|
|
||||||
private static final HashSet<Material> candles;
|
|
||||||
private static final HashSet<Material> candleCakes;
|
|
||||||
private static final HashSet<Material> fenceGates;
|
|
||||||
private static final HashSet<Material> woodenTrapdoors;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
fenceGates = new HashSet<>();
|
// Global Tags
|
||||||
fenceGates.add(Material.OAK_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.SPRUCE_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.BIRCH_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.JUNGLE_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.ACACIA_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.DARK_OAK_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.WARPED_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.CRIMSON_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.MANGROVE_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.BAMBOO_FENCE_GATE);
|
|
||||||
fenceGates.add(Material.CHERRY_FENCE_GATE);
|
|
||||||
|
|
||||||
woodenTrapdoors = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_fence_gates
|
||||||
woodenTrapdoors.add(Material.OAK_TRAPDOOR);
|
fenceGates = Tag.FENCE_GATES;
|
||||||
woodenTrapdoors.add(Material.SPRUCE_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.BIRCH_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.JUNGLE_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.ACACIA_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.DARK_OAK_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.WARPED_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.CRIMSON_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.MANGROVE_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.BAMBOO_TRAPDOOR);
|
|
||||||
woodenTrapdoors.add(Material.CHERRY_TRAPDOOR);
|
|
||||||
|
|
||||||
pressurePlates = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_wooden_trapdoors
|
||||||
pressurePlates.add(Material.OAK_PRESSURE_PLATE);
|
woodenTrapdoors = Tag.WOODEN_TRAPDOORS;
|
||||||
pressurePlates.add(Material.SPRUCE_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.BIRCH_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.JUNGLE_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.ACACIA_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.DARK_OAK_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.WARPED_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.CRIMSON_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.MANGROVE_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.BAMBOO_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.CHERRY_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.STONE_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.LIGHT_WEIGHTED_PRESSURE_PLATE);
|
|
||||||
pressurePlates.add(Material.HEAVY_WEIGHTED_PRESSURE_PLATE);
|
|
||||||
|
|
||||||
woodenDoors = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_pressure_plates
|
||||||
woodenDoors.add(Material.OAK_DOOR);
|
pressurePlates = Tag.PRESSURE_PLATES;
|
||||||
woodenDoors.add(Material.SPRUCE_DOOR);
|
|
||||||
woodenDoors.add(Material.BIRCH_DOOR);
|
|
||||||
woodenDoors.add(Material.JUNGLE_DOOR);
|
|
||||||
woodenDoors.add(Material.ACACIA_DOOR);
|
|
||||||
woodenDoors.add(Material.DARK_OAK_DOOR);
|
|
||||||
woodenDoors.add(Material.WARPED_DOOR);
|
|
||||||
woodenDoors.add(Material.CRIMSON_DOOR);
|
|
||||||
woodenDoors.add(Material.MANGROVE_DOOR);
|
|
||||||
woodenDoors.add(Material.BAMBOO_DOOR);
|
|
||||||
woodenDoors.add(Material.CHERRY_DOOR);
|
|
||||||
|
|
||||||
HashSet<Material> saplings = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_wooden_doors
|
||||||
saplings.add(Material.OAK_SAPLING);
|
woodenDoors = Tag.WOODEN_DOORS;
|
||||||
saplings.add(Material.SPRUCE_SAPLING);
|
|
||||||
saplings.add(Material.BIRCH_SAPLING);
|
|
||||||
saplings.add(Material.JUNGLE_SAPLING);
|
|
||||||
saplings.add(Material.ACACIA_SAPLING);
|
|
||||||
saplings.add(Material.DARK_OAK_SAPLING);
|
|
||||||
saplings.add(Material.CHERRY_SAPLING);
|
|
||||||
saplings.add(Material.WARPED_FUNGUS);
|
|
||||||
saplings.add(Material.CRIMSON_FUNGUS);
|
|
||||||
saplings.add(Material.MANGROVE_PROPAGULE);
|
|
||||||
|
|
||||||
HashSet<Material> carpets = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_slabs
|
||||||
carpets.add(Material.BLACK_CARPET);
|
slabs = Tag.SLABS;
|
||||||
carpets.add(Material.BLUE_CARPET);
|
|
||||||
carpets.add(Material.LIGHT_GRAY_CARPET);
|
|
||||||
carpets.add(Material.BROWN_CARPET);
|
|
||||||
carpets.add(Material.CYAN_CARPET);
|
|
||||||
carpets.add(Material.GRAY_CARPET);
|
|
||||||
carpets.add(Material.GREEN_CARPET);
|
|
||||||
carpets.add(Material.LIGHT_BLUE_CARPET);
|
|
||||||
carpets.add(Material.MAGENTA_CARPET);
|
|
||||||
carpets.add(Material.LIME_CARPET);
|
|
||||||
carpets.add(Material.ORANGE_CARPET);
|
|
||||||
carpets.add(Material.PINK_CARPET);
|
|
||||||
carpets.add(Material.PURPLE_CARPET);
|
|
||||||
carpets.add(Material.RED_CARPET);
|
|
||||||
carpets.add(Material.WHITE_CARPET);
|
|
||||||
carpets.add(Material.YELLOW_CARPET);
|
|
||||||
|
|
||||||
slabs = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_buttons
|
||||||
slabs.add(Material.OAK_SLAB);
|
buttons = Tag.BUTTONS;
|
||||||
slabs.add(Material.SPRUCE_SLAB);
|
|
||||||
slabs.add(Material.BIRCH_SLAB);
|
|
||||||
slabs.add(Material.JUNGLE_SLAB);
|
|
||||||
slabs.add(Material.ACACIA_SLAB);
|
|
||||||
slabs.add(Material.DARK_OAK_SLAB);
|
|
||||||
slabs.add(Material.WARPED_SLAB);
|
|
||||||
slabs.add(Material.CRIMSON_SLAB);
|
|
||||||
slabs.add(Material.STONE_SLAB);
|
|
||||||
slabs.add(Material.STONE_BRICK_SLAB);
|
|
||||||
slabs.add(Material.COBBLESTONE_SLAB);
|
|
||||||
slabs.add(Material.PETRIFIED_OAK_SLAB);
|
|
||||||
slabs.add(Material.SANDSTONE_SLAB);
|
|
||||||
slabs.add(Material.RED_SANDSTONE_SLAB);
|
|
||||||
slabs.add(Material.NETHER_BRICK_SLAB);
|
|
||||||
slabs.add(Material.PURPUR_SLAB);
|
|
||||||
slabs.add(Material.QUARTZ_SLAB);
|
|
||||||
slabs.add(Material.BRICK_SLAB);
|
|
||||||
slabs.add(Material.PRISMARINE_SLAB);
|
|
||||||
slabs.add(Material.DARK_PRISMARINE_SLAB);
|
|
||||||
slabs.add(Material.PRISMARINE_BRICK_SLAB);
|
|
||||||
slabs.add(Material.BLACKSTONE_SLAB);
|
|
||||||
slabs.add(Material.POLISHED_BLACKSTONE_SLAB);
|
|
||||||
slabs.add(Material.DEEPSLATE_BRICK_SLAB);
|
|
||||||
slabs.add(Material.DEEPSLATE_TILE_SLAB);
|
|
||||||
slabs.add(Material.COBBLED_DEEPSLATE_SLAB);
|
|
||||||
slabs.add(Material.POLISHED_DEEPSLATE_SLAB);
|
|
||||||
slabs.add(Material.MANGROVE_SLAB);
|
|
||||||
slabs.add(Material.BAMBOO_SLAB);
|
|
||||||
slabs.add(Material.CHERRY_SLAB);
|
|
||||||
|
|
||||||
buttons = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_ceiling_hanging_signs
|
||||||
buttons.add(Material.STONE_BUTTON);
|
hangingSigns = Tag.CEILING_HANGING_SIGNS;
|
||||||
buttons.add(Material.OAK_BUTTON);
|
|
||||||
buttons.add(Material.SPRUCE_BUTTON);
|
|
||||||
buttons.add(Material.BIRCH_BUTTON);
|
|
||||||
buttons.add(Material.JUNGLE_BUTTON);
|
|
||||||
buttons.add(Material.ACACIA_BUTTON);
|
|
||||||
buttons.add(Material.DARK_OAK_BUTTON);
|
|
||||||
buttons.add(Material.WARPED_BUTTON);
|
|
||||||
buttons.add(Material.CRIMSON_BUTTON);
|
|
||||||
buttons.add(Material.MANGROVE_BUTTON);
|
|
||||||
buttons.add(Material.BAMBOO_BUTTON);
|
|
||||||
buttons.add(Material.CHERRY_BUTTON);
|
|
||||||
buttons.add(Material.POLISHED_BLACKSTONE_BUTTON);
|
|
||||||
|
|
||||||
signs = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_all_signs
|
||||||
signs.add(Material.OAK_SIGN);
|
allSigns = Tag.ALL_SIGNS;
|
||||||
signs.add(Material.SPRUCE_SIGN);
|
|
||||||
signs.add(Material.BIRCH_SIGN);
|
|
||||||
signs.add(Material.JUNGLE_SIGN);
|
|
||||||
signs.add(Material.DARK_OAK_SIGN);
|
|
||||||
signs.add(Material.ACACIA_SIGN);
|
|
||||||
signs.add(Material.WARPED_SIGN);
|
|
||||||
signs.add(Material.CRIMSON_SIGN);
|
|
||||||
signs.add(Material.MANGROVE_SIGN);
|
|
||||||
signs.add(Material.BAMBOO_SIGN);
|
|
||||||
signs.add(Material.CHERRY_SIGN);
|
|
||||||
|
|
||||||
wallSigns = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_candles
|
||||||
wallSigns.add(Material.OAK_WALL_SIGN);
|
candles = Tag.CANDLES;
|
||||||
wallSigns.add(Material.SPRUCE_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.BIRCH_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.JUNGLE_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.DARK_OAK_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.ACACIA_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.WARPED_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.CRIMSON_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.MANGROVE_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.BAMBOO_WALL_SIGN);
|
|
||||||
wallSigns.add(Material.CHERRY_WALL_SIGN);
|
|
||||||
|
|
||||||
hangingSigns = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_candle_cakes
|
||||||
hangingSigns.add(Material.OAK_HANGING_SIGN);
|
candleCakes = Tag.CANDLE_CAKES;
|
||||||
hangingSigns.add(Material.SPRUCE_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.BIRCH_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.JUNGLE_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.DARK_OAK_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.ACACIA_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.WARPED_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.CRIMSON_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.MANGROVE_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.BAMBOO_HANGING_SIGN);
|
|
||||||
hangingSigns.add(Material.CHERRY_HANGING_SIGN);
|
|
||||||
|
|
||||||
hangingWallSigns = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_crops
|
||||||
hangingWallSigns.add(Material.OAK_WALL_HANGING_SIGN);
|
cropBlocks = Tag.CROPS;
|
||||||
hangingWallSigns.add(Material.SPRUCE_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.BIRCH_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.JUNGLE_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.DARK_OAK_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.ACACIA_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.WARPED_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.CRIMSON_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.MANGROVE_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.BAMBOO_WALL_HANGING_SIGN);
|
|
||||||
hangingWallSigns.add(Material.CHERRY_WALL_HANGING_SIGN);
|
|
||||||
|
|
||||||
allSigns = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_shulker_boxes
|
||||||
allSigns.addAll(signs);
|
shulkerBoxBlocks = Tag.SHULKER_BOXES;
|
||||||
allSigns.addAll(wallSigns);
|
|
||||||
allSigns.addAll(hangingSigns);
|
|
||||||
allSigns.addAll(hangingWallSigns);
|
|
||||||
unmodifiableSigns = Collections.unmodifiableSet(allSigns);
|
|
||||||
|
|
||||||
singleBlockPlants = new HashSet<>();
|
// https://minecraft.fandom.com/wiki/Tag#blocks_beds
|
||||||
|
bedBlocks = Tag.BEDS;
|
||||||
|
|
||||||
|
// Local Tags
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_standing_signs
|
||||||
|
Set<Material> signs = Tag.STANDING_SIGNS.getValues();
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_wall_signs
|
||||||
|
Set<Material> wallSigns = Tag.WALL_SIGNS.getValues();
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_wool_carpets
|
||||||
|
Set<Material> carpets = Tag.WOOL_CARPETS.getValues();
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_flower_pots
|
||||||
|
Set<Material> flowserPots = Tag.FLOWER_POTS.getValues();
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_saplings
|
||||||
|
Set<Material> saplings = Tag.SAPLINGS.getValues();
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_small_flowers
|
||||||
|
Set<Material> smallFlowers = Tag.SMALL_FLOWERS.getValues();
|
||||||
|
|
||||||
|
// https://minecraft.fandom.com/wiki/Tag#blocks_tall_flowers
|
||||||
|
Set<Material> tallFlowers = Tag.TALL_FLOWERS.getValues();
|
||||||
|
|
||||||
|
Set<Material> bannerStanding = Set.of(Material.WHITE_BANNER,
|
||||||
|
Material.ORANGE_BANNER,
|
||||||
|
Material.MAGENTA_BANNER,
|
||||||
|
Material.LIGHT_BLUE_BANNER,
|
||||||
|
Material.YELLOW_BANNER,
|
||||||
|
Material.LIME_BANNER,
|
||||||
|
Material.PINK_BANNER,
|
||||||
|
Material.GRAY_BANNER,
|
||||||
|
Material.LIGHT_GRAY_BANNER,
|
||||||
|
Material.CYAN_BANNER,
|
||||||
|
Material.PURPLE_BANNER,
|
||||||
|
Material.BLUE_BANNER,
|
||||||
|
Material.BROWN_BANNER,
|
||||||
|
Material.GREEN_BANNER,
|
||||||
|
Material.RED_BANNER,
|
||||||
|
Material.BLACK_BANNER);
|
||||||
|
|
||||||
|
Set<Material> bannerWall = Set.of(Material.WHITE_WALL_BANNER,
|
||||||
|
Material.ORANGE_WALL_BANNER,
|
||||||
|
Material.MAGENTA_WALL_BANNER,
|
||||||
|
Material.LIGHT_BLUE_WALL_BANNER,
|
||||||
|
Material.YELLOW_WALL_BANNER,
|
||||||
|
Material.LIME_WALL_BANNER,
|
||||||
|
Material.PINK_WALL_BANNER,
|
||||||
|
Material.GRAY_WALL_BANNER,
|
||||||
|
Material.LIGHT_GRAY_WALL_BANNER,
|
||||||
|
Material.CYAN_WALL_BANNER,
|
||||||
|
Material.PURPLE_WALL_BANNER,
|
||||||
|
Material.BLUE_WALL_BANNER,
|
||||||
|
Material.BROWN_WALL_BANNER,
|
||||||
|
Material.GREEN_WALL_BANNER,
|
||||||
|
Material.RED_WALL_BANNER,
|
||||||
|
Material.BLACK_WALL_BANNER);
|
||||||
|
|
||||||
|
Set<Material> bannerAll = Tag.BANNERS.getValues();
|
||||||
|
|
||||||
|
Set<Material> headAndSkulls = Set.of(Material.SKELETON_WALL_SKULL,
|
||||||
|
Material.PLAYER_HEAD,
|
||||||
|
Material.PLAYER_WALL_HEAD,
|
||||||
|
Material.CREEPER_HEAD,
|
||||||
|
Material.CREEPER_WALL_HEAD,
|
||||||
|
Material.DRAGON_HEAD,
|
||||||
|
Material.DRAGON_WALL_HEAD,
|
||||||
|
Material.ZOMBIE_HEAD,
|
||||||
|
Material.ZOMBIE_WALL_HEAD,
|
||||||
|
Material.SKELETON_SKULL,
|
||||||
|
Material.SKELETON_WALL_SKULL,
|
||||||
|
Material.WITHER_SKELETON_SKULL,
|
||||||
|
Material.WITHER_SKELETON_WALL_SKULL);
|
||||||
|
|
||||||
|
Set<Material> standingTorch = Set.of(Material.TORCH,
|
||||||
|
Material.SOUL_TORCH,
|
||||||
|
Material.REDSTONE_TORCH);
|
||||||
|
|
||||||
|
Set<Material> wallTorch = Set.of(Material.WALL_TORCH,
|
||||||
|
Material.SOUL_WALL_TORCH,
|
||||||
|
Material.REDSTONE_WALL_TORCH);
|
||||||
|
|
||||||
|
singleBlockPlants = new HashSet<Material>();
|
||||||
|
singleBlockPlants.addAll(smallFlowers);
|
||||||
singleBlockPlants.add(Material.GRASS);
|
singleBlockPlants.add(Material.GRASS);
|
||||||
singleBlockPlants.add(Material.FERN);
|
singleBlockPlants.add(Material.FERN);
|
||||||
singleBlockPlants.add(Material.DEAD_BUSH);
|
singleBlockPlants.add(Material.DEAD_BUSH);
|
||||||
singleBlockPlants.add(Material.DANDELION);
|
|
||||||
singleBlockPlants.add(Material.POPPY);
|
|
||||||
singleBlockPlants.add(Material.BLUE_ORCHID);
|
|
||||||
singleBlockPlants.add(Material.ALLIUM);
|
|
||||||
singleBlockPlants.add(Material.AZURE_BLUET);
|
|
||||||
singleBlockPlants.add(Material.ORANGE_TULIP);
|
|
||||||
singleBlockPlants.add(Material.WHITE_TULIP);
|
|
||||||
singleBlockPlants.add(Material.PINK_TULIP);
|
|
||||||
singleBlockPlants.add(Material.RED_TULIP);
|
|
||||||
singleBlockPlants.add(Material.OXEYE_DAISY);
|
|
||||||
singleBlockPlants.add(Material.BROWN_MUSHROOM);
|
singleBlockPlants.add(Material.BROWN_MUSHROOM);
|
||||||
singleBlockPlants.add(Material.RED_MUSHROOM);
|
singleBlockPlants.add(Material.RED_MUSHROOM);
|
||||||
singleBlockPlants.add(Material.SWEET_BERRY_BUSH);
|
singleBlockPlants.add(Material.SWEET_BERRY_BUSH);
|
||||||
singleBlockPlants.add(Material.LILY_OF_THE_VALLEY);
|
|
||||||
singleBlockPlants.add(Material.CORNFLOWER);
|
|
||||||
singleBlockPlants.add(Material.WITHER_ROSE);
|
|
||||||
singleBlockPlants.add(Material.CRIMSON_FUNGUS);
|
singleBlockPlants.add(Material.CRIMSON_FUNGUS);
|
||||||
singleBlockPlants.add(Material.WARPED_FUNGUS);
|
singleBlockPlants.add(Material.WARPED_FUNGUS);
|
||||||
singleBlockPlants.add(Material.CRIMSON_ROOTS);
|
singleBlockPlants.add(Material.CRIMSON_ROOTS);
|
||||||
@ -312,37 +224,23 @@ public class BukkitUtils {
|
|||||||
singleBlockPlants.add(Material.AZALEA);
|
singleBlockPlants.add(Material.AZALEA);
|
||||||
singleBlockPlants.add(Material.FLOWERING_AZALEA);
|
singleBlockPlants.add(Material.FLOWERING_AZALEA);
|
||||||
singleBlockPlants.add(Material.PINK_PETALS);
|
singleBlockPlants.add(Material.PINK_PETALS);
|
||||||
singleBlockPlants.add(Material.TORCHFLOWER);
|
|
||||||
singleBlockPlants.add(Material.PITCHER_CROP);
|
singleBlockPlants.add(Material.PITCHER_CROP);
|
||||||
|
|
||||||
doublePlants = new HashSet<>();
|
doublePlants = new HashSet<Material>();
|
||||||
|
doublePlants.addAll(tallFlowers);
|
||||||
doublePlants.add(Material.TALL_GRASS);
|
doublePlants.add(Material.TALL_GRASS);
|
||||||
doublePlants.add(Material.LARGE_FERN);
|
doublePlants.add(Material.LARGE_FERN);
|
||||||
doublePlants.add(Material.TALL_SEAGRASS);
|
doublePlants.add(Material.TALL_SEAGRASS);
|
||||||
doublePlants.add(Material.ROSE_BUSH);
|
|
||||||
doublePlants.add(Material.LILAC);
|
|
||||||
doublePlants.add(Material.SUNFLOWER);
|
|
||||||
doublePlants.add(Material.PEONY);
|
|
||||||
doublePlants.add(Material.SMALL_DRIPLEAF);
|
doublePlants.add(Material.SMALL_DRIPLEAF);
|
||||||
doublePlants.add(Material.PITCHER_PLANT);
|
|
||||||
|
|
||||||
blockEquivalents = new HashSet<>(7);
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(2, 3, 60)));
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(8, 9, 79)));
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(10, 11)));
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(61, 62)));
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(73, 74)));
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(75, 76)));
|
|
||||||
blockEquivalents.add(new HashSet<>(Arrays.asList(93, 94)));
|
|
||||||
|
|
||||||
// Blocks that break when they are attached to a block
|
// Blocks that break when they are attached to a block
|
||||||
relativeBreakable = new HashSet<>();
|
relativeBreakable = new HashSet<Material>();
|
||||||
|
relativeBreakable.addAll(bannerWall);
|
||||||
|
relativeBreakable.addAll(buttons.getValues());
|
||||||
relativeBreakable.addAll(wallSigns);
|
relativeBreakable.addAll(wallSigns);
|
||||||
|
relativeBreakable.addAll(wallTorch);
|
||||||
relativeBreakable.add(Material.LADDER);
|
relativeBreakable.add(Material.LADDER);
|
||||||
relativeBreakable.addAll(buttons);
|
|
||||||
relativeBreakable.add(Material.REDSTONE_WALL_TORCH);
|
|
||||||
relativeBreakable.add(Material.LEVER);
|
relativeBreakable.add(Material.LEVER);
|
||||||
relativeBreakable.add(Material.WALL_TORCH);
|
|
||||||
relativeBreakable.add(Material.TRIPWIRE_HOOK);
|
relativeBreakable.add(Material.TRIPWIRE_HOOK);
|
||||||
relativeBreakable.add(Material.COCOA);
|
relativeBreakable.add(Material.COCOA);
|
||||||
relativeBreakable.add(Material.BELL);
|
relativeBreakable.add(Material.BELL);
|
||||||
@ -352,12 +250,20 @@ public class BukkitUtils {
|
|||||||
relativeBreakable.add(Material.LARGE_AMETHYST_BUD);
|
relativeBreakable.add(Material.LARGE_AMETHYST_BUD);
|
||||||
|
|
||||||
// Blocks that break when they are on top of a block
|
// Blocks that break when they are on top of a block
|
||||||
relativeTopBreakable = new HashSet<>();
|
relativeTopBreakable = new HashSet<Material>();
|
||||||
|
relativeTopBreakable.addAll(bannerStanding);
|
||||||
|
relativeTopBreakable.addAll(candleCakes.getValues());
|
||||||
|
relativeTopBreakable.addAll(candles.getValues());
|
||||||
|
relativeTopBreakable.addAll(carpets);
|
||||||
|
relativeTopBreakable.addAll(cropBlocks.getValues());
|
||||||
|
relativeTopBreakable.addAll(doublePlants);
|
||||||
|
relativeTopBreakable.addAll(flowserPots);
|
||||||
|
relativeTopBreakable.addAll(pressurePlates.getValues());
|
||||||
relativeTopBreakable.addAll(saplings);
|
relativeTopBreakable.addAll(saplings);
|
||||||
|
relativeTopBreakable.addAll(signs);
|
||||||
relativeTopBreakable.addAll(singleBlockPlants);
|
relativeTopBreakable.addAll(singleBlockPlants);
|
||||||
relativeTopBreakable.add(Material.WHEAT);
|
relativeTopBreakable.addAll(standingTorch);
|
||||||
relativeTopBreakable.add(Material.POTATO);
|
relativeTopBreakable.addAll(woodenDoors.getValues());
|
||||||
relativeTopBreakable.add(Material.CARROT);
|
|
||||||
relativeTopBreakable.add(Material.LILY_PAD);
|
relativeTopBreakable.add(Material.LILY_PAD);
|
||||||
relativeTopBreakable.add(Material.CACTUS);
|
relativeTopBreakable.add(Material.CACTUS);
|
||||||
relativeTopBreakable.add(Material.SUGAR_CANE);
|
relativeTopBreakable.add(Material.SUGAR_CANE);
|
||||||
@ -367,54 +273,36 @@ public class BukkitUtils {
|
|||||||
relativeTopBreakable.add(Material.ACTIVATOR_RAIL);
|
relativeTopBreakable.add(Material.ACTIVATOR_RAIL);
|
||||||
relativeTopBreakable.add(Material.RAIL);
|
relativeTopBreakable.add(Material.RAIL);
|
||||||
relativeTopBreakable.add(Material.REDSTONE_WIRE);
|
relativeTopBreakable.add(Material.REDSTONE_WIRE);
|
||||||
relativeTopBreakable.addAll(signs);
|
|
||||||
relativeTopBreakable.addAll(pressurePlates);
|
|
||||||
relativeTopBreakable.add(Material.SNOW);
|
relativeTopBreakable.add(Material.SNOW);
|
||||||
relativeTopBreakable.add(Material.REPEATER);
|
relativeTopBreakable.add(Material.REPEATER);
|
||||||
relativeTopBreakable.add(Material.COMPARATOR);
|
relativeTopBreakable.add(Material.COMPARATOR);
|
||||||
relativeTopBreakable.add(Material.TORCH);
|
|
||||||
relativeTopBreakable.add(Material.SOUL_TORCH);
|
|
||||||
relativeTopBreakable.add(Material.REDSTONE_TORCH);
|
|
||||||
relativeTopBreakable.addAll(woodenDoors);
|
|
||||||
relativeTopBreakable.add(Material.IRON_DOOR);
|
relativeTopBreakable.add(Material.IRON_DOOR);
|
||||||
relativeTopBreakable.addAll(carpets);
|
|
||||||
relativeTopBreakable.addAll(doublePlants);
|
|
||||||
relativeTopBreakable.add(Material.BAMBOO);
|
relativeTopBreakable.add(Material.BAMBOO);
|
||||||
relativeTopBreakable.add(Material.BAMBOO_SAPLING);
|
relativeTopBreakable.add(Material.BAMBOO_SAPLING);
|
||||||
relativeTopBreakable.add(Material.TWISTING_VINES);
|
relativeTopBreakable.add(Material.TWISTING_VINES);
|
||||||
relativeTopBreakable.add(Material.TWISTING_VINES_PLANT);
|
relativeTopBreakable.add(Material.TWISTING_VINES_PLANT);
|
||||||
relativeTopBreakable.add(Material.BIG_DRIPLEAF);
|
relativeTopBreakable.add(Material.BIG_DRIPLEAF);
|
||||||
relativeTopBreakable.add(Material.BIG_DRIPLEAF_STEM);
|
relativeTopBreakable.add(Material.BIG_DRIPLEAF_STEM);
|
||||||
for (Material m : Material.values()) {
|
|
||||||
if (m.name().startsWith("POTTED_")) {
|
|
||||||
relativeTopBreakable.add(m);
|
|
||||||
}
|
|
||||||
if (m.name().endsWith("CANDLE_CAKE")) {
|
|
||||||
relativeTopBreakable.add(m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Blocks that break falling entities
|
// Blocks that break falling entities
|
||||||
fallingEntityKillers = new HashSet<>();
|
fallingEntityKillers = new HashSet<Material>();
|
||||||
fallingEntityKillers.addAll(signs);
|
fallingEntityKillers.addAll(bannerAll);
|
||||||
fallingEntityKillers.addAll(wallSigns);
|
fallingEntityKillers.addAll(candleCakes.getValues());
|
||||||
fallingEntityKillers.addAll(pressurePlates);
|
fallingEntityKillers.addAll(candles.getValues());
|
||||||
fallingEntityKillers.addAll(saplings);
|
fallingEntityKillers.addAll(carpets);
|
||||||
fallingEntityKillers.addAll(singleBlockPlants);
|
fallingEntityKillers.addAll(cropBlocks.getValues());
|
||||||
fallingEntityKillers.remove(Material.GRASS);
|
|
||||||
fallingEntityKillers.remove(Material.NETHER_SPROUTS);
|
|
||||||
fallingEntityKillers.addAll(doublePlants);
|
fallingEntityKillers.addAll(doublePlants);
|
||||||
fallingEntityKillers.add(Material.WHEAT);
|
fallingEntityKillers.addAll(pressurePlates.getValues());
|
||||||
fallingEntityKillers.add(Material.CARROT);
|
fallingEntityKillers.addAll(saplings);
|
||||||
fallingEntityKillers.add(Material.POTATO);
|
fallingEntityKillers.addAll(signs);
|
||||||
fallingEntityKillers.add(Material.BEETROOT);
|
fallingEntityKillers.addAll(singleBlockPlants);
|
||||||
|
fallingEntityKillers.addAll(headAndSkulls);
|
||||||
|
fallingEntityKillers.addAll(slabs.getValues());
|
||||||
|
fallingEntityKillers.addAll(standingTorch);
|
||||||
|
fallingEntityKillers.addAll(wallSigns);
|
||||||
|
fallingEntityKillers.addAll(wallTorch);
|
||||||
fallingEntityKillers.add(Material.NETHER_WART);
|
fallingEntityKillers.add(Material.NETHER_WART);
|
||||||
fallingEntityKillers.add(Material.COCOA);
|
fallingEntityKillers.add(Material.COCOA);
|
||||||
fallingEntityKillers.addAll(slabs);
|
|
||||||
fallingEntityKillers.add(Material.TORCH);
|
|
||||||
fallingEntityKillers.add(Material.WALL_TORCH);
|
|
||||||
fallingEntityKillers.add(Material.SOUL_TORCH);
|
|
||||||
fallingEntityKillers.add(Material.SOUL_WALL_TORCH);
|
|
||||||
fallingEntityKillers.add(Material.FLOWER_POT);
|
fallingEntityKillers.add(Material.FLOWER_POT);
|
||||||
fallingEntityKillers.add(Material.POWERED_RAIL);
|
fallingEntityKillers.add(Material.POWERED_RAIL);
|
||||||
fallingEntityKillers.add(Material.DETECTOR_RAIL);
|
fallingEntityKillers.add(Material.DETECTOR_RAIL);
|
||||||
@ -422,62 +310,15 @@ public class BukkitUtils {
|
|||||||
fallingEntityKillers.add(Material.RAIL);
|
fallingEntityKillers.add(Material.RAIL);
|
||||||
fallingEntityKillers.add(Material.LEVER);
|
fallingEntityKillers.add(Material.LEVER);
|
||||||
fallingEntityKillers.add(Material.REDSTONE_WIRE);
|
fallingEntityKillers.add(Material.REDSTONE_WIRE);
|
||||||
fallingEntityKillers.add(Material.REDSTONE_TORCH);
|
|
||||||
fallingEntityKillers.add(Material.REDSTONE_WALL_TORCH);
|
|
||||||
fallingEntityKillers.add(Material.REPEATER);
|
fallingEntityKillers.add(Material.REPEATER);
|
||||||
fallingEntityKillers.add(Material.COMPARATOR);
|
fallingEntityKillers.add(Material.COMPARATOR);
|
||||||
fallingEntityKillers.add(Material.DAYLIGHT_DETECTOR);
|
fallingEntityKillers.add(Material.DAYLIGHT_DETECTOR);
|
||||||
fallingEntityKillers.addAll(carpets);
|
fallingEntityKillers.remove(Material.GRASS);
|
||||||
fallingEntityKillers.add(Material.PLAYER_HEAD);
|
fallingEntityKillers.remove(Material.NETHER_SPROUTS);
|
||||||
fallingEntityKillers.add(Material.PLAYER_WALL_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.CREEPER_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.CREEPER_WALL_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.DRAGON_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.DRAGON_WALL_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.ZOMBIE_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.ZOMBIE_WALL_HEAD);
|
|
||||||
fallingEntityKillers.add(Material.SKELETON_SKULL);
|
|
||||||
fallingEntityKillers.add(Material.SKELETON_WALL_SKULL);
|
|
||||||
fallingEntityKillers.add(Material.WITHER_SKELETON_SKULL);
|
|
||||||
fallingEntityKillers.add(Material.WITHER_SKELETON_WALL_SKULL);
|
|
||||||
for (Material m : Material.values()) {
|
|
||||||
if (m.name().contains("CANDLE")) {
|
|
||||||
fallingEntityKillers.add(m);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crop Blocks
|
|
||||||
cropBlocks = new HashSet<>();
|
|
||||||
cropBlocks.add(Material.WHEAT);
|
|
||||||
cropBlocks.add(Material.MELON_STEM);
|
|
||||||
cropBlocks.add(Material.PUMPKIN_STEM);
|
|
||||||
cropBlocks.add(Material.CARROT);
|
|
||||||
cropBlocks.add(Material.POTATO);
|
|
||||||
cropBlocks.add(Material.BEETROOT);
|
|
||||||
cropBlocks.add(Material.TORCHFLOWER_CROP);
|
|
||||||
|
|
||||||
// Shulker Boxes
|
|
||||||
shulkerBoxBlocks = new HashSet<>();
|
|
||||||
shulkerBoxBlocks.add(Material.SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.BLACK_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.BLUE_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.LIGHT_GRAY_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.BROWN_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.CYAN_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.GRAY_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.GREEN_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.LIGHT_BLUE_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.MAGENTA_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.LIME_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.ORANGE_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.PINK_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.PURPLE_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.RED_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.WHITE_SHULKER_BOX);
|
|
||||||
shulkerBoxBlocks.add(Material.YELLOW_SHULKER_BOX);
|
|
||||||
|
|
||||||
// Container Blocks
|
// Container Blocks
|
||||||
containerBlocks = new HashSet<>();
|
containerBlocks = new HashSet<Material>();
|
||||||
|
containerBlocks.addAll(shulkerBoxBlocks.getValues());
|
||||||
containerBlocks.add(Material.CHEST);
|
containerBlocks.add(Material.CHEST);
|
||||||
containerBlocks.add(Material.TRAPPED_CHEST);
|
containerBlocks.add(Material.TRAPPED_CHEST);
|
||||||
containerBlocks.add(Material.DISPENSER);
|
containerBlocks.add(Material.DISPENSER);
|
||||||
@ -485,7 +326,6 @@ public class BukkitUtils {
|
|||||||
containerBlocks.add(Material.HOPPER);
|
containerBlocks.add(Material.HOPPER);
|
||||||
containerBlocks.add(Material.BREWING_STAND);
|
containerBlocks.add(Material.BREWING_STAND);
|
||||||
containerBlocks.add(Material.FURNACE);
|
containerBlocks.add(Material.FURNACE);
|
||||||
containerBlocks.addAll(shulkerBoxBlocks);
|
|
||||||
containerBlocks.add(Material.BARREL);
|
containerBlocks.add(Material.BARREL);
|
||||||
containerBlocks.add(Material.BLAST_FURNACE);
|
containerBlocks.add(Material.BLAST_FURNACE);
|
||||||
containerBlocks.add(Material.SMOKER);
|
containerBlocks.add(Material.SMOKER);
|
||||||
@ -507,24 +347,20 @@ public class BukkitUtils {
|
|||||||
projectileItems.put(EntityType.WITHER_SKULL, Material.WITHER_SKELETON_SKULL);
|
projectileItems.put(EntityType.WITHER_SKULL, Material.WITHER_SKELETON_SKULL);
|
||||||
projectileItems.put(EntityType.FIREWORK, Material.FIREWORK_ROCKET);
|
projectileItems.put(EntityType.FIREWORK, Material.FIREWORK_ROCKET);
|
||||||
|
|
||||||
nonFluidProofBlocks = new HashSet<>();
|
nonFluidProofBlocks = new HashSet<Material>();
|
||||||
nonFluidProofBlocks.addAll(singleBlockPlants);
|
nonFluidProofBlocks.addAll(carpets);
|
||||||
|
nonFluidProofBlocks.addAll(cropBlocks.getValues());
|
||||||
nonFluidProofBlocks.addAll(doublePlants);
|
nonFluidProofBlocks.addAll(doublePlants);
|
||||||
nonFluidProofBlocks.add(Material.REDSTONE_WALL_TORCH);
|
nonFluidProofBlocks.addAll(headAndSkulls);
|
||||||
|
nonFluidProofBlocks.addAll(pressurePlates.getValues());
|
||||||
|
nonFluidProofBlocks.addAll(saplings);
|
||||||
|
nonFluidProofBlocks.addAll(singleBlockPlants);
|
||||||
|
nonFluidProofBlocks.addAll(standingTorch);
|
||||||
|
nonFluidProofBlocks.addAll(wallTorch);
|
||||||
nonFluidProofBlocks.add(Material.LEVER);
|
nonFluidProofBlocks.add(Material.LEVER);
|
||||||
nonFluidProofBlocks.add(Material.WALL_TORCH);
|
|
||||||
nonFluidProofBlocks.add(Material.SOUL_WALL_TORCH);
|
|
||||||
nonFluidProofBlocks.add(Material.TRIPWIRE_HOOK);
|
nonFluidProofBlocks.add(Material.TRIPWIRE_HOOK);
|
||||||
nonFluidProofBlocks.add(Material.COCOA);
|
nonFluidProofBlocks.add(Material.COCOA);
|
||||||
nonFluidProofBlocks.addAll(pressurePlates);
|
|
||||||
nonFluidProofBlocks.addAll(saplings);
|
|
||||||
nonFluidProofBlocks.add(Material.WHEAT);
|
|
||||||
nonFluidProofBlocks.add(Material.CARROT);
|
|
||||||
nonFluidProofBlocks.add(Material.POTATO);
|
|
||||||
nonFluidProofBlocks.add(Material.BEETROOT);
|
|
||||||
nonFluidProofBlocks.add(Material.NETHER_WART);
|
nonFluidProofBlocks.add(Material.NETHER_WART);
|
||||||
nonFluidProofBlocks.add(Material.TORCH);
|
|
||||||
nonFluidProofBlocks.add(Material.SOUL_TORCH);
|
|
||||||
nonFluidProofBlocks.add(Material.FLOWER_POT);
|
nonFluidProofBlocks.add(Material.FLOWER_POT);
|
||||||
// nonFluidProofBlocks.add(Material.POWERED_RAIL);
|
// nonFluidProofBlocks.add(Material.POWERED_RAIL);
|
||||||
// nonFluidProofBlocks.add(Material.DETECTOR_RAIL);
|
// nonFluidProofBlocks.add(Material.DETECTOR_RAIL);
|
||||||
@ -532,91 +368,31 @@ public class BukkitUtils {
|
|||||||
// nonFluidProofBlocks.add(Material.RAIL);
|
// nonFluidProofBlocks.add(Material.RAIL);
|
||||||
nonFluidProofBlocks.add(Material.LEVER);
|
nonFluidProofBlocks.add(Material.LEVER);
|
||||||
nonFluidProofBlocks.add(Material.REDSTONE_WIRE);
|
nonFluidProofBlocks.add(Material.REDSTONE_WIRE);
|
||||||
nonFluidProofBlocks.add(Material.REDSTONE_TORCH);
|
|
||||||
nonFluidProofBlocks.add(Material.REPEATER);
|
nonFluidProofBlocks.add(Material.REPEATER);
|
||||||
nonFluidProofBlocks.add(Material.COMPARATOR);
|
nonFluidProofBlocks.add(Material.COMPARATOR);
|
||||||
nonFluidProofBlocks.add(Material.DAYLIGHT_DETECTOR);
|
nonFluidProofBlocks.add(Material.DAYLIGHT_DETECTOR);
|
||||||
nonFluidProofBlocks.addAll(carpets);
|
|
||||||
|
|
||||||
alwaysWaterlogged = new HashSet<>();
|
alwaysWaterlogged = Set.of(Material.SEAGRASS,
|
||||||
alwaysWaterlogged.add(Material.SEAGRASS);
|
Material.TALL_SEAGRASS,
|
||||||
alwaysWaterlogged.add(Material.TALL_SEAGRASS);
|
Material.KELP,
|
||||||
alwaysWaterlogged.add(Material.KELP);
|
Material.KELP_PLANT);
|
||||||
alwaysWaterlogged.add(Material.KELP_PLANT);
|
|
||||||
|
|
||||||
bedBlocks = new HashSet<>();
|
concreteBlocks = Set.of(Material.BLACK_CONCRETE,
|
||||||
bedBlocks.add(Material.BLACK_BED);
|
Material.BLUE_CONCRETE,
|
||||||
bedBlocks.add(Material.BLUE_BED);
|
Material.LIGHT_GRAY_CONCRETE,
|
||||||
bedBlocks.add(Material.LIGHT_GRAY_BED);
|
Material.BROWN_CONCRETE,
|
||||||
bedBlocks.add(Material.BROWN_BED);
|
Material.CYAN_CONCRETE,
|
||||||
bedBlocks.add(Material.CYAN_BED);
|
Material.GRAY_CONCRETE,
|
||||||
bedBlocks.add(Material.GRAY_BED);
|
Material.GREEN_CONCRETE,
|
||||||
bedBlocks.add(Material.GREEN_BED);
|
Material.LIGHT_BLUE_CONCRETE,
|
||||||
bedBlocks.add(Material.LIGHT_BLUE_BED);
|
Material.MAGENTA_CONCRETE,
|
||||||
bedBlocks.add(Material.MAGENTA_BED);
|
Material.LIME_CONCRETE,
|
||||||
bedBlocks.add(Material.LIME_BED);
|
Material.ORANGE_CONCRETE,
|
||||||
bedBlocks.add(Material.ORANGE_BED);
|
Material.PINK_CONCRETE,
|
||||||
bedBlocks.add(Material.PINK_BED);
|
Material.PURPLE_CONCRETE,
|
||||||
bedBlocks.add(Material.PURPLE_BED);
|
Material.RED_CONCRETE,
|
||||||
bedBlocks.add(Material.RED_BED);
|
Material.WHITE_CONCRETE,
|
||||||
bedBlocks.add(Material.WHITE_BED);
|
Material.YELLOW_CONCRETE);
|
||||||
bedBlocks.add(Material.YELLOW_BED);
|
|
||||||
|
|
||||||
concreteBlocks = new HashSet<>();
|
|
||||||
concreteBlocks.add(Material.BLACK_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.BLUE_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.LIGHT_GRAY_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.BROWN_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.CYAN_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.GRAY_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.GREEN_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.LIGHT_BLUE_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.MAGENTA_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.LIME_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.ORANGE_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.PINK_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.PURPLE_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.RED_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.WHITE_CONCRETE);
|
|
||||||
concreteBlocks.add(Material.YELLOW_CONCRETE);
|
|
||||||
|
|
||||||
candles = new HashSet<>();
|
|
||||||
candles.add(Material.CANDLE);
|
|
||||||
candles.add(Material.BLACK_CANDLE);
|
|
||||||
candles.add(Material.BLUE_CANDLE);
|
|
||||||
candles.add(Material.LIGHT_GRAY_CANDLE);
|
|
||||||
candles.add(Material.BROWN_CANDLE);
|
|
||||||
candles.add(Material.CYAN_CANDLE);
|
|
||||||
candles.add(Material.GRAY_CANDLE);
|
|
||||||
candles.add(Material.GREEN_CANDLE);
|
|
||||||
candles.add(Material.LIGHT_BLUE_CANDLE);
|
|
||||||
candles.add(Material.MAGENTA_CANDLE);
|
|
||||||
candles.add(Material.LIME_CANDLE);
|
|
||||||
candles.add(Material.ORANGE_CANDLE);
|
|
||||||
candles.add(Material.PINK_CANDLE);
|
|
||||||
candles.add(Material.PURPLE_CANDLE);
|
|
||||||
candles.add(Material.RED_CANDLE);
|
|
||||||
candles.add(Material.WHITE_CANDLE);
|
|
||||||
candles.add(Material.YELLOW_CANDLE);
|
|
||||||
|
|
||||||
candleCakes = new HashSet<>();
|
|
||||||
candleCakes.add(Material.CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.BLACK_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.BLUE_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.LIGHT_GRAY_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.BROWN_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.CYAN_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.GRAY_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.GREEN_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.LIGHT_BLUE_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.MAGENTA_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.LIME_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.ORANGE_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.PINK_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.PURPLE_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.RED_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.WHITE_CANDLE_CAKE);
|
|
||||||
candleCakes.add(Material.YELLOW_CANDLE_CAKE);
|
|
||||||
|
|
||||||
dyes = new HashMap<>();
|
dyes = new HashMap<>();
|
||||||
dyes.put(Material.BLACK_DYE, DyeColor.BLACK);
|
dyes.put(Material.BLACK_DYE, DyeColor.BLACK);
|
||||||
@ -638,7 +414,7 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static final BlockFace[] relativeBlockFaces = new BlockFace[] {
|
private static final BlockFace[] relativeBlockFaces = new BlockFace[] {
|
||||||
BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN
|
BlockFace.EAST, BlockFace.WEST, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.UP, BlockFace.DOWN
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -741,52 +517,40 @@ public class BukkitUtils {
|
|||||||
return compressed.toArray(new ItemStack[compressed.size()]);
|
return compressed.toArray(new ItemStack[compressed.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean equalTypes(int type1, int type2) {
|
|
||||||
if (type1 == type2) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
for (final Set<Integer> equivalent : blockEquivalents) {
|
|
||||||
if (equivalent.contains(type1) && equivalent.contains(type2)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String friendlyWorldname(String worldName) {
|
public static String friendlyWorldname(String worldName) {
|
||||||
return new File(worldName).getName();
|
return new File(worldName).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Set<Integer>> getBlockEquivalents() {
|
|
||||||
return blockEquivalents;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<Material> getRelativeBreakables() {
|
public static Set<Material> getRelativeBreakables() {
|
||||||
return relativeBreakable;
|
return Collections.unmodifiableSet(relativeBreakable);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getRelativeTopBreakabls() {
|
public static boolean isRelativeTopBreakable(Material type) {
|
||||||
return relativeTopBreakable;
|
return relativeTopBreakable.contains(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getFallingEntityKillers() {
|
public static boolean isFallingEntityKiller(Material type) {
|
||||||
return fallingEntityKillers;
|
return fallingEntityKillers.contains(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getNonFluidProofBlocks() {
|
public static boolean isNonFluidProofBlock(Material type) {
|
||||||
return nonFluidProofBlocks;
|
return nonFluidProofBlocks.contains(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getCropBlocks() {
|
public static boolean isCropBlock(Material type) {
|
||||||
return cropBlocks;
|
return cropBlocks.isTagged(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getContainerBlocks() {
|
public static boolean isContainerBlock(Material type) {
|
||||||
return containerBlocks;
|
return containerBlocks.contains(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getShulkerBoxBlocks() {
|
public static Set<Material> getShulkerBoxBlocks() {
|
||||||
return shulkerBoxBlocks;
|
return shulkerBoxBlocks.getValues(); // Already an unmodifiable Set
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isShulkerBoxBlock(Material type) {
|
||||||
|
return shulkerBoxBlocks.isTagged(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isConcreteBlock(Material m) {
|
public static boolean isConcreteBlock(Material m) {
|
||||||
@ -794,8 +558,8 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String entityName(Entity entity) {
|
public static String entityName(Entity entity) {
|
||||||
if (entity instanceof Player) {
|
if (entity instanceof Player player) {
|
||||||
return ((Player) entity).getName();
|
return player.getName();
|
||||||
}
|
}
|
||||||
if (entity instanceof TNTPrimed) {
|
if (entity instanceof TNTPrimed) {
|
||||||
return "TNT";
|
return "TNT";
|
||||||
@ -856,8 +620,8 @@ public class BukkitUtils {
|
|||||||
Material mat = block.getType();
|
Material mat = block.getType();
|
||||||
if (canDirectlyFallIn(mat)) {
|
if (canDirectlyFallIn(mat)) {
|
||||||
return true;
|
return true;
|
||||||
} else if (getFallingEntityKillers().contains(mat) || singleBlockPlants.contains(mat) || mat == Material.VINE) {
|
} else if (isFallingEntityKiller(mat) || singleBlockPlants.contains(mat) || mat == Material.VINE) {
|
||||||
if (slabs.contains(mat)) {
|
if (slabs.isTagged(mat)) {
|
||||||
if (((Slab) block.getBlockData()).getType() != Type.BOTTOM) {
|
if (((Slab) block.getBlockData()).getType() != Type.BOTTOM) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -880,11 +644,11 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWoodenDoor(Material m) {
|
public static boolean isWoodenDoor(Material m) {
|
||||||
return woodenDoors.contains(m);
|
return woodenDoors.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isButton(Material m) {
|
public static boolean isButton(Material m) {
|
||||||
return buttons.contains(m);
|
return buttons.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isEmpty(Material m) {
|
public static boolean isEmpty(Material m) {
|
||||||
@ -947,7 +711,7 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBed(Material type) {
|
public static boolean isBed(Material type) {
|
||||||
return bedBlocks.contains(type);
|
return bedBlocks.isTagged(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isDye(Material type) {
|
public static boolean isDye(Material type) {
|
||||||
@ -1196,7 +960,7 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Set<Material> getAllSignMaterials() {
|
public static Set<Material> getAllSignMaterials() {
|
||||||
return unmodifiableSigns;
|
return allSigns.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAlwaysWaterlogged(Material m) {
|
public static boolean isAlwaysWaterlogged(Material m) {
|
||||||
@ -1204,31 +968,31 @@ public class BukkitUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCandle(Material m) {
|
public static boolean isCandle(Material m) {
|
||||||
return candles.contains(m);
|
return candles.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCandleCake(Material m) {
|
public static boolean isCandleCake(Material m) {
|
||||||
return candleCakes.contains(m);
|
return candleCakes.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isHangingSign(Material m) {
|
public static boolean isHangingSign(Material m) {
|
||||||
return hangingSigns.contains(m);
|
return hangingSigns.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isFenceGate(Material m) {
|
public static boolean isFenceGate(Material m) {
|
||||||
return fenceGates.contains(m);
|
return fenceGates.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isWoodenTrapdoor(Material m) {
|
public static boolean isWoodenTrapdoor(Material m) {
|
||||||
return woodenTrapdoors.contains(m);
|
return woodenTrapdoors.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPressurePlate(Material m) {
|
public static boolean isPressurePlate(Material m) {
|
||||||
return pressurePlates.contains(m);
|
return pressurePlates.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isSign(Material m) {
|
public static boolean isSign(Material m) {
|
||||||
return allSigns.contains(m);
|
return allSigns.isTagged(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Side getFacingSignSide(Entity entity, Block sign) {
|
public static Side getFacingSignSide(Entity entity, Block sign) {
|
||||||
|
@ -65,7 +65,7 @@ public class LoggingUtil {
|
|||||||
if (y > loc.getWorld().getMinHeight()) {
|
if (y > loc.getWorld().getMinHeight()) {
|
||||||
// Run this check to avoid false positives
|
// Run this check to avoid false positives
|
||||||
Location finalLoc = new Location(loc.getWorld(), x, y, z);
|
Location finalLoc = new Location(loc.getWorld(), x, y, z);
|
||||||
if (y == initialy || !BukkitUtils.getFallingEntityKillers().contains(finalLoc.getBlock().getType())) {
|
if (y == initialy || !BukkitUtils.isFallingEntityKiller(finalLoc.getBlock().getType())) {
|
||||||
if (BukkitUtils.isEmpty(finalLoc.getBlock().getType())) {
|
if (BukkitUtils.isEmpty(finalLoc.getBlock().getType())) {
|
||||||
consumer.queueBlockPlace(actor, finalLoc, placed.getBlockData());
|
consumer.queueBlockPlace(actor, finalLoc, placed.getBlockData());
|
||||||
} else {
|
} else {
|
||||||
@ -103,7 +103,7 @@ public class LoggingUtil {
|
|||||||
if (y > loc.getWorld().getMinHeight()) {
|
if (y > loc.getWorld().getMinHeight()) {
|
||||||
Location finalLoc = new Location(loc.getWorld(), x, y, z);
|
Location finalLoc = new Location(loc.getWorld(), x, y, z);
|
||||||
// Run this check to avoid false positives
|
// Run this check to avoid false positives
|
||||||
if (!BukkitUtils.getFallingEntityKillers().contains(finalLoc.getBlock().getType())) {
|
if (!BukkitUtils.isFallingEntityKiller(finalLoc.getBlock().getType())) {
|
||||||
finalLoc.add(0, up, 0); // Add this here after checking for block breakers
|
finalLoc.add(0, up, 0); // Add this here after checking for block breakers
|
||||||
if (BukkitUtils.isEmpty(finalLoc.getBlock().getType())) {
|
if (BukkitUtils.isEmpty(finalLoc.getBlock().getType())) {
|
||||||
consumer.queueBlockPlace(actor, finalLoc, checkBlock.getBlockData());
|
consumer.queueBlockPlace(actor, finalLoc, checkBlock.getBlockData());
|
||||||
@ -155,7 +155,7 @@ public class LoggingUtil {
|
|||||||
|
|
||||||
Block checkBlock = origin.getRelative(BlockFace.UP);
|
Block checkBlock = origin.getRelative(BlockFace.UP);
|
||||||
Material typeAbove = checkBlock.getType();
|
Material typeAbove = checkBlock.getType();
|
||||||
if (BukkitUtils.getRelativeTopBreakabls().contains(typeAbove)) {
|
if (BukkitUtils.isRelativeTopBreakable(typeAbove)) {
|
||||||
if (typeAbove == Material.IRON_DOOR || BukkitUtils.isWoodenDoor(typeAbove)) {
|
if (typeAbove == Material.IRON_DOOR || BukkitUtils.isWoodenDoor(typeAbove)) {
|
||||||
Block doorBlock = checkBlock;
|
Block doorBlock = checkBlock;
|
||||||
// If the doorBlock is the top half a door the player simply punched a door
|
// If the doorBlock is the top half a door the player simply punched a door
|
||||||
@ -185,7 +185,7 @@ public class LoggingUtil {
|
|||||||
// check next blocks above
|
// check next blocks above
|
||||||
checkBlock = checkBlock.getRelative(BlockFace.UP);
|
checkBlock = checkBlock.getRelative(BlockFace.UP);
|
||||||
typeAbove = checkBlock.getType();
|
typeAbove = checkBlock.getType();
|
||||||
while (BukkitUtils.getRelativeTopBreakabls().contains(typeAbove)) {
|
while (BukkitUtils.isRelativeTopBreakable(typeAbove)) {
|
||||||
consumer.queueBlockBreak(actor, checkBlock.getState());
|
consumer.queueBlockBreak(actor, checkBlock.getState());
|
||||||
checkBlock = checkBlock.getRelative(BlockFace.UP);
|
checkBlock = checkBlock.getRelative(BlockFace.UP);
|
||||||
typeAbove = checkBlock.getType();
|
typeAbove = checkBlock.getType();
|
||||||
@ -276,7 +276,7 @@ public class LoggingUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Location> relativeBreakables = BukkitUtils.getBlocksNearby(origin, BukkitUtils.getRelativeBreakables());
|
List<Location> relativeBreakables = BukkitUtils.getBlocksNearby(origin, BukkitUtils.getRelativeBreakables());
|
||||||
if (relativeBreakables.size() != 0) {
|
if (!relativeBreakables.isEmpty()) {
|
||||||
for (Location location : relativeBreakables) {
|
for (Location location : relativeBreakables) {
|
||||||
Block block = location.getBlock();
|
Block block = location.getBlock();
|
||||||
BlockData blockData = block.getBlockData();
|
BlockData blockData = block.getBlockData();
|
||||||
|
Reference in New Issue
Block a user