From 926ab181da38d574af3c272d5f4c717d49cb2764 Mon Sep 17 00:00:00 2001 From: Pahimar Date: Mon, 16 May 2016 22:02:23 -0400 Subject: [PATCH] Mama said save my work. I'm gonna save my work! --- build.properties | 2 +- .../com/pahimar/ee3/EquivalentExchange3.java | 6 +- .../ee3/api/event/EnergyValueEvent.java | 33 +- .../pahimar/ee3/api/exchange/EnergyValue.java | 127 ++---- .../exchange/EnergyValueRegistryProxy.java | 154 ++----- .../com/pahimar/ee3/command/CommandDebug.java | 41 -- .../com/pahimar/ee3/command/CommandEE.java | 1 - .../ee3/exchange/EnergyValueRegistry.java | 14 +- .../ee3/exchange/NewEnergyValueRegistry.java | 427 ++++++++++++++++-- .../com/pahimar/ee3/init/EnergyValues.java | 252 ++++++----- .../pahimar/ee3/util/EnergyValueHelper.java | 293 ------------ 11 files changed, 618 insertions(+), 732 deletions(-) delete mode 100644 src/main/java/com/pahimar/ee3/command/CommandDebug.java delete mode 100644 src/main/java/com/pahimar/ee3/util/EnergyValueHelper.java diff --git a/build.properties b/build.properties index 5600e4ed..f7514d5d 100644 --- a/build.properties +++ b/build.properties @@ -3,5 +3,5 @@ minecraft_version = 1.7.10 forge_version = 10.13.4.1614-1.7.10 mod_version = 0.3.0 -api_version = 1.3.0 +api_version = 1.4.0 release_type = beta diff --git a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java index a2972681..5713a625 100644 --- a/src/main/java/com/pahimar/ee3/EquivalentExchange3.java +++ b/src/main/java/com/pahimar/ee3/EquivalentExchange3.java @@ -83,7 +83,7 @@ public class EquivalentExchange3 FluidHelper.registerFluids(); - EnergyValues.addDefaultEnergyValues(); + EnergyValues.init(); AlchemyArrays.registerAlchemyArrays(); } @@ -147,9 +147,9 @@ public class EquivalentExchange3 } } - public EnergyValueRegistry getEnergyValueRegistry() + public NewEnergyValueRegistry getEnergyValueRegistry() { - return EnergyValueRegistry.getInstance(); + return NewEnergyValueRegistry.INSTANCE; } public RecipeRegistry getRecipeRegistry() diff --git a/src/main/java/com/pahimar/ee3/api/event/EnergyValueEvent.java b/src/main/java/com/pahimar/ee3/api/event/EnergyValueEvent.java index 876db80f..36b183e8 100644 --- a/src/main/java/com/pahimar/ee3/api/event/EnergyValueEvent.java +++ b/src/main/java/com/pahimar/ee3/api/event/EnergyValueEvent.java @@ -3,43 +3,38 @@ package com.pahimar.ee3.api.event; import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; import cpw.mods.fml.common.eventhandler.Event; -import net.minecraft.entity.player.EntityPlayer; -public class EnergyValueEvent extends Event -{ +public class EnergyValueEvent extends Event { + public final Object object; public final EnergyValueRegistryProxy.Phase phase; - public final EntityPlayer entityPlayer; - public EnergyValueEvent(Object object, EnergyValueRegistryProxy.Phase phase, EntityPlayer entityPlayer) - { + public EnergyValueEvent(Object object, EnergyValueRegistryProxy.Phase phase) { + this.object = object; this.phase = phase; - this.entityPlayer = entityPlayer; } @Override - public boolean isCancelable() - { + public boolean isCancelable() { return true; } - public static class SetEnergyValueEvent extends EnergyValueEvent - { + public static class SetEnergyValueEvent extends EnergyValueEvent { + public final EnergyValue newEnergyValue; - public SetEnergyValueEvent(Object object, EnergyValue newEnergyValue, EnergyValueRegistryProxy.Phase phase, EntityPlayer entityPlayer) - { - super(object, phase, entityPlayer); + public SetEnergyValueEvent(Object object, EnergyValue newEnergyValue, EnergyValueRegistryProxy.Phase phase) { + + super(object, phase); this.newEnergyValue = newEnergyValue; } } - public static class RemoveEnergyValueEvent extends EnergyValueEvent - { - public RemoveEnergyValueEvent(Object object, EnergyValueRegistryProxy.Phase phase, EntityPlayer entityPlayer) - { - super(object, phase, entityPlayer); + public static class RemoveEnergyValueEvent extends EnergyValueEvent { + + public RemoveEnergyValueEvent(Object object, EnergyValueRegistryProxy.Phase phase) { + super(object, phase); } } } diff --git a/src/main/java/com/pahimar/ee3/api/exchange/EnergyValue.java b/src/main/java/com/pahimar/ee3/api/exchange/EnergyValue.java index f2430f96..1354a2bb 100644 --- a/src/main/java/com/pahimar/ee3/api/exchange/EnergyValue.java +++ b/src/main/java/com/pahimar/ee3/api/exchange/EnergyValue.java @@ -6,9 +6,10 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import java.lang.reflect.Type; +import java.math.BigDecimal; + +public final class EnergyValue implements Comparable, JsonDeserializer, JsonSerializer { -public final class EnergyValue implements Comparable, JsonDeserializer, JsonSerializer -{ private static final Gson jsonSerializer = (new GsonBuilder()).registerTypeAdapter(EnergyValue.class, new EnergyValue()).create(); private float energyValue; @@ -17,114 +18,74 @@ public final class EnergyValue implements Comparable, JsonDeseriali this(0); } - public EnergyValue(float energyValue) - { - this.energyValue = energyValue; - } - public EnergyValue(Number energyValue) { this.energyValue = energyValue.floatValue(); } - @Override - public boolean equals(Object object) - { - return object instanceof EnergyValue && (compareTo((EnergyValue) object) == 0); + public float getValue() { + return this.energyValue; + } + + public IChatComponent getChatComponent() { + return new ChatComponentText("" + this.getValue()); } @Override - public String toString() - { + public String toString() { return String.format("%s", energyValue); } @Override - public int compareTo(EnergyValue energyValue) - { - if (energyValue != null) - { + public boolean equals(Object object) { + return object instanceof EnergyValue && (compareTo((EnergyValue) object) == 0); + } + + @Override + public int compareTo(EnergyValue energyValue) { + + if (energyValue != null) { return Float.compare(this.energyValue, energyValue.getValue()); } - else - { + else { return -1; } } - public float getValue() - { - return this.energyValue; - } - - public IChatComponent getChatComponent() - { - return new ChatComponentText("" + this.getValue()); - } - - public NBTTagCompound writeToNBT(NBTTagCompound nbtTagCompound) - { + public NBTTagCompound writeToNBT(NBTTagCompound nbtTagCompound) { nbtTagCompound.setFloat("energyValue", energyValue); return nbtTagCompound; } - public void readFromNBT(NBTTagCompound nbtTagCompound) - { - if (nbtTagCompound.hasKey("energyValue")) - { + public void readFromNBT(NBTTagCompound nbtTagCompound) { + + if (nbtTagCompound.hasKey("energyValue")) { this.energyValue = nbtTagCompound.getFloat("energyValue"); } } - public static NBTTagCompound writeEnergyValueToNBT(EnergyValue energyValue) - { + public static NBTTagCompound writeEnergyValueToNBT(EnergyValue energyValue) { + NBTTagCompound nbtTagCompound = new NBTTagCompound(); energyValue.writeToNBT(nbtTagCompound); return nbtTagCompound; } - public static EnergyValue loadEnergyValueFromNBT(NBTTagCompound nbtTagCompound) - { - if (nbtTagCompound.hasKey("energyValue")) - { + public static EnergyValue loadEnergyValueFromNBT(NBTTagCompound nbtTagCompound) { + + if (nbtTagCompound.hasKey("energyValue")) { float energyValue = nbtTagCompound.getFloat("energyValue"); - return new EnergyValue(energyValue); } return null; } - /** - * Deserializes an EmcValue object from the given serialized json String - * - * @param jsonEnergyValue Json encoded String representing a EmcValue object - * @return The EmcValue that was encoded as json, or null if a valid EmcValue could not be decoded from given String - */ - public static EnergyValue createFromJson(String jsonEnergyValue) - { - try - { - return jsonSerializer.fromJson(jsonEnergyValue, EnergyValue.class); - } - catch (JsonSyntaxException exception) - { - exception.printStackTrace(); - } - catch (JsonParseException exception) - { - exception.printStackTrace(); - } - - return null; - } - /** * Returns this EmcValue as a json serialized String * * @return Json serialized String of this EmcValue */ - public String toJson() - { + public String toJson() { return jsonSerializer.toJson(this); } @@ -144,16 +105,14 @@ public final class EnergyValue implements Comparable, JsonDeseriali * @throws com.google.gson.JsonParseException if jsonElement is not in the expected format of {@code typeofT} */ @Override - public EnergyValue deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws JsonParseException - { + public EnergyValue deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + JsonObject jsonEnergyValue = (JsonObject) jsonElement; - if (jsonEnergyValue.get("value") != null && jsonEnergyValue.get("value").isJsonPrimitive()) - { + if (jsonEnergyValue.get("value") != null && jsonEnergyValue.get("value").isJsonPrimitive()) { float energyValue = jsonEnergyValue.get("value").getAsFloat(); - if (Float.compare(energyValue, 0f) >= 0) - { + if (Float.compare(energyValue, 0f) >= 0) { return new EnergyValue(energyValue); } } @@ -177,19 +136,21 @@ public final class EnergyValue implements Comparable, JsonDeseriali * @return a JsonElement corresponding to the specified object. */ @Override - public JsonElement serialize(EnergyValue energyValueObject, Type typeOfSrc, JsonSerializationContext context) - { + public JsonElement serialize(EnergyValue energyValueObject, Type typeOfSrc, JsonSerializationContext context) { + JsonObject jsonEnergyValue = new JsonObject(); - jsonEnergyValue.addProperty("value", energyValueObject.energyValue); - return jsonEnergyValue; } - public enum Phase { - PRE_CALCULATION, - POST_CALCULATION, - RUNTIME, - ALL + public static EnergyValue factor(EnergyValue energyValue, Number factor) { + + if ((Float.compare(factor.floatValue(), 0f) != 0) && (energyValue != null)) { + return new EnergyValue(new BigDecimal(energyValue.getValue() * 1f / factor.floatValue()).setScale(3, BigDecimal.ROUND_HALF_EVEN).floatValue()); + } + else { + return null; + } } + } diff --git a/src/main/java/com/pahimar/ee3/api/exchange/EnergyValueRegistryProxy.java b/src/main/java/com/pahimar/ee3/api/exchange/EnergyValueRegistryProxy.java index 82c47d3d..c49fa92f 100644 --- a/src/main/java/com/pahimar/ee3/api/exchange/EnergyValueRegistryProxy.java +++ b/src/main/java/com/pahimar/ee3/api/exchange/EnergyValueRegistryProxy.java @@ -3,196 +3,104 @@ package com.pahimar.ee3.api.exchange; import com.pahimar.ee3.EquivalentExchange3; import cpw.mods.fml.common.Mod; +import java.util.Collections; import java.util.List; -public final class EnergyValueRegistryProxy -{ +public final class EnergyValueRegistryProxy { + @Mod.Instance("EE3") private static Object ee3Mod; - public static void addPreCalculationEnergyValue(Object object, float energyValue) - { - addPreCalculationEnergyValue(object, new EnergyValue(energyValue)); - } - - @Deprecated - public static void addPreAssignedEnergyValue(Object object, float energyValue) - { - addPreAssignedEnergyValue(object, new EnergyValue(energyValue)); - } - - public static void addPreCalculationEnergyValue(Object object, EnergyValue energyValue) - { - init(); - - if (ee3Mod != null) - { - EE3Wrapper.ee3mod.getEnergyValueRegistry().addPreCalculationEnergyValue(object, energyValue); - } - } - - @Deprecated - public static void addPreAssignedEnergyValue(Object object, EnergyValue energyValue) - { - init(); - - if (ee3Mod != null) - { - EE3Wrapper.ee3mod.getEnergyValueRegistry().addPreCalculationEnergyValue(object, energyValue); - } - } - - public static void addPostCalculationEnergyValue(Object object, float energyValue) - { - addPostCalculationEnergyValue(object, new EnergyValue(energyValue)); - } - - @Deprecated - public static void addPostAssignedEnergyValue(Object object, float energyValue) - { - addPostAssignedEnergyValue(object, new EnergyValue(energyValue)); - } - - public static void addPostCalculationEnergyValue(Object object, EnergyValue energyValue) - { - init(); - - if (ee3Mod != null) - { - EE3Wrapper.ee3mod.getEnergyValueRegistry().addPostCalculationExactEnergyValue(object, energyValue); - } - } - - @Deprecated - public static void addPostAssignedEnergyValue(Object object, EnergyValue energyValue) - { - init(); - - if (ee3Mod != null) - { - EE3Wrapper.ee3mod.getEnergyValueRegistry().addPostCalculationExactEnergyValue(object, energyValue); - } - } - public static boolean hasEnergyValue(Object object) { return hasEnergyValue(object, false); } - public static boolean hasEnergyValue(Object object, boolean strict) - { + public static boolean hasEnergyValue(Object object, boolean strict) { + init(); - if (ee3Mod != null) - { + if (ee3Mod != null) { return EE3Wrapper.ee3mod.getEnergyValueRegistry().hasEnergyValue(object, strict); } return false; } - public static EnergyValue getEnergyValue(Object object) - { + public static EnergyValue getEnergyValue(Object object) { return getEnergyValue(object, false); } - public static EnergyValue getEnergyValue(Object object, boolean strict) - { - return getEnergyValue(Phase.ALL, object, strict); - } + public static EnergyValue getEnergyValue(Object object, boolean strict) { - public static EnergyValue getEnergyValue(Phase phase, Object object, boolean strict) - { init(); - if (ee3Mod != null) - { - return EE3Wrapper.ee3mod.getEnergyValueRegistry().getEnergyValue(phase, object, strict); + if (ee3Mod != null) { + return EE3Wrapper.ee3mod.getEnergyValueRegistry().getEnergyValue(object, strict); } return null; } - public static EnergyValue getEnergyValueForStack(Object object) - { + public static EnergyValue getEnergyValueForStack(Object object) { return getEnergyValueForStack(object, false); } - public static EnergyValue getEnergyValueForStack(Object object, boolean strict) - { + public static EnergyValue getEnergyValueForStack(Object object, boolean strict) { + init(); - if (ee3Mod != null) - { + if (ee3Mod != null) { return EE3Wrapper.ee3mod.getEnergyValueRegistry().getEnergyValueForStack(object, strict); } return null; } - public static List getStacksInRange(float start, float finish) - { - return getStacksInRange(new EnergyValue(start), new EnergyValue(finish)); + public static List getStacksInRange(Number start, Number finish) { + return getStacksInRange(start, finish); } - public static List getStacksInRange(EnergyValue start, EnergyValue finish) - { + public static List getStacksInRange(EnergyValue start, EnergyValue finish) { + init(); - if (ee3Mod != null) - { + if (ee3Mod != null) { return EE3Wrapper.ee3mod.getEnergyValueRegistry().getStacksInRange(start, finish); } - return null; + return Collections.EMPTY_LIST; } - public static void dumpEnergyValueRegistryToLog() - { - dumpEnergyValueRegistryToLog(Phase.ALL); + public static void setEnergyValue(Object object, Number energyValue) { + setEnergyValue(object, energyValue, Phase.POST_CALCULATION); } - public static void dumpEnergyValueRegistryToLog(Phase phase) - { + public static void setEnergyValue(Object object, Number energyValue, Phase phase) { + init(); - if (ee3Mod != null) - { - EE3Wrapper.ee3mod.getEnergyValueRegistry().dumpEnergyValueRegistryToLog(phase); + if (ee3Mod != null) { + EE3Wrapper.ee3mod.getEnergyValueRegistry().setEnergyValue(object, new EnergyValue(energyValue), phase); } } - private static class EE3Wrapper - { + private static class EE3Wrapper { private static EquivalentExchange3 ee3mod; } - private static void init() - { - if (ee3Mod != null) - { + private static void init() { + + if (ee3Mod != null) { EE3Wrapper.ee3mod = (EquivalentExchange3) ee3Mod; } } - public enum Phase - { - /** - * @Deprecated Use PRE_CALCULATION instead - */ + public enum Phase { @Deprecated PRE_ASSIGNMENT, - PRE_CALCULATION, - - /** - * @Deprecated Use POST_CALCULATION instead - */ @Deprecated POST_ASSIGNMENT, - POST_CALCULATION, - - RUNTIME, - ALL } } diff --git a/src/main/java/com/pahimar/ee3/command/CommandDebug.java b/src/main/java/com/pahimar/ee3/command/CommandDebug.java deleted file mode 100644 index 7b6d03ec..00000000 --- a/src/main/java/com/pahimar/ee3/command/CommandDebug.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.pahimar.ee3.command; - -import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; -import com.pahimar.ee3.reference.Names; -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; - -import java.util.List; - -public class CommandDebug extends CommandBase -{ - @Override - public String getCommandName() - { - return Names.Commands.DEBUG; - } - - @Override - public int getRequiredPermissionLevel() - { - return 2; - } - - @Override - public String getCommandUsage(ICommandSender commandSender) - { - return null; - } - - @Override - public void processCommand(ICommandSender commandSender, String[] args) - { - EnergyValueRegistryProxy.dumpEnergyValueRegistryToLog(EnergyValueRegistryProxy.Phase.PRE_CALCULATION); - } - - @Override - public List addTabCompletionOptions(ICommandSender commandSender, String[] args) - { - return null; - } -} diff --git a/src/main/java/com/pahimar/ee3/command/CommandEE.java b/src/main/java/com/pahimar/ee3/command/CommandEE.java index 27584c4e..eac9ef31 100644 --- a/src/main/java/com/pahimar/ee3/command/CommandEE.java +++ b/src/main/java/com/pahimar/ee3/command/CommandEE.java @@ -81,7 +81,6 @@ public class CommandEE extends CommandBase modCommands.add(new CommandSetItemRecoverable()); modCommands.add(new CommandSetItemNotRecoverable()); modCommands.add(new CommandRunTest()); - modCommands.add(new CommandDebug()); modCommands.add(new CommandAdmin()); for (CommandBase commandBase : modCommands) diff --git a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java index 95f3f6da..37fbf6d3 100644 --- a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java +++ b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java @@ -9,7 +9,6 @@ import com.pahimar.ee3.handler.ConfigurationHandler; import com.pahimar.ee3.recipe.RecipeRegistry; import com.pahimar.ee3.reference.Files; import com.pahimar.ee3.reference.Reference; -import com.pahimar.ee3.util.EnergyValueHelper; import com.pahimar.ee3.util.LoaderHelper; import com.pahimar.ee3.util.LogHelper; import com.pahimar.ee3.util.SerializationHelper; @@ -75,7 +74,7 @@ public class EnergyValueRegistry implements JsonSerializer, if (wrappedStack.getStackSize() > 0) { WrappedStack factoredWrappedStack = WrappedStack.wrap(wrappedStack, 1); - EnergyValue factoredEnergyValue = EnergyValueHelper.factor(energyValue, wrappedStack.getStackSize()); + EnergyValue factoredEnergyValue = EnergyValue.factor(energyValue, wrappedStack.getStackSize()); if (preCalculationMappings.containsKey(factoredWrappedStack)) { @@ -113,7 +112,7 @@ public class EnergyValueRegistry implements JsonSerializer, if (wrappedStack.getStackSize() > 0) { WrappedStack factoredWrappedStack = WrappedStack.wrap(wrappedStack, 1); - EnergyValue factoredEnergyValue = EnergyValueHelper.factor(energyValue, wrappedStack.getStackSize()); + EnergyValue factoredEnergyValue = EnergyValue.factor(energyValue, wrappedStack.getStackSize()); LogHelper.trace(POST_CALC_MARKER, "[{}] Mod with ID '{}' setEnergyValue a post-calculation energy value of {} for object {}", LoaderHelper.getLoaderState(), Loader.instance().activeModContainer().getModId(), energyValue, wrappedStack); postCalculationMappings.put(factoredWrappedStack, factoredEnergyValue); @@ -415,7 +414,7 @@ public class EnergyValueRegistry implements JsonSerializer, { if (computedStackValues.get(keyStack) != null && Float.compare(computedStackValues.get(keyStack).getValue(), 0f) > 0) { - factoredExchangeEnergyValue = EnergyValueHelper.factor(computedStackValues.get(keyStack), keyStack.getStackSize()); + factoredExchangeEnergyValue = EnergyValue.factor(computedStackValues.get(keyStack), keyStack.getStackSize()); factoredKeyStack = WrappedStack.wrap(keyStack, 1); } } @@ -552,7 +551,7 @@ public class EnergyValueRegistry implements JsonSerializer, for (List recipeInputs : RecipeRegistry.getInstance().getRecipeMappings().get(recipeOutput)) { - EnergyValue computedValue = EnergyValueHelper.computeEnergyValueFromRecipe(stackValueMappings, recipeOutput, recipeInputs); + EnergyValue computedValue = NewEnergyValueRegistry.computeFromInputs(stackValueMappings, recipeOutput, recipeInputs); if (computedValue != null) { @@ -630,10 +629,7 @@ public class EnergyValueRegistry implements JsonSerializer, } else if (wrappedStack.getWrappedObject() instanceof OreStack) { - for (ItemStack itemStack : OreDictionary.getOres(((OreStack) wrappedStack.getWrappedObject()).oreName)) - { - stacksInRange.add(itemStack); - } + stacksInRange.addAll(OreDictionary.getOres(((OreStack) wrappedStack.getWrappedObject()).oreName)); } } } diff --git a/src/main/java/com/pahimar/ee3/exchange/NewEnergyValueRegistry.java b/src/main/java/com/pahimar/ee3/exchange/NewEnergyValueRegistry.java index 4501ac59..861a450f 100644 --- a/src/main/java/com/pahimar/ee3/exchange/NewEnergyValueRegistry.java +++ b/src/main/java/com/pahimar/ee3/exchange/NewEnergyValueRegistry.java @@ -3,30 +3,35 @@ package com.pahimar.ee3.exchange; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; import com.google.gson.JsonParseException; +import com.pahimar.ee3.api.event.EnergyValueEvent; import com.pahimar.ee3.api.exchange.EnergyValue; +import com.pahimar.ee3.api.exchange.IEnergyValueProvider; import com.pahimar.ee3.handler.ConfigurationHandler; -import com.pahimar.ee3.util.EnergyValueHelper; import com.pahimar.ee3.util.LogHelper; import com.pahimar.ee3.util.SerializationHelper; +import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.init.Items; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; import java.io.*; -import java.util.Map; -import java.util.SortedSet; -import java.util.TreeMap; -import java.util.TreeSet; +import java.util.*; + +import static com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy.Phase; public class NewEnergyValueRegistry { public static final NewEnergyValueRegistry INSTANCE = new NewEnergyValueRegistry(); - private ImmutableSortedMap energyValueMap; + private ImmutableSortedMap stackMap; + private ImmutableSortedMap> valueMap; private final Map preCalculationValueMap; private final Map postCalculationValueMap; @@ -41,8 +46,8 @@ public class NewEnergyValueRegistry { private NewEnergyValueRegistry() { - ImmutableSortedMap.Builder energyValueMapBuilder = ImmutableSortedMap.naturalOrder(); - energyValueMap = energyValueMapBuilder.build(); + ImmutableSortedMap.Builder stackMapBuilder = ImmutableSortedMap.naturalOrder(); + stackMap = stackMapBuilder.build(); preCalculationValueMap = new TreeMap<>(); postCalculationValueMap = new TreeMap<>(); @@ -58,13 +63,262 @@ public class NewEnergyValueRegistry { preCalculationValueMap.put(WrappedStack.wrap(new ItemStack(Items.chainmail_boots, 1, 2)), new EnergyValue(8)); } + /** + * Returns an {@link EnergyValue} for a {@link Object} in the provided {@link Map>} of {@link WrappedStack}s mapped + * to EnergyValues + * + *

The order of checking is as follows;

+ *
    + *
  1. {@link ItemStack}s whose {@link Item}s implement {@link IEnergyValueProvider}
  2. + *
  3. Direct EnergyValue mapping of the provided Object in the provided Map
  4. + *
  5. The following criteria are only checked (in order) in the event that this is a non-strict query; + *
      + *
    1. + * ItemStacks that are part of an {@link OreDictionary} entry are checked to see if + * all Ores they are registered to have the same non-null EnergyValue assigned to + * it + *
        + *
      • + * e.g., ItemStack X is associated with OreDictionary entries A, B and C. An EnergyValue + * would be returned for X only if A, B and C all had the same non-null EnergyValue + *
      • + *
      + *
    2. + *
    3. + * ItemStacks are checked to see if there exist {@link OreDictionary#WILDCARD_VALUE} equivalents + *
    4. + *
    5. + * {@link OreStack}s are checked to see if all members of the OreDictionary entry represented by the + * OreStack have the same non-null EnergyValue (similar to the case for ItemStacks above) + *
    6. + *
    + *
  6. + *
+ * + * @param valueMap a {@link Map} of {@link EnergyValue}'s mapped to {@link WrappedStack}'s + * @param object the {@link Object} that is being checked for a corresponding {@link EnergyValue} + * @param strict whether this is a strict (e.g., only looking for direct value assignment vs associative value + * assignments) query or not + * @return an {@link EnergyValue} if there is one to be found for the provided {@link Object} in the provided Map, null otherwise + */ + private static EnergyValue getEnergyValue(Map valueMap, Object object, boolean strict) { + + if (WrappedStack.canBeWrapped(object)) { + + WrappedStack wrappedStack = WrappedStack.wrap(object, 1); + Object wrappedObject = wrappedStack.getWrappedObject(); + + if (wrappedObject instanceof ItemStack && ((ItemStack) wrappedObject).getItem() instanceof IEnergyValueProvider && !strict) { + + EnergyValue energyValue = ((IEnergyValueProvider) ((ItemStack) wrappedObject).getItem()).getEnergyValue(((ItemStack) wrappedObject)); + + if (energyValue != null && Float.compare(energyValue.getValue(), 0f) > 0) { + return energyValue; + } + } + + if (valueMap != null && !valueMap.isEmpty()) { + + // First check for a direct energy value mapping to the wrapped object + if (valueMap.containsKey(wrappedStack)) { + return valueMap.get(wrappedStack); + } + else if (!strict) { + + if (wrappedObject instanceof ItemStack) { + + ItemStack unValuedItemStack = ItemStack.copyItemStack((ItemStack) wrappedObject); + EnergyValue minEnergyValue = null; + + int[] oreIds = OreDictionary.getOreIDs(unValuedItemStack); + if (oreIds.length > 0) { + + EnergyValue energyValue = null; + boolean allHaveSameValue = true; + + for (int oreId : oreIds) { + String oreName = OreDictionary.getOreName(oreId); + + if (!"Unknown".equalsIgnoreCase(oreName)) { + + WrappedStack oreStack = WrappedStack.wrap(new OreStack(oreName)); + + if (oreStack != null && valueMap.containsKey(oreStack)) { + + if (energyValue == null) { + energyValue = valueMap.get(oreStack); + } + else if (!energyValue.equals(valueMap.get(oreStack))) { + allHaveSameValue = false; + } + } + else { + allHaveSameValue = false; + } + } + else { + allHaveSameValue = false; + } + } + + if (allHaveSameValue) { + return energyValue; + } + } + else { + for (WrappedStack valuedWrappedStack : valueMap.keySet()) { + if (valuedWrappedStack.getWrappedObject() instanceof ItemStack) { + if (Item.getIdFromItem(((ItemStack) valuedWrappedStack.getWrappedObject()).getItem()) == Item.getIdFromItem(unValuedItemStack.getItem())) { + + ItemStack valuedItemStack = (ItemStack) valuedWrappedStack.getWrappedObject(); + if (valuedItemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE || unValuedItemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) { + + EnergyValue energyValue = valueMap.get(valuedWrappedStack); + + if (energyValue.compareTo(minEnergyValue) < 0) { + minEnergyValue = energyValue; + } + } + } + } + } + } + } + else if (wrappedObject instanceof OreStack) { + + OreStack oreStack = (OreStack) wrappedObject; + List itemStacks = OreDictionary.getOres(oreStack.oreName); + + if (!itemStacks.isEmpty()) { + + EnergyValue energyValue = null; + boolean allHaveSameValue = true; + + for (ItemStack itemStack : itemStacks) { + WrappedStack wrappedItemStack = WrappedStack.wrap(itemStack, 1); + + if (wrappedItemStack != null && valueMap.containsKey(wrappedItemStack)) { + if (energyValue == null) { + energyValue = valueMap.get(wrappedItemStack); + } + else if (!energyValue.equals(valueMap.get(wrappedItemStack))) { + allHaveSameValue = false; + } + } + else { + allHaveSameValue = false; + } + } + + if (allHaveSameValue) { + return energyValue; + } + } + } + } + } + } + + return null; + } + + /** + * Calculates an {@link EnergyValue} for the provided {@link WrappedStack} output from the provided {@link List} of + * WrappedStack inputs and {@link Map} of energy value mappings to objects. We calculate the energy value for the + * output by, for each input, summing the input's energy value * the input's stack size. That sum is then divided + * by the stack size of the output. If any of the inputs do not have an energy value then no + * energy value can be calculated for the output - therefore we return null + * + * @param valueMap a {@link Map} of {@link EnergyValue}'s mapped to {@link WrappedStack}'s + * @param wrappedOutput the {@link WrappedStack} output for that the inputs "create" + * @param wrappedInputs a {@link List} of {@link WrappedStack}s that "create" the output + * @return an {@link EnergyValue} if there is one that can be calculated, null otherwise + */ + // TODO Make this private when EnergyValueRegistry is properly replaced + public static EnergyValue computeFromInputs(Map valueMap, WrappedStack wrappedOutput, List wrappedInputs) { + + float sumOfValues = 0f; + + for (WrappedStack wrappedInput : wrappedInputs) { + + EnergyValue inputValue; + int stackSize = Integer.MIN_VALUE; + + if (wrappedInput.getWrappedObject() instanceof ItemStack) { + + ItemStack inputItemStack = (ItemStack) wrappedInput.getWrappedObject(); + + // Check if we are dealing with a potential fluid + if (FluidContainerRegistry.getFluidForFilledItem(inputItemStack) != null) { + + if (inputItemStack.getItem().getContainerItem(inputItemStack) != null) { + stackSize = FluidContainerRegistry.getFluidForFilledItem(inputItemStack).amount * wrappedInput.getStackSize(); + inputValue = getEnergyValue(valueMap, FluidContainerRegistry.getFluidForFilledItem(inputItemStack), false); + } + else { + inputValue = getEnergyValue(valueMap, wrappedInput, false); + } + } + else if (inputItemStack.getItem().getContainerItem(inputItemStack) != null) { + + ItemStack inputContainerItemStack = inputItemStack.getItem().getContainerItem(inputItemStack); + + if (getEnergyValue(valueMap, inputItemStack, false) != null && getEnergyValue(valueMap, inputContainerItemStack, false) != null) { + float itemStackValue = getEnergyValue(valueMap, inputItemStack, false).getValue(); + float containerStackValue = getEnergyValue(valueMap, inputContainerItemStack, false).getValue(); + inputValue = new EnergyValue(itemStackValue - containerStackValue); + } + else { + inputValue = new EnergyValue(0); + } + } + else if (!inputItemStack.getItem().doesContainerItemLeaveCraftingGrid(inputItemStack)) { + inputValue = new EnergyValue(0); + } + else if (OreDictionary.getOreIDs(inputItemStack).length > 0) { + inputValue = getEnergyValue(valueMap, wrappedInput, true); + } + else { + inputValue = getEnergyValue(valueMap, wrappedInput, false); + } + } + else if (wrappedInput.getWrappedObject() instanceof OreStack) { + + OreStack inputOreStack = (OreStack) wrappedInput.getWrappedObject(); + inputValue = getEnergyValue(valueMap, wrappedInput, false); + for (ItemStack itemStack : OreDictionary.getOres(inputOreStack.oreName)) { + if (!itemStack.getItem().doesContainerItemLeaveCraftingGrid(itemStack)) { + inputValue = new EnergyValue(0); + } + } + } + else { + inputValue = getEnergyValue(valueMap, wrappedInput, false); + } + + if (inputValue != null) { + + if (stackSize == Integer.MIN_VALUE) { + stackSize = wrappedInput.getStackSize(); + } + + sumOfValues += inputValue.getValue() * stackSize; + } + else { + return null; + } + } + + return EnergyValue.factor(new EnergyValue(sumOfValues), wrappedOutput.getStackSize()); + } + /** * Returns an {@link ImmutableMap} containing the current energy value mappings * * @return an {@link ImmutableMap} containing the current energy value mappings */ public ImmutableMap getEnergyValues() { - return energyValueMap; + return stackMap; } /** @@ -126,7 +380,85 @@ public class NewEnergyValueRegistry { * @return an {@link EnergyValue} if there is one to be found, null otherwise */ public EnergyValue getEnergyValue(Object object, boolean strict) { - return EnergyValueHelper.getEnergyValue(energyValueMap, object, strict); + return getEnergyValue(stackMap, object, strict); + } + + /** + * Returns an {@link EnergyValue} associated with the provided {@link Object} (if there is one) + * + * @param object the {@link Object} that is being checked for a corresponding {@link EnergyValue} + * @param strict whether this is a strict (e.g., only looking for direct value assignment vs associative value + * assignments) query or not + * @return an {@link EnergyValue} if there is one to be found, null otherwise + */ + public EnergyValue getEnergyValueForStack(Object object, boolean strict) { + + WrappedStack wrappedObject = WrappedStack.wrap(object); + + if (wrappedObject != null && getEnergyValue(object, strict) != null) { + return new EnergyValue(getEnergyValue(object, strict).getValue() * wrappedObject.getStackSize()); + } + + return null; + } + + /** + * TODO Finish JavaDoc + * + * @param start + * @param finish + * @return + */ + public List getStacksInRange(Number start, Number finish) { + return getStacksInRange(new EnergyValue(start), new EnergyValue(finish)); + } + + /** + * TODO Finish JavaDoc + * + * @param start + * @param finish + * @return + */ + public List getStacksInRange(EnergyValue start, EnergyValue finish) { + + List stacksInRange = new ArrayList(); + + if (valueMap != null) { + + SortedMap> tailMap = valueMap.tailMap(start); + SortedMap> headMap = valueMap.headMap(finish); + + SortedMap> smallerMap; + SortedMap> biggerMap; + + if (!tailMap.isEmpty() && !headMap.isEmpty()) { + + if (tailMap.size() <= headMap.size()) { + smallerMap = tailMap; + biggerMap = headMap; + } + else { + smallerMap = headMap; + biggerMap = tailMap; + } + + for (EnergyValue value : smallerMap.keySet()) { + if (biggerMap.containsKey(value)) { + for (WrappedStack wrappedStack : valueMap.get(value)) { + if (wrappedStack.getWrappedObject() instanceof ItemStack || wrappedStack.getWrappedObject() instanceof FluidStack) { + stacksInRange.add(wrappedStack.getWrappedObject()); + } + else if (wrappedStack.getWrappedObject() instanceof OreStack) { + stacksInRange.addAll(OreDictionary.getOres(((OreStack) wrappedStack.getWrappedObject()).oreName)); + } + } + } + } + } + } + + return stacksInRange; } /** @@ -136,11 +468,10 @@ public class NewEnergyValueRegistry { * * @param object the object the energy value is being assigned for * @param energyValue the energy value being setEnergyValue on the object - * @param isPreCalculationAssignment whether or not the calculated energy value assignment is a pre-calculation - * value assignment or not + * @param phase the {@link Phase} of energy value assignment to set this value for */ - public void setEnergyValue(Object object, EnergyValue energyValue, boolean isPreCalculationAssignment) { - setEnergyValue(object, energyValue, isPreCalculationAssignment, false); + public void setEnergyValue(Object object, EnergyValue energyValue, Phase phase) { + setEnergyValue(object, energyValue, phase, false); } /** @@ -150,31 +481,33 @@ public class NewEnergyValueRegistry { * * @param object the object the energy value is being assigned for * @param energyValue the energy value being setEnergyValue on the object - * @param isPreCalculationAssignment whether or not the calculated energy value assignment is a pre-calculation - * value assignment or not - * @param doRegenValues whether or not the energy value map needs recomputing. Only an option if - * isPreCalculationAssignment is true + * @param phase the {@link Phase} of energy value assignment to set this value for + * @param doRegenValues whether or not the energy value map needs recomputing. Only an option if the energy value + * is being assigned in the PRE_CALCULATION phase */ - public void setEnergyValue(Object object, EnergyValue energyValue, boolean isPreCalculationAssignment, boolean doRegenValues) { + public void setEnergyValue(Object object, EnergyValue energyValue, Phase phase, boolean doRegenValues) { if (WrappedStack.canBeWrapped(object) && energyValue != null && Float.compare(energyValue.getValue(), 0f) > 0) { WrappedStack wrappedStack = WrappedStack.wrap(object, 1); - EnergyValue factoredEnergyValue = EnergyValueHelper.factor(energyValue, wrappedStack.getStackSize()); + EnergyValue factoredEnergyValue = EnergyValue.factor(energyValue, wrappedStack.getStackSize()); - if (isPreCalculationAssignment) { - preCalculationValueMap.put(wrappedStack, factoredEnergyValue); + if (phase == Phase.PRE_CALCULATION) { + if (!FMLCommonHandler.instance().bus().post(new EnergyValueEvent.SetEnergyValueEvent(wrappedStack, factoredEnergyValue, Phase.PRE_CALCULATION))) { - if (doRegenValues) { - compute(); + preCalculationValueMap.put(wrappedStack, factoredEnergyValue); + + if (doRegenValues) { + compute(); + } } } - else { + else if (!FMLCommonHandler.instance().bus().post(new EnergyValueEvent.SetEnergyValueEvent(wrappedStack, factoredEnergyValue, Phase.POST_CALCULATION))) { - TreeMap valueMap = new TreeMap<>(energyValueMap); + TreeMap valueMap = new TreeMap<>(stackMap); valueMap.put(wrappedStack, energyValue); ImmutableSortedMap.Builder stackMappingsBuilder = ImmutableSortedMap.naturalOrder(); - energyValueMap = stackMappingsBuilder.putAll(valueMap).build(); + stackMap = stackMappingsBuilder.putAll(valueMap).build(); postCalculationValueMap.put(wrappedStack, factoredEnergyValue); } @@ -196,7 +529,7 @@ public class NewEnergyValueRegistry { .forEach(wrappedStack -> stackValueMap.put(wrappedStack, preCalculationValueMap.get(wrappedStack))); // Calculate values from the known methods to create items, and the pre-calculation value mappings - calculate(); + calculateStackMap(); // Add in all post-calculation energy value mappings postCalculationValueMap.keySet().stream() @@ -206,13 +539,13 @@ public class NewEnergyValueRegistry { // Bake the final calculated energy value map ImmutableSortedMap.Builder stackMappingsBuilder = ImmutableSortedMap.naturalOrder(); stackMappingsBuilder.putAll(stackValueMap); - energyValueMap = stackMappingsBuilder.build(); + stackMap = stackMappingsBuilder.build(); // Save the results to disk save(); } - private void calculate() { + private void calculateStackMap() { Map computedMap; int passNumber, passComputed, totalComputed; @@ -239,11 +572,37 @@ public class NewEnergyValueRegistry { LogHelper.info(ENERGY_VALUE_MARKER, "Finished dynamic value calculation (calculated {} values for objects in {} ns)", totalComputed, endingTime); } + private void calculateValueMap() { + + SortedMap> tempValueMap = new TreeMap<>(); + + for (WrappedStack wrappedStack : getEnergyValues().keySet()) { + + if (wrappedStack != null) { + + EnergyValue energyValue = getEnergyValues().get(wrappedStack); + + if (energyValue != null) { + if (tempValueMap.containsKey(energyValue)) { + if (!(tempValueMap.get(energyValue).contains(wrappedStack))) { + tempValueMap.get(energyValue).add(wrappedStack); + } + } + else { + tempValueMap.put(energyValue, new ArrayList<>(Arrays.asList(wrappedStack))); + } + } + } + } + valueMap = ImmutableSortedMap.copyOf(tempValueMap); + } + /** * Saves the pre-calculation, post-calculation, and calculated energy value maps to disk */ public void save() { - writeToJsonFile(energyValueMap, energyValuesFile); + + writeToJsonFile(stackMap, energyValuesFile); writeToJsonFile(preCalculationValueMap, preCalculationValuesFile); writeToJsonFile(postCalculationValueMap, postCalculationValuesFile); } @@ -269,9 +628,9 @@ public class NewEnergyValueRegistry { } try { - ImmutableSortedMap.Builder energyValueMapBuilder = ImmutableSortedMap.naturalOrder(); - energyValueMapBuilder.putAll(readFromJsonFile(energyValuesFile)); - energyValueMap = energyValueMapBuilder.build(); + ImmutableSortedMap.Builder stackMapBuilder = ImmutableSortedMap.naturalOrder(); + stackMapBuilder.putAll(readFromJsonFile(energyValuesFile)); + stackMap = stackMapBuilder.build(); } catch (FileNotFoundException e) { LogHelper.warn("No calculated energy value file found, regenerating"); // TODO Better log message compute(); diff --git a/src/main/java/com/pahimar/ee3/init/EnergyValues.java b/src/main/java/com/pahimar/ee3/init/EnergyValues.java index a65cb2f9..0bb9ce9f 100644 --- a/src/main/java/com/pahimar/ee3/init/EnergyValues.java +++ b/src/main/java/com/pahimar/ee3/init/EnergyValues.java @@ -8,162 +8,164 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.oredict.OreDictionary; -public class EnergyValues -{ - public static void addDefaultEnergyValues() - { +import static com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy.Phase; + +public class EnergyValues { + + public static void init() { + // OreDictionary assignment - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("cobblestone"), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("dustRedstone"), 32); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("cobblestone"), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("dustRedstone"), 32, Phase.PRE_CALCULATION); String[] dyes = {"Black", "Red", "Green", "Brown", "Blue", "Purple", "Cyan", "LightGray", "Gray", "Pink", "Lime", "Yellow", "LightBlue", "Magenta", "Orange", "White"}; for (int i = 0; i < dyes.length; i++) { - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("dye" + dyes[i]), 16); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("dye" + dyes[i]), 16, Phase.PRE_CALCULATION); } - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("gemDiamond"), 8192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("gemEmerald"), 8192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("gemLapis"), 864); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("gemQuartz"), 256); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("ingotGold"), 2048); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("ingotIron"), 256); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("logWood"), 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreCoal"), 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreDiamond"), 8192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreEmerald"), 8192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreGold"), 2048); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreIron"), 256); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreLapis"), 864); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreQuartz"), 256); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("oreRedstone"), 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("plankWood"), 8); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("record"), 2048); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("sand"), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("sandstone"), 4); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("slabWood"), 4); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("stairWood"), 12); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("stickWood"), 4); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("stone"), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("treeLeaves"), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new OreStack("treeSapling"), 32); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("gemDiamond"), 8192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("gemEmerald"), 8192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("gemLapis"), 864, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("gemQuartz"), 256, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("ingotGold"), 2048, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("ingotIron"), 256, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("logWood"), 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreCoal"), 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreDiamond"), 8192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreEmerald"), 8192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreGold"), 2048, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreIron"), 256, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreLapis"), 864, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreQuartz"), 256, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("oreRedstone"), 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("plankWood"), 8, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("record"), 2048, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("sand"), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("sandstone"), 4, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("slabWood"), 4, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("stairWood"), 12, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("stickWood"), 4, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("stone"), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("treeLeaves"), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new OreStack("treeSapling"), 32, Phase.PRE_CALCULATION); // Fluids - EnergyValueRegistryProxy.addPreAssignedEnergyValue(FluidRegistry.WATER, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(FluidRegistry.LAVA, 64); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(FluidRegistry.getFluid("milk"), 64); + EnergyValueRegistryProxy.setEnergyValue(FluidRegistry.WATER, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(FluidRegistry.LAVA, 64, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(FluidRegistry.getFluid("milk"), 64, Phase.PRE_CALCULATION); /* Building Blocks */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.stone, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.grass, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.dirt, 1, OreDictionary.WILDCARD_VALUE), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.cobblestone, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.sand, 1, OreDictionary.WILDCARD_VALUE), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.gravel, 4); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.glass, 1, OreDictionary.WILDCARD_VALUE), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.sandstone, 1, OreDictionary.WILDCARD_VALUE), 4); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.mossy_cobblestone, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.obsidian, 64); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.ice, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.pumpkin, 144); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.netherrack, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.soul_sand, 49); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.stonebrick, 1, OreDictionary.WILDCARD_VALUE), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.mycelium, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.end_stone, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.hardened_clay, 256); + EnergyValueRegistryProxy.setEnergyValue(Blocks.stone, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.grass, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.dirt, 1, OreDictionary.WILDCARD_VALUE), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.cobblestone, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.sand, 1, OreDictionary.WILDCARD_VALUE), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.gravel, 4, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.glass, 1, OreDictionary.WILDCARD_VALUE), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.sandstone, 1, OreDictionary.WILDCARD_VALUE), 4, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.mossy_cobblestone, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.obsidian, 64, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.ice, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.pumpkin, 144, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.netherrack, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.soul_sand, 49, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.stonebrick, 1, OreDictionary.WILDCARD_VALUE), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.mycelium, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.end_stone, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.hardened_clay, 256, Phase.PRE_CALCULATION); /* Decoration Blocks */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.web, 12); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.tallgrass, 1, OreDictionary.WILDCARD_VALUE), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.deadbush, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.yellow_flower, 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.red_flower, 1, OreDictionary.WILDCARD_VALUE), 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.brown_mushroom, 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.red_mushroom, 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.red_mushroom, 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.snow_layer, 0.125f); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.cactus, 8); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.vine, 8); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Blocks.waterlily, 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.anvil, 1, 1), 5290.667f); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.anvil, 1, 2), 2645.333f); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Blocks.double_plant, 1, OreDictionary.WILDCARD_VALUE), 32); + EnergyValueRegistryProxy.setEnergyValue(Blocks.web, 12, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.tallgrass, 1, OreDictionary.WILDCARD_VALUE), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.deadbush, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.yellow_flower, 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.red_flower, 1, OreDictionary.WILDCARD_VALUE), 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.brown_mushroom, 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.red_mushroom, 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.red_mushroom, 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.snow_layer, 0.125f, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.cactus, 8, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.vine, 8, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Blocks.waterlily, 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.anvil, 1, 1), 5290.667f, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.anvil, 1, 2), 2645.333f, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Blocks.double_plant, 1, OreDictionary.WILDCARD_VALUE), 32, Phase.PRE_CALCULATION); /* Redstone */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.redstone, 32); + EnergyValueRegistryProxy.setEnergyValue(Items.redstone, 32, Phase.PRE_CALCULATION); /* Transportation */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.saddle, 192); + EnergyValueRegistryProxy.setEnergyValue(Items.saddle, 192, Phase.PRE_CALCULATION); /* Miscellaneous */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.snowball, 0.25f); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.slime_ball, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.bone, 48); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.ender_pearl, 1024); + EnergyValueRegistryProxy.setEnergyValue(Items.snowball, 0.25f, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.slime_ball, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.bone, 48, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.ender_pearl, 1024, Phase.PRE_CALCULATION); /* Foodstuffs */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.apple, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.porkchop, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.cooked_porkchop, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.fish, 1, OreDictionary.WILDCARD_VALUE), 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.cooked_fished, 1, OreDictionary.WILDCARD_VALUE), 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.melon, 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.beef, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.cooked_beef, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.chicken, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.cooked_chicken, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.rotten_flesh, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.spider_eye, 128); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.carrot, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.potato, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.baked_potato, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.poisonous_potato, 24); + EnergyValueRegistryProxy.setEnergyValue(Items.apple, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.porkchop, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.cooked_porkchop, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.fish, 1, OreDictionary.WILDCARD_VALUE), 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.cooked_fished, 1, OreDictionary.WILDCARD_VALUE), 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.melon, 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.beef, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.cooked_beef, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.chicken, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.cooked_chicken, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.rotten_flesh, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.spider_eye, 128, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.carrot, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.potato, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.baked_potato, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.poisonous_potato, 24, Phase.PRE_CALCULATION); /* Brewing */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.ghast_tear, 4096); + EnergyValueRegistryProxy.setEnergyValue(Items.ghast_tear, 4096, Phase.PRE_CALCULATION); /* Materials */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.coal, 1, 0), 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.coal, 1, 1), 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.diamond, 8192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.iron_ingot, 256); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.gold_ingot, 2048); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.string, 12); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.feather, 48); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.gunpowder, 192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.wheat_seeds, 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.wheat, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.flint, 4); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.leather, 64); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.brick, 64); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.clay_ball, 64); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.reeds, 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.egg, 32); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.glowstone_dust, 384); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.dye, 1, 0), 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.dye, 1, 2), 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.dye, 1, 3), 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.dye, 1, 4), 864); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.dye, 1, 5), 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(Items.dye, 1, 6), 16); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.blaze_rod, 1536); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.nether_wart, 24); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.emerald, 8192); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.nether_star, 24576); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.netherbrick, 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(Items.quartz, 256); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.coal, 1, 0), 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.coal, 1, 1), 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.diamond, 8192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.iron_ingot, 256, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.gold_ingot, 2048, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.string, 12, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.feather, 48, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.gunpowder, 192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.wheat_seeds, 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.wheat, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.flint, 4, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.leather, 64, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.brick, 64, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.clay_ball, 64, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.reeds, 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.egg, 32, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.glowstone_dust, 384, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.dye, 1, 0), 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.dye, 1, 2), 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.dye, 1, 3), 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.dye, 1, 4), 864, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.dye, 1, 5), 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(Items.dye, 1, 6), 16, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.blaze_rod, 1536, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.nether_wart, 24, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.emerald, 8192, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.nether_star, 24576, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.netherbrick, 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(Items.quartz, 256, Phase.PRE_CALCULATION); /* Equivalent Exchange 3 */ /** * Alchemical Dusts */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 0), 1); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 1), 64); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 2), 2048); - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 3), 8192); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 0), 1, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 1), 64, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 2), 2048, Phase.PRE_CALCULATION); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(ModItems.alchemicalDust, 1, 3), 8192, Phase.PRE_CALCULATION); /** * Minium Shard */ - EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(ModItems.shardMinium), 8192); + EnergyValueRegistryProxy.setEnergyValue(new ItemStack(ModItems.shardMinium), 8192, Phase.PRE_CALCULATION); } } diff --git a/src/main/java/com/pahimar/ee3/util/EnergyValueHelper.java b/src/main/java/com/pahimar/ee3/util/EnergyValueHelper.java deleted file mode 100644 index 7e99727c..00000000 --- a/src/main/java/com/pahimar/ee3/util/EnergyValueHelper.java +++ /dev/null @@ -1,293 +0,0 @@ -package com.pahimar.ee3.util; - -import com.pahimar.ee3.api.exchange.EnergyValue; -import com.pahimar.ee3.api.exchange.IEnergyValueProvider; -import com.pahimar.ee3.exchange.EnergyValueRegistry; -import com.pahimar.ee3.exchange.OreStack; -import com.pahimar.ee3.exchange.WrappedStack; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.oredict.OreDictionary; - -import java.math.BigDecimal; -import java.util.List; -import java.util.Map; - -public class EnergyValueHelper { - - /** - * Returns an {@link EnergyValue} for a {@link Object} in the provided {@link Map>} of {@link WrappedStack}s mapped - * to EnergyValues - * - *

The order of checking is as follows;

- *
    - *
  1. {@link ItemStack}s whose {@link Item}s implement {@link IEnergyValueProvider}
  2. - *
  3. Direct EnergyValue mapping of the provided Object in the provided Map
  4. - *
  5. The following criteria are only checked (in order) in the event that this is a non-strict query; - *
      - *
    1. - * ItemStacks that are part of an {@link OreDictionary} entry are checked to see if - * all Ores they are registered to have the same non-null EnergyValue assigned to - * it - *
        - *
      • - * e.g., ItemStack X is associated with OreDictionary entries A, B and C. An EnergyValue - * would be returned for X only if A, B and C all had the same non-null EnergyValue - *
      • - *
      - *
    2. - *
    3. - * ItemStacks are checked to see if there exist {@link OreDictionary#WILDCARD_VALUE} equivalents - *
    4. - *
    5. - * {@link OreStack}s are checked to see if all members of the OreDictionary entry represented by the - * OreStack have the same non-null EnergyValue (similar to the case for ItemStacks above) - *
    6. - *
    - *
  6. - *
- * - * @param valueMap a {@link Map} of {@link EnergyValue}'s mapped to {@link WrappedStack}'s - * @param object the {@link Object} that is being checked for a corresponding {@link EnergyValue} - * @param strict whether this is a strict (e.g., only looking for direct value assignment vs associative value - * assignments) query or not - * @return an {@link EnergyValue} if there is one to be found for the provided {@link Object} in the provided Map, null otherwise - */ - public static EnergyValue getEnergyValue(Map valueMap, Object object, boolean strict) { - - if (WrappedStack.canBeWrapped(object)) { - - WrappedStack wrappedStack = WrappedStack.wrap(object, 1); - Object wrappedObject = wrappedStack.getWrappedObject(); - - if (wrappedObject instanceof ItemStack && ((ItemStack) wrappedObject).getItem() instanceof IEnergyValueProvider && !strict) { - - EnergyValue energyValue = ((IEnergyValueProvider) ((ItemStack) wrappedObject).getItem()).getEnergyValue(((ItemStack) wrappedObject)); - - if (energyValue != null && Float.compare(energyValue.getValue(), 0f) > 0) { - return energyValue; - } - } - - if (valueMap != null && !valueMap.isEmpty()) { - - // First check for a direct energy value mapping to the wrapped object - if (valueMap.containsKey(wrappedStack)) { - return valueMap.get(wrappedStack); - } - else if (!strict) { - - if (wrappedObject instanceof ItemStack) { - - ItemStack unValuedItemStack = ItemStack.copyItemStack((ItemStack) wrappedObject); - EnergyValue minEnergyValue = null; - - int[] oreIds = OreDictionary.getOreIDs(unValuedItemStack); - if (oreIds.length > 0) { - - EnergyValue energyValue = null; - boolean allHaveSameValue = true; - - for (int oreId : oreIds) { - String oreName = OreDictionary.getOreName(oreId); - - if (!"Unknown".equalsIgnoreCase(oreName)) { - - WrappedStack oreStack = WrappedStack.wrap(new OreStack(oreName)); - - if (oreStack != null && valueMap.containsKey(oreStack)) { - - if (energyValue == null) { - energyValue = valueMap.get(oreStack); - } - else if (!energyValue.equals(valueMap.get(oreStack))) { - allHaveSameValue = false; - } - } - else { - allHaveSameValue = false; - } - } - else { - allHaveSameValue = false; - } - } - - if (allHaveSameValue) { - return energyValue; - } - } - else { - for (WrappedStack valuedWrappedStack : valueMap.keySet()) { - if (valuedWrappedStack.getWrappedObject() instanceof ItemStack) { - if (Item.getIdFromItem(((ItemStack) valuedWrappedStack.getWrappedObject()).getItem()) == Item.getIdFromItem(unValuedItemStack.getItem())) { - - ItemStack valuedItemStack = (ItemStack) valuedWrappedStack.getWrappedObject(); - if (valuedItemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE || unValuedItemStack.getItemDamage() == OreDictionary.WILDCARD_VALUE) { - - EnergyValue energyValue = valueMap.get(valuedWrappedStack); - - if (energyValue.compareTo(minEnergyValue) < 0) { - minEnergyValue = energyValue; - } - } - } - } - } - } - } - else if (wrappedObject instanceof OreStack) { - - OreStack oreStack = (OreStack) wrappedObject; - List itemStacks = OreDictionary.getOres(oreStack.oreName); - - if (!itemStacks.isEmpty()) { - - EnergyValue energyValue = null; - boolean allHaveSameValue = true; - - for (ItemStack itemStack : itemStacks) { - WrappedStack wrappedItemStack = WrappedStack.wrap(itemStack, 1); - - if (wrappedItemStack != null && valueMap.containsKey(wrappedItemStack)) { - if (energyValue == null) { - energyValue = valueMap.get(wrappedItemStack); - } - else if (!energyValue.equals(valueMap.get(wrappedItemStack))) { - allHaveSameValue = false; - } - } - else { - allHaveSameValue = false; - } - } - - if (allHaveSameValue) { - return energyValue; - } - } - } - } - } - } - - return null; - } - - // FIXME PRIORITY NUMBER 1 (Implement new method) - public static EnergyValue computeFromInputs(Map valueMap, WrappedStack wrappedOutput, List wrappedInputs) { - - EnergyValue computedEnergyValue = null; - - - - return computedEnergyValue; - } - - public static EnergyValue computeEnergyValueFromRecipe(Map valueMap, WrappedStack wrappedOutput, List wrappedInputs) { - - float computedValue = 0f; - - // TODO We should do some verification that every input has an energy value - if not there is no point doing the calculation - - /** - * Basic algorithm: - * Set sumOfInputValues to 0 - * For every input, add (input's Unit Value) * (input's stackSize) to sumOfInputs - * return new EnergyValue(sumOfInputs / output's stackSize) - * - * Caveats are for ItemStacks that act as containers. You only want to catch the difference in values between - * pre-crafting and post-crafting - * - * e.g., A recipe that uses up the water in a bucket (empty bucket left) vs uses up the entire water bucket (nothing left) - */ - for (WrappedStack wrappedInput : wrappedInputs) { - - EnergyValue wrappedInputValue; - int stackSize = -1; - - if (wrappedInput.getWrappedObject() instanceof ItemStack) { - - ItemStack itemStack = (ItemStack) wrappedInput.getWrappedObject(); - - // Check if we are dealing with a potential fluid - if (FluidContainerRegistry.getFluidForFilledItem(itemStack) != null) { - - if (itemStack.getItem().getContainerItem(itemStack) != null) { - stackSize = FluidContainerRegistry.getFluidForFilledItem(itemStack).amount * wrappedInput.getStackSize(); - wrappedInputValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, FluidContainerRegistry.getFluidForFilledItem(itemStack)); - } - else { - wrappedInputValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, wrappedInput); - } - } - else if (itemStack.getItem().getContainerItem(itemStack) != null) { - - ItemStack containerItemStack = itemStack.getItem().getContainerItem(itemStack); - - if (EnergyValueRegistry.getInstance().hasEnergyValue(itemStack) && EnergyValueRegistry.getInstance().hasEnergyValue(containerItemStack)) { - float itemStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, itemStack).getValue(); - float containerStackValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, containerItemStack).getValue(); - wrappedInputValue = new EnergyValue(itemStackValue - containerStackValue); - } - else { - wrappedInputValue = new EnergyValue(0); - } - } - else if (!itemStack.getItem().doesContainerItemLeaveCraftingGrid(itemStack)) { - wrappedInputValue = new EnergyValue(0); - } - else if (OreDictionary.getOreIDs(itemStack).length > 0) { - wrappedInputValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, wrappedInput, true); - } - else { - wrappedInputValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, wrappedInput); - } - } - else if (wrappedInput.getWrappedObject() instanceof OreStack) { - - OreStack oreStack = (OreStack) wrappedInput.getWrappedObject(); - wrappedInputValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, wrappedInput); - for (ItemStack itemStack : OreDictionary.getOres(oreStack.oreName)) - { - if (!itemStack.getItem().doesContainerItemLeaveCraftingGrid(itemStack)) - { - wrappedInputValue = new EnergyValue(0); - } - } - } - else { - wrappedInputValue = EnergyValueRegistry.getInstance().getEnergyValueFromMap(valueMap, wrappedInput); - } - - if (wrappedInputValue != null) { - - if (stackSize == -1) { - stackSize = wrappedInput.getStackSize(); - } - - computedValue += wrappedInputValue.getValue() * stackSize; - } - else { - return null; - } - } - - return factor(new EnergyValue(computedValue), wrappedOutput.getStackSize()); - } - - public static EnergyValue factor(EnergyValue energyValue, int factor) { - return factor(energyValue, (float) factor); - } - - public static EnergyValue factor(EnergyValue energyValue, float factor) { - - if ((Float.compare(factor, 0f) != 0) && (energyValue != null)) { - return new EnergyValue(new BigDecimal(energyValue.getValue() * 1f / factor).setScale(3, BigDecimal.ROUND_HALF_EVEN).floatValue()); - } - else { - return null; - } - } -}