/* * This file is part of Matter Overdrive * Copyright (c) 2015., Simeon Radivoev, All rights reserved. * * Matter Overdrive is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Matter Overdrive is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Matter Overdrive. If not, see <http://www.gnu.org/licenses>. */ package matteroverdrive.machines.fusionReactorController.components; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; 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 li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Context; import matteroverdrive.api.inventory.UpgradeTypes; import matteroverdrive.data.Inventory; import matteroverdrive.machines.MachineComponentAbstract; import matteroverdrive.machines.MachineNBTCategory; import matteroverdrive.machines.fusionReactorController.TileEntityMachineFusionReactorController; import net.minecraft.entity.EntityLivingBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import java.util.Arrays; import java.util.EnumSet; /** * Created by Simeon on 7/21/2015. */ @Optional.InterfaceList({ @Optional.Interface(modid = "ComputerCraft", iface = "dan200.computercraft.api.peripheral.IPeripheral") }) public class ComponentComputers extends MachineComponentAbstract<TileEntityMachineFusionReactorController> implements IPeripheral { private String[] methodNames = new String[] { "getStatus", "isValid", "getEnergyGenerated", "getMatterUsed", "getEnergyStored", "getMatterStored" }; private String peripheralName = "mo_fusion_reactor_controller"; public ComponentComputers(TileEntityMachineFusionReactorController machine) { super(machine); } //region Computer Methods private Object[] callMethod(int method, Object[] args) { switch (method) { case 0: return computerGetStatus(args); case 1: return computerIsValid(args); case 2: return computerGetEnergyGenerated(args); case 3: return computerGetMatterUsed(args); case 4: return computerGetEnergyStored(args); case 5: return computerGetMatterStored(args); default: throw new IllegalArgumentException("Invalid method id"); } } private Object[] computerGetStatus(Object[] args) { return new Object[]{machine.getMonitorInfo()}; } private Object[] computerIsValid(Object[] args) { return new Object[]{machine.isValidStructure()}; } private Object[] computerGetEnergyGenerated(Object[] args) { return new Object[]{machine.getEnergyPerTick()}; } private Object[] computerGetMatterUsed(Object[] args) { return new Object[]{machine.getMatterDrainPerTick()}; } private Object[] computerGetEnergyStored(Object[] args) {return new Object[]{machine.getEnergyStored(ForgeDirection.UNKNOWN)};} private Object[] computerGetMatterStored(Object[] args) { return new Object[]{machine.getMatterStored()}; } //endregion //region ComputerCraft @Override @Optional.Method(modid = "ComputerCraft") public String getType() { return peripheralName; } @Override @Optional.Method(modid = "ComputerCraft") public String[] getMethodNames() { return methodNames; } @Override @Optional.Method(modid = "ComputerCraft") public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { try { return callMethod(method, arguments); } catch (Exception e) { throw new LuaException(e.getMessage()); } } @Override @Optional.Method(modid = "ComputerCraft") public void attach(IComputerAccess computer) { } @Override @Optional.Method(modid = "ComputerCraft") public void detach(IComputerAccess computer) { } @Override @Optional.Method(modid = "ComputerCraft") public boolean equals(IPeripheral other) { return false; } //endregion //region Open Computers @Optional.Method(modid = "OpenComputers") public String[] methods() { return methodNames; } @Optional.Method(modid = "OpenComputers") public Object[] invoke(String method, Context context, Arguments args) throws Exception { int methodId = Arrays.asList(methodNames).indexOf(method); if (methodId == -1) { throw new RuntimeException("The method " + method + " does not exist"); } return callMethod(methodId, args.toArray()); } @Optional.Method(modid = "OpenComputers") public String getComponentName() { return peripheralName; } //endregion //region Component Functions @Override public void readFromNBT(NBTTagCompound nbt, EnumSet<MachineNBTCategory> categories) { } @Override public void writeToNBT(NBTTagCompound nbt, EnumSet<MachineNBTCategory> categories, boolean toDisk) { } @Override public void registerSlots(Inventory inventory) { } @Override public void update(TileEntityMachineFusionReactorController machine) { } @Override public boolean isAffectedByUpgrade(UpgradeTypes type) { return false; } @Override public boolean isActive() { return false; } @Override public void onActiveChange(TileEntityMachineFusionReactorController machine) { } @Override public void onAwake(TileEntityMachineFusionReactorController machine, Side side) { } @Override public void onPlaced(World world, EntityLivingBase entityLiving, TileEntityMachineFusionReactorController machine) { } //endregion }