Entangloporters work perfectly!

This commit is contained in:
aidancbrady 2016-03-04 21:58:13 -05:00
parent f8f8dfa737
commit 668643e663
9 changed files with 97 additions and 241 deletions

View file

@ -66,7 +66,7 @@ public final class Tier
ADVANCED(8000000, 3200),
ELITE(32000000, 12800),
ULTIMATE(128000000, 51200),
CREATIVE(Integer.MAX_VALUE, Integer.MAX_VALUE);
CREATIVE(Double.MAX_VALUE, Double.MAX_VALUE);
public double maxEnergy;
private double baseMaxEnergy;

View file

@ -18,14 +18,17 @@ public class InventoryFrequency extends Frequency
public static final double MAX_ENERGY = 1000000;
public double storedEnergy;
public FluidTank storedFluid = new FluidTank(1000);
public GasTank storedGas = new GasTank(1000);
public FluidTank storedFluid;
public GasTank storedGas;
public ItemStack storedItem;
public double temperature;
public InventoryFrequency(String n, String o)
{
super(n, o);
storedFluid = new FluidTank(1000);
storedGas = new GasTank(1000);
}
public InventoryFrequency(NBTTagCompound nbtTags)
@ -45,12 +48,12 @@ public class InventoryFrequency extends Frequency
nbtTags.setDouble("storedEnergy", storedEnergy);
if(storedFluid != null)
if(storedFluid.getFluid() != null)
{
nbtTags.setTag("storedFluid", storedFluid.writeToNBT(new NBTTagCompound()));
}
if(storedGas != null)
if(storedGas.getGas() != null)
{
nbtTags.setTag("storedGas", storedGas.write(new NBTTagCompound()));
}
@ -68,6 +71,9 @@ public class InventoryFrequency extends Frequency
{
super.read(nbtTags);
storedFluid = new FluidTank(1000);
storedGas = new GasTank(1000);
storedEnergy = nbtTags.getDouble("storedEnergy");
if(nbtTags.hasKey("storedFluid"))
@ -123,6 +129,9 @@ public class InventoryFrequency extends Frequency
{
super.read(dataStream);
storedFluid = new FluidTank(1000);
storedGas = new GasTank(1000);
storedEnergy = dataStream.readDouble();
if(dataStream.readBoolean())

View file

@ -1,130 +0,0 @@
package mekanism.common.content.entangloporter;
import mekanism.api.energy.IStrictEnergyStorage;
import mekanism.api.gas.Gas;
import mekanism.api.gas.GasStack;
import mekanism.api.gas.GasTank;
import mekanism.api.gas.IGasHandler;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
public class SharedInventory implements IStrictEnergyStorage, IFluidHandler, IGasHandler
{
public String name;
public double storedEnergy;
public double MAX_ENERGY = 1000;
public FluidTank storedFluid;
public GasTank storedGas;
public ItemStack storedItem;
public SharedInventory(String freq)
{
name = freq;
storedEnergy = 0;
storedFluid = new FluidTank(1000);
storedGas = new GasTank(1000);
storedItem = null;
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
return storedFluid.fill(resource, doFill);
}
@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{
if(resource.isFluidEqual(storedFluid.getFluid()))
{
return storedFluid.drain(resource.amount, doDrain);
}
return null;
}
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{
return storedFluid.drain(maxDrain, doDrain);
}
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
return storedFluid.getFluid() == null || fluid == storedFluid.getFluid().getFluid();
}
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
return storedFluid.getFluid() == null || fluid == storedFluid.getFluid().getFluid();
}
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{
return new FluidTankInfo[]{new FluidTankInfo(storedFluid)};
}
@Override
public int receiveGas(ForgeDirection side, GasStack stack, boolean doTransfer)
{
return storedGas.receive(stack, doTransfer);
}
@Override
public int receiveGas(ForgeDirection side, GasStack stack)
{
return receiveGas(side, stack, true);
}
@Override
public GasStack drawGas(ForgeDirection side, int amount, boolean doTransfer)
{
return storedGas.draw(amount, doTransfer);
}
@Override
public GasStack drawGas(ForgeDirection side, int amount)
{
return drawGas(side, amount, true);
}
@Override
public boolean canReceiveGas(ForgeDirection side, Gas type)
{
return storedGas.getGasType() == null || type == storedGas.getGasType();
}
@Override
public boolean canDrawGas(ForgeDirection side, Gas type)
{
return storedGas.getGasType() == null || type == storedGas.getGasType();
}
@Override
public double getEnergy()
{
return storedEnergy;
}
@Override
public void setEnergy(double energy)
{
storedEnergy = Math.max(0, Math.min(energy, MAX_ENERGY));
}
@Override
public double getMaxEnergy()
{
return MAX_ENERGY;
}
}

View file

@ -1,66 +0,0 @@
package mekanism.common.content.entangloporter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import mekanism.api.gas.GasRegistry;
import mekanism.api.gas.GasStack;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
public class SharedInventoryManager
{
public static HashMap<String, SharedInventory> inventories = new HashMap<String, SharedInventory>();
public static SharedInventory getInventory(String frequency)
{
if(frequency.length() <= 0)
{
return null;
}
SharedInventory inv = inventories.get(frequency);
if(inv == null)
{
inv = new SharedInventory(frequency);
inventories.put(frequency, inv);
}
if(frequency.startsWith("creative."))
{
Iterator<String> creativeFreqs = Arrays.asList(frequency.substring(9).split("\\.")).iterator();
while(creativeFreqs.hasNext())
{
String type = creativeFreqs.next();
if(type.equals("energy"))
{
inv.MAX_ENERGY = Integer.MAX_VALUE;
inv.setEnergy(Integer.MAX_VALUE);
}
else if(type.equals("fluid") && creativeFreqs.hasNext())
{
String fluidType = creativeFreqs.next();
if(FluidRegistry.isFluidRegistered(fluidType))
{
inv.storedFluid.setCapacity(Integer.MAX_VALUE);
inv.storedFluid.setFluid(new FluidStack(FluidRegistry.getFluid(fluidType), Integer.MAX_VALUE));
}
}
else if(type.equals("gas") && creativeFreqs.hasNext())
{
String gasType = creativeFreqs.next();
if(GasRegistry.containsGas(gasType))
{
inv.storedGas.setMaxGas(Integer.MAX_VALUE);
inv.storedGas.setGas(new GasStack(GasRegistry.getGas(gasType), Integer.MAX_VALUE));
}
}
}
}
return inv;
}
}

View file

@ -214,7 +214,7 @@ public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, IE
@Override
public void setEnergy(ItemStack itemStack, double amount)
{
if(getEnergyCubeTier(itemStack) == EnergyCubeTier.CREATIVE && amount != Integer.MAX_VALUE)
if(getEnergyCubeTier(itemStack) == EnergyCubeTier.CREATIVE && amount != Double.MAX_VALUE)
{
return;
}

View file

@ -238,7 +238,7 @@ public class TileEntityEnergyCube extends TileEntityElectricBlock implements ICo
@Override
public void setEnergy(double energy)
{
if(tier == EnergyCubeTier.CREATIVE && energy != Integer.MAX_VALUE)
if(tier == EnergyCubeTier.CREATIVE && energy != Double.MAX_VALUE)
{
return;
}

View file

@ -7,7 +7,6 @@ import java.util.EnumSet;
import java.util.List;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.api.IHeatTransfer;
import mekanism.api.gas.Gas;
import mekanism.api.gas.GasStack;
@ -15,7 +14,6 @@ import mekanism.api.gas.IGasHandler;
import mekanism.api.transmitters.TransmissionType;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.SideData;
import mekanism.common.SideData.IOState;
import mekanism.common.base.IEjector;
import mekanism.common.base.ISideConfiguration;
@ -28,6 +26,7 @@ import mekanism.common.tile.component.TileComponentConfig;
import mekanism.common.tile.component.TileComponentEjector;
import mekanism.common.util.CableUtils;
import mekanism.common.util.HeatUtils;
import mekanism.common.util.InventoryUtils;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.PipeUtils;
import net.minecraft.item.ItemStack;
@ -77,10 +76,14 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
inventory = new ItemStack[0];
configComponent.getOutputs(TransmissionType.ITEM).get(2).availableSlots = new int[] {0};
configComponent.getOutputs(TransmissionType.FLUID).get(2).availableSlots = new int[] {0};
configComponent.getOutputs(TransmissionType.GAS).get(2).availableSlots = new int[] {1};
ejectorComponent = new TileComponentEjector(this);
ejectorComponent.setOutputData(TransmissionType.ITEM, new SideData("dummy", EnumColor.GREY, new int[] {0}));
ejectorComponent.setOutputData(TransmissionType.FLUID, new SideData("dummy", EnumColor.GREY, new int[] {0}));
ejectorComponent.setOutputData(TransmissionType.GAS, new SideData("dummy", EnumColor.GREY, new int[] {1}));
ejectorComponent.setOutputData(TransmissionType.ITEM, configComponent.getOutputs(TransmissionType.ITEM).get(2));
ejectorComponent.setOutputData(TransmissionType.FLUID, configComponent.getOutputs(TransmissionType.FLUID).get(2));
ejectorComponent.setOutputData(TransmissionType.GAS, configComponent.getOutputs(TransmissionType.GAS).get(2));
}
@Override
@ -102,25 +105,42 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
lastEnvironmentLoss = loss[1];
FrequencyManager manager = getManager(frequency);
Frequency lastFreq = frequency;
if(manager != null)
{
if(frequency != null && !frequency.valid)
{
frequency = (InventoryFrequency)manager.validateFrequency(owner, Coord4D.get(this), frequency);
markDirty();
}
if(frequency != null)
{
frequency = (InventoryFrequency)manager.update(owner, Coord4D.get(this), frequency);
if(frequency == null)
{
markDirty();
}
}
}
else {
frequency = null;
if(lastFreq != null)
{
markDirty();
}
}
}
}
private boolean hasFrequency()
{
return frequency != null && frequency.valid;
}
@Override
public void invalidate()
{
@ -176,7 +196,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
return;
}
FrequencyManager manager = getManager(new Frequency(name, null).setPublic(publicFreq));
FrequencyManager manager = getManager(new InventoryFrequency(name, null).setPublic(publicFreq));
manager.deactivate(Coord4D.get(this));
for(Frequency freq : manager.getFrequencies())
@ -253,7 +273,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
String freq = PacketHandler.readString(dataStream);
boolean isPublic = dataStream.readBoolean();
FrequencyManager manager = getManager(new Frequency(freq, null).setPublic(isPublic));
FrequencyManager manager = getManager(new InventoryFrequency(freq, null).setPublic(isPublic));
if(manager != null)
{
@ -292,14 +312,14 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
for(int i = 0; i < amount; i++)
{
publicCache.add(new Frequency(dataStream));
publicCache.add(new InventoryFrequency(dataStream));
}
amount = dataStream.readInt();
for(int i = 0; i < amount; i++)
{
privateCache.add(new Frequency(dataStream));
privateCache.add(new InventoryFrequency(dataStream));
}
}
@ -336,7 +356,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
freq.write(data);
}
FrequencyManager manager = getManager(new Frequency(null, null).setPublic(false));
FrequencyManager manager = getManager(new InventoryFrequency(null, null).setPublic(false));
if(manager != null)
{
@ -357,31 +377,31 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public EnumSet<ForgeDirection> getOutputtingSides()
{
return frequency == null ? nothing : configComponent.getSidesForData(TransmissionType.ENERGY, facing, 2);
return !hasFrequency() ? nothing : configComponent.getSidesForData(TransmissionType.ENERGY, facing, 2);
}
@Override
public EnumSet<ForgeDirection> getConsumingSides()
{
return frequency == null ? nothing : configComponent.getSidesForData(TransmissionType.ENERGY, facing, 1);
return !hasFrequency() ? nothing : configComponent.getSidesForData(TransmissionType.ENERGY, facing, 1);
}
@Override
public double getMaxOutput()
{
return frequency == null ? 0 : InventoryFrequency.MAX_ENERGY;
return !hasFrequency() ? 0 : InventoryFrequency.MAX_ENERGY;
}
@Override
public double getEnergy()
{
return frequency == null ? 0 : frequency.storedEnergy;
return !hasFrequency() ? 0 : frequency.storedEnergy;
}
@Override
public void setEnergy(double energy)
{
if(frequency != null)
if(hasFrequency())
{
frequency.storedEnergy = Math.min(InventoryFrequency.MAX_ENERGY, energy);
}
@ -390,19 +410,19 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public double getMaxEnergy()
{
return frequency == null ? 0 : frequency.MAX_ENERGY;
return !hasFrequency() ? 0 : frequency.MAX_ENERGY;
}
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
{
return frequency == null ? 0 : frequency.storedFluid.fill(resource, doFill);
return !hasFrequency() ? 0 : frequency.storedFluid.fill(resource, doFill);
}
@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
{
if(frequency != null && resource.isFluidEqual(frequency.storedFluid.getFluid()))
if(hasFrequency() && resource.isFluidEqual(frequency.storedFluid.getFluid()))
{
return frequency.storedFluid.drain(resource.amount, doDrain);
}
@ -413,7 +433,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
{
if(frequency != null)
if(hasFrequency())
{
return frequency.storedFluid.drain(maxDrain, doDrain);
}
@ -424,7 +444,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public boolean canFill(ForgeDirection from, Fluid fluid)
{
if(frequency != null && configComponent.getOutput(TransmissionType.FLUID, from.ordinal(), facing).ioState == IOState.INPUT)
if(hasFrequency() && configComponent.getOutput(TransmissionType.FLUID, from.ordinal(), facing).ioState == IOState.INPUT)
{
return frequency.storedFluid.getFluid() == null || fluid == frequency.storedFluid.getFluid().getFluid();
}
@ -435,7 +455,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public boolean canDrain(ForgeDirection from, Fluid fluid)
{
if(frequency != null && configComponent.getOutput(TransmissionType.FLUID, from.ordinal(), facing).ioState == IOState.OUTPUT)
if(hasFrequency() && configComponent.getOutput(TransmissionType.FLUID, from.ordinal(), facing).ioState == IOState.OUTPUT)
{
return frequency.storedFluid.getFluid() == null || fluid == frequency.storedFluid.getFluid().getFluid();
}
@ -446,7 +466,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection from)
{
if(frequency != null)
if(hasFrequency())
{
if(configComponent.getOutput(TransmissionType.FLUID, from.ordinal(), facing).ioState != IOState.OFF)
{
@ -460,7 +480,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public int receiveGas(ForgeDirection side, GasStack stack, boolean doTransfer)
{
return frequency == null ? 0 : frequency.storedGas.receive(stack, doTransfer);
return !hasFrequency() ? 0 : frequency.storedGas.receive(stack, doTransfer);
}
@Override
@ -472,7 +492,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public GasStack drawGas(ForgeDirection side, int amount, boolean doTransfer)
{
return frequency == null ? null : frequency.storedGas.draw(amount, doTransfer);
return !hasFrequency() ? null : frequency.storedGas.draw(amount, doTransfer);
}
@Override
@ -484,7 +504,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public boolean canReceiveGas(ForgeDirection side, Gas type)
{
if(frequency != null && configComponent.getOutput(TransmissionType.GAS, side.ordinal(), facing).ioState == IOState.INPUT)
if(hasFrequency() && configComponent.getOutput(TransmissionType.GAS, side.ordinal(), facing).ioState == IOState.INPUT)
{
return frequency.storedGas.getGasType() == null || type == frequency.storedGas.getGasType();
}
@ -495,7 +515,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public boolean canDrawGas(ForgeDirection side, Gas type)
{
if(frequency != null && configComponent.getOutput(TransmissionType.GAS, side.ordinal(), facing).ioState == IOState.OUTPUT)
if(hasFrequency() && configComponent.getOutput(TransmissionType.GAS, side.ordinal(), facing).ioState == IOState.OUTPUT)
{
return frequency.storedGas.getGasType() == null || type == frequency.storedGas.getGasType();
}
@ -518,13 +538,13 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public ItemStack getStackInSlot(int slotID)
{
return frequency != null && slotID == 0 ? frequency.storedItem : null;
return hasFrequency() && slotID == 0 ? frequency.storedItem : null;
}
@Override
public void setInventorySlotContents(int slotID, ItemStack itemstack)
{
if(frequency != null && slotID == 0)
if(hasFrequency() && slotID == 0)
{
frequency.storedItem = itemstack;
@ -538,7 +558,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public double getTemp()
{
return frequency != null ? frequency.temperature : 0;
return hasFrequency() ? frequency.temperature : 0;
}
@Override
@ -568,20 +588,20 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
@Override
public double applyTemperatureChange()
{
if(frequency != null)
if(hasFrequency())
{
frequency.temperature += heatToAbsorb;
}
heatToAbsorb = 0;
return frequency != null ? frequency.temperature : 0;
return hasFrequency() ? frequency.temperature : 0;
}
@Override
public boolean canConnectHeat(ForgeDirection side)
{
return frequency != null && configComponent.getOutput(TransmissionType.HEAT, side.ordinal(), facing).ioState != IOState.OFF;
return hasFrequency() && configComponent.getOutput(TransmissionType.HEAT, side.ordinal(), facing).ioState != IOState.OFF;
}
@Override
@ -589,7 +609,7 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
{
TileEntity adj = Coord4D.get(this).getFromSide(side).getTileEntity(worldObj);
if(configComponent.getOutput(TransmissionType.HEAT, side.ordinal(), facing).ioState == IOState.INPUT)
if(hasFrequency() && configComponent.getOutput(TransmissionType.HEAT, side.ordinal(), facing).ioState == IOState.INPUT)
{
if(adj instanceof IHeatTransfer)
{
@ -600,10 +620,33 @@ public class TileEntityQuantumEntangloporter extends TileEntityElectricBlock imp
return null;
}
@Override
public boolean canInsertItem(int slotID, ItemStack itemstack, int side)
{
return hasFrequency() && configComponent.getOutput(TransmissionType.ITEM, side, facing).ioState == IOState.INPUT;
}
@Override
public int[] getAccessibleSlotsFromSide(int side)
{
if(hasFrequency() && configComponent.getOutput(TransmissionType.ITEM, side, facing).ioState != IOState.OFF)
{
return new int[] {0};
}
return InventoryUtils.EMPTY;
}
@Override
public boolean canExtractItem(int slotID, ItemStack itemstack, int side)
{
return hasFrequency() && configComponent.getOutput(TransmissionType.ITEM, side, facing).ioState == IOState.OUTPUT;
}
@Override
public Object[] getTanks()
{
if(frequency == null)
if(!hasFrequency())
{
return null;
}

View file

@ -179,12 +179,12 @@ public class TileComponentEjector implements ITileComponent, IEjector
{
int slotID = sideData.get(TransmissionType.ITEM).availableSlots[index];
if(tileEntity.inventory[slotID] == null)
if(tileEntity.getStackInSlot(slotID) == null)
{
continue;
}
ItemStack stack = tileEntity.inventory[slotID];
ItemStack stack = tileEntity.getStackInSlot(slotID);
List<ForgeDirection> outputs = getTrackedOutputs(TransmissionType.ITEM, index, outputSides);
for(ForgeDirection side : outputs)
@ -217,7 +217,7 @@ public class TileComponentEjector implements ITileComponent, IEjector
}
}
tileEntity.inventory[slotID] = stack;
tileEntity.setInventorySlotContents(slotID, stack);
tileEntity.markDirty();
}

View file

@ -57,7 +57,7 @@ public final class PipeUtils
{
TileEntity acceptor = Coord4D.get(tileEntity).getFromSide(orientation).getTileEntity(tileEntity.getWorldObj());
if(acceptor instanceof IFluidHandler && !(acceptor instanceof ITransmitterTile))
if(acceptor instanceof IFluidHandler)
{
acceptors[orientation.ordinal()] = (IFluidHandler)acceptor;
}