From 99030c23c03561de0dc1e00fc9ccf7fb124da518 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sat, 25 Jan 2014 19:09:50 +0800 Subject: [PATCH] Added mixer and rubble washing --- .../archaic/imprint/BlockFilter.java | 17 --- .../resource/fluid/BlockFluidMixture.java | 6 +- .../resource/fluid/TileLiquidMixture.java | 1 - .../mechanical/Mechanical.java | 6 +- .../mechanical/process/BlockFilter.java | 123 ++++++++++++++++++ .../mechanical/process/TileGrinderWheel.java | 2 +- .../mechanical/process/TileMixer.java | 37 ++++-- .../languages/en_US.properties | 5 +- .../textures/blocks/filter.png | Bin 0 -> 2455 bytes 9 files changed, 163 insertions(+), 34 deletions(-) delete mode 100644 src/main/java/resonantinduction/archaic/imprint/BlockFilter.java create mode 100644 src/main/java/resonantinduction/mechanical/process/BlockFilter.java create mode 100644 src/main/resources/assets/resonantinduction/textures/blocks/filter.png diff --git a/src/main/java/resonantinduction/archaic/imprint/BlockFilter.java b/src/main/java/resonantinduction/archaic/imprint/BlockFilter.java deleted file mode 100644 index 4ebf4526..00000000 --- a/src/main/java/resonantinduction/archaic/imprint/BlockFilter.java +++ /dev/null @@ -1,17 +0,0 @@ -package resonantinduction.archaic.imprint; - -import resonantinduction.core.prefab.block.BlockRIRotatable; - -/** - * A block that represents a filter for item transportation. - * - * @author Calclavia - * - */ -public class BlockFilter extends BlockRIRotatable -{ - public BlockFilter(int id) - { - super("filter", id); - } -} diff --git a/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java b/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java index 97c2b3c8..b854ffc8 100644 --- a/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java +++ b/src/main/java/resonantinduction/core/resource/fluid/BlockFluidMixture.java @@ -2,7 +2,6 @@ package resonantinduction.core.resource.fluid; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.fluids.BlockFluidFinite; @@ -23,6 +22,11 @@ public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityPr this.setTextureName("water_flow"); } + public void setQuanta(World world, int x, int y, int z, int quanta) + { + world.setBlockMetadataWithNotify(x, y, z, quanta - 1, 3); + } + /* IFluidBlock */ @Override public FluidStack drain(World world, int x, int y, int z, boolean doDrain) diff --git a/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java b/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java index 00c82f15..3e5d57de 100644 --- a/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java +++ b/src/main/java/resonantinduction/core/resource/fluid/TileLiquidMixture.java @@ -30,7 +30,6 @@ public class TileLiquidMixture extends TileAdvanced { 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; diff --git a/src/main/java/resonantinduction/mechanical/Mechanical.java b/src/main/java/resonantinduction/mechanical/Mechanical.java index 39474c9b..ec8ad9fb 100644 --- a/src/main/java/resonantinduction/mechanical/Mechanical.java +++ b/src/main/java/resonantinduction/mechanical/Mechanical.java @@ -27,6 +27,7 @@ import resonantinduction.mechanical.logistic.TileManipulator; import resonantinduction.mechanical.logistic.TileRejector; import resonantinduction.mechanical.network.IMechanical; import resonantinduction.mechanical.network.PacketNetwork; +import resonantinduction.mechanical.process.BlockFilter; import resonantinduction.mechanical.process.BlockGrinderWheel; import resonantinduction.mechanical.process.TileGrinderWheel; import resonantinduction.mechanical.process.TileMixer; @@ -85,9 +86,10 @@ public class Mechanical public static Item itemPipe; public static Item itemPipeGuage; - // Machines + // Machines/Processes public static Block blockGrinderWheel; public static Block blockPurifier; + public static Block blockFilter; public static final PacketNetwork PACKET_NETWORK = new PacketNetwork(IMechanical.class, Reference.CHANNEL); @@ -113,7 +115,7 @@ public class Mechanical // Machines blockGrinderWheel = contentRegistry.createTile(BlockGrinderWheel.class, TileGrinderWheel.class); blockPurifier = contentRegistry.createTile(BlockMixer.class, TileMixer.class); - + blockFilter = contentRegistry.createBlock(BlockFilter.class); OreDictionary.registerOre("gear", itemGear); proxy.preInit(); diff --git a/src/main/java/resonantinduction/mechanical/process/BlockFilter.java b/src/main/java/resonantinduction/mechanical/process/BlockFilter.java new file mode 100644 index 00000000..54af9e07 --- /dev/null +++ b/src/main/java/resonantinduction/mechanical/process/BlockFilter.java @@ -0,0 +1,123 @@ +package resonantinduction.mechanical.process; + +import java.util.Random; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeDirection; +import resonantinduction.api.recipe.MachineRecipes; +import resonantinduction.api.recipe.MachineRecipes.RecipeType; +import resonantinduction.api.recipe.RecipeUtils.Resource; +import resonantinduction.core.ResonantInduction; +import resonantinduction.core.prefab.block.BlockRI; +import resonantinduction.core.resource.fluid.BlockFluidMixture; +import resonantinduction.core.resource.fluid.TileLiquidMixture; +import universalelectricity.api.vector.Vector3; +import calclavia.lib.utility.inventory.InventoryUtility; + +/** + * Used for filtering liquid mixtures + * + * @author Calclavia + * + */ +public class BlockFilter extends BlockRI implements ITileEntityProvider +{ + public BlockFilter() + { + super("filter"); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + world.scheduleBlockUpdate(x, y, z, blockID, 20); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int neighborID) + { + world.scheduleBlockUpdate(x, y, z, blockID, 20); + } + + @Override + public void updateTick(World world, int x, int y, int z, Random random) + { + Vector3 position = new Vector3(x, y, z); + Vector3 checkAbove = position.clone().translate(ForgeDirection.UP); + Vector3 checkBelow = position.clone().translate(ForgeDirection.DOWN); + + TileEntity tileAbove = checkAbove.getTileEntity(world); + TileEntity tileBelow = checkBelow.getTileEntity(world); + + if (tileAbove instanceof TileLiquidMixture && (tileBelow == null || tileBelow instanceof TileLiquidMixture)) + { + if (((TileLiquidMixture) tileAbove).items.size() > 0) + { + world.spawnParticle("dripWater", x + 0.5, y, z + 0.5, 0, 0, 0); + + /** + * Leak the fluid down. + */ + BlockFluidMixture fluidBlock = (BlockFluidMixture) ResonantInduction.blockFluidMixture; + int amount = fluidBlock.getQuantaValue(world, x, y, z); + + /** + * All fluid is filtered out, spawn all the items. + */ + if (amount <= 1) + { + for (ItemStack itemStack : ((TileLiquidMixture) tileAbove).items) + { + for (Resource resoure : MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack)) + { + InventoryUtility.dropItemStack(world, checkAbove, resoure.getItemStack()); + } + } + } + + int remaining = amount - 1; + + /** + * Remove liquid from top. + */ + if (remaining > 0) + { + fluidBlock.setQuanta(world, checkAbove.intX(), checkAbove.intY(), checkAbove.intZ(), remaining); + world.scheduleBlockUpdate(x, y, z, blockID, 20); + } + else + { + checkAbove.setBlock(world, 0); + } + + /** + * Add liquid to bottom. + */ + if (checkBelow.getBlockID(world) == ResonantInduction.blockFluidMixture.blockID) + { + fluidBlock.setQuanta(world, checkBelow.intX(), checkBelow.intY(), checkBelow.intZ(), fluidBlock.getQuantaValue(world, checkBelow.intX(), checkBelow.intY(), checkBelow.intZ()) + 1); + } + else + { + checkBelow.setBlock(world, ResonantInduction.blockFluidMixture.blockID); + } + } + } + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + +} diff --git a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java index e0c0a18f..7cd37363 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java +++ b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java @@ -93,7 +93,7 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable } else { - this.worldObj.spawnParticle("crit", grindingItem.posX, grindingItem.posY, grindingItem.posZ, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3); + worldObj.spawnParticle("crit", grindingItem.posX, grindingItem.posY, grindingItem.posZ, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3); } } diff --git a/src/main/java/resonantinduction/mechanical/process/TileMixer.java b/src/main/java/resonantinduction/mechanical/process/TileMixer.java index d890ae47..79f306e5 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileMixer.java +++ b/src/main/java/resonantinduction/mechanical/process/TileMixer.java @@ -4,6 +4,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; @@ -25,7 +26,7 @@ import universalelectricity.api.vector.Vector3; public class TileMixer extends TileMechanical { public static final long POWER = 500000; - public static final int DEFAULT_TIME = 10 * 20; + public static final int DEFAULT_TIME = 5 * 20; public static final Timer timer = new Timer(); @Override @@ -53,6 +54,23 @@ public class TileMixer extends TileMechanical { boolean didWork = false; + /** + * Transform all water blocks into mixture blocks + */ + for (int x = -1; x < 1; x++) + { + for (int z = -1; z < 1; z++) + { + Vector3 checkVector = new Vector3(this).translate(x, 0, z); + + if (checkVector.getBlockID(worldObj) == Block.waterStill.blockID) + { + checkVector.setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID, 8); + System.out.println("SET"); + } + } + } + // Search for an item to "process" AxisAlignedBB aabb = AxisAlignedBB.getAABBPool().getAABB(this.xCoord - 1, this.yCoord, this.zCoord - 1, this.xCoord + 2, this.yCoord + 1, this.zCoord + 2); List entities = this.worldObj.getEntitiesWithinAABB(Entity.class, aabb); @@ -72,6 +90,7 @@ public class TileMixer extends TileMechanical Vector3 difference = newPosition.difference(originalPosition).scale(0.5); entity.addVelocity(difference.x, difference.y, difference.z); + entity.onGround = false; if (entity instanceof EntityItem) { @@ -137,18 +156,18 @@ public class TileMixer extends TileMechanical private boolean doneWork(EntityItem entity) { - TileEntity tileEntity = new Vector3(entity).getTileEntity(worldObj); + Vector3 mixPosition = new Vector3(entity.posX, yCoord, entity.posZ); + TileEntity tileEntity = mixPosition.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); + if (((TileLiquidMixture) tileEntity).mix(itemStack)) + { + System.out.println("MIXED"); + worldObj.notifyBlocksOfNeighborChange(mixPosition.intX(), mixPosition.intY(), mixPosition.intZ(), mixPosition.getBlockID(worldObj)); + return true; + } } return false; diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index ab89ed9e..7b00c70e 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -75,10 +75,10 @@ tile.resonantinduction\:fluidPipe.14.name=Magenta Wood Trough tile.resonantinduction\:fluidPipe.15.name=Orange Wood Trough tile.resonantinduction\:fluidPipe.16.name=White Wood Trough - -## Machines +## Machines and Processing tile.resonantinduction\:mixer.name=Mixer tile.resonantinduction\:grindingWheel.name=Grinder Wheel +tile.resonantinduction\:filter.name=Filter ### Electrical Module ## Blocks @@ -86,7 +86,6 @@ tile.resonantinduction\:tesla.name=Tesla Coil tile.resonantinduction\:levitator.name=Electromagnetic Levitator tile.resonantinduction\:battery.name=Battery tile.resonantinduction\:material.name=Material -tile.resonantinduction\:filter.name=Filter tile.resonantinduction\:armbot.name=Armbot tile.resonantinduction\:encoder.name=Encoder diff --git a/src/main/resources/assets/resonantinduction/textures/blocks/filter.png b/src/main/resources/assets/resonantinduction/textures/blocks/filter.png new file mode 100644 index 0000000000000000000000000000000000000000..3509b62f7d694848ab328db4f5bd5801c6ad9026 GIT binary patch literal 2455 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 Vz4xW}621Tc002ovPDHLkV1jKLmQerz literal 0 HcmV?d00001