diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index 6710a7af3..f142c5626 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -9,6 +9,7 @@ import java.util.Set; import com.hbm.config.ToolConfig; import com.hbm.explosion.ExplosionNT; import com.hbm.explosion.ExplosionNT.ExAttrib; +import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.CentrifugeRecipes; import com.hbm.inventory.recipes.CrystallizerRecipes; import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; @@ -440,7 +441,7 @@ public abstract class ToolAbility { block = Blocks.redstone_ore; ItemStack stack = new ItemStack(block, 1, meta); - CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.ACID); if(result != null) { world.setBlockToAir(x, y, z); diff --git a/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java b/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java index b96155dea..875e14f46 100644 --- a/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java +++ b/src/main/java/com/hbm/handler/imc/IMCCrystallizer.java @@ -4,8 +4,10 @@ import java.util.HashMap; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe; +import com.hbm.util.Tuple.Pair; import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage; import net.minecraft.item.ItemStack; @@ -13,7 +15,7 @@ import net.minecraft.nbt.NBTTagCompound; public class IMCCrystallizer extends IMCHandler { - public static HashMap buffer = new HashMap(); + public static HashMap, CrystallizerRecipe> buffer = new HashMap(); @Override public void process(IMCMessage message) { @@ -40,15 +42,16 @@ public class IMCCrystallizer extends IMCHandler { if(acid.type == Fluids.NONE) acid = new FluidStack(Fluids.ACID, 500); - CrystallizerRecipe recipe = new CrystallizerRecipe(out, time, acid); + CrystallizerRecipe recipe = new CrystallizerRecipe(out, time); + recipe.acidAmount = acid.fill; if(in != null) { - buffer.put(new RecipesCommon.ComparableStack(in), recipe); + buffer.put(new Pair(new RecipesCommon.ComparableStack(in), acid.type), recipe); } else { String dict = data.getString("oredict"); if(!dict.isEmpty()) { - buffer.put(dict, recipe); + buffer.put(new Pair(dict, acid.type), recipe); } else { this.printError(message, "Input stack could not be read!"); } diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index 531b960aa..36edd6300 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -324,18 +324,18 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.ore_enriched, 1, i) }); EnumByproduct tier1 = ore.byproducts[0]; - ItemStack by1 = tier1 == null ? new ItemStack(ModItems.dust) : DictFrame.fromOne(ModItems.ore_byproduct, tier1, 2); + ItemStack by1 = tier1 == null ? new ItemStack(ModItems.dust) : DictFrame.fromOne(ModItems.ore_byproduct, tier1, 1); recipes.put(new ComparableStack(ModItems.ore_nitrated, 1, i), new ItemStack[] { - new ItemStack(ModItems.ore_nitrocrystalline, 2, i), - new ItemStack(ModItems.ore_nitrocrystalline, 2, i), + new ItemStack(ModItems.ore_nitrocrystalline, 1, i), + new ItemStack(ModItems.ore_nitrocrystalline, 1, i), ItemStackUtil.carefulCopy(by1), ItemStackUtil.carefulCopy(by1) }); EnumByproduct tier2 = ore.byproducts[1]; - ItemStack by2 = tier2 == null ? new ItemStack(ModItems.dust) : DictFrame.fromOne(ModItems.ore_byproduct, tier2, 2); + ItemStack by2 = tier2 == null ? new ItemStack(ModItems.dust) : DictFrame.fromOne(ModItems.ore_byproduct, tier2, 1); recipes.put(new ComparableStack(ModItems.ore_deepcleaned, 1, i), new ItemStack[] { - new ItemStack(ModItems.ore_enriched, 2, i), - new ItemStack(ModItems.ore_enriched, 2, i), + new ItemStack(ModItems.ore_enriched, 1, i), + new ItemStack(ModItems.ore_enriched, 1, i), ItemStackUtil.carefulCopy(by2), ItemStackUtil.carefulCopy(by2) }); } diff --git a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java index 6e24257a6..1d52b055d 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java @@ -10,12 +10,14 @@ import com.hbm.handler.imc.IMCCrystallizer; import com.hbm.inventory.FluidStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.items.special.ItemPlasticScrap.ScrapType; import com.hbm.main.MainRegistry; +import com.hbm.util.Tuple.Pair; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -29,7 +31,7 @@ import net.minecraftforge.oredict.OreDictionary; public class CrystallizerRecipes { //'Object' is either a ComparableStack or the key for the ore dict - private static HashMap recipes = new HashMap(); + private static HashMap, CrystallizerRecipe> recipes = new HashMap(); public static void register() { @@ -43,35 +45,35 @@ public class CrystallizerRecipes { registerRecipe(REDSTONE.ore(), new CrystallizerRecipe(ModItems.crystal_redstone, baseTime)); registerRecipe(LAPIS.ore(), new CrystallizerRecipe(ModItems.crystal_lapis, baseTime)); registerRecipe(DIAMOND.ore(), new CrystallizerRecipe(ModItems.crystal_diamond, baseTime)); - registerRecipe(U.ore(), new CrystallizerRecipe(ModItems.crystal_uranium, baseTime, sulfur)); - registerRecipe(TH232.ore(), new CrystallizerRecipe(ModItems.crystal_thorium, baseTime, sulfur)); - registerRecipe(PU.ore(), new CrystallizerRecipe(ModItems.crystal_plutonium, baseTime, sulfur)); - registerRecipe(TI.ore(), new CrystallizerRecipe(ModItems.crystal_titanium, baseTime, sulfur)); + registerRecipe(U.ore(), new CrystallizerRecipe(ModItems.crystal_uranium, baseTime), sulfur); + registerRecipe(TH232.ore(), new CrystallizerRecipe(ModItems.crystal_thorium, baseTime), sulfur); + registerRecipe(PU.ore(), new CrystallizerRecipe(ModItems.crystal_plutonium, baseTime), sulfur); + registerRecipe(TI.ore(), new CrystallizerRecipe(ModItems.crystal_titanium, baseTime), sulfur); registerRecipe(S.ore(), new CrystallizerRecipe(ModItems.crystal_sulfur, baseTime)); registerRecipe(KNO.ore(), new CrystallizerRecipe(ModItems.crystal_niter, baseTime)); registerRecipe(CU.ore(), new CrystallizerRecipe(ModItems.crystal_copper, baseTime)); - registerRecipe(W.ore(), new CrystallizerRecipe(ModItems.crystal_tungsten, baseTime, sulfur)); + registerRecipe(W.ore(), new CrystallizerRecipe(ModItems.crystal_tungsten, baseTime), sulfur); registerRecipe(AL.ore(), new CrystallizerRecipe(ModItems.crystal_aluminium, baseTime)); registerRecipe(F.ore(), new CrystallizerRecipe(ModItems.crystal_fluorite, baseTime)); registerRecipe(BE.ore(), new CrystallizerRecipe(ModItems.crystal_beryllium, baseTime)); registerRecipe(PB.ore(), new CrystallizerRecipe(ModItems.crystal_lead, baseTime)); - registerRecipe(SA326.ore(), new CrystallizerRecipe(ModItems.crystal_schrabidium, baseTime, sulfur)); - registerRecipe(LI.ore(), new CrystallizerRecipe(ModItems.crystal_lithium, baseTime, sulfur)); - registerRecipe(STAR.ore(), new CrystallizerRecipe(ModItems.crystal_starmetal, baseTime, sulfur)); - registerRecipe(CO.ore(), new CrystallizerRecipe(ModItems.crystal_cobalt, baseTime, sulfur)); + registerRecipe(SA326.ore(), new CrystallizerRecipe(ModItems.crystal_schrabidium, baseTime), sulfur); + registerRecipe(LI.ore(), new CrystallizerRecipe(ModItems.crystal_lithium, baseTime), sulfur); + registerRecipe(STAR.ore(), new CrystallizerRecipe(ModItems.crystal_starmetal, baseTime), sulfur); + registerRecipe(CO.ore(), new CrystallizerRecipe(ModItems.crystal_cobalt, baseTime), sulfur); - registerRecipe("oreRareEarth", new CrystallizerRecipe(ModItems.crystal_rare, baseTime, sulfur)); + registerRecipe("oreRareEarth", new CrystallizerRecipe(ModItems.crystal_rare, baseTime), sulfur); registerRecipe("oreCinnabar", new CrystallizerRecipe(ModItems.crystal_cinnebar, baseTime)); registerRecipe(new ComparableStack(ModBlocks.ore_nether_fire), new CrystallizerRecipe(ModItems.crystal_phosphorus, baseTime)); - registerRecipe(new ComparableStack(ModBlocks.ore_tikite), new CrystallizerRecipe(ModItems.crystal_trixite, baseTime, sulfur)); + registerRecipe(new ComparableStack(ModBlocks.ore_tikite), new CrystallizerRecipe(ModItems.crystal_trixite, baseTime), sulfur); registerRecipe(new ComparableStack(ModBlocks.gravel_diamond), new CrystallizerRecipe(ModItems.crystal_diamond, baseTime)); registerRecipe(SRN.ingot(), new CrystallizerRecipe(ModItems.crystal_schraranium, baseTime)); registerRecipe("sand", new CrystallizerRecipe(ModItems.ingot_fiberglass, utilityTime)); registerRecipe(REDSTONE.block(), new CrystallizerRecipe(ModItems.ingot_mercury, baseTime)); registerRecipe(CINNABAR.crystal(), new CrystallizerRecipe(new ItemStack(ModItems.ingot_mercury, 3), baseTime)); - registerRecipe(BORAX.dust(), new CrystallizerRecipe(new ItemStack(ModItems.powder_boron_tiny, 3), baseTime, sulfur)); + registerRecipe(BORAX.dust(), new CrystallizerRecipe(new ItemStack(ModItems.powder_boron_tiny, 3), baseTime), sulfur); registerRecipe(COAL.block(), new CrystallizerRecipe(ModBlocks.block_graphite, baseTime)); registerRecipe(new ComparableStack(Blocks.cobblestone), new CrystallizerRecipe(ModBlocks.reinforced_stone, utilityTime)); @@ -88,7 +90,7 @@ public class CrystallizerRecipes { registerRecipe(new ComparableStack(ModItems.powder_meteorite), new CrystallizerRecipe(ModItems.fragment_meteorite, utilityTime)); registerRecipe(new ComparableStack(ModItems.meteorite_sword_treated), new CrystallizerRecipe(ModItems.meteorite_sword_etched, baseTime)); - registerRecipe(new ComparableStack(ModItems.powder_impure_osmiridium), new CrystallizerRecipe(ModItems.crystal_osmiridium, baseTime, new FluidStack(Fluids.SCHRABIDIC, 1_000))); + registerRecipe(new ComparableStack(ModItems.powder_impure_osmiridium), new CrystallizerRecipe(ModItems.crystal_osmiridium, baseTime), new FluidStack(Fluids.SCHRABIDIC, 1_000)); for(int i = 0; i < ScrapType.values().length; i++) { registerRecipe(new ComparableStack(ModItems.scrap_plastic, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.circuit_star_piece, 1, i), baseTime)); @@ -103,9 +105,9 @@ public class CrystallizerRecipes { int i = ore.ordinal(); registerRecipe(new ComparableStack(ModItems.ore_centrifuged, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_cleaned, 1, i), oreTime)); - registerRecipe(new ComparableStack(ModItems.ore_separated, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_purified, 1, i), oreTime, sulfur)); - registerRecipe(new ComparableStack(ModItems.ore_separated, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_nitrated, 1, i), oreTime, nitric)); - registerRecipe(new ComparableStack(ModItems.ore_nitrocrystalline, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_deepcleaned, 1, i), oreTime, organic)); + registerRecipe(new ComparableStack(ModItems.ore_separated, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_purified, 1, i), oreTime), sulfur); + registerRecipe(new ComparableStack(ModItems.ore_separated, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_nitrated, 1, i), oreTime), nitric); + registerRecipe(new ComparableStack(ModItems.ore_nitrocrystalline, 1, i), new CrystallizerRecipe(new ItemStack(ModItems.ore_deepcleaned, 1, i), oreTime), organic); } List quartz = OreDictionary.getOres("crystalCertusQuartz"); @@ -123,22 +125,25 @@ public class CrystallizerRecipes { } } - public static CrystallizerRecipe getOutput(ItemStack stack) { + public static CrystallizerRecipe getOutput(ItemStack stack, FluidType type) { if(stack == null || stack.getItem() == null) return null; ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage()); + Pair compKey = new Pair(comp, type); - if(recipes.containsKey(comp)) - return recipes.get(comp); + if(recipes.containsKey(compKey)) + return recipes.get(compKey); String[] dictKeys = comp.getDictKeys(); for(String key : dictKeys) { + + Pair dictKey = new Pair(key, type); - if(recipes.containsKey(key)) - return recipes.get(key); + if(recipes.containsKey(dictKey)) + return recipes.get(dictKey); } return null; @@ -148,43 +153,48 @@ public class CrystallizerRecipes { HashMap recipes = new HashMap(); - for(Entry entry : CrystallizerRecipes.recipes.entrySet()) { + for(Entry, CrystallizerRecipe> entry : CrystallizerRecipes.recipes.entrySet()) { CrystallizerRecipe recipe = entry.getValue(); - if(entry.getKey() instanceof String) { - OreDictStack stack = new OreDictStack((String) entry.getKey()); - recipes.put(new Object[] {ItemFluidIcon.make(recipe.acid), stack}, recipe.output); + Pair key = entry.getKey(); + Object input = key.getKey(); + FluidType acid = key.getValue(); + + if(input instanceof String) { + OreDictStack stack = new OreDictStack((String) input); + recipes.put(new Object[] {ItemFluidIcon.make(acid, recipe.acidAmount), stack}, recipe.output); } else { - ComparableStack stack = (ComparableStack) entry.getKey(); + ComparableStack stack = (ComparableStack) input; if(stack.item == ModItems.scrap_plastic) continue; - recipes.put(new Object[] {ItemFluidIcon.make(recipe.acid), stack}, recipe.output); + recipes.put(new Object[] {ItemFluidIcon.make(acid, recipe.acidAmount), stack}, recipe.output); } } return recipes; } - // NYI public static void registerRecipe(Object input, CrystallizerRecipe recipe) { - recipes.put(input, recipe); + registerRecipe(input, recipe, new FluidStack(Fluids.ACID, 500)); + } + + public static void registerRecipe(Object input, CrystallizerRecipe recipe, FluidStack stack) { + recipe.acidAmount = stack.fill; + recipes.put(new Pair(input, stack.type), recipe); } public static class CrystallizerRecipe { - public FluidStack acid; + public int acidAmount; public int duration; public ItemStack output; - public CrystallizerRecipe(Block output, int duration) { this(new ItemStack(output), duration, new FluidStack(Fluids.ACID, 500)); } - public CrystallizerRecipe(Item output, int duration) { this(new ItemStack(output), duration, new FluidStack(Fluids.ACID, 500)); } - public CrystallizerRecipe(ItemStack output, int duration) { this(output, duration, new FluidStack(Fluids.ACID, 500)); } - public CrystallizerRecipe(Block output, int duration, FluidStack acid) { this(new ItemStack(output), duration, acid); } - public CrystallizerRecipe(Item output, int duration, FluidStack acid) { this(new ItemStack(output), duration, acid); } + public CrystallizerRecipe(Block output, int duration) { this(new ItemStack(output), duration); } + public CrystallizerRecipe(Item output, int duration) { this(new ItemStack(output), duration); } - public CrystallizerRecipe(ItemStack output, int duration, FluidStack acid) { + public CrystallizerRecipe(ItemStack output, int duration) { this.output = output; this.duration = duration; - this.acid = acid; + this.acidAmount = 500; } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java index d30396f96..77096db94 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCrystallizer.java @@ -139,7 +139,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme private void processItem() { - CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0]); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0], tank.getTankType()); if(result == null) //never happens but you can't be sure enough return; @@ -151,7 +151,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme else if(slots[2].stackSize + stack.stackSize <= slots[2].getMaxStackSize()) slots[2].stackSize += stack.stackSize; - tank.setFill(tank.getFill() - result.acid.fill); + tank.setFill(tank.getFill() - result.acidAmount); float freeChance = this.getFreeChance(); @@ -168,14 +168,13 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme if(power < getPowerRequired()) return false; - CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0]); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0], tank.getTankType()); //Or output? if(result == null) return false; - if(tank.getTankType() != result.acid.type) return false; - if(tank.getFill() < result.acid.fill) return false; + if(tank.getFill() < result.acidAmount) return false; ItemStack stack = result.output.copy(); @@ -225,7 +224,7 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme public short getDuration() { float durationMod = 1; - CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0]); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(slots[0], tank.getTankType()); int base = result != null ? result.duration : 600; @@ -336,9 +335,9 @@ public class TileEntityMachineCrystallizer extends TileEntityMachineBase impleme @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { - CrystallizerRecipe recipe = CrystallizerRecipes.getOutput(itemStack); + CrystallizerRecipe recipe = CrystallizerRecipes.getOutput(itemStack, tank.getTankType()); if(i == 0 && recipe != null) { - return recipe.acid.type == tank.getTankType(); + return true; } if(i == 1 && itemStack.getItem() instanceof IBatteryItem) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index ed3e44148..e7a48aa48 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -254,7 +254,7 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen if(stack != null && stack.getItem() != null) { if(hasCrystallizer()) { - CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack); + CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.ACID); if(result != null && result.output.getItem() != ModItems.scrap) { worldObj.spawnEntityInWorld(new EntityItem(worldObj, targetX + 0.5, targetY + 0.5, targetZ + 0.5, result.output.copy())); normal = false; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b7075b360..e7ca5ea20 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2363,7 +2363,10 @@ item.ore.tungsten=Wolfram item.ore_bedrock.name=Bedrock-%serz item.ore_centrifuged.name=Zentrifugiertes %serz item.ore_cleaned.name=Gereinigtes %serz +item.ore_deepcleaned.name=Tiefengereinigtes %serz item.ore_enriched.name=Reiches %serz +item.ore_nitrated.name=Nitriertes %serz +item.ore_nitrocrystalline.name=Nitrokristallines %serz item.ore_purified.name=Pures %serz item.ore_separated.name=Separiertes %serz item.overfuse.name=Singularitätsschraubenzieher diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6a0599715..5e150e148 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3039,7 +3039,10 @@ item.ore.tungsten=Tungsten item.ore_bedrock.name=%s Bedrock Ore item.ore_centrifuged.name=Centrifuged %s Ore item.ore_cleaned.name=Cleaned %s Ore +item.ore_deepcleaned.name=Deep Cleaned %s Ore item.ore_enriched.name=Enriched %s Ore +item.ore_nitrated.name=Nitrated %s Ore +item.ore_nitrocrystalline.name=Nitrocrystalline %s Ore item.ore_purified.name=Purified %s Ore item.ore_separated.name=Separated %s Ore item.overfuse.name=Singularity Screwdriver