// Path: src/main/java/com/legobmw99/stormlight/util/Ideal.java
// public enum Ideal {
// 
//     TRAITOR,
//     UNINVESTED,
//     FIRST,
//     SECOND,
//     THIRD,
//     FOURTH,
//     FIFTH;
// 
//     public static Ideal get(int index) {
//         for (Ideal order : values()) {
//             if (order.getIndex() == index) {
//                 return order;
//             }
//         }
//         throw new IllegalArgumentException("Bad ideal index");
//     }
// 
//     public String getName() {
//         return name().toLowerCase(Locale.ROOT);
//     }
// 
//     public int getIndex() {
//         return ordinal() - 1;
//     }
// 
//     public Ideal progressIdeal() {
//         int i = getIndex() + 1;
//         if (i > 5) {
//             i = 5;
//         }
//         return get(i);
//     }
// 
//     public Ideal regressIdeal() {
//         int i = getIndex() - 1;
//         if (i < -1) {
//             i = -1;
//         }
//         return get(i);
//     }
// }
// 
// Path: src/main/java/com/legobmw99/stormlight/util/Surge.java
// public enum Surge {
//     ADHESION(Surges::adhesion, 25, true, SurgeEffects::adhesionEffect),
//     GRAVITATION(Surges::gravitation),
//     DIVISION(Surges::division),
//     ABRASION(Surges::abrasion),
//     PROGRESSION(Surges::progression, SurgeEffects::progressionEffect),
//     ILLUMINATION(Surges::illumination),
//     TRANSFORMATION(Surges::transformation),
//     TRANSPORTATION(Surges::transportation, 40F),
//     COHESION(Surges::cohesion),
//     TENSION(Surges::tension);
// 
//     private final ISurgePower surge;
//     private final ISurgeEffect effect;
//     private final float range;
//     private final boolean repeating;
// 
//     Surge(ISurgePower surge) {
//         this(surge, 30F, false, null);
//     }
// 
//     Surge(ISurgePower surge, float range) {
//         this(surge, range, false, null);
//     }
// 
//     Surge(ISurgePower surge, float range, boolean repeating) {
//         this(surge, range, repeating, null);
//     }
// 
//     Surge(ISurgePower surge, ISurgeEffect effect) {
//         this(surge, 30F, false, effect);
//     }
// 
//     Surge(ISurgePower surge, float range, boolean repeating, ISurgeEffect effect) {
//         this.surge = surge;
//         this.range = range;
//         this.repeating = repeating;
//         this.effect = effect;
//     }
// 
// 
//     public boolean hasEffect() {
//         return effect != null;
//     }
// 
//     public boolean isRepeating() {return repeating;}
// 
//     public float getRange() {
//         return range;
//     }
// 
//     public void fire(ServerPlayer player, @Nullable BlockPos looking, boolean modified) {
//         surge.fire(player, looking, modified);
//     }
// 
//     public void displayEffect(BlockPos looking, boolean modified) {
//         if (hasEffect()) {
//             effect.fire(looking, modified);
//         }
//     }
// 
// }


import java.util.Locale;
import static com.legobmw99.stormlight.util.Ideal.*;
import static com.legobmw99.stormlight.util.Surge.*;
package com.legobmw99.stormlight.util;



public enum Order {
    WINDRUNNERS(ADHESION, GRAVITATION),
    SKYBREAKERS(GRAVITATION, DIVISION),
    DUSTBRINGERS(DIVISION, ABRASION),
    EDGEDANCERS(ABRASION, PROGRESSION),
    TRUTHWATCHERS(PROGRESSION, ILLUMINATION),
    LIGHTWEAVERS(ILLUMINATION, TRANSFORMATION),
    ELSECALLERS(TRANSFORMATION, TRANSPORTATION),
    WILLSHAPERS(TRANSPORTATION, COHESION),
    STONEWARDS(COHESION, TENSION),
    BONDSMITHS(TENSION, ADHESION, FIFTH, SECOND, THIRD);


    private final Surge first;
    private final Surge second;
// Path: src/main/java/com/legobmw99/stormlight/util/Ideal.java
// public enum Ideal {
// 
//     TRAITOR,
//     UNINVESTED,
//     FIRST,
//     SECOND,
//     THIRD,
//     FOURTH,
//     FIFTH;
// 
//     public static Ideal get(int index) {
//         for (Ideal order : values()) {
//             if (order.getIndex() == index) {
//                 return order;
//             }
//         }
//         throw new IllegalArgumentException("Bad ideal index");
//     }
// 
//     public String getName() {
//         return name().toLowerCase(Locale.ROOT);
//     }
// 
//     public int getIndex() {
//         return ordinal() - 1;
//     }
// 
//     public Ideal progressIdeal() {
//         int i = getIndex() + 1;
//         if (i > 5) {
//             i = 5;
//         }
//         return get(i);
//     }
// 
//     public Ideal regressIdeal() {
//         int i = getIndex() - 1;
//         if (i < -1) {
//             i = -1;
//         }
//         return get(i);
//     }
// }
// 
// Path: src/main/java/com/legobmw99/stormlight/util/Surge.java
// public enum Surge {
//     ADHESION(Surges::adhesion, 25, true, SurgeEffects::adhesionEffect),
//     GRAVITATION(Surges::gravitation),
//     DIVISION(Surges::division),
//     ABRASION(Surges::abrasion),
//     PROGRESSION(Surges::progression, SurgeEffects::progressionEffect),
//     ILLUMINATION(Surges::illumination),
//     TRANSFORMATION(Surges::transformation),
//     TRANSPORTATION(Surges::transportation, 40F),
//     COHESION(Surges::cohesion),
//     TENSION(Surges::tension);
// 
//     private final ISurgePower surge;
//     private final ISurgeEffect effect;
//     private final float range;
//     private final boolean repeating;
// 
//     Surge(ISurgePower surge) {
//         this(surge, 30F, false, null);
//     }
// 
//     Surge(ISurgePower surge, float range) {
//         this(surge, range, false, null);
//     }
// 
//     Surge(ISurgePower surge, float range, boolean repeating) {
//         this(surge, range, repeating, null);
//     }
// 
//     Surge(ISurgePower surge, ISurgeEffect effect) {
//         this(surge, 30F, false, effect);
//     }
// 
//     Surge(ISurgePower surge, float range, boolean repeating, ISurgeEffect effect) {
//         this.surge = surge;
//         this.range = range;
//         this.repeating = repeating;
//         this.effect = effect;
//     }
// 
// 
//     public boolean hasEffect() {
//         return effect != null;
//     }
// 
//     public boolean isRepeating() {return repeating;}
// 
//     public float getRange() {
//         return range;
//     }
// 
//     public void fire(ServerPlayer player, @Nullable BlockPos looking, boolean modified) {
//         surge.fire(player, looking, modified);
//     }
// 
//     public void displayEffect(BlockPos looking, boolean modified) {
//         if (hasEffect()) {
//             effect.fire(looking, modified);
//         }
//     }
// 
// }


// Path: src/main/java/com/legobmw99/stormlight/util/Order.java
import java.util.Locale;
import static com.legobmw99.stormlight.util.Ideal.*;
import static com.legobmw99.stormlight.util.Surge.*;

package com.legobmw99.stormlight.util;



public enum Order {
    WINDRUNNERS(ADHESION, GRAVITATION),
    SKYBREAKERS(GRAVITATION, DIVISION),
    DUSTBRINGERS(DIVISION, ABRASION),
    EDGEDANCERS(ABRASION, PROGRESSION),
    TRUTHWATCHERS(PROGRESSION, ILLUMINATION),
    LIGHTWEAVERS(ILLUMINATION, TRANSFORMATION),
    ELSECALLERS(TRANSFORMATION, TRANSPORTATION),
    WILLSHAPERS(TRANSPORTATION, COHESION),
    STONEWARDS(COHESION, TENSION),
    BONDSMITHS(TENSION, ADHESION, FIFTH, SECOND, THIRD);


    private final Surge first;
    private final Surge second;
    private final Ideal blade_gate;