mirror of
https://github.com/CivMC/Civ.git
synced 2026-07-18 00:20:44 +00:00
Remove MoreTags
This commit is contained in:
@@ -12,6 +12,7 @@ import org.bukkit.Tag;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.Container;
|
||||
import org.bukkit.block.data.Brushable;
|
||||
import org.bukkit.block.data.Lightable;
|
||||
import org.bukkit.block.data.Openable;
|
||||
import org.bukkit.block.data.type.Comparator;
|
||||
@@ -46,13 +47,14 @@ import org.bukkit.event.player.PlayerTakeLecternBookEvent;
|
||||
import org.bukkit.event.world.StructureGrowEvent;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import vg.civcraft.mc.citadel.Citadel;
|
||||
import vg.civcraft.mc.citadel.CitadelPermissionHandler;
|
||||
import vg.civcraft.mc.citadel.CitadelUtility;
|
||||
import vg.civcraft.mc.citadel.ReinforcementLogic;
|
||||
import vg.civcraft.mc.citadel.model.Reinforcement;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.ItemUtils;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.MoreTags;
|
||||
import vg.civcraft.mc.civmodcore.utilities.DoubleInteractFixer;
|
||||
import vg.civcraft.mc.civmodcore.world.WorldUtils;
|
||||
import vg.civcraft.mc.namelayer.group.Group;
|
||||
@@ -361,40 +363,51 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
public void preventStrippingLogs(PlayerInteractEvent pie) {
|
||||
if (!pie.hasBlock()) {
|
||||
@EventHandler(
|
||||
priority = EventPriority.LOW,
|
||||
ignoreCancelled = true
|
||||
)
|
||||
private void preventStrippingLogs(
|
||||
final @NotNull PlayerInteractEvent event
|
||||
) {
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
return;
|
||||
}
|
||||
if (pie.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||
final Block block = event.getClickedBlock();
|
||||
if (block == null) { // This shouldn't happen, but just in case
|
||||
return;
|
||||
}
|
||||
Block block = pie.getClickedBlock();
|
||||
if (!MoreTags.LOGS.isTagged(block.getType())) {
|
||||
switch (block.getType()) {
|
||||
case ACACIA_LOG:
|
||||
case BIRCH_LOG:
|
||||
case CHERRY_LOG:
|
||||
case DARK_OAK_LOG:
|
||||
case JUNGLE_LOG:
|
||||
case MANGROVE_LOG:
|
||||
case OAK_LOG:
|
||||
case SPRUCE_LOG:
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
final Player player = event.getPlayer();
|
||||
final ItemStack tool = switch (event.getHand()) {
|
||||
case HAND -> player.getInventory().getItemInMainHand();
|
||||
case OFF_HAND -> player.getInventory().getItemInOffHand();
|
||||
case null, default -> null;
|
||||
};
|
||||
if (ItemUtils.isEmptyItem(tool) || !MaterialTags.AXES.isTagged(tool)) {
|
||||
return;
|
||||
}
|
||||
EquipmentSlot hand = pie.getHand();
|
||||
if (hand != EquipmentSlot.HAND && hand != EquipmentSlot.OFF_HAND) {
|
||||
final Reinforcement rein = Citadel.getInstance().getReinforcementManager().getReinforcement(block);
|
||||
if (rein == null || rein.hasPermission(player, CitadelPermissionHandler.getModifyBlocks())) {
|
||||
return;
|
||||
}
|
||||
ItemStack relevant;
|
||||
Player p = pie.getPlayer();
|
||||
if (hand == EquipmentSlot.HAND) {
|
||||
relevant = p.getInventory().getItemInMainHand();
|
||||
} else {
|
||||
relevant = p.getInventory().getItemInOffHand();
|
||||
}
|
||||
if (!MaterialTags.AXES.isTagged(relevant.getType())) {
|
||||
return;
|
||||
}
|
||||
Reinforcement rein = Citadel.getInstance().getReinforcementManager().getReinforcement(block);
|
||||
if (rein == null) {
|
||||
return;
|
||||
}
|
||||
if (!rein.hasPermission(p, CitadelPermissionHandler.getModifyBlocks())) {
|
||||
p.sendMessage(ChatColor.RED + "You do not have permission to modify this block");
|
||||
pie.setCancelled(true);
|
||||
}
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(Component.text(
|
||||
"You do not have permission to modify this block",
|
||||
NamedTextColor.RED
|
||||
));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.NORMAL)
|
||||
@@ -417,7 +430,7 @@ public class BlockListener implements Listener {
|
||||
*/
|
||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||
public void preventWaxingCopper(BlockPlaceEvent event) {
|
||||
if (!MoreTags.COPPER_BLOCKS.isTagged(event.getBlockPlaced().getType())) {
|
||||
if (!MaterialTags.COPPER_BLOCKS.isTagged(event.getBlockPlaced().getType())) {
|
||||
return;
|
||||
}
|
||||
Reinforcement reinforcement = Citadel.getInstance().getReinforcementManager().getReinforcement(event.getBlockPlaced());
|
||||
@@ -552,7 +565,7 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
Block block = pie.getClickedBlock();
|
||||
Material type = block.getType();
|
||||
if (!MoreTags.LIGHTABLE_CANDLES.isTagged(type)) {
|
||||
if (!Tag.CANDLES.isTagged(type) && !Tag.CANDLE_CAKES.isTagged(type)) {
|
||||
return;
|
||||
}
|
||||
if (!pie.hasItem()) {
|
||||
@@ -774,7 +787,7 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
Block block = pie.getClickedBlock();
|
||||
Material type = block.getType();
|
||||
if (!MoreTags.DUSTABLE.isTagged(type)) {
|
||||
if (!(block.getBlockData() instanceof Brushable)) {
|
||||
return;
|
||||
}
|
||||
EquipmentSlot hand = pie.getHand();
|
||||
|
||||
@@ -15,7 +15,6 @@ import vg.civcraft.mc.civmodcore.dao.DatabaseCredentials;
|
||||
import vg.civcraft.mc.civmodcore.dao.ManagedDatasource;
|
||||
import vg.civcraft.mc.civmodcore.inventory.gui.ClickableInventoryListener;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.EnchantUtils;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.MoreTags;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.SpawnEggUtils;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.TreeTypeUtils;
|
||||
import vg.civcraft.mc.civmodcore.players.PlayerNames;
|
||||
@@ -99,7 +98,6 @@ public class CivModCorePlugin extends ACivMod {
|
||||
this.commands.registerCommand(new ChunkMetaCommand());
|
||||
// Load APIs
|
||||
EnchantUtils.loadEnchantAbbreviations();
|
||||
MoreTags.init();
|
||||
SpawnEggUtils.init();
|
||||
TreeTypeUtils.init();
|
||||
BottomLineAPI.init();
|
||||
|
||||
@@ -1,342 +0,0 @@
|
||||
package vg.civcraft.mc.civmodcore.inventory.items;
|
||||
|
||||
import com.destroystokyo.paper.MaterialTags;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Keyed;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.block.data.Ageable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import vg.civcraft.mc.civmodcore.utilities.CivLogger;
|
||||
import vg.civcraft.mc.civmodcore.utilities.KeyedUtils;
|
||||
|
||||
/**
|
||||
* Fills in the gaps between {@link Tag} and {@link MaterialTags}.
|
||||
*/
|
||||
public final class MoreTags {
|
||||
|
||||
/**
|
||||
* This differs from {@link Tag#LOGS} as that includes every type of wood,
|
||||
* including stripped logs and all planks.
|
||||
*/
|
||||
public static final Tag<Material> LOGS = new BetterTag<>("logs",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.ACACIA_LOG)
|
||||
.add(Material.BIRCH_LOG)
|
||||
.add(Material.CHERRY_LOG)
|
||||
.add(Material.DARK_OAK_LOG)
|
||||
.add(Material.JUNGLE_LOG)
|
||||
.add(Material.MANGROVE_LOG)
|
||||
.add(Material.OAK_LOG)
|
||||
.add(Material.SPRUCE_LOG)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> STRIPPED_LOGS = new BetterTag<>("stripped_logs",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.STRIPPED_ACACIA_LOG)
|
||||
.add(Material.STRIPPED_BIRCH_LOG)
|
||||
.add(Material.STRIPPED_CHERRY_LOG)
|
||||
.add(Material.STRIPPED_DARK_OAK_LOG)
|
||||
.add(Material.STRIPPED_JUNGLE_LOG)
|
||||
.add(Material.STRIPPED_MANGROVE_LOG)
|
||||
.add(Material.STRIPPED_OAK_LOG)
|
||||
.add(Material.STRIPPED_SPRUCE_LOG)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> STRIPPED_PLANKS = new BetterTag<>("stripped_planks",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.STRIPPED_ACACIA_WOOD)
|
||||
.add(Material.STRIPPED_BIRCH_WOOD)
|
||||
.add(Material.STRIPPED_CHERRY_WOOD)
|
||||
.add(Material.STRIPPED_DARK_OAK_WOOD)
|
||||
.add(Material.STRIPPED_JUNGLE_WOOD)
|
||||
.add(Material.STRIPPED_MANGROVE_WOOD)
|
||||
.add(Material.STRIPPED_OAK_WOOD)
|
||||
.add(Material.STRIPPED_SPRUCE_WOOD)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> STRIPPED_ALL = new BetterTag<>("stripped_all",
|
||||
ImmutableSet.<Material>builder()
|
||||
.addAll(STRIPPED_LOGS.getValues())
|
||||
.addAll(STRIPPED_PLANKS.getValues())
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> DIRT = new BetterTag<>("dirt",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.FARMLAND)
|
||||
.add(Material.DIRT_PATH)
|
||||
.add(Material.GRASS_BLOCK)
|
||||
.add(Material.DIRT)
|
||||
.add(Material.COARSE_DIRT)
|
||||
.add(Material.PODZOL)
|
||||
.add(Material.ROOTED_DIRT)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> POTIONS = new BetterTag<>("potion",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.POTION)
|
||||
.add(Material.SPLASH_POTION)
|
||||
.add(Material.LINGERING_POTION)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> DUSTABLE = new BetterTag<>("dustable",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.SUSPICIOUS_GRAVEL)
|
||||
.add(Material.SUSPICIOUS_SAND)
|
||||
.build());
|
||||
|
||||
/**
|
||||
* Materials of items that can apply potion effects.
|
||||
*/
|
||||
public static final Tag<Material> EFFECTORS = new BetterTag<>("effectors",
|
||||
ImmutableSet.<Material>builder()
|
||||
.addAll(POTIONS.getValues())
|
||||
.add(Material.TIPPED_ARROW)
|
||||
.build());
|
||||
|
||||
/**
|
||||
* This is necessary as {@link Tag#CROPS} is crap and only has a few crops, and {@link Ageable} includes none-crop
|
||||
* blocks like {@link Material#FIRE fire} and {@link Material#FROSTED_ICE frosted ice}.
|
||||
*/
|
||||
public static final Tag<Material> CROPS = new BetterTag<>("crops",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.BAMBOO)
|
||||
.add(Material.BAMBOO_SAPLING)
|
||||
.add(Material.BEETROOTS)
|
||||
.add(Material.CACTUS)
|
||||
.add(Material.CARROTS)
|
||||
.add(Material.CHORUS_FLOWER)
|
||||
.add(Material.CHORUS_PLANT)
|
||||
.add(Material.COCOA)
|
||||
.add(Material.KELP)
|
||||
.add(Material.MELON_STEM)
|
||||
.add(Material.NETHER_WART)
|
||||
.add(Material.PITCHER_CROP)
|
||||
.add(Material.PITCHER_PLANT)
|
||||
.add(Material.POTATOES)
|
||||
.add(Material.PUMPKIN_STEM)
|
||||
.add(Material.SUGAR_CANE)
|
||||
.add(Material.SWEET_BERRY_BUSH)
|
||||
.add(Material.TWISTING_VINES)
|
||||
.add(Material.TORCHFLOWER_CROP)
|
||||
.add(Material.TORCHFLOWER)
|
||||
.add(Material.WEEPING_VINES)
|
||||
.add(Material.WHEAT)
|
||||
.add(Material.CAVE_VINES)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> POTTABLE = new BetterTag<>("pottable",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.ACACIA_SAPLING)
|
||||
.add(Material.ALLIUM)
|
||||
.add(Material.AZURE_BLUET)
|
||||
.add(Material.BAMBOO)
|
||||
.add(Material.BIRCH_SAPLING)
|
||||
.add(Material.BLUE_ORCHID)
|
||||
.add(Material.BROWN_MUSHROOM)
|
||||
.add(Material.CACTUS)
|
||||
.add(Material.CHERRY_SAPLING)
|
||||
.add(Material.CORNFLOWER)
|
||||
.add(Material.CRIMSON_FUNGUS)
|
||||
.add(Material.CRIMSON_ROOTS)
|
||||
.add(Material.DANDELION)
|
||||
.add(Material.DARK_OAK_SAPLING)
|
||||
.add(Material.DEAD_BUSH)
|
||||
.add(Material.FERN)
|
||||
.add(Material.JUNGLE_SAPLING)
|
||||
.add(Material.LILY_OF_THE_VALLEY)
|
||||
.add(Material.MANGROVE_PROPAGULE)
|
||||
.add(Material.OAK_SAPLING)
|
||||
.add(Material.ORANGE_TULIP)
|
||||
.add(Material.OXEYE_DAISY)
|
||||
.add(Material.PINK_TULIP)
|
||||
.add(Material.POPPY)
|
||||
.add(Material.RED_MUSHROOM)
|
||||
.add(Material.RED_TULIP)
|
||||
.add(Material.SPRUCE_SAPLING)
|
||||
.add(Material.WARPED_FUNGUS)
|
||||
.add(Material.WARPED_ROOTS)
|
||||
.add(Material.WHITE_TULIP)
|
||||
.add(Material.WITHER_ROSE)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> NETHERITE_ARMOUR = new BetterTag<>("netherite_armour",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.NETHERITE_HELMET)
|
||||
.add(Material.NETHERITE_CHESTPLATE)
|
||||
.add(Material.NETHERITE_LEGGINGS)
|
||||
.add(Material.NETHERITE_BOOTS)
|
||||
.build());
|
||||
|
||||
/**
|
||||
* Includes {@link Material#NETHERITE_SWORD} as while it's not strictly a tool, it's likely to be included in
|
||||
* similar checks for handheld usable items, and best to support that and not be awkward for the sake of
|
||||
* technical correctness.
|
||||
*/
|
||||
public static final Tag<Material> NETHERITE_TOOLS = new BetterTag<>("netherite_tools",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.NETHERITE_SWORD)
|
||||
.add(Material.NETHERITE_PICKAXE)
|
||||
.add(Material.NETHERITE_AXE)
|
||||
.add(Material.NETHERITE_SHOVEL)
|
||||
.add(Material.NETHERITE_HOE)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> NETHERITE_ITEMS = new BetterTag<>("netherite_items",
|
||||
ImmutableSet.<Material>builder()
|
||||
.addAll(NETHERITE_ARMOUR.getValues())
|
||||
.addAll(NETHERITE_TOOLS.getValues())
|
||||
.add(Material.NETHERITE_INGOT)
|
||||
.add(Material.NETHERITE_BLOCK)
|
||||
.add(Material.NETHERITE_SCRAP)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> LIGHTABLE_CANDLES = new BetterTag<>("lightable_candles",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.CANDLE)
|
||||
.add(Material.CANDLE_CAKE)
|
||||
.add(Material.CYAN_CANDLE)
|
||||
.add(Material.CYAN_CANDLE_CAKE)
|
||||
.add(Material.BLACK_CANDLE)
|
||||
.add(Material.BLACK_CANDLE_CAKE)
|
||||
.add(Material.BLUE_CANDLE)
|
||||
.add(Material.BLUE_CANDLE_CAKE)
|
||||
.add(Material.BROWN_CANDLE)
|
||||
.add(Material.BROWN_CANDLE_CAKE)
|
||||
.add(Material.GRAY_CANDLE)
|
||||
.add(Material.GRAY_CANDLE_CAKE)
|
||||
.add(Material.GREEN_CANDLE)
|
||||
.add(Material.GREEN_CANDLE_CAKE)
|
||||
.add(Material.LIGHT_BLUE_CANDLE)
|
||||
.add(Material.LIGHT_BLUE_CANDLE_CAKE)
|
||||
.add(Material.LIGHT_GRAY_CANDLE)
|
||||
.add(Material.LIGHT_GRAY_CANDLE_CAKE)
|
||||
.add(Material.LIME_CANDLE)
|
||||
.add(Material.LIME_CANDLE_CAKE)
|
||||
.add(Material.MAGENTA_CANDLE)
|
||||
.add(Material.MAGENTA_CANDLE_CAKE)
|
||||
.add(Material.ORANGE_CANDLE)
|
||||
.add(Material.ORANGE_CANDLE_CAKE)
|
||||
.add(Material.PINK_CANDLE)
|
||||
.add(Material.PINK_CANDLE_CAKE)
|
||||
.add(Material.PURPLE_CANDLE)
|
||||
.add(Material.PURPLE_CANDLE_CAKE)
|
||||
.add(Material.RED_CANDLE)
|
||||
.add(Material.RED_CANDLE_CAKE)
|
||||
.add(Material.WHITE_CANDLE)
|
||||
.add(Material.WHITE_CANDLE_CAKE)
|
||||
.add(Material.YELLOW_CANDLE)
|
||||
.add(Material.YELLOW_CANDLE_CAKE)
|
||||
.build());
|
||||
|
||||
public static final Tag<Material> COPPER_BLOCKS = new BetterTag<>("copper_blocks",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.COPPER_BLOCK)
|
||||
.add(Material.EXPOSED_COPPER)
|
||||
.add(Material.WEATHERED_COPPER)
|
||||
.add(Material.OXIDIZED_COPPER)
|
||||
.add(Material.CUT_COPPER)
|
||||
.add(Material.EXPOSED_CUT_COPPER)
|
||||
.add(Material.WEATHERED_CUT_COPPER)
|
||||
.add(Material.OXIDIZED_CUT_COPPER)
|
||||
.add(Material.CUT_COPPER_STAIRS)
|
||||
.add(Material.EXPOSED_CUT_COPPER_STAIRS)
|
||||
.add(Material.WEATHERED_CUT_COPPER_STAIRS)
|
||||
.add(Material.OXIDIZED_CUT_COPPER_STAIRS)
|
||||
.add(Material.CUT_COPPER_SLAB)
|
||||
.add(Material.EXPOSED_CUT_COPPER_SLAB)
|
||||
.add(Material.WEATHERED_CUT_COPPER_SLAB)
|
||||
.add(Material.OXIDIZED_CUT_COPPER_SLAB)
|
||||
.add(Material.WAXED_COPPER_BLOCK)
|
||||
.add(Material.WAXED_EXPOSED_COPPER)
|
||||
.add(Material.WAXED_WEATHERED_COPPER)
|
||||
.add(Material.WAXED_OXIDIZED_COPPER)
|
||||
.add(Material.WAXED_CUT_COPPER)
|
||||
.add(Material.WAXED_EXPOSED_CUT_COPPER)
|
||||
.add(Material.WAXED_WEATHERED_CUT_COPPER)
|
||||
.add(Material.WAXED_OXIDIZED_CUT_COPPER)
|
||||
.add(Material.WAXED_CUT_COPPER_STAIRS)
|
||||
.add(Material.WAXED_EXPOSED_CUT_COPPER_STAIRS)
|
||||
.add(Material.WAXED_WEATHERED_CUT_COPPER_STAIRS)
|
||||
.add(Material.WAXED_OXIDIZED_CUT_COPPER_STAIRS)
|
||||
.add(Material.WAXED_CUT_COPPER_SLAB)
|
||||
.add(Material.WAXED_EXPOSED_CUT_COPPER_SLAB)
|
||||
.add(Material.WAXED_WEATHERED_CUT_COPPER_SLAB)
|
||||
.add(Material.WAXED_OXIDIZED_CUT_COPPER_SLAB)
|
||||
.build());
|
||||
|
||||
/**
|
||||
* This is referring to materials that can exist in the world as blocks.
|
||||
*/
|
||||
public static final Tag<Material> LIQUID_BLOCKS = new BetterTag<>("liquid_blocks",
|
||||
ImmutableSet.<Material>builder()
|
||||
.add(Material.LAVA)
|
||||
.add(Material.WATER)
|
||||
.add(Material.POWDER_SNOW)
|
||||
.build());
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Better Tag class to allow for easy Tag creation.
|
||||
// ------------------------------------------------------------
|
||||
|
||||
private static class BetterTag<T extends Keyed> implements Tag<T> {
|
||||
|
||||
private final NamespacedKey key;
|
||||
|
||||
private final Set<T> values;
|
||||
|
||||
private BetterTag(final String key, final Set<T> values) {
|
||||
this.key = KeyedUtils.fromParts("civmodcore", key);
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isTagged(@Nullable T value) {
|
||||
return this.values.contains(value);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Set<T> getValues() {
|
||||
return this.values;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public NamespacedKey getKey() {
|
||||
return this.key;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Initialise and check MoreTags
|
||||
// ------------------------------------------------------------
|
||||
|
||||
public static void init() {
|
||||
final var logger = CivLogger.getLogger(MoreTags.class);
|
||||
// Determine if there's any crops missing
|
||||
{
|
||||
final Set<Material> missing = new HashSet<>();
|
||||
CollectionUtils.addAll(missing, Material.values());
|
||||
CollectionUtils.filter(missing, Material::isBlock); // Do this first to reduce amount of block data created
|
||||
CollectionUtils.filter(missing, material -> Bukkit.createBlockData(material) instanceof Ageable);
|
||||
missing.removeIf(Tag.ICE::isTagged);
|
||||
missing.removeIf(Tag.FIRE::isTagged);
|
||||
missing.removeIf(Tag.SAPLINGS::isTagged);
|
||||
missing.removeIf(CROPS::isTagged);
|
||||
if (!missing.isEmpty()) {
|
||||
logger.warning("The following crops are missing: " +
|
||||
missing.stream().map(Material::name).collect(Collectors.joining(",")) + ".");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -23,8 +23,8 @@ import org.bukkit.block.data.Levelled;
|
||||
import org.bukkit.block.data.type.Chest;
|
||||
import org.bukkit.block.data.type.Switch;
|
||||
import org.bukkit.util.BlockIterator;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils;
|
||||
import vg.civcraft.mc.civmodcore.inventory.items.MoreTags;
|
||||
import vg.civcraft.mc.civmodcore.utilities.NullUtils;
|
||||
|
||||
/**
|
||||
@@ -509,15 +509,16 @@ public final class WorldUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether a given block is liquid source.
|
||||
*
|
||||
* @param block The block to check.
|
||||
* @return Returns true if the block is a liquid source.
|
||||
* Determines whether a given block is liquid source, meaning that it will spill out where possible and sustain the
|
||||
* spill until the source-block is removed.
|
||||
*/
|
||||
public static boolean isSourceBlock(final Block block) {
|
||||
@Contract("null -> false")
|
||||
public static boolean isSourceBlock(
|
||||
final Block block
|
||||
) {
|
||||
return block != null
|
||||
&& MoreTags.LIQUID_BLOCKS.isTagged(block.getType())
|
||||
&& ((Levelled) block.getBlockData()).getLevel() == 0;
|
||||
&& switch (block.getType()) { case WATER, LAVA -> true; default -> false; }
|
||||
&& block.getBlockData() instanceof final Levelled levelled
|
||||
&& levelled.getLevel() == 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user