aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util/GTApiaryUpgrade.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util/GTApiaryUpgrade.java')
-rw-r--r--src/main/java/gregtech/api/util/GTApiaryUpgrade.java224
1 files changed, 224 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/util/GTApiaryUpgrade.java b/src/main/java/gregtech/api/util/GTApiaryUpgrade.java
new file mode 100644
index 0000000000..5de373a57e
--- /dev/null
+++ b/src/main/java/gregtech/api/util/GTApiaryUpgrade.java
@@ -0,0 +1,224 @@
+package gregtech.api.util;
+
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.biome.BiomeGenBase;
+
+import gregtech.api.enums.OrePrefixes;
+import gregtech.common.items.MetaGeneratedItem03;
+
+/**
+ * Actual items are defined in {@link MetaGeneratedItem03}
+ */
+public enum GTApiaryUpgrade {
+
+ speed1(UNIQUE_INDEX.SPEED_UPGRADE, 32200, 1, (mods, n) -> mods.maxSpeed = 1),
+ speed2(UNIQUE_INDEX.SPEED_UPGRADE, 32201, 1, (mods, n) -> mods.maxSpeed = 2),
+ speed3(UNIQUE_INDEX.SPEED_UPGRADE, 32202, 1, (mods, n) -> mods.maxSpeed = 3),
+ speed4(UNIQUE_INDEX.SPEED_UPGRADE, 32203, 1, (mods, n) -> mods.maxSpeed = 4),
+ speed5(UNIQUE_INDEX.SPEED_UPGRADE, 32204, 1, (mods, n) -> mods.maxSpeed = 5),
+ speed6(UNIQUE_INDEX.SPEED_UPGRADE, 32205, 1, (mods, n) -> mods.maxSpeed = 6),
+ speed7(UNIQUE_INDEX.SPEED_UPGRADE, 32206, 1, (mods, n) -> mods.maxSpeed = 7),
+ speed8(UNIQUE_INDEX.SPEED_UPGRADE, 32207, 1, (mods, n) -> mods.maxSpeed = 8),
+ speed8upgraded(UNIQUE_INDEX.SPEED_UPGRADE, 32208, 1, (mods, n) -> {
+ mods.maxSpeed = 8;
+ mods.production = 17.19926784f;
+ mods.energy *= 14.75;
+ }),
+ production(UNIQUE_INDEX.PRODUCTION_UPGRADE, 32209, 8, (mods, n) -> {
+ mods.production = 4.f * (float) Math.pow(1.2d, n);
+ mods.energy *= Math.pow(1.4f, n);
+ }),
+ plains(UNIQUE_INDEX.PLAINS_UPGRADE, 32210, 1, (mods, n) -> {
+ mods.biomeOverride = BiomeGenBase.plains;
+ mods.energy *= 1.2f;
+ }),
+ light(UNIQUE_INDEX.LIGHT_UPGRADE, 32211, 1, (mods, n) -> {
+ mods.isSelfLighted = true;
+ mods.energy *= 1.05f;
+ }),
+ flowering(UNIQUE_INDEX.FLOWERING_UPGRADE, 32212, 8, (mods, n) -> {
+ mods.flowering *= Math.pow(1.2f, n);
+ mods.energy *= Math.pow(1.1f, n);
+ }),
+ winter(UNIQUE_INDEX.WINTER_UPGRADE, 32213, 1, (mods, n) -> {
+ mods.biomeOverride = BiomeGenBase.taiga;
+ mods.energy *= 1.5f;
+ }),
+ dryer(UNIQUE_INDEX.DRYER_UPGRADE, 32214, 16, (mods, n) -> {
+ mods.humidity -= 0.125f * n;
+ mods.energy *= Math.pow(1.025f, n);
+ }),
+ automation(UNIQUE_INDEX.AUTOMATION_UPGRADE, 32215, 1, (mods, n) -> {
+ mods.isAutomated = true;
+ mods.energy *= 1.1f;
+ }),
+ humidifier(UNIQUE_INDEX.HUMIDIFIER_UPGRADE, 32216, 16, (mods, n) -> {
+ mods.humidity += 0.125f * n;
+ mods.energy *= Math.pow(1.05f, n);
+ }),
+ hell(UNIQUE_INDEX.HELL_UPGRADE, 32217, 1, (mods, n) -> {
+ mods.biomeOverride = BiomeGenBase.hell;
+ mods.energy *= 1.5f;
+ }),
+ pollen(UNIQUE_INDEX.POLLEN_UPGRADE, 32218, 1, (mods, n) -> {
+ mods.flowering = 0f;
+ mods.energy *= 1.3f;
+ }),
+ desert(UNIQUE_INDEX.DESERT_UPGRADE, 32219, 1, (mods, n) -> {
+ mods.biomeOverride = BiomeGenBase.desert;
+ mods.energy *= 1.2f;
+ }),
+ cooler(UNIQUE_INDEX.COOLER_UPGRADE, 32220, 16, (mods, n) -> {
+ mods.temperature -= 0.125f * n;
+ mods.energy *= Math.pow(1.025f, n);
+ }),
+ lifespan(UNIQUE_INDEX.LIFESPAN_UPGRADE, 32221, 4, (mods, n) -> {
+ mods.lifespan /= Math.pow(1.5f, n);
+ mods.energy *= Math.pow(1.05f, n);
+ }),
+ seal(UNIQUE_INDEX.SEAL_UPGRADE, 32222, 1, (mods, n) -> {
+ mods.isSealed = true;
+ mods.energy *= 1.05f;
+ }),
+ stabilizer(UNIQUE_INDEX.STABILIZER_UPGRADE, 32223, 1, (mods, n) -> {
+ mods.geneticDecay = 0f;
+ mods.energy *= 2.50f;
+ }),
+ jungle(UNIQUE_INDEX.JUNGLE_UPGRADE, 32224, 1, (mods, n) -> {
+ mods.biomeOverride = BiomeGenBase.jungle;
+ mods.energy *= 1.20f;
+ }),
+ territory(UNIQUE_INDEX.TERRITORY_UPGRADE, 32225, 4, (mods, n) -> {
+ mods.territory *= Math.pow(1.5f, n);
+ mods.energy *= Math.pow(1.05f, n);
+ }),
+ ocean(UNIQUE_INDEX.OCEAN_UPGRADE, 32226, 1, (mods, n) -> {
+ mods.biomeOverride = BiomeGenBase.ocean;
+ mods.energy *= 1.20f;
+ }),
+ sky(UNIQUE_INDEX.SKY_UPGRADE, 32227, 1, (mods, n) -> {
+ mods.isSunlightSimulated = true;
+ mods.energy *= 1.05f;
+ }),
+ heater(UNIQUE_INDEX.HEATER_UPGRADE, 32228, 16, (mods, n) -> {
+ mods.temperature += 0.125f * n;
+ mods.energy *= Math.pow(1.025f, n);
+ }),
+ sieve(UNIQUE_INDEX.SIEVE_UPGRADE, 32229, 1, (mods, n) -> {
+ mods.isCollectingPollen = true;
+ mods.energy *= 1.05f;
+ }),
+ unlight(UNIQUE_INDEX.LIGHT_UPGRADE, 32231, 1, (mods, n) -> {
+ mods.isSelfUnlighted = true;
+ mods.energy *= 1.05f;
+ }),;
+
+ private enum UNIQUE_INDEX {
+
+ SPEED_UPGRADE,
+ PRODUCTION_UPGRADE,
+ PLAINS_UPGRADE,
+ LIGHT_UPGRADE, // also unlight
+ FLOWERING_UPGRADE,
+ WINTER_UPGRADE,
+ DRYER_UPGRADE,
+ AUTOMATION_UPGRADE,
+ HUMIDIFIER_UPGRADE,
+ HELL_UPGRADE,
+ POLLEN_UPGRADE,
+ DESERT_UPGRADE,
+ COOLER_UPGRADE,
+ LIFESPAN_UPGRADE,
+ SEAL_UPGRADE,
+ STABILIZER_UPGRADE,
+ JUNGLE_UPGRADE,
+ TERRITORY_UPGRADE,
+ OCEAN_UPGRADE,
+ SKY_UPGRADE,
+ HEATER_UPGRADE,
+ SIEVE_UPGRADE,;
+
+ void apply(Consumer<GTApiaryUpgrade> fn) {
+ UNIQUE_UPGRADE_LIST.get(this)
+ .forEach(fn);
+ }
+ }
+
+ private static final EnumMap<UNIQUE_INDEX, ArrayList<GTApiaryUpgrade>> UNIQUE_UPGRADE_LIST = new EnumMap<>(
+ UNIQUE_INDEX.class);
+
+ private int meta = 0;
+ private int maxnumber = 1;
+
+ private final GTUtility.ItemId id;
+ private final UNIQUE_INDEX unique_index;
+ private final BiConsumer<GTApiaryModifier, Integer> applier;
+
+ private final HashSet<GTUtility.ItemId> blacklistedUpgrades = new HashSet<>();
+
+ GTApiaryUpgrade(UNIQUE_INDEX unique_index, int meta, int maxnumber, BiConsumer<GTApiaryModifier, Integer> applier) {
+ this.unique_index = unique_index;
+ this.meta = meta;
+ this.maxnumber = maxnumber;
+ this.applier = applier;
+ this.id = GTUtility.ItemId.createNoCopy(get(1));
+ }
+
+ private void setup_static_variables() {
+ quickLookup.put(this.meta, this);
+ ArrayList<GTApiaryUpgrade> un = UNIQUE_UPGRADE_LIST.get(this.unique_index);
+ if (un != null) un.forEach((u) -> {
+ u.blacklistedUpgrades.add(this.id);
+ this.blacklistedUpgrades.add(u.id);
+ });
+ else {
+ un = new ArrayList<>(1);
+ UNIQUE_UPGRADE_LIST.put(this.unique_index, un);
+ }
+ un.add(this);
+ }
+
+ public static GTApiaryUpgrade getUpgrade(ItemStack s) {
+ if (s == null) return null;
+ if (!isUpgrade(s)) return null;
+ return quickLookup.get(s.getItemDamage());
+ }
+
+ public boolean isAllowedToWorkWith(ItemStack s) {
+ GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(s);
+ return !blacklistedUpgrades.contains(id);
+ }
+
+ public int getMaxNumber() {
+ return maxnumber;
+ }
+
+ public void applyModifiers(GTApiaryModifier mods, ItemStack stack) {
+ if (applier != null) applier.accept(mods, stack.stackSize);
+ }
+
+ public ItemStack get(int count) {
+ return new ItemStack(MetaGeneratedItem03.INSTANCE, count, meta);
+ }
+
+ public static boolean isUpgrade(ItemStack s) {
+ return OrePrefixes.apiaryUpgrade.contains(s);
+ }
+
+ private static final HashMap<Integer, GTApiaryUpgrade> quickLookup = new HashMap<>();
+
+ static {
+ EnumSet.allOf(GTApiaryUpgrade.class)
+ .forEach(GTApiaryUpgrade::setup_static_variables);
+ speed8upgraded.blacklistedUpgrades.add(production.id);
+ production.blacklistedUpgrades.add(speed8upgraded.id);
+ }
+}