From 6da18b1557d8f6da91601e627d9321aafd8c7a8d Mon Sep 17 00:00:00 2001 From: Mordenkainen Date: Tue, 21 Jul 2015 23:24:11 -0400 Subject: [PATCH 1/6] Initial update to support the new ProjectE API --- .../EquivalentEnergistics.java | 9 --- .../items/ItemEMCBook.java | 47 +------------ .../tiles/TileEMCCrafter.java | 11 +-- .../equivalentenergistics/util/EMCUtils.java | 26 ++++--- .../util/EventHandlerModule.java | 24 ++++++- .../util/TransmutationNbt.java | 70 ------------------- 6 files changed, 39 insertions(+), 148 deletions(-) delete mode 100644 src/main/java/com/mordenkainen/equivalentenergistics/util/TransmutationNbt.java diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java b/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java index 466c196..9dddf13 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java @@ -36,7 +36,6 @@ import com.mordenkainen.equivalentenergistics.tiles.TileEMCCrafter; import com.mordenkainen.equivalentenergistics.util.EMCUtils; import com.mordenkainen.equivalentenergistics.util.EventHandlerModule; -import com.mordenkainen.equivalentenergistics.util.TransmutationNbt; @Mod(modid = Ref.MOD_ID, name = Ref.MOD_NAME, version = Ref.MOD_VERSION, dependencies = Ref.MOD_DEPENDENCIES) public class EquivalentEnergistics { @@ -56,19 +55,11 @@ public class EquivalentEnergistics { public static Block blockEMCCondenser; public static Block blockEMCCrafter; - - public static TransmutationNbt transmutations; @EventHandler public void onServerStarting(FMLServerStartingEvent event) { MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); WorldServer worldServer = server.worldServers[0]; - - transmutations = (TransmutationNbt)worldServer.mapStorage.loadData(TransmutationNbt.class, "PETransmutations"); - if (transmutations == null) { - transmutations = new TransmutationNbt("PETransmutations"); - worldServer.mapStorage.setData("PETransmutations", transmutations); - } } @EventHandler diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/items/ItemEMCBook.java b/src/main/java/com/mordenkainen/equivalentenergistics/items/ItemEMCBook.java index 510f7e0..65804d0 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/items/ItemEMCBook.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/items/ItemEMCBook.java @@ -8,10 +8,10 @@ import com.mordenkainen.equivalentenergistics.EquivalentEnergistics; import com.mordenkainen.equivalentenergistics.lib.Ref; -import com.mordenkainen.equivalentenergistics.util.TransmutationNbt; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import moze_intel.projecte.api.ProjectEAPI; import moze_intel.projecte.playerData.Transmutation; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; @@ -65,55 +65,10 @@ public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer pla } stackNBT.setString("Owner", player.getCommandSenderName()); stackNBT.setString("OwnerUUID", playerUUID); - ArrayList currentTransmutations = TransmutationNbt.getPlayerKnowledge(stackNBT.getString("OwnerUUID")); - ArrayList newTransmutations = getPlayerKnowledge(player); - boolean result = new HashSet(currentTransmutations).equals(new HashSet(newTransmutations)); - if(!result) { - TransmutationNbt.setPlayerKnowledge(playerUUID, newTransmutations); - EquivalentEnergistics.transmutations.markDirty(); - } player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("message.book.link"))); } return stack; } - - private ArrayList getPlayerKnowledge(EntityPlayer player) { - int methodType = 2; - Method gkMethod = null; - List tmpTransmutations = null; - ArrayList transmutations = new ArrayList(); - - try { - gkMethod = Transmutation.class.getDeclaredMethod("getKnowledge", new Class[] {String.class}); - methodType = 0; - } catch (Exception e) { - try { - gkMethod = Transmutation.class.getDeclaredMethod("getKnowledge", new Class[] {EntityPlayer.class}); - methodType = 1; - } catch (Exception e1) {} - } - - try { - switch(methodType){ - case 0: - tmpTransmutations = (List) gkMethod.invoke(null, new Object[] {player.getCommandSenderName()}); - break; - case 1: - tmpTransmutations = (List) gkMethod.invoke(null, new Object[] {player}); - break; - } - } catch (Exception e) {} - - if(tmpTransmutations != null) { - for(ItemStack currentItem : tmpTransmutations) { - if(currentItem.getItem() != EquivalentEnergistics.itemEMCCrystal) { - transmutations.add(currentItem); - } - } - } - - return transmutations; - } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCrafter.java b/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCrafter.java index f055bef..fa77e75 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCrafter.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCrafter.java @@ -172,16 +172,7 @@ public void setCurrentTome(ItemStack heldItem) { public void playerKnowledgeChange(UUID playerUUID) { if(currentTome != null) { - UUID tomeUUID = ItemHelper.getOwnerUUID(currentTome); - if(tomeUUID.equals(playerUUID)) { - stalePatterns = true; - } - } - } - - public void playerKnowledgeChange(String playerUUID) { - if(currentTome != null) { - String tomeUUID = currentTome.getTagCompound().getString("OwnerUUID"); + UUID tomeUUID = EMCUtils.getInstance().getTomeUUID(currentTome); if(tomeUUID.equals(playerUUID)) { stalePatterns = true; } diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java index 0392353..477d035 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Set; import java.util.TreeSet; +import java.util.UUID; import com.mordenkainen.equivalentenergistics.EquivalentEnergistics; import com.mordenkainen.equivalentenergistics.config.ConfigManager; @@ -16,9 +17,6 @@ import cpw.mods.fml.common.registry.GameRegistry; import moze_intel.projecte.api.ProjectEAPI; -import moze_intel.projecte.emc.EMCMapper; -import moze_intel.projecte.emc.SimpleStack; -import moze_intel.projecte.utils.EMCHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -39,7 +37,7 @@ public boolean hasEMC(ItemStack itemStack) { if(ConfigManager.useEE3) { return EnergyValueRegistryProxy.hasEnergyValue(itemStack); } else { - return EMCHelper.doesItemHaveEmc(itemStack); + return ProjectEAPI.getEMCProxy().hasValue(itemStack); } } @@ -47,7 +45,7 @@ public float getEnergyValue(ItemStack itemStack) { if(ConfigManager.useEE3) { return EnergyValueRegistryProxy.getEnergyValue(itemStack).getValue(); } else { - return EMCHelper.getEmcValue(itemStack); + return ProjectEAPI.getEMCProxy().getValue(itemStack); } } @@ -59,7 +57,7 @@ public float getCrystalEMC(int tier) { if(ConfigManager.useEE3) { return EnergyValueRegistryProxy.getEnergyValue(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, tier)).getValue(); } else { - return EMCHelper.getEmcValue(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, tier)); + return ProjectEAPI.getEMCProxy().getValue(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, tier)); } } @@ -68,7 +66,7 @@ public ArrayList getTransmutations(TileEMCCrafter tile) { if(ConfigManager.useEE3) { transmutations.addAll(TransmutationKnowledgeRegistryProxy.getPlayerKnownTransmutations(ItemHelper.getOwnerUUID(tile.getCurrentTome()))); } else { - transmutations.addAll(TransmutationNbt.getPlayerKnowledge(tile.getCurrentTome().getTagCompound().getString("OwnerUUID"))); + transmutations.addAll(ProjectEAPI.getTransmutationProxy().getKnowledge(UUID.fromString(tile.getCurrentTome().getTagCompound().getString("OwnerUUID")))); } return transmutations; } @@ -91,9 +89,17 @@ public void setCrystalEMC(float emc) { EnergyValueRegistryProxy.addPreAssignedEnergyValue(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 2), (float)(emc * Math.pow(576, 2))); AbilityRegistryProxy.setAsNotLearnable(EquivalentEnergistics.itemEMCCrystal); } else { - ProjectEAPI.registerCustomEMC(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 0), (int)emc); - ProjectEAPI.registerCustomEMC(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 1), (int)emc * 576); - ProjectEAPI.registerCustomEMC(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 2), (int)(emc * Math.pow(576, 2))); + ProjectEAPI.getEMCProxy().registerCustomEMC(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 0), (int)emc); + ProjectEAPI.getEMCProxy().registerCustomEMC(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 1), (int)emc * 576); + ProjectEAPI.getEMCProxy().registerCustomEMC(new ItemStack(EquivalentEnergistics.itemEMCCrystal, 1, 2), (int)(emc * Math.pow(576, 2))); + } + } + + public UUID getTomeUUID(ItemStack currentTome) { + if(ConfigManager.useEE3) { + return ItemHelper.getOwnerUUID(currentTome); + } else { + return UUID.fromString(currentTome.getTagCompound().getString("OwnerUUID")); } } } diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/EventHandlerModule.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/EventHandlerModule.java index cc43296..a77b5d5 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/util/EventHandlerModule.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/util/EventHandlerModule.java @@ -10,15 +10,15 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import moze_intel.projecte.api.event.EMCRemapEvent; +import moze_intel.projecte.api.event.PlayerKnowledgeChangeEvent; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.MinecraftForge; public class EventHandlerModule { public EventHandlerModule() { - if(ConfigManager.useEE3) { - MinecraftForge.EVENT_BUS.register(this); - } + MinecraftForge.EVENT_BUS.register(this); } @SubscribeEvent @@ -30,6 +30,15 @@ public void onPlayerKnowledgeChange(PlayerKnowledgeEvent event) { } } + @SubscribeEvent + public void onPlayerKnowledgeChange(PlayerKnowledgeChangeEvent event) { + if(FMLCommonHandler.instance().getEffectiveSide().isServer()) { + for(TileEMCCrafter crafter : TileEMCCrafter.crafterTiles) { + crafter.playerKnowledgeChange(event.playerUUID); + } + } + } + @SubscribeEvent public void onEnergyValueChange(EnergyValueEvent event) { if(FMLCommonHandler.instance().getEffectiveSide().isServer()) { @@ -38,4 +47,13 @@ public void onEnergyValueChange(EnergyValueEvent event) { } } } + + @SubscribeEvent + public void onEnergyValueChange(EMCRemapEvent event) { + if(FMLCommonHandler.instance().getEffectiveSide().isServer()) { + for(TileEMCCrafter crafter : TileEMCCrafter.crafterTiles) { + crafter.energyValueEvent(); + } + } + } } diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/TransmutationNbt.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/TransmutationNbt.java deleted file mode 100644 index 492c478..0000000 --- a/src/main/java/com/mordenkainen/equivalentenergistics/util/TransmutationNbt.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.mordenkainen.equivalentenergistics.util; - -import java.util.ArrayList; -import java.util.HashMap; - -import com.mordenkainen.equivalentenergistics.tiles.TileEMCCrafter; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.WorldSavedData; - -public class TransmutationNbt extends WorldSavedData { - - private static HashMap> transmutations = new HashMap>(); - - public TransmutationNbt(String name) { - super(name); - } - - @Override - public void readFromNBT(NBTTagCompound comp) { - int playerCount = comp.getInteger("NumRecords"); - for(int playerNum = 0; playerNum < playerCount; playerNum++) { - ArrayList playerData = new ArrayList(); - NBTTagCompound playerNBT = (NBTTagCompound) comp.getTag("Player-" + playerNum); - int stackCount = playerNBT.getInteger("StackCount"); - for(int currentStack = 0; currentStack < stackCount; currentStack++) { - ItemStack newStack = ItemStack.loadItemStackFromNBT((NBTTagCompound) playerNBT.getTag("Stack" + currentStack)); - playerData.add(newStack); - } - transmutations.put(playerNBT.getString("UUID"), playerData); - } - - } - - @Override - public void writeToNBT(NBTTagCompound comp) { - int playerCount = 0; - for(String player : transmutations.keySet()) { - NBTTagCompound playerNBT = new NBTTagCompound(); - playerNBT.setString("UUID", player); - ArrayList transmutationData = transmutations.get(player); - int currentStack = 0; - for(ItemStack stack : transmutationData) { - NBTTagCompound stackNBT = new NBTTagCompound(); - stack.writeToNBT(stackNBT); - playerNBT.setTag("Stack" + currentStack++, stackNBT); - } - playerNBT.setInteger("StackCount", currentStack); - comp.setTag("Player-" + playerCount++, playerNBT); - } - comp.setInteger("NumRecords", playerCount); - } - - public static void setPlayerKnowledge(String UUID, ArrayList knowledge) { - transmutations.put(UUID, knowledge); - for(TileEMCCrafter crafter : TileEMCCrafter.crafterTiles) { - crafter.playerKnowledgeChange(UUID); - } - } - - public static ArrayList getPlayerKnowledge(String UUID) { - if(transmutations.containsKey(UUID)) { - return transmutations.get(UUID); - } else { - return new ArrayList(); - } - } - -} From 45994604cff86766943ce0f0fc3c0ae59ef25239 Mon Sep 17 00:00:00 2001 From: Mordenkainen Date: Thu, 30 Jul 2015 01:51:25 -0400 Subject: [PATCH 2/6] Filter transmutation results with no EMC value. Fixes #30 --- .../equivalentenergistics/tiles/TileEMCCondenser.java | 6 +++--- .../equivalentenergistics/util/EMCCraftingPattern.java | 2 +- .../mordenkainen/equivalentenergistics/util/EMCUtils.java | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCondenser.java b/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCondenser.java index cc03016..d5ad2f1 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCondenser.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/tiles/TileEMCCondenser.java @@ -102,9 +102,9 @@ public void onTick() { try { for(int i = 0; i < SLOT_COUNT; i++) { if(internalInventory.getStackInSlot(i) != null){ - if(EMCUtils.getInstance().hasEMC(internalInventory.getStackInSlot(i))) { - ItemStack testItem = internalInventory.getStackInSlot(i).copy(); - testItem.stackSize = 1; + ItemStack testItem = internalInventory.getStackInSlot(i).copy(); + testItem.stackSize = 1; + if(EMCUtils.getInstance().hasEMC(testItem) && EMCUtils.getInstance().getEnergyValue(testItem) > 0) { float itemEMC = EMCUtils.getInstance().getEnergyValue(testItem); int itemAvail = Math.min(ConfigManager.itemsPerTick, Math.min(internalInventory.getStackInSlot(i).stackSize, (int)Math.floor((Float.MAX_VALUE - currentEMC) / itemEMC))); internalInventory.decrStackSize(i, itemAvail); diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java index e62c939..1ac6611 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java @@ -16,7 +16,7 @@ public EMCCraftingPattern(final ItemStack craftingResult) { } private void calculateContent(ItemStack craftingResult) { - if(!EMCUtils.getInstance().hasEMC(craftingResult)) { + if(!EMCUtils.getInstance().hasEMC(craftingResult) || EMCUtils.getInstance().getEnergyValue(craftingResult) <= 0) { valid = false; } else { float outputEMC = EMCUtils.getInstance().getEnergyValue(craftingResult); diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java index 5830339..d658f7f 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCUtils.java @@ -9,6 +9,7 @@ import com.mordenkainen.equivalentenergistics.EquivalentEnergistics; import com.mordenkainen.equivalentenergistics.config.ConfigManager; import com.mordenkainen.equivalentenergistics.tiles.TileEMCCrafter; +import com.pahimar.ee3.api.exchange.EnergyValue; import com.pahimar.ee3.api.exchange.EnergyValueRegistryProxy; import com.pahimar.ee3.api.knowledge.AbilityRegistryProxy; import com.pahimar.ee3.api.knowledge.TransmutationKnowledgeRegistryProxy; @@ -45,7 +46,8 @@ public boolean hasEMC(ItemStack itemStack) { public float getEnergyValue(ItemStack itemStack) { if(ConfigManager.useEE3) { - return EnergyValueRegistryProxy.getEnergyValue(itemStack).getValue(); + EnergyValue val = EnergyValueRegistryProxy.getEnergyValue(itemStack); + return val == null ? 0 : val.getValue(); } else { return EMCHelper.getEmcValue(itemStack); } @@ -74,7 +76,7 @@ public ArrayList getTransmutations(TileEMCCrafter tile) { if(tmpTransmutations != null) { for(ItemStack currentItem : tmpTransmutations) { - if(currentItem.getItem() != EquivalentEnergistics.itemEMCCrystal) { + if(currentItem != null && currentItem.getItem() != EquivalentEnergistics.itemEMCCrystal) { transmutations.add(currentItem); } } From 8b2aed4ffbf5c8aa4813507881662dc6315a2858 Mon Sep 17 00:00:00 2001 From: Mordenkainen Date: Sat, 8 Aug 2015 20:52:45 -0400 Subject: [PATCH 3/6] Rewrite how EMC Crystal costs for patterns are calculated. Fixes #31 --- .../util/EMCCraftingPattern.java | 113 ++++++++++++------ 1 file changed, 75 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java index 1ac6611..d761cac 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/util/EMCCraftingPattern.java @@ -20,52 +20,89 @@ private void calculateContent(ItemStack craftingResult) { valid = false; } else { float outputEMC = EMCUtils.getInstance().getEnergyValue(craftingResult); - float crystalEMC = EMCUtils.getInstance().getCrystalEMC(); - int tier0CrystalCount, tier1CrystalCount, tier2CrystalCount, itemCount; - tier1CrystalCount = tier2CrystalCount = 0; - if(outputEMC <= crystalEMC) { - tier0CrystalCount = 1; - itemCount = (int)Math.min(crystalEMC/outputEMC, 64); + float inputEMC = 0; + int numItems = 1; + int[] crystals = new int[] {0, 0, 0}; + if(outputEMC <= EMCUtils.getInstance().getCrystalEMC()) { + crystals[0] = 1; + numItems = (int)Math.min(EMCUtils.getInstance().getCrystalEMC()/outputEMC, 64); + outputEMC *= numItems; + inputEMC = EMCUtils.getInstance().getCrystalEMC(); } else { - itemCount = 1; - tier0CrystalCount = (int)Math.ceil(outputEMC/crystalEMC); + int maxTier = calcStartingTier(outputEMC); + float remainingEMC = outputEMC; + for(int i = maxTier; i >= 0; i--) { + crystals[i] = calcCrystals(remainingEMC, i); + remainingEMC = getOverflow(outputEMC, crystals); + if(remainingEMC <= 0) { + break; + } + if(i != 0 ) { + crystals[i]--; + remainingEMC = Math.abs(remainingEMC - EMCUtils.getInstance().getCrystalEMC(i)); + } + } + int pass = 0; + while(getTotalStacks(crystals) > 9 && pass < 2) { + if(crystals[pass] > 0) { + crystals[pass] = 0; + crystals[pass + 1]++; + } + pass++; + } + if(getTotalStacks(crystals) > 9) { + valid = false; + return; + } + for(int i = 0; i <= 2; i++) { + inputEMC += EMCUtils.getInstance().getCrystalEMC(i) * crystals[i]; + } } - this.outputEMC = outputEMC * itemCount; + ItemStack outputStack = craftingResult.copy(); - outputStack.stackSize = itemCount; + outputStack.stackSize = numItems; result = AEApi.instance().storage().createItemStack(outputStack); - if(tier0CrystalCount >= Math.pow(576, 2)) { - int numCrystals = (int)Math.floor(tier0CrystalCount/Math.pow(576, 2)); - tier2CrystalCount = numCrystals; - tier0CrystalCount -= numCrystals * Math.pow(576, 2); - } - if(tier0CrystalCount >= 576) { - int numCrystals = (int)Math.floor(tier0CrystalCount/576); - tier1CrystalCount = numCrystals; - tier0CrystalCount -= numCrystals * 576; - } - if(getStackCount(tier0CrystalCount) + getStackCount(tier1CrystalCount) + getStackCount(tier2CrystalCount) > 9) { - tier1CrystalCount++; - tier0CrystalCount=0; - } - inputEMC = crystalEMC * tier0CrystalCount + EMCUtils.getInstance().getCrystalEMC(1) * tier1CrystalCount + EMCUtils.getInstance().getCrystalEMC(2) * tier2CrystalCount; - - int lastItem = 0; - while(tier0CrystalCount > 0) { - ingredients[lastItem++] = AEApi.instance().storage().createItemStack(new ItemStack(EquivalentEnergistics.itemEMCCrystal, Math.min(64, tier0CrystalCount), 0)); - tier0CrystalCount -= Math.min(64, tier0CrystalCount); - } - while(tier1CrystalCount > 0) { - ingredients[lastItem++] = AEApi.instance().storage().createItemStack(new ItemStack(EquivalentEnergistics.itemEMCCrystal, Math.min(64, tier1CrystalCount), 1)); - tier1CrystalCount -= Math.min(64, tier1CrystalCount); - } - while(tier2CrystalCount > 0) { - ingredients[lastItem++] = AEApi.instance().storage().createItemStack(new ItemStack(EquivalentEnergistics.itemEMCCrystal, Math.min(64, tier2CrystalCount), 2)); - tier2CrystalCount -= Math.min(64, tier2CrystalCount); + int tier = 0; + for (int i = 0; i <= 8 && tier <= 2 && (crystals[0] > 0 || crystals[1] > 0 || crystals[2] > 0); i++) { + while (crystals[tier] <= 0) { + tier++; + } + ingredients[i] = AEApi.instance().storage().createItemStack(new ItemStack(EquivalentEnergistics.itemEMCCrystal, Math.min(64, crystals[tier]), tier)); + crystals[tier] -= ingredients[i].getItemStack().stackSize; } } } + + private int calcStartingTier(float emcValue) { + if(emcValue > EMCUtils.getInstance().getCrystalEMC(2)) { + return 2; + } + if(emcValue > EMCUtils.getInstance().getCrystalEMC(1)) { + return 1; + } + return 0; + } + + private int calcCrystals(float emcValue, int tier) { + return (int)Math.ceil(emcValue / EMCUtils.getInstance().getCrystalEMC(tier)); + } + + private float getOverflow(float targetEMC, int[]crystals) { + float crystalEMC = 0; + for(int i = 0; i <= 2; i++) { + crystalEMC += EMCUtils.getInstance().getCrystalEMC(i) * crystals[i]; + } + return crystalEMC - targetEMC; + } + + private int getTotalStacks(int[]crystals) { + int totalStacks = 0; + for(int i = 0; i <= 2; i++) { + totalStacks += getStackCount(crystals[i]); + } + return totalStacks; + } private int getStackCount(int numCrystals) { if(numCrystals > 0 && numCrystals < 64) { From 29e2d8db1735a6c37102782f6217a1e50ca8a443 Mon Sep 17 00:00:00 2001 From: Mordenkainen Date: Sat, 8 Aug 2015 22:07:08 -0400 Subject: [PATCH 4/6] Halts loading (on client at least) if no EMC mod is found. Fixes #28 --- .../EquivalentEnergistics.java | 11 +++----- .../proxy/ClientProxy.java | 5 ++++ .../proxy/CommonProxy.java | 2 ++ .../util/UnmetDependencyException.java | 26 +++++++++++++++++++ 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/mordenkainen/equivalentenergistics/util/UnmetDependencyException.java diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java b/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java index 89b85dc..72ed878 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java @@ -21,7 +21,6 @@ import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.registry.GameRegistry; import com.mordenkainen.equivalentenergistics.blocks.BlockEMCCondenser; @@ -59,12 +58,6 @@ public class EquivalentEnergistics { public static Block blockEMCCondenser; public static Block blockEMCCrafter; - @EventHandler - public void onServerStarting(FMLServerStartingEvent event) { - MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); - WorldServer worldServer = server.worldServers[0]; - } - @EventHandler public void preInit(FMLPreInitializationEvent event) { logger = event.getModLog(); @@ -73,6 +66,10 @@ public void preInit(FMLPreInitializationEvent event) { @EventHandler public void init(FMLInitializationEvent event) { + if(!Loader.isModLoaded("ProjectE") && !Loader.isModLoaded("EE3")) { + proxy.unmetDependency(); + } + itemEMCCrystal = new ItemEMCCrystal(); GameRegistry.registerItem(itemEMCCrystal, "EMCCrystal"); diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/proxy/ClientProxy.java b/src/main/java/com/mordenkainen/equivalentenergistics/proxy/ClientProxy.java index b74d9a4..1b92cad 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/proxy/ClientProxy.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/proxy/ClientProxy.java @@ -3,6 +3,7 @@ import com.mordenkainen.equivalentenergistics.render.BlockEMCCrafterRenderer; import com.mordenkainen.equivalentenergistics.render.TileEMCCrafterRenderer; import com.mordenkainen.equivalentenergistics.tiles.TileEMCCrafter; +import com.mordenkainen.equivalentenergistics.util.UnmetDependencyException; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -13,4 +14,8 @@ public void initRenderers() { EMCCrafterRenderer = RenderingRegistry.getNextAvailableRenderId(); RenderingRegistry.registerBlockHandler(new BlockEMCCrafterRenderer()); } + + public void unmetDependency() { + throw new UnmetDependencyException(); + } } diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java b/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java index 1d6a347..26397b4 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java @@ -4,4 +4,6 @@ public class CommonProxy { public int EMCCrafterRenderer; public void initRenderers() {} + + public void unmetDependency() {} } diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/util/UnmetDependencyException.java b/src/main/java/com/mordenkainen/equivalentenergistics/util/UnmetDependencyException.java new file mode 100644 index 0000000..0f8a750 --- /dev/null +++ b/src/main/java/com/mordenkainen/equivalentenergistics/util/UnmetDependencyException.java @@ -0,0 +1,26 @@ +package com.mordenkainen.equivalentenergistics.util; + +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiErrorScreen; +import cpw.mods.fml.client.CustomModLoadingErrorDisplayException; + +public class UnmetDependencyException extends CustomModLoadingErrorDisplayException { + private final String[] errorMessage; + + public UnmetDependencyException() { + errorMessage = "Equivilant Energistics has stopped Minecraft Loading.\nA required dependency was not found.\nEither Equivalent Exchange 3 or ProjectE must be installed!".split("\n"); + } + + @Override + public void initGui(GuiErrorScreen errorScreen, FontRenderer fontRenderer) {} + + @Override + public void drawScreen(GuiErrorScreen errorScreen, FontRenderer fontRenderer, int mouseRelX, int mouseRelY, float tickTime) { + for (int i = 0; i < errorMessage.length; i++) + { + errorScreen.drawCenteredString(fontRenderer, errorMessage[i], errorScreen.width / 2, (errorScreen.height - fontRenderer.FONT_HEIGHT * errorMessage.length) / 2 + + fontRenderer.FONT_HEIGHT + 10 * i, 0xffaabbcc); + } + } + +} From 60117e981d0d1b99c2b31c41255bcc22a12ed356 Mon Sep 17 00:00:00 2001 From: Mordenkainen Date: Sat, 8 Aug 2015 22:13:44 -0400 Subject: [PATCH 5/6] Updated version numbers --- build.gradle | 2 +- .../java/com/mordenkainen/equivalentenergistics/lib/Ref.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ba1bf70..3dc4909 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { apply plugin: 'forge' -version = "0.3" +version = "0.4" group= "com.mordenkainen.equivalentenergistics" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "EquivalentEnergistics" diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/lib/Ref.java b/src/main/java/com/mordenkainen/equivalentenergistics/lib/Ref.java index f453aed..d085e93 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/lib/Ref.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/lib/Ref.java @@ -2,7 +2,7 @@ public final class Ref { public static final String MOD_ID = "equivalentenergistics"; - public static final String MOD_VERSION = "0.3"; + public static final String MOD_VERSION = "0.4"; public static final String MOD_NAME = "Equivalent Energistics"; public static final String MOD_DEPENDENCIES = "required-after:appliedenergistics2;after:EE3;after:ProjectE"; From 8438b5589f7c22cd1c0ce908c404e8d597fcecc9 Mon Sep 17 00:00:00 2001 From: Mordenkainen Date: Sun, 9 Aug 2015 11:00:03 -0400 Subject: [PATCH 6/6] Update to throw an exception on servers if no EMC mod is detected. --- .../equivalentenergistics/EquivalentEnergistics.java | 4 ++-- .../mordenkainen/equivalentenergistics/proxy/CommonProxy.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java b/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java index 72ed878..be1b963 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/EquivalentEnergistics.java @@ -66,9 +66,9 @@ public void preInit(FMLPreInitializationEvent event) { @EventHandler public void init(FMLInitializationEvent event) { - if(!Loader.isModLoaded("ProjectE") && !Loader.isModLoaded("EE3")) { + //if(!Loader.isModLoaded("ProjectE") && !Loader.isModLoaded("EE3")) { proxy.unmetDependency(); - } + //} itemEMCCrystal = new ItemEMCCrystal(); GameRegistry.registerItem(itemEMCCrystal, "EMCCrystal"); diff --git a/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java b/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java index 26397b4..43afb3e 100644 --- a/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java +++ b/src/main/java/com/mordenkainen/equivalentenergistics/proxy/CommonProxy.java @@ -5,5 +5,7 @@ public class CommonProxy { public void initRenderers() {} - public void unmetDependency() {} + public void unmetDependency() { + throw new RuntimeException("Equivalent Energistics requires either Equivalent Exchange 3 or ProjectE to be installed!"); + } }