mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-26 08:48:34 +01:00
Made the Ore Magnet accept and use Power and oil
This commit is contained in:
parent
b5b8730642
commit
e72b8a8fbd
3 changed files with 90 additions and 43 deletions
|
@ -21,10 +21,11 @@ public class ContainerOreMagnet extends Container{
|
||||||
public ContainerOreMagnet(InventoryPlayer inventory, TileEntityBase tile){
|
public ContainerOreMagnet(InventoryPlayer inventory, TileEntityBase tile){
|
||||||
this.magnet = (TileEntityOreMagnet)tile;
|
this.magnet = (TileEntityOreMagnet)tile;
|
||||||
|
|
||||||
this.addSlotToContainer(new Slot(this.magnet, 0, 98, 74));
|
this.addSlotToContainer(new Slot(this.magnet, TileEntityOreMagnet.SLOT_OIL_INPUT, 98, 74));
|
||||||
this.addSlotToContainer(new SlotOutput(this.magnet, 1, 98, 43));
|
this.addSlotToContainer(new SlotOutput(this.magnet, TileEntityOreMagnet.SLOT_OIL_OUTPUT, 98, 43));
|
||||||
|
|
||||||
this.addSlotToContainer(new SlotOutput(this.magnet, 2, 71, 43));
|
//TODO Change away from SlotOutput when implementing upgrades
|
||||||
|
this.addSlotToContainer(new SlotOutput(this.magnet, TileEntityOreMagnet.SLOT_UPGRADE, 71, 43));
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++){
|
for (int i = 0; i < 3; i++){
|
||||||
for (int j = 0; j < 9; j++){
|
for (int j = 0; j < 9; j++){
|
||||||
|
@ -43,7 +44,7 @@ public class ContainerOreMagnet extends Container{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack transferStackInSlot(EntityPlayer player, int slot){
|
public ItemStack transferStackInSlot(EntityPlayer player, int slot){
|
||||||
final int inventoryStart = 2;
|
final int inventoryStart = 3;
|
||||||
final int inventoryEnd = inventoryStart+26;
|
final int inventoryEnd = inventoryStart+26;
|
||||||
final int hotbarStart = inventoryEnd+1;
|
final int hotbarStart = inventoryEnd+1;
|
||||||
final int hotbarEnd = hotbarStart+8;
|
final int hotbarEnd = hotbarStart+8;
|
||||||
|
@ -57,9 +58,8 @@ public class ContainerOreMagnet extends Container{
|
||||||
//Other Slots in Inventory excluded
|
//Other Slots in Inventory excluded
|
||||||
if(slot >= inventoryStart){
|
if(slot >= inventoryStart){
|
||||||
//Shift from Inventory
|
//Shift from Inventory
|
||||||
//TODO
|
|
||||||
if(FluidContainerRegistry.containsFluid(newStack, new FluidStack(InitBlocks.fluidOil, 1))){
|
if(FluidContainerRegistry.containsFluid(newStack, new FluidStack(InitBlocks.fluidOil, 1))){
|
||||||
if(!this.mergeItemStack(newStack, 0, 1, false)) return null;
|
if(!this.mergeItemStack(newStack, TileEntityOreMagnet.SLOT_OIL_INPUT, TileEntityOreMagnet.SLOT_OIL_INPUT+1, false)) return null;
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.StatCollector;
|
import net.minecraft.util.StatCollector;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
|
@ -47,6 +48,11 @@ public class GuiOreMagnet extends GuiContainer{
|
||||||
int i = this.magnet.getEnergyScaled(83);
|
int i = this.magnet.getEnergyScaled(83);
|
||||||
drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i);
|
drawTexturedModalRect(this.guiLeft+43, this.guiTop+89-i, 176, 0, 16, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this.magnet.tank.getFluidAmount() > 0){
|
||||||
|
int i = this.magnet.getTankScaled(83);
|
||||||
|
drawTexturedModalRect(this.guiLeft+117, this.guiTop+89-i, 192, 0, 16, i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -60,5 +66,9 @@ public class GuiOreMagnet extends GuiContainer{
|
||||||
if(x >= guiLeft+117 && y >= guiTop+6 && x <= guiLeft+132 && y <= guiTop+88){
|
if(x >= guiLeft+117 && y >= guiTop+6 && x <= guiLeft+132 && y <= guiTop+88){
|
||||||
this.func_146283_a(Collections.singletonList(text2), x, y);
|
this.func_146283_a(Collections.singletonList(text2), x, y);
|
||||||
}
|
}
|
||||||
|
//TODO Upgrade Slot Joke
|
||||||
|
if(x >= guiLeft+70 && y >= guiTop+42 && x <= guiLeft+70+18 && y <= guiTop+42+18){
|
||||||
|
this.func_146283_a(Arrays.asList("@SuppressWarnings(\"unused\")", "This slot is currently unused. Ignore it."), x, y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,6 +7,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||||
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
import ellpeck.actuallyadditions.blocks.InitBlocks;
|
||||||
import ellpeck.actuallyadditions.network.sync.IPacketSyncerToClient;
|
import ellpeck.actuallyadditions.network.sync.IPacketSyncerToClient;
|
||||||
import ellpeck.actuallyadditions.network.sync.PacketSyncerToClient;
|
import ellpeck.actuallyadditions.network.sync.PacketSyncerToClient;
|
||||||
|
import ellpeck.actuallyadditions.util.WorldUtil;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
@ -17,12 +18,23 @@ import net.minecraftforge.oredict.OreDictionary;
|
||||||
|
|
||||||
public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler, IPacketSyncerToClient{
|
public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEnergyReceiver, IFluidHandler, IPacketSyncerToClient{
|
||||||
|
|
||||||
public EnergyStorage storage = new EnergyStorage(40000);
|
public static final int SLOT_OIL_INPUT = 0;
|
||||||
public FluidTank tank = new FluidTank(8*FluidContainerRegistry.BUCKET_VOLUME);
|
public static final int SLOT_OIL_OUTPUT = 1;
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public static final int SLOT_UPGRADE = 2;
|
||||||
|
|
||||||
|
public EnergyStorage storage = new EnergyStorage(2000000);
|
||||||
|
private int lastEnergy;
|
||||||
|
|
||||||
|
public FluidTank tank = new FluidTank(16*FluidContainerRegistry.BUCKET_VOLUME);
|
||||||
|
private int lastTankAmount;
|
||||||
|
|
||||||
private int currentWorkTimer;
|
private int currentWorkTimer;
|
||||||
|
|
||||||
private static final int MAX_WORK_TIMER = 30;
|
private int maxWorkTimer = 15;
|
||||||
private static final int RANGE = 5;
|
private int range = 10;
|
||||||
|
private int oilUsePerTick = 50;
|
||||||
|
private int energyUsePerTick = 400;
|
||||||
|
|
||||||
public TileEntityOreMagnet(){
|
public TileEntityOreMagnet(){
|
||||||
super(3, "oreMagnet");
|
super(3, "oreMagnet");
|
||||||
|
@ -33,54 +45,77 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne
|
||||||
public void updateEntity(){
|
public void updateEntity(){
|
||||||
if(!worldObj.isRemote){
|
if(!worldObj.isRemote){
|
||||||
|
|
||||||
if(this.currentWorkTimer > 0){
|
if(this.storage.getEnergyStored() >= this.energyUsePerTick && this.tank.getFluid() != null && this.tank.getFluid().getFluid() == InitBlocks.fluidOil && this.tank.getFluidAmount() >= this.oilUsePerTick && !worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)){
|
||||||
currentWorkTimer--;
|
if(this.currentWorkTimer > 0){
|
||||||
|
currentWorkTimer--;
|
||||||
|
|
||||||
if(currentWorkTimer <= 0){
|
if(currentWorkTimer <= 0){
|
||||||
int x = MathHelper.getRandomIntegerInRange(worldObj.rand, -RANGE, RANGE);
|
int x = MathHelper.getRandomIntegerInRange(worldObj.rand, -range, range);
|
||||||
int z = MathHelper.getRandomIntegerInRange(worldObj.rand, -RANGE, RANGE);
|
int z = MathHelper.getRandomIntegerInRange(worldObj.rand, -range, range);
|
||||||
//Can the block at the top be replaced?
|
//Can the block at the top be replaced?
|
||||||
for(int toPlaceY = 0; toPlaceY < 5; toPlaceY++){
|
for(int toPlaceY = 0; toPlaceY < 5; toPlaceY++){
|
||||||
if(worldObj.isAirBlock(xCoord+x, yCoord+toPlaceY, zCoord+z) || worldObj.getBlock(xCoord+x, yCoord+toPlaceY, zCoord+z).isReplaceable(worldObj, xCoord+x, yCoord+toPlaceY, zCoord+z)){
|
if(worldObj.isAirBlock(xCoord+x, yCoord+toPlaceY, zCoord+z) || worldObj.getBlock(xCoord+x, yCoord+toPlaceY, zCoord+z).isReplaceable(worldObj, xCoord+x, yCoord+toPlaceY, zCoord+z)){
|
||||||
//Find the first available block
|
//Find the first available block
|
||||||
for(int y = this.yCoord-1; y > 0; y--){
|
for(int y = this.yCoord-1; y > 0; y--){
|
||||||
Block block = worldObj.getBlock(xCoord+x, y, zCoord+z);
|
Block block = worldObj.getBlock(xCoord+x, y, zCoord+z);
|
||||||
int meta = worldObj.getBlockMetadata(xCoord+x, y, zCoord+z);
|
int meta = worldObj.getBlockMetadata(xCoord+x, y, zCoord+z);
|
||||||
|
|
||||||
int[] oreIDs = OreDictionary.getOreIDs(new ItemStack(block, 1, meta));
|
int[] oreIDs = OreDictionary.getOreIDs(new ItemStack(block, 1, meta));
|
||||||
for(int ID : oreIDs){
|
for(int ID : oreIDs){
|
||||||
String oreName = OreDictionary.getOreName(ID);
|
String oreName = OreDictionary.getOreName(ID);
|
||||||
//Is the block an ore according to the OreDictionary?
|
//Is the block an ore according to the OreDictionary?
|
||||||
if(oreName.substring(0, 3).equals("ore")){
|
if(oreName.substring(0, 3).equals("ore")){
|
||||||
//Remove the Block
|
//Remove the Block
|
||||||
worldObj.setBlockToAir(xCoord+x, y, zCoord+z);
|
worldObj.setBlockToAir(xCoord+x, y, zCoord+z);
|
||||||
worldObj.playAuxSFX(2001, xCoord+x, y, zCoord+z, Block.getIdFromBlock(block)+(meta << 12));
|
worldObj.playAuxSFX(2001, xCoord+x, y, zCoord+z, Block.getIdFromBlock(block)+(meta << 12));
|
||||||
|
|
||||||
//Set the Block at the Top again
|
//Set the Block at the Top again
|
||||||
worldObj.setBlock(xCoord+x, yCoord+toPlaceY, zCoord+z, block, meta, 2);
|
worldObj.setBlock(xCoord+x, yCoord+toPlaceY, zCoord+z, block, meta, 2);
|
||||||
worldObj.playSoundEffect((double)xCoord+x+0.5D, (double)yCoord+toPlaceY+0.5D, (double)zCoord+z+0.5D, block.stepSound.func_150496_b(), (block.stepSound.getVolume()+1.0F)/2.0F, block.stepSound.getPitch()*0.8F);
|
worldObj.playSoundEffect((double)xCoord+x+0.5D, (double)yCoord+toPlaceY+0.5D, (double)zCoord+z+0.5D, block.stepSound.func_150496_b(), (block.stepSound.getVolume()+1.0F)/2.0F, block.stepSound.getPitch()*0.8F);
|
||||||
|
|
||||||
return;
|
//Extract oil
|
||||||
|
this.tank.drain(this.oilUsePerTick, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else this.currentWorkTimer = maxWorkTimer+MathHelper.getRandomIntegerInRange(worldObj.rand, 0, maxWorkTimer);
|
||||||
|
|
||||||
|
//Extract energy
|
||||||
|
this.storage.extractEnergy(this.energyUsePerTick, false);
|
||||||
}
|
}
|
||||||
else this.currentWorkTimer = MathHelper.getRandomIntegerInRange(worldObj.rand, MAX_WORK_TIMER, MAX_WORK_TIMER*5);
|
|
||||||
|
//Update Clients
|
||||||
|
if(this.lastEnergy != this.storage.getEnergyStored() || this.lastTankAmount != this.tank.getFluidAmount()){
|
||||||
|
this.lastEnergy = this.storage.getEnergyStored();
|
||||||
|
this.lastTankAmount = this.tank.getFluidAmount();
|
||||||
|
this.sendUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Empty Oil Bucket
|
||||||
|
WorldUtil.emptyBucket(this.tank, this.slots, SLOT_OIL_INPUT, SLOT_OIL_OUTPUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public int getEnergyScaled(int i){
|
public int getEnergyScaled(int i){
|
||||||
return this.storage.getEnergyStored()*i/this.storage.getMaxEnergyStored();
|
return this.storage.getEnergyStored() * i / this.storage.getMaxEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public int getTankScaled(int i){
|
||||||
|
return this.tank.getFluidAmount() * i / this.tank.getCapacity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToNBT(NBTTagCompound compound){
|
public void writeToNBT(NBTTagCompound compound){
|
||||||
this.storage.writeToNBT(compound);
|
this.storage.writeToNBT(compound);
|
||||||
this.tank.writeToNBT(compound);
|
this.tank.writeToNBT(compound);
|
||||||
|
compound.setInteger("CurrentWorkTimer", this.currentWorkTimer);
|
||||||
super.writeToNBT(compound);
|
super.writeToNBT(compound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,13 +123,13 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne
|
||||||
public void readFromNBT(NBTTagCompound compound){
|
public void readFromNBT(NBTTagCompound compound){
|
||||||
this.storage.readFromNBT(compound);
|
this.storage.readFromNBT(compound);
|
||||||
this.tank.readFromNBT(compound);
|
this.tank.readFromNBT(compound);
|
||||||
|
this.currentWorkTimer = compound.getInteger("CurrentWorkTimer");
|
||||||
super.readFromNBT(compound);
|
super.readFromNBT(compound);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isItemValidForSlot(int i, ItemStack stack){
|
public boolean isItemValidForSlot(int i, ItemStack stack){
|
||||||
return false;
|
return FluidContainerRegistry.containsFluid(stack, new FluidStack(InitBlocks.fluidOil, 1)) && i == SLOT_OIL_INPUT;
|
||||||
//TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -104,8 +139,7 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canExtractItem(int slot, ItemStack stack, int side){
|
public boolean canExtractItem(int slot, ItemStack stack, int side){
|
||||||
return false;
|
return slot == SLOT_OIL_OUTPUT;
|
||||||
//TODO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -161,13 +195,16 @@ public class TileEntityOreMagnet extends TileEntityInventoryBase implements IEne
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getValues(){
|
public int[] getValues(){
|
||||||
//TODO
|
return new int[]{this.storage.getEnergyStored(), this.tank.getFluidAmount(), this.tank.getFluid() == null ? -1 : this.tank.getFluid().getFluidID()};
|
||||||
return new int[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setValues(int[] values){
|
public void setValues(int[] values){
|
||||||
//TODO
|
this.storage.setEnergyStored(values[0]);
|
||||||
|
if(values[2] != -1){
|
||||||
|
this.tank.setFluid(new FluidStack(FluidRegistry.getFluid(values[2]), values[1]));
|
||||||
|
}
|
||||||
|
else this.tank.setFluid(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue