Added mixer and rubble washing

This commit is contained in:
Calclavia 2014-01-25 19:09:50 +08:00
parent 4652c40538
commit 99030c23c0
9 changed files with 163 additions and 34 deletions

View file

@ -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);
}
}

View file

@ -2,7 +2,6 @@ package resonantinduction.core.resource.fluid;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.fluids.BlockFluidFinite; import net.minecraftforge.fluids.BlockFluidFinite;
@ -23,6 +22,11 @@ public class BlockFluidMixture extends BlockFluidFinite implements ITileEntityPr
this.setTextureName("water_flow"); 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 */ /* IFluidBlock */
@Override @Override
public FluidStack drain(World world, int x, int y, int z, boolean doDrain) public FluidStack drain(World world, int x, int y, int z, boolean doDrain)

View file

@ -30,7 +30,6 @@ public class TileLiquidMixture extends TileAdvanced
{ {
if (MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack).length > 0) if (MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, itemStack).length > 0)
{ {
System.out.println("Mixed");
// TODO: Maybe we need to merge the stacks? // TODO: Maybe we need to merge the stacks?
items.add(itemStack); items.add(itemStack);
return true; return true;

View file

@ -27,6 +27,7 @@ import resonantinduction.mechanical.logistic.TileManipulator;
import resonantinduction.mechanical.logistic.TileRejector; import resonantinduction.mechanical.logistic.TileRejector;
import resonantinduction.mechanical.network.IMechanical; import resonantinduction.mechanical.network.IMechanical;
import resonantinduction.mechanical.network.PacketNetwork; import resonantinduction.mechanical.network.PacketNetwork;
import resonantinduction.mechanical.process.BlockFilter;
import resonantinduction.mechanical.process.BlockGrinderWheel; import resonantinduction.mechanical.process.BlockGrinderWheel;
import resonantinduction.mechanical.process.TileGrinderWheel; import resonantinduction.mechanical.process.TileGrinderWheel;
import resonantinduction.mechanical.process.TileMixer; import resonantinduction.mechanical.process.TileMixer;
@ -85,9 +86,10 @@ public class Mechanical
public static Item itemPipe; public static Item itemPipe;
public static Item itemPipeGuage; public static Item itemPipeGuage;
// Machines // Machines/Processes
public static Block blockGrinderWheel; public static Block blockGrinderWheel;
public static Block blockPurifier; public static Block blockPurifier;
public static Block blockFilter;
public static final PacketNetwork PACKET_NETWORK = new PacketNetwork(IMechanical.class, Reference.CHANNEL); public static final PacketNetwork PACKET_NETWORK = new PacketNetwork(IMechanical.class, Reference.CHANNEL);
@ -113,7 +115,7 @@ public class Mechanical
// Machines // Machines
blockGrinderWheel = contentRegistry.createTile(BlockGrinderWheel.class, TileGrinderWheel.class); blockGrinderWheel = contentRegistry.createTile(BlockGrinderWheel.class, TileGrinderWheel.class);
blockPurifier = contentRegistry.createTile(BlockMixer.class, TileMixer.class); blockPurifier = contentRegistry.createTile(BlockMixer.class, TileMixer.class);
blockFilter = contentRegistry.createBlock(BlockFilter.class);
OreDictionary.registerOre("gear", itemGear); OreDictionary.registerOre("gear", itemGear);
proxy.preInit(); proxy.preInit();

View file

@ -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;
}
}

View file

@ -93,7 +93,7 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
} }
else 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);
} }
} }

View file

@ -4,6 +4,7 @@ import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -25,7 +26,7 @@ import universalelectricity.api.vector.Vector3;
public class TileMixer extends TileMechanical public class TileMixer extends TileMechanical
{ {
public static final long POWER = 500000; 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<EntityItem> timer = new Timer<EntityItem>(); public static final Timer<EntityItem> timer = new Timer<EntityItem>();
@Override @Override
@ -53,6 +54,23 @@ public class TileMixer extends TileMechanical
{ {
boolean didWork = false; 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" // 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); AxisAlignedBB aabb = AxisAlignedBB.getAABBPool().getAABB(this.xCoord - 1, this.yCoord, this.zCoord - 1, this.xCoord + 2, this.yCoord + 1, this.zCoord + 2);
List<Entity> entities = this.worldObj.getEntitiesWithinAABB(Entity.class, aabb); List<Entity> entities = this.worldObj.getEntitiesWithinAABB(Entity.class, aabb);
@ -72,6 +90,7 @@ public class TileMixer extends TileMechanical
Vector3 difference = newPosition.difference(originalPosition).scale(0.5); Vector3 difference = newPosition.difference(originalPosition).scale(0.5);
entity.addVelocity(difference.x, difference.y, difference.z); entity.addVelocity(difference.x, difference.y, difference.z);
entity.onGround = false;
if (entity instanceof EntityItem) if (entity instanceof EntityItem)
{ {
@ -137,18 +156,18 @@ public class TileMixer extends TileMechanical
private boolean doneWork(EntityItem entity) 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) if (tileEntity instanceof TileLiquidMixture)
{ {
System.out.println("MIXING!");
ItemStack itemStack = entity.getEntityItem().copy(); ItemStack itemStack = entity.getEntityItem().copy();
return ((TileLiquidMixture) tileEntity).mix(itemStack); if (((TileLiquidMixture) tileEntity).mix(itemStack))
} {
else System.out.println("MIXED");
{ worldObj.notifyBlocksOfNeighborChange(mixPosition.intX(), mixPosition.intY(), mixPosition.intZ(), mixPosition.getBlockID(worldObj));
System.out.println("transformed block!"); return true;
new Vector3(entity).setBlock(worldObj, ResonantInduction.blockFluidMixture.blockID); }
} }
return false; return false;

View file

@ -75,10 +75,10 @@ tile.resonantinduction\:fluidPipe.14.name=Magenta Wood Trough
tile.resonantinduction\:fluidPipe.15.name=Orange Wood Trough tile.resonantinduction\:fluidPipe.15.name=Orange Wood Trough
tile.resonantinduction\:fluidPipe.16.name=White Wood Trough tile.resonantinduction\:fluidPipe.16.name=White Wood Trough
## Machines and Processing
## Machines
tile.resonantinduction\:mixer.name=Mixer tile.resonantinduction\:mixer.name=Mixer
tile.resonantinduction\:grindingWheel.name=Grinder Wheel tile.resonantinduction\:grindingWheel.name=Grinder Wheel
tile.resonantinduction\:filter.name=Filter
### Electrical Module ### Electrical Module
## Blocks ## Blocks
@ -86,7 +86,6 @@ tile.resonantinduction\:tesla.name=Tesla Coil
tile.resonantinduction\:levitator.name=Electromagnetic Levitator tile.resonantinduction\:levitator.name=Electromagnetic Levitator
tile.resonantinduction\:battery.name=Battery tile.resonantinduction\:battery.name=Battery
tile.resonantinduction\:material.name=Material tile.resonantinduction\:material.name=Material
tile.resonantinduction\:filter.name=Filter
tile.resonantinduction\:armbot.name=Armbot tile.resonantinduction\:armbot.name=Armbot
tile.resonantinduction\:encoder.name=Encoder tile.resonantinduction\:encoder.name=Encoder

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB