Implement new computer framework in primary machines
This commit is contained in:
parent
a062ea5e9e
commit
a94c13edc7
7 changed files with 110 additions and 90 deletions
|
@ -12,5 +12,5 @@ public interface IComputerIntegration extends IInventory, IPeripheral
|
||||||
{
|
{
|
||||||
public String[] getMethods();
|
public String[] getMethods();
|
||||||
|
|
||||||
public Object[] invoke(String method, Object[] args) throws Exception;
|
public Object[] invoke(int method, Object[] args) throws Exception;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import li.cil.oc.api.prefab.ManagedEnvironment;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,7 +61,7 @@ public class OCDriver extends DriverTileEntity
|
||||||
@Override
|
@Override
|
||||||
public Object[] invoke(String method, Context context, Arguments args) throws Exception
|
public Object[] invoke(String method, Context context, Arguments args) throws Exception
|
||||||
{
|
{
|
||||||
return computerTile.invoke(method, args.toArray());
|
return computerTile.invoke(Arrays.asList(methods()).indexOf(method), args.toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,23 +1,12 @@
|
||||||
package mekanism.common.tile;
|
package mekanism.common.tile;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.EnumColor;
|
import mekanism.api.EnumColor;
|
||||||
import mekanism.api.Range4D;
|
import mekanism.api.Range4D;
|
||||||
import mekanism.api.gas.Gas;
|
import mekanism.api.gas.*;
|
||||||
import mekanism.api.gas.GasStack;
|
|
||||||
import mekanism.api.gas.GasTank;
|
|
||||||
import mekanism.api.gas.IGasHandler;
|
|
||||||
import mekanism.api.gas.ITubeConnection;
|
|
||||||
import mekanism.api.transmitters.TransmissionType;
|
import mekanism.api.transmitters.TransmissionType;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.*;
|
||||||
import mekanism.common.MekanismBlocks;
|
|
||||||
import mekanism.common.MekanismItems;
|
|
||||||
import mekanism.common.SideData;
|
|
||||||
import mekanism.common.Upgrade;
|
|
||||||
import mekanism.common.base.IFactory.RecipeType;
|
import mekanism.common.base.IFactory.RecipeType;
|
||||||
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
||||||
import mekanism.common.recipe.RecipeHandler;
|
import mekanism.common.recipe.RecipeHandler;
|
||||||
|
@ -36,10 +25,8 @@ import mekanism.common.util.StatUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
import cpw.mods.fml.common.Optional.Method;
|
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
import java.util.ArrayList;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
|
||||||
|
|
||||||
public abstract class TileEntityAdvancedElectricMachine<RECIPE extends AdvancedMachineRecipe<RECIPE>> extends TileEntityBasicMachine<AdvancedMachineInput, ItemStackOutput, RECIPE> implements IGasHandler, ITubeConnection
|
public abstract class TileEntityAdvancedElectricMachine<RECIPE extends AdvancedMachineRecipe<RECIPE>> extends TileEntityBasicMachine<AdvancedMachineInput, ItemStackOutput, RECIPE> implements IGasHandler, ITubeConnection
|
||||||
{
|
{
|
||||||
|
@ -437,16 +424,16 @@ public abstract class TileEntityAdvancedElectricMachine<RECIPE extends AdvancedM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] methods = new String[] {"getStored", "getSecondaryStored", "getProgress", "isActive", "facing", "canOperate", "getMaxEnergy", "getEnergyNeeded"};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public String[] getMethods()
|
||||||
public String[] getMethodNames()
|
|
||||||
{
|
{
|
||||||
return new String[] {"getStored", "getSecondaryStored", "getProgress", "isActive", "facing", "canOperate", "getMaxEnergy", "getEnergyNeeded"};
|
return methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public Object[] invoke(int method, Object[] arguments) throws Exception
|
||||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException
|
|
||||||
{
|
{
|
||||||
switch(method)
|
switch(method)
|
||||||
{
|
{
|
||||||
|
@ -467,8 +454,7 @@ public abstract class TileEntityAdvancedElectricMachine<RECIPE extends AdvancedM
|
||||||
case 7:
|
case 7:
|
||||||
return new Object[] {maxEnergy-getEnergy()};
|
return new Object[] {maxEnergy-getEnergy()};
|
||||||
default:
|
default:
|
||||||
Mekanism.logger.error("Attempted to call unknown method with computer ID " + computer.getID());
|
throw new NoSuchMethodException();
|
||||||
return new Object[] {"Unknown command."};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
package mekanism.common.tile;
|
package mekanism.common.tile;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.Optional.Interface;
|
||||||
|
import cpw.mods.fml.common.Optional.Method;
|
||||||
|
import dan200.computercraft.api.lua.ILuaContext;
|
||||||
|
import dan200.computercraft.api.lua.LuaException;
|
||||||
|
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||||
|
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.MekanismConfig.general;
|
import mekanism.api.MekanismConfig.general;
|
||||||
import mekanism.api.Range4D;
|
import mekanism.api.Range4D;
|
||||||
import mekanism.api.transmitters.TransmissionType;
|
import mekanism.api.transmitters.TransmissionType;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.Upgrade;
|
import mekanism.common.Upgrade;
|
||||||
import mekanism.common.base.IEjector;
|
import mekanism.common.base.*;
|
||||||
import mekanism.common.base.IElectricMachine;
|
import mekanism.common.integration.IComputerIntegration;
|
||||||
import mekanism.common.base.IRedstoneControl;
|
|
||||||
import mekanism.common.base.ISideConfiguration;
|
|
||||||
import mekanism.common.base.IUpgradeTile;
|
|
||||||
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
||||||
import mekanism.common.recipe.inputs.MachineInput;
|
import mekanism.common.recipe.inputs.MachineInput;
|
||||||
import mekanism.common.recipe.machines.MachineRecipe;
|
import mekanism.common.recipe.machines.MachineRecipe;
|
||||||
|
@ -27,13 +26,12 @@ import mekanism.common.util.MekanismUtils;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
import cpw.mods.fml.common.Optional.Interface;
|
|
||||||
import cpw.mods.fml.common.Optional.Method;
|
import java.util.ArrayList;
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
import java.util.EnumSet;
|
||||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
|
||||||
|
|
||||||
@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "ComputerCraft")
|
@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "ComputerCraft")
|
||||||
public abstract class TileEntityBasicMachine<INPUT extends MachineInput<INPUT>, OUTPUT extends MachineOutput<OUTPUT>, RECIPE extends MachineRecipe<INPUT, OUTPUT, RECIPE>> extends TileEntityNoisyElectricBlock implements IElectricMachine<INPUT, OUTPUT, RECIPE>, IPeripheral, ISideConfiguration, IUpgradeTile, IRedstoneControl
|
public abstract class TileEntityBasicMachine<INPUT extends MachineInput<INPUT>, OUTPUT extends MachineOutput<OUTPUT>, RECIPE extends MachineRecipe<INPUT, OUTPUT, RECIPE>> extends TileEntityNoisyElectricBlock implements IElectricMachine<INPUT, OUTPUT, RECIPE>, IComputerIntegration, ISideConfiguration, IUpgradeTile, IRedstoneControl
|
||||||
{
|
{
|
||||||
/** How much energy this machine uses per tick, un-upgraded. */
|
/** How much energy this machine uses per tick, un-upgraded. */
|
||||||
public double BASE_ENERGY_PER_TICK;
|
public double BASE_ENERGY_PER_TICK;
|
||||||
|
@ -244,6 +242,26 @@ public abstract class TileEntityBasicMachine<INPUT extends MachineInput<INPUT>,
|
||||||
return this == other;
|
return this == other;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Method(modid = "ComputerCraft")
|
||||||
|
public String[] getMethodNames()
|
||||||
|
{
|
||||||
|
return getMethods();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Method(modid = "ComputerCraft")
|
||||||
|
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return invoke(method, arguments);
|
||||||
|
} catch(NoSuchMethodException e) {
|
||||||
|
return new Object[] {"Unknown command."};
|
||||||
|
} finally {
|
||||||
|
return new Object[] {"Error."};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canSetFacing(int facing)
|
public boolean canSetFacing(int facing)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package mekanism.common.tile;
|
package mekanism.common.tile;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import mekanism.api.EnumColor;
|
import mekanism.api.EnumColor;
|
||||||
import mekanism.api.transmitters.TransmissionType;
|
import mekanism.api.transmitters.TransmissionType;
|
||||||
import mekanism.common.MekanismItems;
|
import mekanism.common.MekanismItems;
|
||||||
|
@ -18,10 +16,8 @@ import mekanism.common.util.InventoryUtils;
|
||||||
import mekanism.common.util.MekanismUtils;
|
import mekanism.common.util.MekanismUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import cpw.mods.fml.common.Optional.Method;
|
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
import java.util.Map;
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
|
||||||
|
|
||||||
public abstract class TileEntityChanceMachine<RECIPE extends ChanceMachineRecipe<RECIPE>> extends TileEntityBasicMachine<ItemStackInput, ChanceOutput, RECIPE>
|
public abstract class TileEntityChanceMachine<RECIPE extends ChanceMachineRecipe<RECIPE>> extends TileEntityBasicMachine<ItemStackInput, ChanceOutput, RECIPE>
|
||||||
{
|
{
|
||||||
|
@ -163,17 +159,35 @@ public abstract class TileEntityChanceMachine<RECIPE extends ChanceMachineRecipe
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] methods = new String[] {"getStored", "getProgress", "isActive", "facing", "canOperate", "getMaxEnergy", "getEnergyNeeded"};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public String[] getMethods()
|
||||||
public String[] getMethodNames()
|
|
||||||
{
|
{
|
||||||
return null;
|
return methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public Object[] invoke(int method, Object[] arguments) throws Exception
|
||||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException
|
|
||||||
{
|
{
|
||||||
return null;
|
switch(method)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return new Object[] {getEnergy()};
|
||||||
|
case 1:
|
||||||
|
return new Object[] {operatingTicks};
|
||||||
|
case 2:
|
||||||
|
return new Object[] {isActive};
|
||||||
|
case 3:
|
||||||
|
return new Object[] {facing};
|
||||||
|
case 4:
|
||||||
|
return new Object[] {canOperate(getRecipe())};
|
||||||
|
case 5:
|
||||||
|
return new Object[] {getMaxEnergy()};
|
||||||
|
case 6:
|
||||||
|
return new Object[] {getMaxEnergy()-getEnergy()};
|
||||||
|
default:
|
||||||
|
throw new NoSuchMethodException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
package mekanism.common.tile;
|
package mekanism.common.tile;
|
||||||
|
|
||||||
import cpw.mods.fml.common.Optional.Method;
|
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.EnumColor;
|
import mekanism.api.EnumColor;
|
||||||
import mekanism.api.Range4D;
|
import mekanism.api.Range4D;
|
||||||
|
@ -226,16 +222,16 @@ public abstract class TileEntityElectricMachine<RECIPE extends BasicMachineRecip
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] methods = new String[] {"getStored", "getProgress", "isActive", "facing", "canOperate", "getMaxEnergy", "getEnergyNeeded"};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public String[] getMethods()
|
||||||
public String[] getMethodNames()
|
|
||||||
{
|
{
|
||||||
return new String[] {"getStored", "getProgress", "isActive", "facing", "canOperate", "getMaxEnergy", "getEnergyNeeded"};
|
return methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public Object[] invoke(int method, Object[] arguments) throws Exception
|
||||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException
|
|
||||||
{
|
{
|
||||||
switch(method)
|
switch(method)
|
||||||
{
|
{
|
||||||
|
@ -254,7 +250,7 @@ public abstract class TileEntityElectricMachine<RECIPE extends BasicMachineRecip
|
||||||
case 6:
|
case 6:
|
||||||
return new Object[] {getMaxEnergy()-getEnergy()};
|
return new Object[] {getMaxEnergy()-getEnergy()};
|
||||||
default:
|
default:
|
||||||
return new Object[] {"Unknown command."};
|
throw new NoSuchMethodException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,9 @@
|
||||||
package mekanism.common.tile;
|
package mekanism.common.tile;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
|
||||||
import mekanism.api.EnumColor;
|
import mekanism.api.EnumColor;
|
||||||
import mekanism.api.MekanismConfig.usage;
|
import mekanism.api.MekanismConfig.usage;
|
||||||
import mekanism.api.gas.Gas;
|
import mekanism.api.gas.*;
|
||||||
import mekanism.api.gas.GasRegistry;
|
|
||||||
import mekanism.api.gas.GasStack;
|
|
||||||
import mekanism.api.gas.GasTank;
|
|
||||||
import mekanism.api.gas.IGasHandler;
|
|
||||||
import mekanism.api.gas.ITubeConnection;
|
|
||||||
import mekanism.api.transmitters.TransmissionType;
|
import mekanism.api.transmitters.TransmissionType;
|
||||||
import mekanism.common.SideData;
|
import mekanism.common.SideData;
|
||||||
import mekanism.common.Upgrade;
|
import mekanism.common.Upgrade;
|
||||||
|
@ -34,19 +24,12 @@ import mekanism.common.util.LangUtils;
|
||||||
import mekanism.common.util.MekanismUtils;
|
import mekanism.common.util.MekanismUtils;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.*;
|
||||||
import net.minecraftforge.fluids.FluidRegistry;
|
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import java.util.ArrayList;
|
||||||
import net.minecraftforge.fluids.FluidTank;
|
import java.util.Map;
|
||||||
import net.minecraftforge.fluids.FluidTankInfo;
|
|
||||||
import net.minecraftforge.fluids.IFluidHandler;
|
|
||||||
import cpw.mods.fml.common.Optional.Method;
|
|
||||||
import dan200.computercraft.api.lua.ILuaContext;
|
|
||||||
import dan200.computercraft.api.lua.LuaException;
|
|
||||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
|
||||||
|
|
||||||
public class TileEntityPRC extends TileEntityBasicMachine<PressurizedInput, PressurizedOutput, PressurizedRecipe> implements IFluidHandler, IGasHandler, ITubeConnection, ISustainedData, ITankManager
|
public class TileEntityPRC extends TileEntityBasicMachine<PressurizedInput, PressurizedOutput, PressurizedRecipe> implements IFluidHandler, IGasHandler, ITubeConnection, ISustainedData, ITankManager
|
||||||
{
|
{
|
||||||
|
@ -310,18 +293,40 @@ public class TileEntityPRC extends TileEntityBasicMachine<PressurizedInput, Pres
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] methods = new String[] {"getStored", "getProgress", "isActive", "facing", "canOperate", "getMaxEnergy", "getEnergyNeeded", "getFluidStored", "getGasStored"};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public String[] getMethods()
|
||||||
public String[] getMethodNames()
|
|
||||||
{
|
{
|
||||||
return null;
|
return methods;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Method(modid = "ComputerCraft")
|
public Object[] invoke(int method, Object[] arguments) throws Exception
|
||||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException
|
|
||||||
{
|
{
|
||||||
return null;
|
switch(method)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return new Object[] {getEnergy()};
|
||||||
|
case 1:
|
||||||
|
return new Object[] {operatingTicks};
|
||||||
|
case 2:
|
||||||
|
return new Object[] {isActive};
|
||||||
|
case 3:
|
||||||
|
return new Object[] {facing};
|
||||||
|
case 4:
|
||||||
|
return new Object[] {canOperate(getRecipe())};
|
||||||
|
case 5:
|
||||||
|
return new Object[] {getMaxEnergy()};
|
||||||
|
case 6:
|
||||||
|
return new Object[] {getMaxEnergy()-getEnergy()};
|
||||||
|
case 7:
|
||||||
|
return new Object[] {inputFluidTank.getFluidAmount()};
|
||||||
|
case 8:
|
||||||
|
return new Object[] {inputGasTank.getStored()};
|
||||||
|
default:
|
||||||
|
throw new NoSuchMethodException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue