From 4ed2a4b42409686ae3a5dbcd84a19ce9ac59fb2f Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 14 Mar 2014 18:23:16 +0800 Subject: [PATCH] Resource generator now generates only when ore and ingot are present --- .../core/grid/fluid/FluidPressureNode.java | 116 +++++++------ .../core/resource/ItemOreResource.java | 2 +- .../core/resource/ResourceGenerator.java | 157 ++++++++++-------- .../resource/fluid/ItemOreResourceBucket.java | 4 +- 4 files changed, 144 insertions(+), 135 deletions(-) diff --git a/src/main/java/resonantinduction/core/grid/fluid/FluidPressureNode.java b/src/main/java/resonantinduction/core/grid/fluid/FluidPressureNode.java index b5b947af8..702a9dff0 100644 --- a/src/main/java/resonantinduction/core/grid/fluid/FluidPressureNode.java +++ b/src/main/java/resonantinduction/core/grid/fluid/FluidPressureNode.java @@ -88,92 +88,90 @@ public class FluidPressureNode extends Node> it = getConnections().entrySet().iterator(); + + while (it.hasNext()) { - Iterator> it = getConnections().entrySet().iterator(); + Entry entry = it.next(); + Object obj = entry.getKey(); + ForgeDirection dir = entry.getValue(); - while (it.hasNext()) + if (obj instanceof FluidPressureNode) { - Entry entry = it.next(); - Object obj = entry.getKey(); - ForgeDirection dir = entry.getValue(); + /** + * Move fluid from higher pressure to lower. In this case, move from tankA to + * tankB. + */ + FluidPressureNode otherNode = (FluidPressureNode) obj; - if (obj instanceof FluidPressureNode) + // A is the pressure in the current node while B is the pressure in the node we + // are iterating through. + int pressureA = getPressure(dir); + int pressureB = otherNode.getPressure(dir.getOpposite()); + + if (pressureA >= pressureB) { - /** - * Move fluid from higher pressure to lower. In this case, move from tankA to - * tankB. - */ - FluidPressureNode otherNode = (FluidPressureNode) obj; + FluidTank tankA = parent.getPressureTank(); - // A is the pressure in the current node while B is the pressure in the node we - // are iterating through. - int pressureA = getPressure(dir); - int pressureB = otherNode.getPressure(dir.getOpposite()); - - if (pressureA >= pressureB) + if (tankA != null) { - FluidTank tankA = parent.getPressureTank(); + FluidStack fluidA = tankA.getFluid(); - if (tankA != null) + if (fluidA != null) { - FluidStack fluidA = tankA.getFluid(); + int amountA = fluidA.amount; - if (fluidA != null) + if (amountA > 0) { - int amountA = fluidA.amount; + FluidTank tankB = otherNode.parent.getPressureTank(); - if (amountA > 0) + if (tankB != null) { - FluidTank tankB = otherNode.parent.getPressureTank(); + int amountB = tankB.getFluidAmount(); - if (tankB != null) + int quantity = Math.max(pressureA > pressureB ? (pressureA - pressureB) * getMaxFlowRate() : 0, Math.min((amountA - amountB) / 2, getMaxFlowRate())); + quantity = Math.min(Math.min(quantity, tankB.getCapacity() - amountB), amountA); + + if (quantity > 0) { - int amountB = tankB.getFluidAmount(); + FluidStack drainStack = parent.drain(dir.getOpposite(), quantity, false); - int quantity = Math.max(pressureA > pressureB ? (pressureA - pressureB) * getMaxFlowRate() : 0, Math.min((amountA - amountB) / 2, getMaxFlowRate())); - quantity = Math.min(Math.min(quantity, tankB.getCapacity() - amountB), amountA); - - if (quantity > 0) - { - FluidStack drainStack = parent.drain(dir.getOpposite(), quantity, false); - - if (drainStack != null && drainStack.amount > 0) - parent.drain(dir.getOpposite(), otherNode.parent.fill(dir, drainStack, true), true); - } + if (drainStack != null && drainStack.amount > 0) + parent.drain(dir.getOpposite(), otherNode.parent.fill(dir, drainStack, true), true); } } } } } } - else if (obj instanceof IFluidHandler) + } + else if (obj instanceof IFluidHandler) + { + IFluidHandler fluidHandler = (IFluidHandler) obj; + int pressure = getPressure(dir); + int tankPressure = fluidHandler instanceof IPressureNodeProvider ? ((IPressureNodeProvider) fluidHandler).getNode(FluidPressureNode.class, dir.getOpposite()).getPressure(dir.getOpposite()) : 0; + FluidTank sourceTank = parent.getPressureTank(); + + int transferAmount = (Math.max(pressure, tankPressure) - Math.min(pressure, tankPressure)) * getMaxFlowRate(); + + if (pressure > tankPressure) { - IFluidHandler fluidHandler = (IFluidHandler) obj; - int pressure = getPressure(dir); - int tankPressure = fluidHandler instanceof IPressureNodeProvider ? ((IPressureNodeProvider) fluidHandler).getNode(FluidPressureNode.class, dir.getOpposite()).getPressure(dir.getOpposite()) : 0; - FluidTank sourceTank = parent.getPressureTank(); - - int transferAmount = (Math.max(pressure, tankPressure) - Math.min(pressure, tankPressure)) * getMaxFlowRate(); - - if (pressure > tankPressure) + if (sourceTank.getFluidAmount() > 0 && transferAmount > 0) { - if (sourceTank.getFluidAmount() > 0 && transferAmount > 0) - { - FluidStack drainStack = parent.drain(dir.getOpposite(), transferAmount, false); - parent.drain(dir.getOpposite(), fluidHandler.fill(dir.getOpposite(), drainStack, true), true); - } + FluidStack drainStack = parent.drain(dir.getOpposite(), transferAmount, false); + parent.drain(dir.getOpposite(), fluidHandler.fill(dir.getOpposite(), drainStack, true), true); } - else if (pressure < tankPressure) + } + else if (pressure < tankPressure) + { + if (transferAmount > 0) { - if (transferAmount > 0) - { - FluidStack drainStack = fluidHandler.drain(dir.getOpposite(), transferAmount, false); + FluidStack drainStack = fluidHandler.drain(dir.getOpposite(), transferAmount, false); - if (drainStack != null) - { - fluidHandler.drain(dir.getOpposite(), parent.fill(dir.getOpposite(), drainStack, true), true); - } + if (drainStack != null) + { + fluidHandler.drain(dir.getOpposite(), parent.fill(dir.getOpposite(), drainStack, true), true); } } } diff --git a/src/main/java/resonantinduction/core/resource/ItemOreResource.java b/src/main/java/resonantinduction/core/resource/ItemOreResource.java index 25fb703eb..70ef97ae7 100644 --- a/src/main/java/resonantinduction/core/resource/ItemOreResource.java +++ b/src/main/java/resonantinduction/core/resource/ItemOreResource.java @@ -176,7 +176,7 @@ public class ItemOreResource extends Item @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) { - for (String materialName : ResourceGenerator.getMaterials()) + for (String materialName : ResourceGenerator.materials.keySet()) { par3List.add(getStackFromMaterial(materialName)); } diff --git a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java index b5133f4b0..4f1b5c96f 100644 --- a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java +++ b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java @@ -6,6 +6,7 @@ import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map.Entry; @@ -65,7 +66,7 @@ public class ResourceGenerator implements IVirtualObject * Name, ID */ static int maxID = 0; - static final HashBiMap materials = HashBiMap.create(); + public static final HashBiMap materials = HashBiMap.create(); static final HashMap materialColorCache = new HashMap(); static final HashMap iconColorCache = new HashMap(); @@ -73,11 +74,12 @@ public class ResourceGenerator implements IVirtualObject static { OreDetectionBlackList.addIngot("ingotRefinedIron"); - OreDetectionBlackList.addIngot("uranium"); + OreDetectionBlackList.addIngot("ingotUranium"); SaveManager.registerClass("resourceGenerator", ResourceGenerator.class); SaveManager.register(INSTANCE); } + // TODO: Generate teh resource here instead of elsewhere... @ForgeSubscribe public void oreRegisterEvent(OreRegisterEvent evt) { @@ -100,6 +102,79 @@ public class ResourceGenerator implements IVirtualObject } } + public static void generate(String materialName) + { + // Caps version of the name + String nameCaps = LanguageUtility.capitalizeFirst(materialName); + String localizedName = materialName; + + List list = OreDictionary.getOres("ingot" + nameCaps); + + if (list.size() > 0) + { + ItemStack type = list.get(0); + localizedName = type.getDisplayName().trim(); + + if (LanguageUtility.getLocal(localizedName) != null && LanguageUtility.getLocal(localizedName) != "") + { + localizedName = LanguageUtility.getLocal(localizedName); + } + + localizedName.replace(LanguageUtility.getLocal("misc.resonantinduction.ingot"), "").replaceAll("^ ", "").replaceAll(" $", ""); + } + + /** Generate molten fluids */ + FluidColored fluidMolten = new FluidColored(materialNameToMolten(materialName)); + fluidMolten.setDensity(7); + fluidMolten.setViscosity(5000); + fluidMolten.setTemperature(273 + 1538); + FluidRegistry.registerFluid(fluidMolten); + LanguageRegistry.instance().addStringLocalization(fluidMolten.getUnlocalizedName(), LanguageUtility.getLocal("tooltip.molten") + " " + localizedName); + BlockFluidMaterial blockFluidMaterial = new BlockFluidMaterial(fluidMolten); + GameRegistry.registerBlock(blockFluidMaterial, "molten" + nameCaps); + ResonantInduction.blockMoltenFluid.put(getID(materialName), blockFluidMaterial); + FluidContainerRegistry.registerFluidContainer(fluidMolten, ResonantInduction.itemBucketMolten.getStackFromMaterial(materialName)); + + /** Generate dust mixture fluids */ + FluidColored fluidMixture = new FluidColored(materialNameToMixture(materialName)); + FluidRegistry.registerFluid(fluidMixture); + BlockFluidMixture blockFluidMixture = new BlockFluidMixture(fluidMixture); + LanguageRegistry.instance().addStringLocalization(fluidMixture.getUnlocalizedName(), localizedName + " " + LanguageUtility.getLocal("tooltip.mixture")); + GameRegistry.registerBlock(blockFluidMixture, "mixture" + nameCaps); + ResonantInduction.blockMixtureFluids.put(getID(materialName), blockFluidMixture); + FluidContainerRegistry.registerFluidContainer(fluidMixture, ResonantInduction.itemBucketMixture.getStackFromMaterial(materialName)); + + ItemStack dust = ResonantInduction.itemDust.getStackFromMaterial(materialName); + ItemStack rubble = ResonantInduction.itemRubble.getStackFromMaterial(materialName); + ItemStack refinedDust = ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName); + + if (allowOreDictCompatibility) + { + OreDictionary.registerOre("dust" + nameCaps, ResonantInduction.itemDust.getStackFromMaterial(materialName)); + OreDictionary.registerOre("rubble" + nameCaps, ResonantInduction.itemRubble.getStackFromMaterial(materialName)); + OreDictionary.registerOre("dustRefined" + nameCaps, ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName)); + + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "rubble" + nameCaps, dust, dust); + MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, "dust" + nameCaps, refinedDust); + MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(fluidMolten, FluidContainerRegistry.BUCKET_VOLUME), "ingot" + nameCaps); + } + else + { + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, rubble, dust, dust); + MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, dust, refinedDust); + MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(fluidMolten, FluidContainerRegistry.BUCKET_VOLUME), "ingot" + nameCaps); + } + + FurnaceRecipes.smelting().addSmelting(dust.itemID, dust.getItemDamage(), OreDictionary.getOres("ingot" + nameCaps).get(0).copy(), 0.7f); + ItemStack smeltResult = OreDictionary.getOres("ingot" + nameCaps).get(0).copy(); + FurnaceRecipes.smelting().addSmelting(refinedDust.itemID, refinedDust.getItemDamage(), smeltResult, 0.7f); + + if (OreDictionary.getOres("ore" + nameCaps).size() > 0) + { + MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, "ore" + nameCaps, "rubble" + nameCaps); + } + } + public static void generateOreResources() { OreDictionary.registerOre("ingotGold", Item.ingotGold); @@ -108,11 +183,7 @@ public class ResourceGenerator implements IVirtualObject OreDictionary.registerOre("oreGold", Block.oreGold); OreDictionary.registerOre("oreIron", Block.oreIron); OreDictionary.registerOre("oreLapis", Block.oreLapis); - regenerateOreResources(); - } - public static void regenerateOreResources() - { // Vanilla fluid recipes MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(FluidRegistry.LAVA, FluidContainerRegistry.BUCKET_VOLUME), new ItemStack(Block.stone)); @@ -126,77 +197,16 @@ public class ResourceGenerator implements IVirtualObject MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.gravel, Block.sand); MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, Block.glass, Block.sand); - for (String materialName : materials.keySet()) + Iterator it = materials.keySet().iterator(); + while (it.hasNext()) { - // Caps version of the name + String materialName = it.next(); String nameCaps = LanguageUtility.capitalizeFirst(materialName); - String localizedName = materialName; - - List list = OreDictionary.getOres("ingot" + materialName.substring(0, 1).toUpperCase() + materialName.substring(1)); - - if (list.size() > 0) - { - ItemStack type = list.get(0); - localizedName = type.getDisplayName(); - - if (LanguageUtility.getLocal(localizedName) != null && LanguageUtility.getLocal(localizedName) != "") - { - localizedName = LanguageUtility.getLocal(localizedName); - } - - localizedName.replace(LanguageUtility.getLocal("misc.resonantinduction.ingot"), "").replaceAll("^ ", "").replaceAll(" $", ""); - } - - /** Generate molten fluids */ - FluidColored fluidMolten = new FluidColored(materialNameToMolten(materialName)); - fluidMolten.setDensity(7); - fluidMolten.setViscosity(5000); - fluidMolten.setTemperature(273 + 1538); - FluidRegistry.registerFluid(fluidMolten); - LanguageRegistry.instance().addStringLocalization(fluidMolten.getUnlocalizedName(), LanguageUtility.getLocal("tooltip.molten") + " " + localizedName); - BlockFluidMaterial blockFluidMaterial = new BlockFluidMaterial(fluidMolten); - GameRegistry.registerBlock(blockFluidMaterial, "molten" + nameCaps); - ResonantInduction.blockMoltenFluid.put(getID(materialName), blockFluidMaterial); - FluidContainerRegistry.registerFluidContainer(fluidMolten, ResonantInduction.itemBucketMolten.getStackFromMaterial(materialName)); - - /** Generate dust mixture fluids */ - FluidColored fluidMixture = new FluidColored(materialNameToMixture(materialName)); - FluidRegistry.registerFluid(fluidMixture); - BlockFluidMixture blockFluidMixture = new BlockFluidMixture(fluidMixture); - LanguageRegistry.instance().addStringLocalization(fluidMixture.getUnlocalizedName(), localizedName + " " + LanguageUtility.getLocal("tooltip.mixture")); - GameRegistry.registerBlock(blockFluidMixture, "mixture" + nameCaps); - ResonantInduction.blockMixtureFluids.put(getID(materialName), blockFluidMixture); - FluidContainerRegistry.registerFluidContainer(fluidMixture, ResonantInduction.itemBucketMixture.getStackFromMaterial(materialName)); - - ItemStack dust = ResonantInduction.itemDust.getStackFromMaterial(materialName); - ItemStack rubble = ResonantInduction.itemRubble.getStackFromMaterial(materialName); - ItemStack refinedDust = ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName); - - if (allowOreDictCompatibility) - { - OreDictionary.registerOre("dust" + nameCaps, ResonantInduction.itemDust.getStackFromMaterial(materialName)); - OreDictionary.registerOre("rubble" + nameCaps, ResonantInduction.itemRubble.getStackFromMaterial(materialName)); - OreDictionary.registerOre("dustRefined" + nameCaps, ResonantInduction.itemRefinedDust.getStackFromMaterial(materialName)); - - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "rubble" + nameCaps, dust, dust); - MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, "dust" + nameCaps, refinedDust); - MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(fluidMolten, FluidContainerRegistry.BUCKET_VOLUME), "ingot" + nameCaps); - } - else - { - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, rubble, dust, dust); - MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, dust, refinedDust); - MachineRecipes.INSTANCE.addRecipe(RecipeType.SMELTER, new FluidStack(fluidMolten, FluidContainerRegistry.BUCKET_VOLUME), "ingot" + nameCaps); - } - - FurnaceRecipes.smelting().addSmelting(dust.itemID, dust.getItemDamage(), OreDictionary.getOres("ingot" + nameCaps).get(0).copy(), 0.7f); - ItemStack smeltResult = OreDictionary.getOres("ingot" + nameCaps).get(0).copy(); - FurnaceRecipes.smelting().addSmelting(refinedDust.itemID, refinedDust.getItemDamage(), smeltResult, 0.7f); if (OreDictionary.getOres("ore" + nameCaps).size() > 0) - { - MachineRecipes.INSTANCE.addRecipe(RecipeType.CRUSHER, "ore" + nameCaps, "rubble" + nameCaps); - } + generate(materialName); + else + it.remove(); } } @@ -380,6 +390,7 @@ public class ResourceGenerator implements IVirtualObject return 0xFFFFFF; } + @Deprecated public static List getMaterials() { List returnMaterials = new ArrayList(); diff --git a/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java b/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java index 5c3f2bee1..3469f5cde 100644 --- a/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java +++ b/src/main/java/resonantinduction/core/resource/fluid/ItemOreResourceBucket.java @@ -57,7 +57,7 @@ public class ItemOreResourceBucket extends Item String fluidName = FluidRegistry.getFluid(fluidID).getLocalizedName(); return (LanguageUtility.getLocal(this.getUnlocalizedName() + ".name")).replace("%v", fluidName).replace(" ", " "); } - + return material; } @@ -271,7 +271,7 @@ public class ItemOreResourceBucket extends Item @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) { - for (String materialName : ResourceGenerator.getMaterials()) + for (String materialName : ResourceGenerator.materials.keySet()) { par3List.add(getStackFromMaterial(materialName)); }