Mixer starting to work

This commit is contained in:
Calclavia 2014-01-25 18:07:08 +08:00
parent 7a5075e323
commit 4652c40538
8 changed files with 194 additions and 126 deletions

View file

@ -15,7 +15,7 @@ public final class MachineRecipes
{
public static enum RecipeType
{
GRINDER, SAWMILL, SMELTER;
CRUSHER, GRINDER, MIXER, SMELTER, SAWMILL;
}
private final Map<RecipeType, Map<Resource[], Resource[]>> recipes = new HashMap<RecipeType, Map<Resource[], Resource[]>>();
@ -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);

View file

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

View file

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

View file

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

View file

@ -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<FluidStack> fluids = new TreeSet<FluidStack>();
@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);
}
}

View file

@ -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<ItemStack> items = new HashSet<ItemStack>();
public final Set<FluidStack> fluids = new HashSet<FluidStack>();
@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);
}
}

View file

@ -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<EntityItem> timer = new Timer<EntityItem>();
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;

View file

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