From 4652c4053815721c8b7873d35256e58aef52574c Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sat, 25 Jan 2014 18:07:08 +0800 Subject: [PATCH] Mixer starting to work --- .../api/recipe/MachineRecipes.java | 19 ++- .../core/ResonantInduction.java | 6 +- .../core/resource/ResourceGenerator.java | 10 +- .../resource/fluid/BlockFluidMixture.java | 10 +- .../core/resource/fluid/TileFluidMixture.java | 90 ------------ .../resource/fluid/TileLiquidMixture.java | 131 ++++++++++++++++++ .../mechanical/process/TileGrinderWheel.java | 26 ++-- .../mechanical/process/TileMixer.java | 28 +++- 8 files changed, 194 insertions(+), 126 deletions(-) delete mode 100644 src/main/java/resonantinduction/core/resource/fluid/TileFluidMixture.java create mode 100644 src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java diff --git a/src/main/java/resonantinduction/api/recipe/MachineRecipes.java b/src/main/java/resonantinduction/api/recipe/MachineRecipes.java index 0fd69e68..6ec4bf56 100644 --- a/src/main/java/resonantinduction/api/recipe/MachineRecipes.java +++ b/src/main/java/resonantinduction/api/recipe/MachineRecipes.java @@ -15,7 +15,7 @@ public final class MachineRecipes { public static enum RecipeType { - GRINDER, SAWMILL, SMELTER; + CRUSHER, GRINDER, MIXER, SMELTER, SAWMILL; } private final Map> recipes = new HashMap>(); @@ -45,6 +45,23 @@ public final class MachineRecipes this.addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, new ItemStackResource[] { new ItemStackResource(output) }); } + public void addRecipe(RecipeType machine, String input, String... oreNameOutputs) + { + OreDictResource[] outputs = new OreDictResource[oreNameOutputs.length]; + + for (int i = 0; i < outputs.length; i++) + { + outputs[i] = new OreDictResource(oreNameOutputs[i]); + } + + addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, outputs); + } + + public void addRecipe(RecipeType machine, String input, OreDictResource... output) + { + this.addRecipe(machine, new OreDictResource[] { new OreDictResource(input) }, output); + } + public void removeRecipe(RecipeType machine, Resource[] input) { this.recipes.get(machine).remove(input); diff --git a/src/main/java/resonantinduction/core/ResonantInduction.java b/src/main/java/resonantinduction/core/ResonantInduction.java index bdbb0644..b1452534 100644 --- a/src/main/java/resonantinduction/core/ResonantInduction.java +++ b/src/main/java/resonantinduction/core/ResonantInduction.java @@ -16,7 +16,7 @@ import resonantinduction.core.handler.LinkEventHandler; import resonantinduction.core.prefab.part.PacketMultiPart; import resonantinduction.core.resource.ResourceGenerator; import resonantinduction.core.resource.fluid.BlockFluidMixture; -import resonantinduction.core.resource.fluid.TileFluidMixture; +import resonantinduction.core.resource.fluid.TileLiquidMixture; import resonantinduction.core.resource.item.ItemOreResource; import calclavia.lib.content.ContentRegistry; import calclavia.lib.network.PacketHandler; @@ -75,7 +75,7 @@ public class ResonantInduction public static Block blockDebug; public static Fluid MIXTURE = null; - + public static final ContentRegistry contentRegistry = new ContentRegistry(Settings.CONFIGURATION, ID); @EventHandler @@ -105,7 +105,7 @@ public class ResonantInduction GameRegistry.registerItem(itemRefinedDust, itemRefinedDust.getUnlocalizedName()); GameRegistry.registerBlock(blockFluidMixture, blockFluidMixture.getUnlocalizedName()); - GameRegistry.registerTileEntity(TileFluidMixture.class, blockFluidMixture.getUnlocalizedName()); + GameRegistry.registerTileEntity(TileLiquidMixture.class, blockFluidMixture.getUnlocalizedName()); blockDebug = contentRegistry.createBlock(BlockDebug.class, ItemBlockHolder.class); diff --git a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java index ec673f64..e9f28b6c 100644 --- a/src/main/java/resonantinduction/core/resource/ResourceGenerator.java +++ b/src/main/java/resonantinduction/core/resource/ResourceGenerator.java @@ -73,10 +73,12 @@ public class ResourceGenerator OreDictionary.registerOre("dustRefined" + name, ResonantInduction.itemRefinedDust.getStackFromDust(materialName)); } - // Add to machine recipes - ItemStack dust = OreDictionary.getOres("rubble" + name).get(0).copy(); - dust.stackSize = 2; - MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "ore" + name, dust); + // Add rubble to crushing recipes + // TODO: Change this to CRUSHING when the crusher is finished. + MachineRecipes.INSTANCE.addRecipe(RecipeType.GRINDER, "ore" + name, "rubble" + name, "rubble" + name); + + // Add dust to mixer recipes, dummy item because mixer doesn't produce any items. + MachineRecipes.INSTANCE.addRecipe(RecipeType.MIXER, "rubble" + name, "dust" + name); } } } diff --git a/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java b/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java index 219b2512..97c2b3c8 100644 --- a/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java +++ b/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java @@ -23,17 +23,11 @@ public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityPr this.setTextureName("water_flow"); } - @Override - public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity) - { - // If this item can be smelted into another fluid, add it to the mixture. - } - /* IFluidBlock */ @Override public FluidStack drain(World world, int x, int y, int z, boolean doDrain) { - TileFluidMixture tileFluid = (TileFluidMixture) world.getBlockTileEntity(x, y, z); + TileLiquidMixture tileFluid = (TileLiquidMixture) world.getBlockTileEntity(x, y, z); FluidStack stack = new FluidStack(ResonantInduction.MIXTURE, (int) (FluidContainerRegistry.BUCKET_VOLUME * this.getFilledPercentage(world, x, y, z))); tileFluid.writeFluidToNBT(stack.tag); return stack; @@ -48,6 +42,6 @@ public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityPr @Override public TileEntity createNewTileEntity(World world) { - return new TileFluidMixture(); + return new TileLiquidMixture(); } } diff --git a/src/main/java/resonantinduction/core/resource/fluid/TileFluidMixture.java b/src/main/java/resonantinduction/core/resource/fluid/TileFluidMixture.java deleted file mode 100644 index d039cb5f..00000000 --- a/src/main/java/resonantinduction/core/resource/fluid/TileFluidMixture.java +++ /dev/null @@ -1,90 +0,0 @@ -package resonantinduction.core.resource.fluid; - -import java.util.TreeSet; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.fluids.FluidStack; -import calclavia.lib.prefab.tile.TileAdvanced; - -/** - * @author Calclavia - * - */ -public class TileFluidMixture extends TileAdvanced -{ - public final TreeSet fluids = new TreeSet(); - - @Override - public boolean canUpdate() - { - return false; - } - - public void mix(FluidStack fluid) - { - if (fluids.contains(fluid)) - { - for (FluidStack checkFluid : fluids) - { - if (fluid.equals(checkFluid)) - { - checkFluid.amount += fluid.amount; - } - } - } - else - { - fluids.add(fluid); - } - } - - /** - * @return The color of the liquid based on the fluidStacks stored. - */ - public int getColor() - { - return 0xFFFFFF; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) - { - super.readFromNBT(nbt); - readFluidFromNBT(nbt); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) - { - super.writeToNBT(nbt); - writeFluidToNBT(nbt); - } - - public void readFluidFromNBT(NBTTagCompound nbt) - { - fluids.clear(); - - NBTTagList nbtList = nbt.getTagList("fluids"); - - for (int i = 0; i < nbtList.tagCount(); ++i) - { - NBTTagCompound fluidNBT = (NBTTagCompound) nbtList.tagAt(i); - fluids.add(FluidStack.loadFluidStackFromNBT(fluidNBT)); - } - } - - public void writeFluidToNBT(NBTTagCompound nbt) - { - NBTTagList nbtList = new NBTTagList(); - - for (FluidStack fluid : fluids) - { - NBTTagCompound nbtElement = new NBTTagCompound(); - fluid.writeToNBT(nbtElement); - nbtList.appendTag(nbtElement); - } - - nbt.setTag("fluids", nbtList); - } -} diff --git a/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java b/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java new file mode 100644 index 00000000..00c82f15 --- /dev/null +++ b/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java @@ -0,0 +1,131 @@ +package resonantinduction.core.resource.fluid; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.fluids.FluidStack; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; +import calclavia.lib.prefab.tile.TileAdvanced; + +/** + * @author Calclavia + * + */ +public class TileLiquidMixture extends TileAdvanced +{ + public final Set items = new HashSet(); + public final Set fluids = new HashSet(); + + @Override + public boolean canUpdate() + { + return false; + } + + public boolean mix(ItemStack itemStack) + { + if (MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack).length > 0) + { + System.out.println("Mixed"); + // TODO: Maybe we need to merge the stacks? + items.add(itemStack); + return true; + } + + return false; + } + + public void mix(FluidStack fluid) + { + if (!fluid.getFluid().isGaseous()) + { + if (fluids.contains(fluid)) + { + for (FluidStack checkFluid : fluids) + { + if (fluid.equals(checkFluid)) + { + checkFluid.amount += fluid.amount; + } + } + } + else + { + fluids.add(fluid); + } + } + } + + /** + * @return The color of the liquid based on the fluidStacks stored. + */ + public int getColor() + { + return 0xFFFFFF; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + readFluidFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + writeFluidToNBT(nbt); + } + + public void readFluidFromNBT(NBTTagCompound nbt) + { + fluids.clear(); + items.clear(); + + NBTTagList fluidList = nbt.getTagList("Fluids"); + + for (int i = 0; i < fluidList.tagCount(); ++i) + { + NBTTagCompound fluidNBT = (NBTTagCompound) fluidList.tagAt(i); + fluids.add(FluidStack.loadFluidStackFromNBT(fluidNBT)); + } + + NBTTagList itemList = nbt.getTagList("Items"); + + for (int i = 0; i < itemList.tagCount(); ++i) + { + NBTTagCompound stackTag = (NBTTagCompound) itemList.tagAt(i); + items.add(ItemStack.loadItemStackFromNBT(stackTag)); + } + } + + public void writeFluidToNBT(NBTTagCompound nbt) + { + NBTTagList fluidList = new NBTTagList(); + + for (FluidStack fluid : fluids) + { + NBTTagCompound nbtElement = new NBTTagCompound(); + fluid.writeToNBT(nbtElement); + fluidList.appendTag(nbtElement); + } + + nbt.setTag("Fluids", fluidList); + + NBTTagList itemList = new NBTTagList(); + + for (ItemStack itemStack : items) + { + NBTTagCompound var4 = new NBTTagCompound(); + itemStack.writeToNBT(var4); + itemList.appendTag(var4); + } + + nbt.setTag("Items", itemList); + } +} diff --git a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java index 9c8b57ee..e0c0a18f 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java +++ b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java @@ -29,7 +29,7 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable public static final int DEFAULT_TIME = 20 * 20; /** A map of ItemStacks and their remaining grind-time left. */ public static final Timer timer = new Timer(); - + public EntityItem grindingItem = null; private final long requiredTorque = 1000; @@ -131,20 +131,20 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable for (Resource resource : results) { - if (resource instanceof ItemStackResource) - { - if (!this.worldObj.isRemote) - { - EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, ((ItemStackResource) resource).itemStack.copy()); - entityItem.delayBeforeCanPickup = 20; - entityItem.motionX = 0; - entityItem.motionY = 0; - entityItem.motionZ = 0; - this.worldObj.spawnEntityInWorld(entityItem); - } + ItemStack outputStack = resource.getItemStack(); - return true; + if (!this.worldObj.isRemote) + { + EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, outputStack.copy()); + entityItem.delayBeforeCanPickup = 20; + entityItem.motionX = 0; + entityItem.motionY = 0; + entityItem.motionZ = 0; + this.worldObj.spawnEntityInWorld(entityItem); } + + return true; + } return false; diff --git a/src/main/java/resonantinduction/mechanical/process/TileMixer.java b/src/main/java/resonantinduction/mechanical/process/TileMixer.java index 92b0ce83..d890ae47 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileMixer.java +++ b/src/main/java/resonantinduction/mechanical/process/TileMixer.java @@ -7,11 +7,14 @@ import java.util.Set; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.ForgeDirection; import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; import resonantinduction.core.Reference; -import resonantinduction.core.resource.item.ItemOreResource; +import resonantinduction.core.ResonantInduction; +import resonantinduction.core.resource.fluid.TileLiquidMixture; import resonantinduction.mechanical.network.TileMechanical; import universalelectricity.api.vector.Vector3; @@ -72,8 +75,7 @@ public class TileMixer extends TileMechanical if (entity instanceof EntityItem) { - // TODO: Use machine recipe - if (((EntityItem) entity).getEntityItem().getItem() instanceof ItemOreResource) + if (MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, ((EntityItem) entity).getEntityItem()).length > 0) { processItems.add((EntityItem) entity); } @@ -86,11 +88,11 @@ public class TileMixer extends TileMechanical { timer.put(processingItem, DEFAULT_TIME); } - + if (!processingItem.isDead && new Vector3(this).add(0.5).distance(processingItem) < 2) { int timeLeft = timer.decrease(processingItem); - + if (timeLeft <= 0) { if (this.doneWork(processingItem)) @@ -135,8 +137,20 @@ public class TileMixer extends TileMechanical private boolean doneWork(EntityItem entity) { - ItemStack itemStack = entity.getEntityItem(); - entity.setDead(); + TileEntity tileEntity = new Vector3(entity).getTileEntity(worldObj); + + if (tileEntity instanceof TileLiquidMixture) + { + System.out.println("MIXING!"); + ItemStack itemStack = entity.getEntityItem().copy(); + return ((TileLiquidMixture) tileEntity).mix(itemStack); + } + else + { + System.out.println("transformed block!"); + new Vector3(entity).setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID); + } + return false; }