From 34cda981c049a202ba1a0316521468cce95e1ca3 Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 1 May 2015 14:21:59 -0400 Subject: [PATCH] Stuffs on fire yo --- .../ee3/exchange/EnergyValueRegistry.java | 4 +- .../com/pahimar/ee3/exchange/OreStack.java | 6 +-- .../ContainerTransmutationTablet.java | 37 +++++++++++++++---- .../java/com/pahimar/ee3/reference/Files.java | 2 +- .../TileEntityTransmutationTablet.java | 12 +++--- .../pahimar/ee3/util/SerializationHelper.java | 30 +++++++++++++++ 6 files changed, 73 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java index 52e6d073..b173d496 100644 --- a/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java +++ b/src/main/java/com/pahimar/ee3/exchange/EnergyValueRegistry.java @@ -743,7 +743,8 @@ public class EnergyValueRegistry implements INBTTaggable, JsonSerializer public int stackSize; public static Comparator comparator = new Comparator() { - @Override public int compare(OreStack oreStack1, OreStack oreStack2) { - - if (oreStack1 != null) + if (oreStack1 != null && oreStack1.oreName != null) { - if (oreStack2 != null) + if (oreStack2 != null && oreStack2.oreName != null) { if (oreStack1.oreName.equalsIgnoreCase(oreStack2.oreName)) { diff --git a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java index 8101131d..b43c9d89 100644 --- a/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/inventory/ContainerTransmutationTablet.java @@ -17,6 +17,7 @@ import com.pahimar.ee3.reference.Comparators; import com.pahimar.ee3.tileentity.TileEntityTransmutationTablet; import com.pahimar.ee3.util.FilterUtils; import com.pahimar.ee3.util.ItemHelper; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -107,6 +108,12 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen this.updateInventory(); } + @Override + public boolean canInteractWith(EntityPlayer entityPlayer) + { + return this.tileEntityTransmutationTablet != null && this.tileEntityTransmutationTablet.isStructureValid(); + } + @Override public void detectAndSendChanges() { @@ -244,7 +251,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen } else if (slotIndex >= TileEntityTransmutationTablet.INVENTORY_SIZE && slotIndex < 40) { - if (!this.mergeTransmutationItemStack(slotItemStack, 40, inventorySlots.size(), false)) + if (!this.mergeTransmutatedItemStack(entityPlayer, slot, slotItemStack, 40, inventorySlots.size(), false)) { return null; } @@ -287,13 +294,15 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen return itemStack; } - protected boolean mergeTransmutationItemStack(ItemStack itemStack, int slotMin, int slotMax, boolean ascending) + protected boolean mergeTransmutatedItemStack(EntityPlayer entityPlayer, Slot transmutationOutputSlot, ItemStack itemStack, int slotMin, int slotMax, boolean ascending) { if (this.tileEntityTransmutationTablet.getAvailableEnergyValue().compareTo(EnergyValueRegistryProxy.getEnergyValue(itemStack)) < 0) { return false; } + transmutationOutputSlot.onPickupFromSlot(entityPlayer, itemStack); + boolean slotFound = false; int currentSlotIndex = ascending ? slotMax - 1 : slotMin; @@ -314,7 +323,7 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen if (combinedStackSize <= slotStackSizeLimit) { - itemStack.stackSize = 1; + itemStack.stackSize = 0; stackInSlot.stackSize = combinedStackSize; slot.onSlotChanged(); slotFound = true; @@ -357,8 +366,8 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen currentSlotIndex += ascending ? -1 : 1; } - itemStack.stackSize = 1; } + itemStack.stackSize = 1; return slotFound; } @@ -478,15 +487,29 @@ public class ContainerTransmutationTablet extends ContainerEE implements IElemen @Override public boolean canTakeStack(EntityPlayer entityPlayer) { - return true; + return this.getHasStack(); } @Override public void onPickupFromSlot(EntityPlayer entityPlayer, ItemStack itemStack) { super.onPickupFromSlot(entityPlayer, itemStack); - // this.containerTransmutationTablet.tileEntityTransmutationTablet.consumeInventoryForEnergyValue(itemStack); - // this.containerTransmutationTablet.inventoryTransmutationTablet.setInventorySlotContents(this.getSlotIndex(), new ItemStack(itemStack.getItem(), 1, itemStack.getItemDamage())); + + if (this.getHasStack()) + { + this.containerTransmutationTablet.tileEntityTransmutationTablet.consumeInventoryForEnergyValue(itemStack); + } + } + + @Override + public void onSlotChanged() + { + super.onSlotChanged(); + + if (FMLCommonHandler.instance().getEffectiveSide().isServer()) + { + this.containerTransmutationTablet.tileEntityTransmutationTablet.updateEnergyValueFromInventory(); + } } @Override diff --git a/src/main/java/com/pahimar/ee3/reference/Files.java b/src/main/java/com/pahimar/ee3/reference/Files.java index 6dd52b24..cb7a2da9 100644 --- a/src/main/java/com/pahimar/ee3/reference/Files.java +++ b/src/main/java/com/pahimar/ee3/reference/Files.java @@ -7,5 +7,5 @@ public class Files public static final String TEMPLATE_JSON_FILE = "template.json"; public static final String ABILITIES_JSON_FILE = "abilities.json"; public static final String STATIC_ENERGY_VALUES = "energy-values.dat"; - public static final String STATIC_ENERGY_VALUES_JSON = "energy-values.json"; + public static final String STATIC_ENERGY_VALUES_JSON = "energy-values.json.gz"; } diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java b/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java index e717c758..90e1ca2a 100644 --- a/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java +++ b/src/main/java/com/pahimar/ee3/tileentity/TileEntityTransmutationTablet.java @@ -79,14 +79,16 @@ public class TileEntityTransmutationTablet extends TileEntityEE implements ISide } else { - while (this.storedEnergyValue.compareTo(outputEnergyValue) < 0) + while (this.storedEnergyValue.compareTo(outputEnergyValue) < 0 && this.availableEnergyValue.compareTo(outputEnergyValue) >= 0) { - int candidateSlotIndex = Integer.MIN_VALUE; - float candidateEnergyValue = Float.MIN_VALUE; - for (int i = 0; i < STONE_INDEX; i++) { - // Sick as hell algorithm that solves everything and makes me look cool on a skateboard + ItemStack stackInSlot = getStackInSlot(i); + if (stackInSlot != null && EnergyValueRegistryProxy.hasEnergyValue(stackInSlot)) + { + this.storedEnergyValue = new EnergyValue(this.storedEnergyValue.getValue() + EnergyValueRegistryProxy.getEnergyValue(stackInSlot).getValue()); + decrStackSize(i, 1); + } } } diff --git a/src/main/java/com/pahimar/ee3/util/SerializationHelper.java b/src/main/java/com/pahimar/ee3/util/SerializationHelper.java index e47bdc97..ff7305a5 100644 --- a/src/main/java/com/pahimar/ee3/util/SerializationHelper.java +++ b/src/main/java/com/pahimar/ee3/util/SerializationHelper.java @@ -3,6 +3,7 @@ package com.pahimar.ee3.util; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import com.pahimar.ee3.api.EnergyValue; +import com.pahimar.ee3.exchange.EnergyValueRegistry; import com.pahimar.ee3.exchange.EnergyValueStackMapping; import com.pahimar.ee3.exchange.WrappedStack; import com.pahimar.ee3.knowledge.TransmutationKnowledge; @@ -257,4 +258,33 @@ public class SerializationHelper e.printStackTrace(); } } + + public static void compressEnergyValueStackMapToFile(String fileName, Map energyValueMap) + { + File energyValuesDataDirectory = new File(FMLCommonHandler.instance().getMinecraftServerInstance().getEntityWorld().getSaveHandler().getWorldDirectory(), "data" + File.separator + Reference.LOWERCASE_MOD_ID + File.separator + "energyvalues"); + compressEnergyValueStackMapToFile(new File(energyValuesDataDirectory, fileName), energyValueMap); + } + + public static void compressEnergyValueStackMapToFile(File file, Map energyValueMap) + { + try + { + byte[] energyValueRegistryArray = CompressionHelper.compressStringToByteArray(EnergyValueRegistry.getInstance().toJson()); + FileOutputStream fos = new FileOutputStream(file); + fos.write(energyValueRegistryArray); + fos.close(); + } + catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + } + catch (FileNotFoundException e) + { + e.printStackTrace(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } }