// Path: hook/manager/src/main/java/net/novucs/ftop/WorthType.java
// public enum WorthType {
// 
//     CHEST,
//     PLAYER_BALANCE,
//     FACTION_BALANCE,
//     SPAWNER,
//     BLOCK;
// 
//     private static final WorthType[] PLACED = {CHEST, SPAWNER, BLOCK};
// 
//     public static WorthType[] getPlaced() {
//         return PLACED;
//     }
// 
//     public static boolean isPlaced(WorthType worthType) {
//         switch (worthType) {
//             case PLAYER_BALANCE:
//             case FACTION_BALANCE:
//                 return false;
//         }
//         return true;
//     }
// }
// 
// Path: core/src/main/java/net/novucs/ftop/util/GenericUtils.java
// public final class GenericUtils {
// 
//     private GenericUtils() {
//     }
// 
//     public static <E> List<E> castList(Class<? extends E> type, List<?> toCast) throws ClassCastException {
//         return toCast.stream().map(type::cast).collect(Collectors.toList());
//     }
// 
//     public static Optional<List> getList(Map<?, ?> input, Object key) {
//         return getValue(List.class, input, key);
//     }
// 
//     public static Optional<Material> getMaterial(Map<?, ?> input, Object key) {
//         return getEnum(Material.class, input, key);
//     }
// 
//     public static <T extends Enum<T>> Optional<T> getEnum(Class<T> type, Map<?, ?> input, Object key) {
//         Optional<String> name = getString(input, key);
//         if (name.isPresent()) {
//             return parseEnum(type, name.get());
//         }
//         return Optional.empty();
//     }
// 
//     public static Optional<Boolean> getBoolean(Map<?, ?> input, Object key) {
//         return getValue(Boolean.class, input, key);
//     }
// 
//     public static Optional<Integer> getInt(Map<?, ?> input, Object key) {
//         return getValue(Integer.class, input, key);
//     }
// 
//     public static Optional<String> getString(Map<?, ?> input, Object key) {
//         return getValue(String.class, input, key);
//     }
// 
//     public static Optional<Map> getMap(Map<?, ?> input, Object key) {
//         return getValue(Map.class, input, key);
//     }
// 
//     public static <T> Optional<T> getValue(Class<T> clazz, Map<?, ?> input, Object key) {
//         Object target = input.get(key);
//         if (target == null || !clazz.isInstance(target)) {
//             return Optional.empty();
//         }
//         return Optional.of((T) target);
//     }
// 
//     public static <T extends Enum<T>> Optional<T> parseEnum(Class<T> type, String name) {
//         name = name.toUpperCase().replaceAll("\\s+", "_").replaceAll("\\W", "");
//         try {
//             return Optional.of(Enum.valueOf(type, name));
//         } catch (IllegalArgumentException | NullPointerException e) {
//             return Optional.empty();
//         }
//     }
// }


import com.google.common.collect.BiMap;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Table;
import net.novucs.ftop.WorthType;
import net.novucs.ftop.util.GenericUtils;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
        return factionSpawner.get(factionId, spawnerId);
    }

    public Integer getFactionWorthId(String factionId, int worthId) {
        return factionWorth.get(factionId, worthId);
    }

    public Integer getBlockId(int worldId, int x, int y, int z) {
        return block.get(new Key<>(worldId, x, y, z));
    }

    public Integer getSignId(int blockId) {
        return sign.get(new Key<>(blockId));
    }

    public Optional<String> getWorldName(int worldId) {
        Key key = world.inverse().get(worldId);
        return key == null ? Optional.empty() : Optional.of((String) key.getObjects()[0]);
    }

    public Optional<Material> getMaterial(int materialId) {
        Key key = material.inverse().get(materialId);
        return key == null ? Optional.empty() : GenericUtils.parseEnum(Material.class, (String) key.getObjects()[0]);
    }

    public Optional<EntityType> getSpawner(int spawnerId) {
        Key key = spawner.inverse().get(spawnerId);
        return key == null ? Optional.empty() : GenericUtils.parseEnum(EntityType.class, (String) key.getObjects()[0]);
    }

// Path: hook/manager/src/main/java/net/novucs/ftop/WorthType.java
// public enum WorthType {
// 
//     CHEST,
//     PLAYER_BALANCE,
//     FACTION_BALANCE,
//     SPAWNER,
//     BLOCK;
// 
//     private static final WorthType[] PLACED = {CHEST, SPAWNER, BLOCK};
// 
//     public static WorthType[] getPlaced() {
//         return PLACED;
//     }
// 
//     public static boolean isPlaced(WorthType worthType) {
//         switch (worthType) {
//             case PLAYER_BALANCE:
//             case FACTION_BALANCE:
//                 return false;
//         }
//         return true;
//     }
// }
// 
// Path: core/src/main/java/net/novucs/ftop/util/GenericUtils.java
// public final class GenericUtils {
// 
//     private GenericUtils() {
//     }
// 
//     public static <E> List<E> castList(Class<? extends E> type, List<?> toCast) throws ClassCastException {
//         return toCast.stream().map(type::cast).collect(Collectors.toList());
//     }
// 
//     public static Optional<List> getList(Map<?, ?> input, Object key) {
//         return getValue(List.class, input, key);
//     }
// 
//     public static Optional<Material> getMaterial(Map<?, ?> input, Object key) {
//         return getEnum(Material.class, input, key);
//     }
// 
//     public static <T extends Enum<T>> Optional<T> getEnum(Class<T> type, Map<?, ?> input, Object key) {
//         Optional<String> name = getString(input, key);
//         if (name.isPresent()) {
//             return parseEnum(type, name.get());
//         }
//         return Optional.empty();
//     }
// 
//     public static Optional<Boolean> getBoolean(Map<?, ?> input, Object key) {
//         return getValue(Boolean.class, input, key);
//     }
// 
//     public static Optional<Integer> getInt(Map<?, ?> input, Object key) {
//         return getValue(Integer.class, input, key);
//     }
// 
//     public static Optional<String> getString(Map<?, ?> input, Object key) {
//         return getValue(String.class, input, key);
//     }
// 
//     public static Optional<Map> getMap(Map<?, ?> input, Object key) {
//         return getValue(Map.class, input, key);
//     }
// 
//     public static <T> Optional<T> getValue(Class<T> clazz, Map<?, ?> input, Object key) {
//         Object target = input.get(key);
//         if (target == null || !clazz.isInstance(target)) {
//             return Optional.empty();
//         }
//         return Optional.of((T) target);
//     }
// 
//     public static <T extends Enum<T>> Optional<T> parseEnum(Class<T> type, String name) {
//         name = name.toUpperCase().replaceAll("\\s+", "_").replaceAll("\\W", "");
//         try {
//             return Optional.of(Enum.valueOf(type, name));
//         } catch (IllegalArgumentException | NullPointerException e) {
//             return Optional.empty();
//         }
//     }
// }


// Path: core/src/main/java/net/novucs/ftop/entity/IdentityCache.java
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.Table;
import net.novucs.ftop.WorthType;
import net.novucs.ftop.util.GenericUtils;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;

        return factionSpawner.get(factionId, spawnerId);
    }

    public Integer getFactionWorthId(String factionId, int worthId) {
        return factionWorth.get(factionId, worthId);
    }

    public Integer getBlockId(int worldId, int x, int y, int z) {
        return block.get(new Key<>(worldId, x, y, z));
    }

    public Integer getSignId(int blockId) {
        return sign.get(new Key<>(blockId));
    }

    public Optional<String> getWorldName(int worldId) {
        Key key = world.inverse().get(worldId);
        return key == null ? Optional.empty() : Optional.of((String) key.getObjects()[0]);
    }

    public Optional<Material> getMaterial(int materialId) {
        Key key = material.inverse().get(materialId);
        return key == null ? Optional.empty() : GenericUtils.parseEnum(Material.class, (String) key.getObjects()[0]);
    }

    public Optional<EntityType> getSpawner(int spawnerId) {
        Key key = spawner.inverse().get(spawnerId);
        return key == null ? Optional.empty() : GenericUtils.parseEnum(EntityType.class, (String) key.getObjects()[0]);
    }

    public Optional<WorthType> getWorthType(int worthId) {