mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
IMC recipe support for centrifuges, slightly improved centrifuge TE
or rather, slightly reduced centrifuge horribleness 2015 bobcode *shivers*
This commit is contained in:
parent
b8f032ffda
commit
574c46995c
@ -3,7 +3,9 @@ package com.hbm.blocks.fluid;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import com.hbm.blocks.ModBlocks;
|
import com.hbm.blocks.ModBlocks;
|
||||||
|
import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect;
|
||||||
import com.hbm.lib.RefStrings;
|
import com.hbm.lib.RefStrings;
|
||||||
|
import com.hbm.main.MainRegistry;
|
||||||
import com.hbm.util.ContaminationUtil;
|
import com.hbm.util.ContaminationUtil;
|
||||||
import com.hbm.util.ContaminationUtil.ContaminationType;
|
import com.hbm.util.ContaminationUtil.ContaminationType;
|
||||||
import com.hbm.util.ContaminationUtil.HazardType;
|
import com.hbm.util.ContaminationUtil.HazardType;
|
||||||
@ -15,10 +17,12 @@ import net.minecraft.block.material.Material;
|
|||||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.DamageSource;
|
import net.minecraft.util.DamageSource;
|
||||||
import net.minecraft.util.IIcon;
|
import net.minecraft.util.IIcon;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
import net.minecraftforge.fluids.BlockFluidClassic;
|
import net.minecraftforge.fluids.BlockFluidClassic;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
|
|
||||||
@ -80,23 +84,17 @@ public class SchrabidicBlock extends BlockFluidClassic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
|
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
|
||||||
{
|
|
||||||
super.onNeighborBlockChange(world, x, y, z, block);
|
super.onNeighborBlockChange(world, x, y, z, block);
|
||||||
|
|
||||||
if(reactToBlocks(world, x + 1, y, z))
|
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
|
||||||
if(reactToBlocks(world, x - 1, y, z))
|
if(reactToBlocks(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ)) {
|
||||||
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
||||||
if(reactToBlocks(world, x, y + 1, z))
|
break;
|
||||||
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
}
|
||||||
if(reactToBlocks(world, x, y - 1, z))
|
}
|
||||||
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
}
|
||||||
if(reactToBlocks(world, x, y, z + 1))
|
|
||||||
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
|
||||||
if(reactToBlocks(world, x, y, z - 1))
|
|
||||||
world.setBlock(x, y, z, ModBlocks.sellafield_slaked);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean reactToBlocks(World world, int x, int y, int z) {
|
public boolean reactToBlocks(World world, int x, int y, int z) {
|
||||||
if(world.getBlock(x, y, z).getMaterial() != ModBlocks.fluidschrabidic) {
|
if(world.getBlock(x, y, z).getMaterial() != ModBlocks.fluidschrabidic) {
|
||||||
@ -111,4 +109,33 @@ public class SchrabidicBlock extends BlockFluidClassic {
|
|||||||
public int tickRate(World p_149738_1_) {
|
public int tickRate(World p_149738_1_) {
|
||||||
return 15;
|
return 15;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public void randomDisplayTick(World world, int x, int y, int z, Random rand) {
|
||||||
|
super.randomDisplayTick(world, x, y, z, rand);
|
||||||
|
|
||||||
|
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
|
|
||||||
|
if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ).getMaterial() == Material.air) {
|
||||||
|
|
||||||
|
double ix = x + 0.5F + dir.offsetX + rand.nextDouble() * 3 - 1.5D;
|
||||||
|
double iy = y + 0.5F + dir.offsetY + rand.nextDouble() * 3 - 1.5D;
|
||||||
|
double iz = z + 0.5F + dir.offsetZ + rand.nextDouble() * 3 - 1.5D;
|
||||||
|
|
||||||
|
if(dir.offsetX != 0)
|
||||||
|
ix = x + 0.5F + dir.offsetX * 0.5 + rand.nextDouble() * dir.offsetX;
|
||||||
|
if(dir.offsetY != 0)
|
||||||
|
iy = y + 0.5F + dir.offsetY * 0.5 + rand.nextDouble() * dir.offsetY;
|
||||||
|
if(dir.offsetZ != 0)
|
||||||
|
iz = z + 0.5F + dir.offsetZ * 0.5 + rand.nextDouble() * dir.offsetZ;
|
||||||
|
|
||||||
|
NBTTagCompound data = new NBTTagCompound();
|
||||||
|
data.setString("type", "schrabfog");
|
||||||
|
data.setDouble("posX", ix);
|
||||||
|
data.setDouble("posY", iy);
|
||||||
|
data.setDouble("posZ", iz);
|
||||||
|
MainRegistry.proxy.effectNT(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,19 +13,19 @@ public class SchrabidicFluid extends Fluid {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public IIcon getIcon() {
|
public IIcon getIcon() {
|
||||||
return getStillIcon();
|
return getStillIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public IIcon getStillIcon() {
|
public IIcon getStillIcon() {
|
||||||
return SchrabidicBlock.stillIcon;
|
return SchrabidicBlock.stillIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public IIcon getFlowingIcon() {
|
public IIcon getFlowingIcon() {
|
||||||
return SchrabidicBlock.flowingIcon;
|
return SchrabidicBlock.flowingIcon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
49
src/main/java/com/hbm/handler/imc/IMCCentrifuge.java
Normal file
49
src/main/java/com/hbm/handler/imc/IMCCentrifuge.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package com.hbm.handler.imc;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import com.hbm.inventory.RecipesCommon;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
|
public class IMCCentrifuge extends IMCHandler {
|
||||||
|
|
||||||
|
public static HashMap<Object, ItemStack[]> buffer = new HashMap();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void process(IMCMessage message) {
|
||||||
|
|
||||||
|
NBTTagCompound data = message.getNBTValue();
|
||||||
|
ItemStack[] outs = new ItemStack[4];
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
|
||||||
|
NBTTagCompound output = data.getCompoundTag("output" + (i + 1));
|
||||||
|
ItemStack out = ItemStack.loadItemStackFromNBT(output);
|
||||||
|
|
||||||
|
if(out == null) {
|
||||||
|
this.printError(message, "Output stack could not be read!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
outs[i] = out;
|
||||||
|
}
|
||||||
|
|
||||||
|
NBTTagCompound input = data.getCompoundTag("input");
|
||||||
|
ItemStack in = ItemStack.loadItemStackFromNBT(input);
|
||||||
|
|
||||||
|
if(in != null) {
|
||||||
|
buffer.put(new RecipesCommon.ComparableStack(in), outs);
|
||||||
|
} else {
|
||||||
|
String dict = data.getString("oredict");
|
||||||
|
|
||||||
|
if(!dict.isEmpty()) {
|
||||||
|
buffer.put(dict, outs);
|
||||||
|
} else {
|
||||||
|
this.printError(message, "Input stack could not be read!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -22,6 +22,7 @@ public class IMCCrystallizer extends IMCHandler {
|
|||||||
|
|
||||||
if(out == null) {
|
if(out == null) {
|
||||||
this.printError(message, "Output stack could not be read!");
|
this.printError(message, "Output stack could not be read!");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NBTTagCompound input = data.getCompoundTag("input");
|
NBTTagCompound input = data.getCompoundTag("input");
|
||||||
|
|||||||
@ -17,7 +17,6 @@ package com.hbm.handler.imc;
|
|||||||
|
|
||||||
[MANDATORY]
|
[MANDATORY]
|
||||||
To set the input, there are two choices:
|
To set the input, there are two choices:
|
||||||
|
|
||||||
- Set another tag compound like the output called "output". This will make the input a fixed item.
|
- Set another tag compound like the output called "output". This will make the input a fixed item.
|
||||||
- Set a string called "oredict". This will make the input an ore dict entry and allow processing of genericized items.
|
- Set a string called "oredict". This will make the input an ore dict entry and allow processing of genericized items.
|
||||||
|
|
||||||
@ -40,4 +39,20 @@ package com.hbm.handler.imc;
|
|||||||
new ItemStack(ModItems.ingot_steel, 1).writeToNBT(out1);
|
new ItemStack(ModItems.ingot_steel, 1).writeToNBT(out1);
|
||||||
msg1.setTag("output", out1);
|
msg1.setTag("output", out1);
|
||||||
FMLInterModComms.sendMessage("hbm", "crystallizer", msg1);
|
FMLInterModComms.sendMessage("hbm", "crystallizer", msg1);
|
||||||
|
|
||||||
|
####################### CENTRIFUGE #######################
|
||||||
|
KEY: centrifuge
|
||||||
|
VALUE: NBT
|
||||||
|
|
||||||
|
[MANDATORY]
|
||||||
|
To set the output, set four tag compound named "output1" to "output4" that hold the itemstack info (set via ItemStack.writeToNBT)
|
||||||
|
Note that the centrifuge will always output four items and does not (yet) support nulls.
|
||||||
|
|
||||||
|
[MANDATORY]
|
||||||
|
To set the input, there are two choices:
|
||||||
|
- Set another tag compound like the output called "output". This will make the input a fixed item.
|
||||||
|
- Set a string called "oredict". This will make the input an ore dict entry and allow processing of genericized items.
|
||||||
|
|
||||||
|
EXAMPLES:
|
||||||
|
Refer to the examples of the acidizer, the only difference is the fact that there are four mandatory outputs.
|
||||||
*/
|
*/
|
||||||
@ -6,8 +6,10 @@ import java.util.Map;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import com.hbm.blocks.ModBlocks;
|
import com.hbm.blocks.ModBlocks;
|
||||||
|
import com.hbm.handler.imc.IMCCentrifuge;
|
||||||
import com.hbm.inventory.RecipesCommon.ComparableStack;
|
import com.hbm.inventory.RecipesCommon.ComparableStack;
|
||||||
import com.hbm.items.ModItems;
|
import com.hbm.items.ModItems;
|
||||||
|
import com.hbm.main.MainRegistry;
|
||||||
|
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
@ -248,6 +250,14 @@ public class CentrifugeRecipes {
|
|||||||
recipes.put(new ComparableStack(ModItems.crystal_lithium), new ItemStack[] { new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.fluorite, 1) });
|
recipes.put(new ComparableStack(ModItems.crystal_lithium), new ItemStack[] { new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_lithium, 2), new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.fluorite, 1) });
|
||||||
recipes.put(new ComparableStack(ModItems.crystal_starmetal), new ItemStack[] { new ItemStack(ModItems.powder_dura_steel, 3), new ItemStack(ModItems.powder_cobalt, 3), new ItemStack(ModItems.powder_astatine, 2), new ItemStack(ModItems.nugget_mercury, 5) });
|
recipes.put(new ComparableStack(ModItems.crystal_starmetal), new ItemStack[] { new ItemStack(ModItems.powder_dura_steel, 3), new ItemStack(ModItems.powder_cobalt, 3), new ItemStack(ModItems.powder_astatine, 2), new ItemStack(ModItems.nugget_mercury, 5) });
|
||||||
recipes.put(new ComparableStack(ModItems.crystal_cobalt), new ItemStack[] { new ItemStack(ModItems.powder_cobalt, 2), new ItemStack(ModItems.powder_iron, 3), new ItemStack(ModItems.powder_copper, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) });
|
recipes.put(new ComparableStack(ModItems.crystal_cobalt), new ItemStack[] { new ItemStack(ModItems.powder_cobalt, 2), new ItemStack(ModItems.powder_iron, 3), new ItemStack(ModItems.powder_copper, 3), new ItemStack(ModItems.powder_lithium_tiny, 1) });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(!IMCCentrifuge.buffer.isEmpty()) {
|
||||||
|
recipes.putAll(IMCCentrifuge.buffer);
|
||||||
|
MainRegistry.logger.info("Fetched " + IMCCentrifuge.buffer.size() + " IMC centrifuge recipes!");
|
||||||
|
IMCCentrifuge.buffer.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack[] getOutput(ItemStack stack) {
|
public static ItemStack[] getOutput(ItemStack stack) {
|
||||||
|
|||||||
@ -59,6 +59,7 @@ import com.hbm.entity.particle.*;
|
|||||||
import com.hbm.entity.projectile.*;
|
import com.hbm.entity.projectile.*;
|
||||||
import com.hbm.handler.*;
|
import com.hbm.handler.*;
|
||||||
import com.hbm.handler.FluidTypeHandler.FluidType;
|
import com.hbm.handler.FluidTypeHandler.FluidType;
|
||||||
|
import com.hbm.handler.imc.IMCCentrifuge;
|
||||||
import com.hbm.handler.imc.IMCCrystallizer;
|
import com.hbm.handler.imc.IMCCrystallizer;
|
||||||
import com.hbm.handler.imc.IMCHandler;
|
import com.hbm.handler.imc.IMCHandler;
|
||||||
import com.hbm.handler.radiation.ChunkRadiationManager;
|
import com.hbm.handler.radiation.ChunkRadiationManager;
|
||||||
@ -1030,8 +1031,11 @@ public class MainRegistry {
|
|||||||
// MUST be initialized AFTER achievements!!
|
// MUST be initialized AFTER achievements!!
|
||||||
BobmazonOfferFactory.init();
|
BobmazonOfferFactory.init();
|
||||||
OreDictManager.registerOres();
|
OreDictManager.registerOres();
|
||||||
|
|
||||||
|
IMCHandler.registerHandler("crystallizer", new IMCCrystallizer());
|
||||||
|
IMCHandler.registerHandler("centrifuge", new IMCCentrifuge());
|
||||||
|
|
||||||
IMCHandler.registerHandler("crystallizer", new IMCCrystallizer());NBTTagCompound msg0 = new NBTTagCompound();
|
/*NBTTagCompound msg0 = new NBTTagCompound();
|
||||||
NBTTagCompound ing0 = new NBTTagCompound();
|
NBTTagCompound ing0 = new NBTTagCompound();
|
||||||
new ItemStack(ModItems.alloy_plate).writeToNBT(ing0);
|
new ItemStack(ModItems.alloy_plate).writeToNBT(ing0);
|
||||||
msg0.setTag("input", ing0);
|
msg0.setTag("input", ing0);
|
||||||
@ -1045,7 +1049,7 @@ public class MainRegistry {
|
|||||||
NBTTagCompound out1 = new NBTTagCompound();
|
NBTTagCompound out1 = new NBTTagCompound();
|
||||||
new ItemStack(ModItems.ingot_steel, 1).writeToNBT(out1);
|
new ItemStack(ModItems.ingot_steel, 1).writeToNBT(out1);
|
||||||
msg1.setTag("output", out1);
|
msg1.setTag("output", out1);
|
||||||
FMLInterModComms.sendMessage("hbm", "crystallizer", msg1);
|
FMLInterModComms.sendMessage("hbm", "crystallizer", msg1);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@ -21,22 +21,24 @@ import net.minecraft.nbt.NBTTagList;
|
|||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
|
|
||||||
|
//TODO: move this trash to TileEntityMachineBase
|
||||||
|
//no seriously, this is dreadful
|
||||||
public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInventory, IConsumer {
|
public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInventory, IConsumer {
|
||||||
|
|
||||||
private ItemStack slots[];
|
private ItemStack slots[];
|
||||||
|
|
||||||
public int dualCookTime;
|
public int dualCookTime;
|
||||||
public long power;
|
public long power;
|
||||||
public boolean isProgressing;
|
public boolean isProgressing;
|
||||||
public static final int maxPower = 100000;
|
public static final int maxPower = 100000;
|
||||||
public static final int processingSpeed = 200;
|
public static final int processingSpeed = 200;
|
||||||
|
|
||||||
private static final int[] slots_top = new int[] {0};
|
private static final int[] slots_top = new int[] { 0 };
|
||||||
private static final int[] slots_bottom = new int[] {2, 3, 4, 5};
|
private static final int[] slots_bottom = new int[] { 2, 3, 4, 5 };
|
||||||
private static final int[] slots_side = new int[] {0, 1};
|
private static final int[] slots_side = new int[] { 0, 1 };
|
||||||
|
|
||||||
private String customName;
|
private String customName;
|
||||||
|
|
||||||
public TileEntityMachineCentrifuge() {
|
public TileEntityMachineCentrifuge() {
|
||||||
slots = new ItemStack[6];
|
slots = new ItemStack[6];
|
||||||
}
|
}
|
||||||
@ -53,21 +55,19 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getStackInSlotOnClosing(int i) {
|
public ItemStack getStackInSlotOnClosing(int i) {
|
||||||
if(slots[i] != null)
|
if(slots[i] != null) {
|
||||||
{
|
|
||||||
ItemStack itemStack = slots[i];
|
ItemStack itemStack = slots[i];
|
||||||
slots[i] = null;
|
slots[i] = null;
|
||||||
return itemStack;
|
return itemStack;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setInventorySlotContents(int i, ItemStack itemStack) {
|
public void setInventorySlotContents(int i, ItemStack itemStack) {
|
||||||
slots[i] = itemStack;
|
slots[i] = itemStack;
|
||||||
if(itemStack != null && itemStack.stackSize > getInventoryStackLimit())
|
if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) {
|
||||||
{
|
|
||||||
itemStack.stackSize = getInventoryStackLimit();
|
itemStack.stackSize = getInventoryStackLimit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv
|
|||||||
public boolean hasCustomInventoryName() {
|
public boolean hasCustomInventoryName() {
|
||||||
return this.customName != null && this.customName.length() > 0;
|
return this.customName != null && this.customName.length() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCustomName(String name) {
|
public void setCustomName(String name) {
|
||||||
this.customName = name;
|
this.customName = name;
|
||||||
}
|
}
|
||||||
@ -93,101 +93,94 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isUseableByPlayer(EntityPlayer player) {
|
public boolean isUseableByPlayer(EntityPlayer player) {
|
||||||
if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this)
|
if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}else{
|
} else {
|
||||||
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64;
|
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 64;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//You scrubs aren't needed for anything (right now)
|
// You scrubs aren't needed for anything (right now)
|
||||||
@Override
|
@Override
|
||||||
public void openInventory() {}
|
public void openInventory() {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void closeInventory() {}
|
public void closeInventory() {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
public boolean isItemValidForSlot(int i, ItemStack itemStack) {
|
||||||
if(i == 2 || i == 3 || i == 4 || i == 5)
|
if(i == 2 || i == 3 || i == 4 || i == 5) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i == 1) {
|
if(i == 1) {
|
||||||
return itemStack.getItem() instanceof IBatteryItem;
|
return itemStack.getItem() instanceof IBatteryItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
return !(itemStack.getItem() instanceof IBatteryItem);
|
return !(itemStack.getItem() instanceof IBatteryItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack decrStackSize(int i, int j) {
|
public ItemStack decrStackSize(int i, int j) {
|
||||||
if(slots[i] != null)
|
if(slots[i] != null) {
|
||||||
{
|
if(slots[i].stackSize <= j) {
|
||||||
if(slots[i].stackSize <= j)
|
|
||||||
{
|
|
||||||
ItemStack itemStack = slots[i];
|
ItemStack itemStack = slots[i];
|
||||||
slots[i] = null;
|
slots[i] = null;
|
||||||
return itemStack;
|
return itemStack;
|
||||||
}
|
}
|
||||||
ItemStack itemStack1 = slots[i].splitStack(j);
|
ItemStack itemStack1 = slots[i].splitStack(j);
|
||||||
if (slots[i].stackSize == 0)
|
if(slots[i].stackSize == 0) {
|
||||||
{
|
|
||||||
slots[i] = null;
|
slots[i] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return itemStack1;
|
return itemStack1;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readFromNBT(NBTTagCompound nbt) {
|
public void readFromNBT(NBTTagCompound nbt) {
|
||||||
super.readFromNBT(nbt);
|
super.readFromNBT(nbt);
|
||||||
NBTTagList list = nbt.getTagList("items", 10);
|
NBTTagList list = nbt.getTagList("items", 10);
|
||||||
|
|
||||||
power = nbt.getLong("powerTime");
|
power = nbt.getLong("powerTime");
|
||||||
dualCookTime = nbt.getShort("CookTime");
|
dualCookTime = nbt.getShort("CookTime");
|
||||||
slots = new ItemStack[getSizeInventory()];
|
slots = new ItemStack[getSizeInventory()];
|
||||||
|
|
||||||
for(int i = 0; i < list.tagCount(); i++)
|
for(int i = 0; i < list.tagCount(); i++) {
|
||||||
{
|
|
||||||
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
|
NBTTagCompound nbt1 = list.getCompoundTagAt(i);
|
||||||
byte b0 = nbt1.getByte("slot");
|
byte b0 = nbt1.getByte("slot");
|
||||||
if(b0 >= 0 && b0 < slots.length)
|
if(b0 >= 0 && b0 < slots.length) {
|
||||||
{
|
|
||||||
slots[b0] = ItemStack.loadItemStackFromNBT(nbt1);
|
slots[b0] = ItemStack.loadItemStackFromNBT(nbt1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToNBT(NBTTagCompound nbt) {
|
public void writeToNBT(NBTTagCompound nbt) {
|
||||||
super.writeToNBT(nbt);
|
super.writeToNBT(nbt);
|
||||||
nbt.setLong("powerTime", power);
|
nbt.setLong("powerTime", power);
|
||||||
nbt.setShort("cookTime", (short) dualCookTime);
|
nbt.setShort("cookTime", (short) dualCookTime);
|
||||||
NBTTagList list = new NBTTagList();
|
NBTTagList list = new NBTTagList();
|
||||||
|
|
||||||
for(int i = 0; i < slots.length; i++)
|
for(int i = 0; i < slots.length; i++) {
|
||||||
{
|
if(slots[i] != null) {
|
||||||
if(slots[i] != null)
|
|
||||||
{
|
|
||||||
NBTTagCompound nbt1 = new NBTTagCompound();
|
NBTTagCompound nbt1 = new NBTTagCompound();
|
||||||
nbt1.setByte("slot", (byte)i);
|
nbt1.setByte("slot", (byte) i);
|
||||||
slots[i].writeToNBT(nbt1);
|
slots[i].writeToNBT(nbt1);
|
||||||
list.appendTag(nbt1);
|
list.appendTag(nbt1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nbt.setTag("items", list);
|
nbt.setTag("items", list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getAccessibleSlotsFromSide(int p_94128_1_)
|
public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
|
||||||
{
|
return p_94128_1_ == 0 ? slots_bottom : (p_94128_1_ == 1 ? slots_top : slots_side);
|
||||||
return p_94128_1_ == 0 ? slots_bottom : (p_94128_1_ == 1 ? slots_top : slots_side);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canInsertItem(int i, ItemStack itemStack, int j) {
|
public boolean canInsertItem(int i, ItemStack itemStack, int j) {
|
||||||
@ -198,176 +191,123 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv
|
|||||||
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
|
||||||
return j != 0 || i != 1 || itemStack.getItem() == Items.bucket;
|
return j != 0 || i != 1 || itemStack.getItem() == Items.bucket;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCentrifugeProgressScaled(int i) {
|
public int getCentrifugeProgressScaled(int i) {
|
||||||
return (dualCookTime * i) / processingSpeed;
|
return (dualCookTime * i) / processingSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getPowerRemainingScaled(int i) {
|
public long getPowerRemainingScaled(int i) {
|
||||||
return (power * i) / maxPower;
|
return (power * i) / maxPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean canProcess() {
|
public boolean canProcess() {
|
||||||
|
|
||||||
if(slots[0] == null)
|
if(slots[0] == null) {
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ItemStack[] itemStack = CentrifugeRecipes.getOutput(slots[0]);
|
ItemStack[] out = CentrifugeRecipes.getOutput(slots[0]);
|
||||||
if(itemStack == null)
|
|
||||||
{
|
if(out == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(slots[2] == null && slots[3] == null && slots[4] == null && slots[5] == null)
|
for(int i = 0; i < 4; i++) {
|
||||||
{
|
|
||||||
return true;
|
//either the slot is null, the output is null or the output can be added to the existing slot
|
||||||
|
if(slots[i + 2] == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(out[i] == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(slots[i + 2].isItemEqual(out[i]) && slots[i + 2].stackSize + out[i].stackSize <= out[i].getMaxStackSize())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((slots[2] == null || (itemStack[0] != null && (slots[2].isItemEqual(itemStack[0])) && slots[2].stackSize + itemStack[0].stackSize <= itemStack[0].getMaxStackSize())) &&
|
return true;
|
||||||
(slots[3] == null || (itemStack[1] != null && (slots[3].isItemEqual(itemStack[1])) && slots[3].stackSize + itemStack[1].stackSize <= itemStack[1].getMaxStackSize())) &&
|
|
||||||
(slots[4] == null || (itemStack[2] != null && (slots[4].isItemEqual(itemStack[2])) && slots[4].stackSize + itemStack[2].stackSize <= itemStack[2].getMaxStackSize())) &&
|
|
||||||
(slots[5] == null || (itemStack[3] != null && (slots[5].isItemEqual(itemStack[3])) && slots[5].stackSize + itemStack[3].stackSize <= itemStack[3].getMaxStackSize())))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processItem() {
|
private void processItem() {
|
||||||
if(canProcess()) {
|
ItemStack[] out = CentrifugeRecipes.getOutput(slots[0]);
|
||||||
ItemStack[] itemStack = CentrifugeRecipes.getOutput(slots[0]);
|
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
if(slots[2] == null && itemStack[0] != null)
|
|
||||||
{
|
if(out[i] == null)
|
||||||
slots [2] = itemStack[0].copy();
|
continue;
|
||||||
}else if(itemStack[0] != null && slots[2].isItemEqual(itemStack[0]))
|
|
||||||
{
|
if(slots[i + 2] == null) {
|
||||||
slots[2].stackSize += itemStack[0].stackSize;
|
slots[i + 2] = out[i].copy();
|
||||||
}
|
} else {
|
||||||
|
slots[i + 2].stackSize += out[i].stackSize;
|
||||||
if(slots[3] == null && itemStack[1] != null)
|
|
||||||
{
|
|
||||||
slots [3] = itemStack[1].copy();
|
|
||||||
}else if(itemStack[1] != null && slots[3].isItemEqual(itemStack[1]))
|
|
||||||
{
|
|
||||||
slots[3].stackSize += itemStack[1].stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(slots[4] == null && itemStack[2] != null)
|
|
||||||
{
|
|
||||||
slots [4] = itemStack[2].copy();
|
|
||||||
}else if(itemStack[2] != null && slots[4].isItemEqual(itemStack[2]))
|
|
||||||
{
|
|
||||||
slots[4].stackSize += itemStack[2].stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(slots[5] == null && itemStack[3] != null)
|
|
||||||
{
|
|
||||||
slots [5] = itemStack[3].copy();
|
|
||||||
}else if(itemStack[3] != null && slots[5].isItemEqual(itemStack[3]))
|
|
||||||
{
|
|
||||||
slots[5].stackSize += itemStack[3].stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i = 0; i < 1; i++)
|
|
||||||
{
|
|
||||||
if(slots[i].stackSize <= 0)
|
|
||||||
{
|
|
||||||
slots[i] = new ItemStack(slots[i].getItem().setFull3D());
|
|
||||||
}else{
|
|
||||||
slots[i].stackSize--;
|
|
||||||
}
|
|
||||||
if(slots[i].stackSize <= 0)
|
|
||||||
{
|
|
||||||
slots[i] = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.decrStackSize(0, 1);
|
||||||
|
this.markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasPower() {
|
public boolean hasPower() {
|
||||||
return power > 0;
|
return power > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isProcessing() {
|
public boolean isProcessing() {
|
||||||
return this.dualCookTime > 0;
|
return this.dualCookTime > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateEntity() {
|
public void updateEntity() {
|
||||||
this.hasPower();
|
|
||||||
boolean flag1 = false;
|
|
||||||
|
|
||||||
if(!worldObj.isRemote) {
|
if(!worldObj.isRemote) {
|
||||||
|
|
||||||
power = Library.chargeTEFromItems(slots, 1, power, maxPower);
|
power = Library.chargeTEFromItems(slots, 1, power, maxPower);
|
||||||
|
|
||||||
if(hasPower() && isProcessing())
|
if(hasPower() && isProcessing()) {
|
||||||
{
|
|
||||||
this.power -= 200;
|
this.power -= 200;
|
||||||
|
|
||||||
if(this.power < 0)
|
if(this.power < 0) {
|
||||||
{
|
|
||||||
this.power = 0;
|
this.power = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasPower() && canProcess())
|
if(hasPower() && canProcess()) {
|
||||||
{
|
|
||||||
isProgressing = true;
|
isProgressing = true;
|
||||||
} else {
|
} else {
|
||||||
isProgressing = false;
|
isProgressing = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean trigger = true;
|
PacketDispatcher.wrapper.sendToAllAround(new AuxElectricityPacket(xCoord, yCoord, zCoord, power),
|
||||||
|
new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||||
if(hasPower() && canProcess() && this.dualCookTime == 0)
|
PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, dualCookTime, 0),
|
||||||
{
|
new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||||
trigger = false;
|
PacketDispatcher.wrapper.sendToAllAround(
|
||||||
}
|
new AuxGaugePacket(xCoord, yCoord, zCoord, isProgressing ? 1 : 0, 1),
|
||||||
|
new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||||
if(trigger)
|
PacketDispatcher.wrapper.sendToAllAround(new LoopedSoundPacket(xCoord, yCoord, zCoord),
|
||||||
{
|
new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
||||||
flag1 = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PacketDispatcher.wrapper.sendToAllAround(new AuxElectricityPacket(xCoord, yCoord, zCoord, power), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
|
||||||
PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, dualCookTime, 0), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
|
||||||
PacketDispatcher.wrapper.sendToAllAround(new AuxGaugePacket(xCoord, yCoord, zCoord, isProgressing ? 1 : 0, 1), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
|
||||||
PacketDispatcher.wrapper.sendToAllAround(new LoopedSoundPacket(xCoord, yCoord, zCoord), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 50));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasPower() && canProcess())
|
if(hasPower() && canProcess()) {
|
||||||
{
|
|
||||||
dualCookTime++;
|
dualCookTime++;
|
||||||
|
|
||||||
if(this.dualCookTime >= TileEntityMachineCentrifuge.processingSpeed)
|
if(this.dualCookTime >= TileEntityMachineCentrifuge.processingSpeed) {
|
||||||
{
|
|
||||||
this.dualCookTime = 0;
|
this.dualCookTime = 0;
|
||||||
this.processItem();
|
this.processItem();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
dualCookTime = 0;
|
dualCookTime = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag1)
|
|
||||||
{
|
|
||||||
this.markDirty();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AxisAlignedBB getRenderBoundingBox() {
|
public AxisAlignedBB getRenderBoundingBox() {
|
||||||
return TileEntity.INFINITE_EXTENT_AABB;
|
return TileEntity.INFINITE_EXTENT_AABB;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public double getMaxRenderDistanceSquared()
|
public double getMaxRenderDistanceSquared() {
|
||||||
{
|
|
||||||
return 65536.0D;
|
return 65536.0D;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -379,7 +319,7 @@ public class TileEntityMachineCentrifuge extends TileEntity implements ISidedInv
|
|||||||
@Override
|
@Override
|
||||||
public long getPower() {
|
public long getPower() {
|
||||||
return power;
|
return power;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user