Mama said save my work. I'm gonna save my work!
This commit is contained in:
parent
191a44f2f5
commit
926ab181da
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<EnergyValue>, JsonDeserializer<EnergyValue>, JsonSerializer<EnergyValue> {
|
||||
|
||||
public final class EnergyValue implements Comparable<EnergyValue>, JsonDeserializer<EnergyValue>, JsonSerializer<EnergyValue>
|
||||
{
|
||||
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<EnergyValue>, 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<EnergyValue>, 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<EnergyValue>, 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
|
|
@ -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<EnergyValueRegistry>,
|
|||
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<EnergyValueRegistry>,
|
|||
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<EnergyValueRegistry>,
|
|||
{
|
||||
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<EnergyValueRegistry>,
|
|||
|
||||
for (List<WrappedStack> 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<EnergyValueRegistry>,
|
|||
}
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<WrappedStack, EnergyValue> energyValueMap;
|
||||
private ImmutableSortedMap<WrappedStack, EnergyValue> stackMap;
|
||||
private ImmutableSortedMap<EnergyValue, List<WrappedStack>> valueMap;
|
||||
|
||||
private final Map<WrappedStack, EnergyValue> preCalculationValueMap;
|
||||
private final Map<WrappedStack, EnergyValue> postCalculationValueMap;
|
||||
|
@ -41,8 +46,8 @@ public class NewEnergyValueRegistry {
|
|||
|
||||
private NewEnergyValueRegistry() {
|
||||
|
||||
ImmutableSortedMap.Builder<WrappedStack, EnergyValue> energyValueMapBuilder = ImmutableSortedMap.naturalOrder();
|
||||
energyValueMap = energyValueMapBuilder.build();
|
||||
ImmutableSortedMap.Builder<WrappedStack, EnergyValue> 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
|
||||
*
|
||||
* <p>The order of checking is as follows;</p>
|
||||
* <ol>
|
||||
* <li>{@link ItemStack}s whose {@link Item}s implement {@link IEnergyValueProvider}</li>
|
||||
* <li>Direct EnergyValue mapping of the provided Object in the provided Map</li>
|
||||
* <li>The following criteria are only checked (in order) in the event that this is a non-strict query;
|
||||
* <ol>
|
||||
* <li>
|
||||
* ItemStacks that are part of an {@link OreDictionary} entry are checked to see if
|
||||
* <strong>all</strong> Ores they are registered to have the same non-null EnergyValue assigned to
|
||||
* it
|
||||
* <ul>
|
||||
* <li>
|
||||
* 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
|
||||
* </li>
|
||||
* </ul>
|
||||
* </li>
|
||||
* <li>
|
||||
* ItemStacks are checked to see if there exist {@link OreDictionary#WILDCARD_VALUE} equivalents
|
||||
* </li>
|
||||
* <li>
|
||||
* {@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)
|
||||
* </li>
|
||||
* </ol>
|
||||
* </li>
|
||||
* </ol>
|
||||
*
|
||||
* @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<WrappedStack, EnergyValue> 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<ItemStack> 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 <strong>any</strong> 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<WrappedStack, EnergyValue> valueMap, WrappedStack wrappedOutput, List<WrappedStack> 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<WrappedStack, EnergyValue> 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<WrappedStack>();
|
||||
|
||||
if (valueMap != null) {
|
||||
|
||||
SortedMap<EnergyValue, List<WrappedStack>> tailMap = valueMap.tailMap(start);
|
||||
SortedMap<EnergyValue, List<WrappedStack>> headMap = valueMap.headMap(finish);
|
||||
|
||||
SortedMap<EnergyValue, List<WrappedStack>> smallerMap;
|
||||
SortedMap<EnergyValue, List<WrappedStack>> 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
|
||||
* <code>isPreCalculationAssignment</code> 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 <code>PRE_CALCULATION</code> 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<WrappedStack, EnergyValue> valueMap = new TreeMap<>(energyValueMap);
|
||||
TreeMap<WrappedStack, EnergyValue> valueMap = new TreeMap<>(stackMap);
|
||||
valueMap.put(wrappedStack, energyValue);
|
||||
ImmutableSortedMap.Builder<WrappedStack, EnergyValue> 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<WrappedStack, EnergyValue> 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<WrappedStack, EnergyValue> 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<EnergyValue, List<WrappedStack>> 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<WrappedStack, EnergyValue> energyValueMapBuilder = ImmutableSortedMap.naturalOrder();
|
||||
energyValueMapBuilder.putAll(readFromJsonFile(energyValuesFile));
|
||||
energyValueMap = energyValueMapBuilder.build();
|
||||
ImmutableSortedMap.Builder<WrappedStack, EnergyValue> 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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
*
|
||||
* <p>The order of checking is as follows;</p>
|
||||
* <ol>
|
||||
* <li>{@link ItemStack}s whose {@link Item}s implement {@link IEnergyValueProvider}</li>
|
||||
* <li>Direct EnergyValue mapping of the provided Object in the provided Map</li>
|
||||
* <li>The following criteria are only checked (in order) in the event that this is a non-strict query;
|
||||
* <ol>
|
||||
* <li>
|
||||
* ItemStacks that are part of an {@link OreDictionary} entry are checked to see if
|
||||
* <strong>all</strong> Ores they are registered to have the same non-null EnergyValue assigned to
|
||||
* it
|
||||
* <ul>
|
||||
* <li>
|
||||
* 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
|
||||
* </li>
|
||||
* </ul>
|
||||
* </li>
|
||||
* <li>
|
||||
* ItemStacks are checked to see if there exist {@link OreDictionary#WILDCARD_VALUE} equivalents
|
||||
* </li>
|
||||
* <li>
|
||||
* {@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)
|
||||
* </li>
|
||||
* </ol>
|
||||
* </li>
|
||||
* </ol>
|
||||
*
|
||||
* @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<WrappedStack, EnergyValue> 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<ItemStack> 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<WrappedStack, EnergyValue> valueMap, WrappedStack wrappedOutput, List<WrappedStack> wrappedInputs) {
|
||||
|
||||
EnergyValue computedEnergyValue = null;
|
||||
|
||||
|
||||
|
||||
return computedEnergyValue;
|
||||
}
|
||||
|
||||
public static EnergyValue computeEnergyValueFromRecipe(Map<WrappedStack, EnergyValue> valueMap, WrappedStack wrappedOutput, List<WrappedStack> 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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue