// Path: core/src/main/java/net/licks92/wirelessredstone/materiallib/utilities/ServerVersion.java
// public enum ServerVersion {
//     OLDER,
//     V1_4_2, V1_4_4, V1_4_5, V1_4_6, V1_4_7,
//     V1_5, V1_5_1, V1_5_2,
//     V1_6_1, V1_6_2, V1_6_4,
//     V1_7_2, V1_7_4, V1_7_5, V1_7_6, V1_7_7, V1_7_8, V1_7_9, V1_7_10,
//     V1_8, V1_8_1, V1_8_2, V1_8_3, V1_8_4, V1_8_5, V1_8_6, V1_8_7, V1_8_8, V1_8_9,
//     V1_9, V1_9_1, V1_9_2, V1_9_3, V1_9_4,
//     V1_10, V1_10_1, V1_10_2,
//     V1_11, V1_11_1, V1_11_2,
//     V1_12, V1_12_1, V1_12_2,
//     V1_13, V1_13_1, V1_13_2,
//     V1_14, V1_14_1, V1_14_2, V1_14_3, V1_14_4,
//     NEWER;
// 
//     private final String versionNumber;
// 
//     ServerVersion() {
//         this.versionNumber = name().substring(1).replace("_", ".");
//     }
// 
//     public String versionNumber() {
//         return versionNumber;
//     }
// 
//     public int getOrder() {
//         if (this == OLDER) {
//             return -1;
//         }
//         if (this == NEWER) {
//             return Integer.MAX_VALUE;
//         }
//         return ordinal();
//     }
// 
//     public static ServerVersion getLastKnown() {
//         return values()[values().length - 2];
//     }
// 
//     public boolean isNewer(ServerVersion other) {
//         return getOrder() > other.getOrder();
//     }
// 
//     public boolean isNewerOrSame(ServerVersion other) {
//         return getOrder() >= other.getOrder();
//     }
// 
//     public boolean isOlder(ServerVersion other) {
//         return getOrder() < other.getOrder();
//     }
// 
//     public boolean isBetween(ServerVersion older, ServerVersion newer) {
//         return getOrder() >= older.getOrder() && getOrder() <= newer.getOrder();
//     }
// }
// 
// Path: core/src/main/java/net/licks92/wirelessredstone/materiallib/data/CrossMaterialVersion.java
// public class CrossMaterialVersion {
//     private final String name;
//     private final ServerVersionInterval validVersions;
// 
//     private CrossMaterialVersion(String name, ServerVersionInterval validVersions) {
//         this.name = name;
//         this.validVersions = validVersions;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public ServerVersionInterval getValidVersions() {
//         return validVersions;
//     }
// 
//     public static CrossMaterialVersion sinceRelease(String name) {
//         return since(name, ServerVersion.OLDER);
//     }
// 
//     public static CrossMaterialVersion since(String name, ServerVersion since) {
//         return new CrossMaterialVersion(name, ServerVersionInterval.since(since));
//     }
// 
//     public static CrossMaterialVersion until(String name, ServerVersion until) {
//         return new CrossMaterialVersion(name, ServerVersionInterval.until(until));
//     }
// 
//     public static CrossMaterialVersion between(String name, ServerVersion since, ServerVersion until) {
//         return new CrossMaterialVersion(name, ServerVersionInterval.between(since, until));
//     }
// }


import com.google.common.collect.Lists;
import net.licks92.wirelessredstone.materiallib.utilities.ServerVersion;
import org.bukkit.Material;
import org.bukkit.block.Block;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import static net.licks92.wirelessredstone.materiallib.data.CrossMaterialVersion.*;
package net.licks92.wirelessredstone.materiallib.data;




public enum CrossMaterial {

    AIR(
            sinceRelease("AIR")
    ),

    COMPARATOR(
            until("REDSTONE_COMPARATOR", ServerVersion.V1_12_2),
            since("COMPARATOR", ServerVersion.V1_13)
    ),

    COMPARATOR_OFF(
            until("REDSTONE_COMPARATOR_OFF", ServerVersion.V1_12_2)
    ),

    COMPARATOR_ON(
            until("REDSTONE_COMPARATOR_ON", ServerVersion.V1_12_2)
    ),

    REDSTONE_TORCH(
            until("REDSTONE_TORCH_ON", ServerVersion.V1_12_2),
            since("REDSTONE_TORCH", ServerVersion.V1_13)
    ),

    REDSTONE_WALL_TORCH(
            until("REDSTONE_TORCH_ON", ServerVersion.V1_12_2),
            since("REDSTONE_WALL_TORCH", ServerVersion.V1_13)
    ),

    REPEATER(
            until("DIODE", ServerVersion.V1_12_2),
            since("REPEATER", ServerVersion.V1_13)
    ),

    REPEATER_OFF(
// Path: core/src/main/java/net/licks92/wirelessredstone/materiallib/utilities/ServerVersion.java
// public enum ServerVersion {
//     OLDER,
//     V1_4_2, V1_4_4, V1_4_5, V1_4_6, V1_4_7,
//     V1_5, V1_5_1, V1_5_2,
//     V1_6_1, V1_6_2, V1_6_4,
//     V1_7_2, V1_7_4, V1_7_5, V1_7_6, V1_7_7, V1_7_8, V1_7_9, V1_7_10,
//     V1_8, V1_8_1, V1_8_2, V1_8_3, V1_8_4, V1_8_5, V1_8_6, V1_8_7, V1_8_8, V1_8_9,
//     V1_9, V1_9_1, V1_9_2, V1_9_3, V1_9_4,
//     V1_10, V1_10_1, V1_10_2,
//     V1_11, V1_11_1, V1_11_2,
//     V1_12, V1_12_1, V1_12_2,
//     V1_13, V1_13_1, V1_13_2,
//     V1_14, V1_14_1, V1_14_2, V1_14_3, V1_14_4,
//     NEWER;
// 
//     private final String versionNumber;
// 
//     ServerVersion() {
//         this.versionNumber = name().substring(1).replace("_", ".");
//     }
// 
//     public String versionNumber() {
//         return versionNumber;
//     }
// 
//     public int getOrder() {
//         if (this == OLDER) {
//             return -1;
//         }
//         if (this == NEWER) {
//             return Integer.MAX_VALUE;
//         }
//         return ordinal();
//     }
// 
//     public static ServerVersion getLastKnown() {
//         return values()[values().length - 2];
//     }
// 
//     public boolean isNewer(ServerVersion other) {
//         return getOrder() > other.getOrder();
//     }
// 
//     public boolean isNewerOrSame(ServerVersion other) {
//         return getOrder() >= other.getOrder();
//     }
// 
//     public boolean isOlder(ServerVersion other) {
//         return getOrder() < other.getOrder();
//     }
// 
//     public boolean isBetween(ServerVersion older, ServerVersion newer) {
//         return getOrder() >= older.getOrder() && getOrder() <= newer.getOrder();
//     }
// }
// 
// Path: core/src/main/java/net/licks92/wirelessredstone/materiallib/data/CrossMaterialVersion.java
// public class CrossMaterialVersion {
//     private final String name;
//     private final ServerVersionInterval validVersions;
// 
//     private CrossMaterialVersion(String name, ServerVersionInterval validVersions) {
//         this.name = name;
//         this.validVersions = validVersions;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public ServerVersionInterval getValidVersions() {
//         return validVersions;
//     }
// 
//     public static CrossMaterialVersion sinceRelease(String name) {
//         return since(name, ServerVersion.OLDER);
//     }
// 
//     public static CrossMaterialVersion since(String name, ServerVersion since) {
//         return new CrossMaterialVersion(name, ServerVersionInterval.since(since));
//     }
// 
//     public static CrossMaterialVersion until(String name, ServerVersion until) {
//         return new CrossMaterialVersion(name, ServerVersionInterval.until(until));
//     }
// 
//     public static CrossMaterialVersion between(String name, ServerVersion since, ServerVersion until) {
//         return new CrossMaterialVersion(name, ServerVersionInterval.between(since, until));
//     }
// }


// Path: core/src/main/java/net/licks92/wirelessredstone/materiallib/data/CrossMaterial.java
import com.google.common.collect.Lists;
import net.licks92.wirelessredstone.materiallib.utilities.ServerVersion;
import org.bukkit.Material;
import org.bukkit.block.Block;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import static net.licks92.wirelessredstone.materiallib.data.CrossMaterialVersion.*;

package net.licks92.wirelessredstone.materiallib.data;




public enum CrossMaterial {

    AIR(
            sinceRelease("AIR")
    ),

    COMPARATOR(
            until("REDSTONE_COMPARATOR", ServerVersion.V1_12_2),
            since("COMPARATOR", ServerVersion.V1_13)
    ),

    COMPARATOR_OFF(
            until("REDSTONE_COMPARATOR_OFF", ServerVersion.V1_12_2)
    ),

    COMPARATOR_ON(
            until("REDSTONE_COMPARATOR_ON", ServerVersion.V1_12_2)
    ),

    REDSTONE_TORCH(
            until("REDSTONE_TORCH_ON", ServerVersion.V1_12_2),
            since("REDSTONE_TORCH", ServerVersion.V1_13)
    ),

    REDSTONE_WALL_TORCH(
            until("REDSTONE_TORCH_ON", ServerVersion.V1_12_2),
            since("REDSTONE_WALL_TORCH", ServerVersion.V1_13)
    ),

    REPEATER(
            until("DIODE", ServerVersion.V1_12_2),
            since("REPEATER", ServerVersion.V1_13)
    ),

    REPEATER_OFF(
            until("DIODE_BLOCK_OFF", ServerVersion.V1_12_2)