From df16ab1b999f53017816e93fb07d9ac2a9e3aa86 Mon Sep 17 00:00:00 2001 From: cyberbit Date: Fri, 12 Jul 2024 03:58:24 +0000 Subject: [PATCH 1/8] =?UTF-8?q?=F0=9F=93=A6=20initial=20work=20for=20Powah?= =?UTF-8?q?,=20add=20energy=20cell=20and=20furnator=20adapters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/telem/lib/input.lua | 18 ++- .../lib/input/powah/BasePowahInputAdapter.lua | 124 ++++++++++++++++++ 2 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 src/telem/lib/input/powah/BasePowahInputAdapter.lua diff --git a/src/telem/lib/input.lua b/src/telem/lib/input.lua index 1ae8311..a93cf5d 100644 --- a/src/telem/lib/input.lua +++ b/src/telem/lib/input.lua @@ -1,5 +1,6 @@ local function requireInput(target) return require ('telem.lib.input.' .. target) end local function requireMek(target) return requireInput('mekanism.' .. target) end +local function requirePowah(target) return requireInput('powah.' .. target) end return { helloWorld = requireInput('HelloWorldInputAdapter'), @@ -11,6 +12,13 @@ return { refinedStorage = requireInput('RefinedStorageInputAdapter'), meStorage = requireInput('MEStorageInputAdapter'), + -- communication + secureModem = requireInput('SecureModemInputAdapter'), + + advancedPeripherals = { + energyDetector = require 'telem.lib.input.advancedPeripherals.EnergyDetectorInputAdapter', + }, + mekanism = { -- machines apns = requireMek('AntiprotonicNucleosynthesizerInputAdapter'), @@ -88,10 +96,8 @@ return { qioDriveArray = requireMek('QIODriveArrayInputAdapter'), }, - advancedPeripherals = { - energyDetector = require 'telem.lib.input.advancedPeripherals.EnergyDetectorInputAdapter', - }, - - -- modem - secureModem = requireInput('SecureModemInputAdapter'), + powah = { + energyCell = requirePowah('EnergyCellInputAdapter'), + furnator = requirePowah('FurnatorInputAdapter'), + } } diff --git a/src/telem/lib/input/powah/BasePowahInputAdapter.lua b/src/telem/lib/input/powah/BasePowahInputAdapter.lua new file mode 100644 index 0000000..ea8025b --- /dev/null +++ b/src/telem/lib/input/powah/BasePowahInputAdapter.lua @@ -0,0 +1,124 @@ +local o = require 'telem.lib.ObjectModel' +local t = require 'telem.lib.util' +local fl = require 'telem.vendor'.fluent +local fn = fl.fn + +local InputAdapter = require 'telem.lib.InputAdapter' +local Metric = require 'telem.lib.Metric' +local MetricCollection = require 'telem.lib.MetricCollection' + +local BasePowahInputAdapter = o.class(InputAdapter) +BasePowahInputAdapter.type = 'BasePowahInputAdapter' + +function BasePowahInputAdapter:constructor (peripheralName, categories) + self:super('constructor') + + self.prefix = 'powah:' + + self.categories = categories or { 'basic' } + + ---@type table> + self.queries = {} + + ---@type cyberbit.Fluent[] + self.storageQueries = {} + + -- boot components + self:setBoot(function () + self.components = {} + + self:addComponentByPeripheralID(peripheralName) + end)() + + self:beforeRegister() + + self:register() +end + +function BasePowahInputAdapter:beforeRegister () + -- nothing by default, should be overridden by subclasses +end + +function BasePowahInputAdapter:register () + local allCategories = fl(self.queries):keys():result() + + if self.categories == '*' then + self.categories = allCategories + elseif type(self.categories) == 'table' then + self.categories = fl(self.categories):intersect(allCategories):result() + else + error('categories must be a list of categories or "*"') + end + + return self +end + +--- Adds queries for generic machines. +--- +--- Categories: basic +function BasePowahInputAdapter:withEnergyQueries () + self.queries.basic = self.queries.basic or {} + + self.queries.basic.energy = fn():call('getEnergy'):energy() + self.queries.basic.max_energy = fn():call('getMaxEnergy'):energy() + + return self +end + +local function queueHelper (results, index, query) + return function () + results[index] = Metric(query:metricable():result()) + end +end + +function BasePowahInputAdapter:read () + self:boot() + + local source, component = next(self.components) + + local tempMetrics = {} + local queue = {} + + -- execute single-metric queries from a queue + for _, category in ipairs(self.categories) do + for k, v in pairs(self.queries[category]) do + table.insert(queue, queueHelper( + tempMetrics, + #queue + 1, + v:from(component):with('name', self.prefix .. k):with('source', source) + )) + end + end + + parallel.waitForAll(table.unpack(queue)) + + -- execute storage queries, which may return multiple metrics + -- these have no category and are always included + for k, v in pairs(self.storageQueries) do + local tempResult = v:from(component):result() + + for _, metric in ipairs(tempResult) do + metric.name = 'storage:' .. metric.name + metric.source = source + + table.insert(tempMetrics, metric) + end + end + + return MetricCollection(table.unpack(tempMetrics)) +end + +------ Static Methods ------ + +function BasePowahInputAdapter.mintAdapter (type) + local adapter = o.class(BasePowahInputAdapter) + adapter.type = type + + function adapter:constructor (peripheralName, categories) + self:super('constructor', peripheralName, categories) + end + + return adapter +end + +return BasePowahInputAdapter \ No newline at end of file From d1d8d2fe06f1901366d576cabef889ec928dd153 Mon Sep 17 00:00:00 2001 From: cyberbit Date: Fri, 12 Jul 2024 03:59:03 +0000 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=93=A6=20add=20energy=20cell=20and=20?= =?UTF-8?q?furnator=20adapters=20(oops)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../input/powah/EnergyCellInputAdapter.lua | 19 ++++++++++++++ .../lib/input/powah/FurnatorInputAdapter.lua | 25 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/telem/lib/input/powah/EnergyCellInputAdapter.lua create mode 100644 src/telem/lib/input/powah/FurnatorInputAdapter.lua diff --git a/src/telem/lib/input/powah/EnergyCellInputAdapter.lua b/src/telem/lib/input/powah/EnergyCellInputAdapter.lua new file mode 100644 index 0000000..7da5bc7 --- /dev/null +++ b/src/telem/lib/input/powah/EnergyCellInputAdapter.lua @@ -0,0 +1,19 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.powah.BasePowahInputAdapter' + +local EnergyCellInputAdapter = base.mintAdapter('EnergyCellInputAdapter') + +function EnergyCellInputAdapter:beforeRegister () + self.prefix = 'powahcell:' + + self.queries = { + -- mixins cover everything + } + + self:withEnergyQueries() + + -- getName +end + +return EnergyCellInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/powah/FurnatorInputAdapter.lua b/src/telem/lib/input/powah/FurnatorInputAdapter.lua new file mode 100644 index 0000000..915176b --- /dev/null +++ b/src/telem/lib/input/powah/FurnatorInputAdapter.lua @@ -0,0 +1,25 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.powah.BasePowahInputAdapter' + +local FurnatorInputAdapter = base.mintAdapter('FurnatorInputAdapter') + +function FurnatorInputAdapter:beforeRegister () + self.prefix = 'powahfurnator:' + + self.queries = { + basic = { + burning = fn():call('isBurning'):toFlag(), + carbon = fn():call('getCarbon'), + } + } + + self:withEnergyQueries() + + -- TODO getInventory seems to always return nil + + -- getName + -- getInventory +end + +return FurnatorInputAdapter \ No newline at end of file From 3d1a86f68bdce638a4fac3907535ac0f33a88f12 Mon Sep 17 00:00:00 2001 From: cyberbit Date: Sat, 13 Jul 2024 00:15:43 +0000 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=93=A6=20add=20Powah=20adapters=20(cl?= =?UTF-8?q?oses=20#61)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/telem/lib/input.lua | 4 +++ .../lib/input/powah/FurnatorInputAdapter.lua | 2 +- .../lib/input/powah/MagmatorInputAdapter.lua | 26 ++++++++++++++++ .../lib/input/powah/ReactorInputAdapter.lua | 30 +++++++++++++++++++ .../input/powah/SolarPanelInputAdapter.lua | 21 +++++++++++++ .../powah/ThermoGeneratorInputAdapter.lua | 21 +++++++++++++ 6 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 src/telem/lib/input/powah/MagmatorInputAdapter.lua create mode 100644 src/telem/lib/input/powah/ReactorInputAdapter.lua create mode 100644 src/telem/lib/input/powah/SolarPanelInputAdapter.lua create mode 100644 src/telem/lib/input/powah/ThermoGeneratorInputAdapter.lua diff --git a/src/telem/lib/input.lua b/src/telem/lib/input.lua index a93cf5d..d97cc5d 100644 --- a/src/telem/lib/input.lua +++ b/src/telem/lib/input.lua @@ -99,5 +99,9 @@ return { powah = { energyCell = requirePowah('EnergyCellInputAdapter'), furnator = requirePowah('FurnatorInputAdapter'), + magmator = requirePowah('MagmatorInputAdapter'), + reactor = requirePowah('ReactorInputAdapter'), + solarPanel = requirePowah('SolarPanelInputAdapter'), + thermoGenerator = requirePowah('ThermoGeneratorInputAdapter'), } } diff --git a/src/telem/lib/input/powah/FurnatorInputAdapter.lua b/src/telem/lib/input/powah/FurnatorInputAdapter.lua index 915176b..8981d9e 100644 --- a/src/telem/lib/input/powah/FurnatorInputAdapter.lua +++ b/src/telem/lib/input/powah/FurnatorInputAdapter.lua @@ -10,7 +10,7 @@ function FurnatorInputAdapter:beforeRegister () self.queries = { basic = { burning = fn():call('isBurning'):toFlag(), - carbon = fn():call('getCarbon'), + carbon = fn():call('getCarbon'):with('unit', '%'), } } diff --git a/src/telem/lib/input/powah/MagmatorInputAdapter.lua b/src/telem/lib/input/powah/MagmatorInputAdapter.lua new file mode 100644 index 0000000..b3018ed --- /dev/null +++ b/src/telem/lib/input/powah/MagmatorInputAdapter.lua @@ -0,0 +1,26 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.powah.BasePowahInputAdapter' + +local MagmatorInputAdapter = base.mintAdapter('MagmatorInputAdapter') + +function MagmatorInputAdapter:beforeRegister () + self.prefix = 'powahmagmator:' + + self.queries = { + basic = { + burning = fn():call('isBurning'):toFlag(), + fluid = fn():call('getFluidInTank'):div(1000):fluid(), + fluid_capacity = fn():call('getTankCapacity'):div(1000):fluid(), + } + } + + self:withEnergyQueries() + + -- TODO getInventory seems to always return nil + + -- getName + -- getInventory +end + +return MagmatorInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/powah/ReactorInputAdapter.lua b/src/telem/lib/input/powah/ReactorInputAdapter.lua new file mode 100644 index 0000000..a5158a3 --- /dev/null +++ b/src/telem/lib/input/powah/ReactorInputAdapter.lua @@ -0,0 +1,30 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.powah.BasePowahInputAdapter' + +local ReactorInputAdapter = base.mintAdapter('ReactorInputAdapter') + +function ReactorInputAdapter:beforeRegister () + self.prefix = 'powahreactor:' + + self.queries = { + basic = { + running = fn():call('isRunning'):toFlag(), + fuel = fn():call('getFuel'):with('unit', '%'), + carbon = fn():call('getCarbon'):with('unit', '%'), + redstone = fn():call('getRedstone'):with('unit', '%'), + temperature = fn():call('getTemperature'):with('unit', '%'), + } + } + + self:withEnergyQueries() + + -- TODO getInventory* seems to always return nil + + -- getName + -- getInventoryUraninite + -- getInventoryRedstone + -- getInventoryCarbon +end + +return ReactorInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/powah/SolarPanelInputAdapter.lua b/src/telem/lib/input/powah/SolarPanelInputAdapter.lua new file mode 100644 index 0000000..667a3ca --- /dev/null +++ b/src/telem/lib/input/powah/SolarPanelInputAdapter.lua @@ -0,0 +1,21 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.powah.BasePowahInputAdapter' + +local SolarPanelInputAdapter = base.mintAdapter('SolarPanelInputAdapter') + +function SolarPanelInputAdapter:beforeRegister () + self.prefix = 'powahsolar:' + + self.queries = { + basic = { + sees_sky = fn():call('canSeeSky'):toFlag(), + } + } + + self:withEnergyQueries() + + -- getName +end + +return SolarPanelInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/powah/ThermoGeneratorInputAdapter.lua b/src/telem/lib/input/powah/ThermoGeneratorInputAdapter.lua new file mode 100644 index 0000000..9e89e68 --- /dev/null +++ b/src/telem/lib/input/powah/ThermoGeneratorInputAdapter.lua @@ -0,0 +1,21 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.powah.BasePowahInputAdapter' + +local ThermoGeneratorInputAdapter = base.mintAdapter('ThermoGeneratorInputAdapter') + +function ThermoGeneratorInputAdapter:beforeRegister () + self.prefix = 'powahthermo:' + + self.queries = { + basic = { + coolant = fn():call('getCoolantInTank'):div(1000):fluid(), + } + } + + self:withEnergyQueries() + + -- getName +end + +return ThermoGeneratorInputAdapter \ No newline at end of file From 8b1e06b3357d98db1886caedf5936efce0e094d4 Mon Sep 17 00:00:00 2001 From: cyberbit Date: Sun, 14 Jul 2024 22:54:29 +0000 Subject: [PATCH 4/8] =?UTF-8?q?=F0=9F=93=A6=20add=20BiggerReactors=20adapt?= =?UTF-8?q?ers=20(closes=20#58)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit leaving out heat exchanger for now because idk how it works --- src/telem/lib/input.lua | 6 + .../BaseBiggerReactorsInputAdapter.lua | 134 ++++++++++++++++++ .../biggerReactors/ReactorInputAdapter.lua | 60 ++++++++ .../biggerReactors/TurbineInputAdapter.lua | 37 +++++ 4 files changed, 237 insertions(+) create mode 100644 src/telem/lib/input/biggerReactors/BaseBiggerReactorsInputAdapter.lua create mode 100644 src/telem/lib/input/biggerReactors/ReactorInputAdapter.lua create mode 100644 src/telem/lib/input/biggerReactors/TurbineInputAdapter.lua diff --git a/src/telem/lib/input.lua b/src/telem/lib/input.lua index d97cc5d..0278f04 100644 --- a/src/telem/lib/input.lua +++ b/src/telem/lib/input.lua @@ -1,4 +1,5 @@ local function requireInput(target) return require ('telem.lib.input.' .. target) end +local function requireBiggerReactors(target) return requireInput('biggerReactors.' .. target) end local function requireMek(target) return requireInput('mekanism.' .. target) end local function requirePowah(target) return requireInput('powah.' .. target) end @@ -19,6 +20,11 @@ return { energyDetector = require 'telem.lib.input.advancedPeripherals.EnergyDetectorInputAdapter', }, + biggerReactors = { + reactor = requireBiggerReactors('ReactorInputAdapter'), + turbine = requireBiggerReactors('TurbineInputAdapter'), + }, + mekanism = { -- machines apns = requireMek('AntiprotonicNucleosynthesizerInputAdapter'), diff --git a/src/telem/lib/input/biggerReactors/BaseBiggerReactorsInputAdapter.lua b/src/telem/lib/input/biggerReactors/BaseBiggerReactorsInputAdapter.lua new file mode 100644 index 0000000..f1a8b5f --- /dev/null +++ b/src/telem/lib/input/biggerReactors/BaseBiggerReactorsInputAdapter.lua @@ -0,0 +1,134 @@ +local o = require 'telem.lib.ObjectModel' +local t = require 'telem.lib.util' +local fl = require 'telem.vendor'.fluent +local fn = fl.fn + +local InputAdapter = require 'telem.lib.InputAdapter' +local Metric = require 'telem.lib.Metric' +local MetricCollection = require 'telem.lib.MetricCollection' + +local BaseBiggerReactorsInputAdapter = o.class(InputAdapter) +BaseBiggerReactorsInputAdapter.type = 'BaseBiggerReactorsInputAdapter' + +function BaseBiggerReactorsInputAdapter:constructor (peripheralName, categories) + self:super('constructor') + + self.prefix = 'br:' + + self.categories = categories or { 'basic' } + + ---@type table> + self.queries = {} + + ---@type cyberbit.Fluent[] + self.storageQueries = {} + + -- boot components + self:setBoot(function () + self.components = {} + + self:addComponentByPeripheralID(peripheralName) + end)() + + self:beforeRegister() + + self:register() +end + +function BaseBiggerReactorsInputAdapter:beforeRegister () + -- nothing by default, should be overridden by subclasses +end + +function BaseBiggerReactorsInputAdapter:register () + local allCategories = fl(self.queries):keys():result() + + if self.categories == '*' then + self.categories = allCategories + elseif type(self.categories) == 'table' then + self.categories = fl(self.categories):intersect(allCategories):result() + else + error('categories must be a list of categories or "*"') + end + + return self +end + +function BaseBiggerReactorsInputAdapter:withGenericMachineQueries () + self.queries.basic = self.queries.basic or {} + + self.queries.basic.active = fn():call('active'):toFlag() + self.queries.basic.connected = fn():call('connected'):toFlag() + + return self +end + +function BaseBiggerReactorsInputAdapter:withGeneratorQueries () + self.queries.basic = self.queries.basic or {} + self.queries.energy = self.queries.energy or {} + + local battery = fn():call('battery') + + self.queries.basic.production_rate = battery:call('producedLastTick'):energyRate() + self.queries.energy.energy = battery:call('stored'):energy() + self.queries.energy.energy_capacity = battery:call('capacity'):energy() + + return self +end + +local function queueHelper (results, index, query) + return function () + results[index] = Metric(query:metricable():result()) + end +end + +function BaseBiggerReactorsInputAdapter:read () + self:boot() + + local source, component = next(self.components) + + local tempMetrics = {} + local queue = {} + + -- execute single-metric queries from a queue + for _, category in ipairs(self.categories) do + for k, v in pairs(self.queries[category]) do + table.insert(queue, queueHelper( + tempMetrics, + #queue + 1, + v:from(component):with('name', self.prefix .. k):with('source', source) + )) + end + end + + parallel.waitForAll(table.unpack(queue)) + + -- execute storage queries, which may return multiple metrics + -- these have no category and are always included + for k, v in pairs(self.storageQueries) do + local tempResult = v:from(component):result() + + for _, metric in ipairs(tempResult) do + metric.name = 'storage:' .. metric.name + metric.source = source + + table.insert(tempMetrics, metric) + end + end + + return MetricCollection(table.unpack(tempMetrics)) +end + +------ Static Methods ------ + +function BaseBiggerReactorsInputAdapter.mintAdapter (type) + local adapter = o.class(BaseBiggerReactorsInputAdapter) + adapter.type = type + + function adapter:constructor (peripheralName, categories) + self:super('constructor', peripheralName, categories) + end + + return adapter +end + +return BaseBiggerReactorsInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/biggerReactors/ReactorInputAdapter.lua b/src/telem/lib/input/biggerReactors/ReactorInputAdapter.lua new file mode 100644 index 0000000..0185244 --- /dev/null +++ b/src/telem/lib/input/biggerReactors/ReactorInputAdapter.lua @@ -0,0 +1,60 @@ +local t = require 'telem.lib.util' +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.biggerReactors.BaseBiggerReactorsInputAdapter' + +local ReactorInputAdapter = base.mintAdapter('ReactorInputAdapter') + +function ReactorInputAdapter:beforeRegister () + self.prefix = 'brreactor:' + + local _, component = next(self.components) + local supportsBattery = type(component.battery()) ~= 'nil' + local supportsCoolantTank = type(component.coolantTank()) ~= 'nil' + + local fuelTank = fn():call('fuelTank') + + self.queries = { + basic = { + burn_rate = fuelTank:call('burnedLastTick'):div(1000):fluidRate(), + ambient_temperature = fn():call('ambientTemperature'):temp(), + casing_temperature = fn():call('casingTemperature'):temp(), + fuel_temperature = fn():call('fuelTemperature'):temp(), + fuel_reactivity = fuelTank:call('fuelReactivity'), + }, + fuel = { + fuel = fuelTank:call('fuel'):div(1000):fluid(), + fuel_capacity = fuelTank:call('capacity'):div(1000):fluid(), + reactant = fuelTank:call('totalReactant'):div(1000):fluid(), + waste = fuelTank:call('waste'):div(1000):fluid(), + }, + formation = { + control_rods = fn():call('controlRodCount'), + }, + } + + self:withGenericMachineQueries() + + -- passive reactors + if supportsBattery then + self:withGeneratorQueries() + end + + -- active reactors + if supportsCoolantTank then + local coolantTank = fn():call('coolantTank') + + self.queries.basic.coolant_transition_rate = coolantTank:call('transitionedLastTick'):div(1000):fluidRate() + + self.queries.coolant = { + coolant_hot = coolantTank:call('hotFluidAmount'):div(1000):fluid(), + coolant_cold = coolantTank:call('coldFluidAmount'):div(1000):fluid(), + coolant_capacity = coolantTank:call('capacity'):div(1000):fluid(), + coolant_max_transition_rate = coolantTank:call('maxTransitionedLastTick'):div(1000):fluidRate(), + } + end + + -- getControlRod +end + +return ReactorInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/biggerReactors/TurbineInputAdapter.lua b/src/telem/lib/input/biggerReactors/TurbineInputAdapter.lua new file mode 100644 index 0000000..26930a2 --- /dev/null +++ b/src/telem/lib/input/biggerReactors/TurbineInputAdapter.lua @@ -0,0 +1,37 @@ +local t = require 'telem.lib.util' +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.biggerReactors.BaseBiggerReactorsInputAdapter' + +local TurbineInputAdapter = base.mintAdapter('TurbineInputAdapter') + +function TurbineInputAdapter:beforeRegister () + self.prefix = 'brturbine:' + + local fluidTank = fn():call('fluidTank') + local fluidInput = fluidTank:call('input') + local fluidOutput = fluidTank:call('output') + local rotor = fn():call('rotor') + + self.queries = { + basic = { + coil_engaged = fn():call('coilEngaged'):toFlag(), + flow_rate = fluidTank:call('flowLastTick'):div(1000):fluidRate(), + input = fluidInput:call('amount'):div(1000):fluid(), + output = fluidOutput:call('amount'):div(1000):fluid(), + rpm = rotor:call('RPM'):with('unit', 'RPM'), + efficiency = rotor:call('efficiencyLastTick'), + }, + fluid = { + nominal_flow_rate = fluidTank:call('nominalFlowRate'):div(1000):fluidRate(), + max_flow_rate = fluidTank:call('flowRateLimit'):div(1000):fluidRate(), + input_capacity = fluidInput:call('maxAmount'):div(1000):fluid(), + output_capacity = fluidOutput:call('maxAmount'):div(1000):fluid(), + }, + } + + self:withGenericMachineQueries() + :withGeneratorQueries() +end + +return TurbineInputAdapter \ No newline at end of file From d39b536f92499fd7a6cc5e39499bf32d0c7cf411 Mon Sep 17 00:00:00 2001 From: cyberbit Date: Mon, 15 Jul 2024 04:10:50 +0000 Subject: [PATCH 5/8] =?UTF-8?q?=F0=9F=93=A6=20migrate=20ME=20and=20RS=20ad?= =?UTF-8?q?apters=20under=20Advanced=20Peripherals,=20update=20to=20fluent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/telem/lib/input.lua | 23 +++++--- src/telem/lib/input/MEStorageInputAdapter.lua | 46 --------------- .../lib/input/RefinedStorageInputAdapter.lua | 45 -------------- .../BaseAdvancedPeripheralsInputAdapter.lua | 59 ++++++++++++++++++- .../EnergyDetectorInputAdapter.lua | 25 +------- .../MEBridgeInputAdapter.lua | 41 +++++++++++++ .../RSBridgeInputAdapter.lua | 33 +++++++++++ 7 files changed, 149 insertions(+), 123 deletions(-) delete mode 100644 src/telem/lib/input/MEStorageInputAdapter.lua delete mode 100644 src/telem/lib/input/RefinedStorageInputAdapter.lua create mode 100644 src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua create mode 100644 src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua diff --git a/src/telem/lib/input.lua b/src/telem/lib/input.lua index 0278f04..0883fb7 100644 --- a/src/telem/lib/input.lua +++ b/src/telem/lib/input.lua @@ -1,28 +1,29 @@ local function requireInput(target) return require ('telem.lib.input.' .. target) end -local function requireBiggerReactors(target) return requireInput('biggerReactors.' .. target) end +local function requireAP(target) return requireInput('advancedPeripherals.' .. target) end +local function requireBR(target) return requireInput('biggerReactors.' .. target) end local function requireMek(target) return requireInput('mekanism.' .. target) end local function requirePowah(target) return requireInput('powah.' .. target) end -return { +local export = { helloWorld = requireInput('HelloWorldInputAdapter'), custom = requireInput('CustomInputAdapter'), -- storage itemStorage = requireInput('ItemStorageInputAdapter'), fluidStorage = requireInput('FluidStorageInputAdapter'), - refinedStorage = requireInput('RefinedStorageInputAdapter'), - meStorage = requireInput('MEStorageInputAdapter'), -- communication secureModem = requireInput('SecureModemInputAdapter'), advancedPeripherals = { - energyDetector = require 'telem.lib.input.advancedPeripherals.EnergyDetectorInputAdapter', + energyDetector = requireAP('EnergyDetectorInputAdapter'), + meBridge = requireAP('MEBridgeInputAdapter'), + rsBridge = requireAP('RSBridgeInputAdapter'), }, biggerReactors = { - reactor = requireBiggerReactors('ReactorInputAdapter'), - turbine = requireBiggerReactors('TurbineInputAdapter'), + reactor = requireBR('ReactorInputAdapter'), + turbine = requireBR('TurbineInputAdapter'), }, mekanism = { @@ -109,5 +110,11 @@ return { reactor = requirePowah('ReactorInputAdapter'), solarPanel = requirePowah('SolarPanelInputAdapter'), thermoGenerator = requirePowah('ThermoGeneratorInputAdapter'), - } + }, } + +-- aliases that will be deprecated in the future +export.refinedStorage = export.advancedPeripherals.rsBridge +export.meStorage = export.advancedPeripherals.meBridge + +return export \ No newline at end of file diff --git a/src/telem/lib/input/MEStorageInputAdapter.lua b/src/telem/lib/input/MEStorageInputAdapter.lua deleted file mode 100644 index 6685936..0000000 --- a/src/telem/lib/input/MEStorageInputAdapter.lua +++ /dev/null @@ -1,46 +0,0 @@ -local o = require 'telem.lib.ObjectModel' -local t = require 'telem.lib.util' - -local InputAdapter = require 'telem.lib.InputAdapter' -local Metric = require 'telem.lib.Metric' -local MetricCollection = require 'telem.lib.MetricCollection' - -local MEStorageInputAdapter = o.class(InputAdapter) -MEStorageInputAdapter.type = 'MEStorageInputAdapter' - -function MEStorageInputAdapter:constructor (peripheralName) - self:super('constructor') - - -- TODO this will be a configurable feature later - self.prefix = 'storage:' - - - -- boot components - self:setBoot(function () - self.components = {} - - self:addComponentByPeripheralID(peripheralName) - end)() -end - -function MEStorageInputAdapter:read () - self:boot() - - local source, storage = next(self.components) - local items = storage.listItems() - local fluids = storage.listFluid() - - local metrics = MetricCollection() - - for _,v in pairs(items) do - if v then metrics:insert(Metric({ name = self.prefix .. v.name, value = v.amount, unit = 'item', source = source })) end - end - - for _,v in pairs(fluids) do - if v then metrics:insert(Metric({ name = self.prefix .. v.name, value = v.amount / 1000, unit = 'B', source = source })) end - end - - return metrics -end - -return MEStorageInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/RefinedStorageInputAdapter.lua b/src/telem/lib/input/RefinedStorageInputAdapter.lua deleted file mode 100644 index 734df8d..0000000 --- a/src/telem/lib/input/RefinedStorageInputAdapter.lua +++ /dev/null @@ -1,45 +0,0 @@ -local o = require 'telem.lib.ObjectModel' -local t = require 'telem.lib.util' - -local InputAdapter = require 'telem.lib.InputAdapter' -local Metric = require 'telem.lib.Metric' -local MetricCollection = require 'telem.lib.MetricCollection' - -local RefinedStorageInputAdapter = o.class(InputAdapter) -RefinedStorageInputAdapter.type = 'RefinedStorageInputAdapter' - -function RefinedStorageInputAdapter:constructor (peripheralName) - self:super('constructor') - - -- TODO this will be a configurable feature later - self.prefix = 'storage:' - - -- boot components - self:setBoot(function () - self.components = {} - - self:addComponentByPeripheralID(peripheralName) - end)() -end - -function RefinedStorageInputAdapter:read () - self:boot() - - local source, storage = next(self.components) - local items = storage.listItems() - local fluids = storage.listFluids() - - local metrics = MetricCollection() - - for _,v in pairs(items) do - if v then metrics:insert(Metric({ name = self.prefix .. v.name, value = v.amount, unit = 'item', source = source })) end - end - - for _,v in pairs(fluids) do - if v then metrics:insert(Metric({ name = self.prefix .. v.name, value = v.amount / 1000, unit = 'B', source = source })) end - end - - return metrics -end - -return RefinedStorageInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua index b94c7bf..2cbe5f9 100644 --- a/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua @@ -1,4 +1,6 @@ local o = require 'telem.lib.ObjectModel' +local fl = require 'telem.vendor'.fluent +local fn = fl.fn local InputAdapter = require 'telem.lib.InputAdapter' local Metric = require 'telem.lib.Metric' @@ -7,19 +9,47 @@ local MetricCollection = require 'telem.lib.MetricCollection' local BaseAdvancedPeripheralsInputAdapter = o.class(InputAdapter) BaseAdvancedPeripheralsInputAdapter.type = 'BaseAdvancedPeripheralsInputAdapter' -function BaseAdvancedPeripheralsInputAdapter:constructor (peripheralName) +function BaseAdvancedPeripheralsInputAdapter:constructor (peripheralName, categories) self:super('constructor') self.prefix = 'ap:' + self.categories = categories or { 'basic' } + + ---@type table> self.queries = {} + ---@type cyberbit.Fluent[] + self.storageQueries = {} + -- boot components self:setBoot(function () self.components = {} self:addComponentByPeripheralID(peripheralName) end)() + + self:beforeRegister() + + self:register() +end + +function BaseAdvancedPeripheralsInputAdapter:beforeRegister () + -- nothing by default, should be overridden by subclasses +end + +function BaseAdvancedPeripheralsInputAdapter:register () + local allCategories = fl(self.queries):keys():result() + + if self.categories == '*' then + self.categories = allCategories + elseif type(self.categories) == 'table' then + self.categories = fl(self.categories):intersect(allCategories):result() + else + error('categories must be a list of categories or "*"') + end + + return self end local function queueHelper (results, index, query) @@ -30,12 +60,13 @@ end function BaseAdvancedPeripheralsInputAdapter:read () self:boot() - + local source, component = next(self.components) local tempMetrics = {} local queue = {} + -- execute single-metric queries from a queue for _, category in ipairs(self.categories) do for k, v in pairs(self.queries[category]) do table.insert(queue, queueHelper( @@ -48,7 +79,31 @@ function BaseAdvancedPeripheralsInputAdapter:read () parallel.waitForAll(table.unpack(queue)) + -- execute storage queries, which may return multiple metrics + -- these have no category and are always included + for k, v in pairs(self.storageQueries) do + local tempResult = v:from(component):result() + + for _, metric in ipairs(tempResult) do + metric.name = 'storage:' .. metric.name + metric.source = source + + table.insert(tempMetrics, metric) + end + end + return MetricCollection(table.unpack(tempMetrics)) end +function BaseAdvancedPeripheralsInputAdapter.mintAdapter (type) + local adapter = o.class(BaseAdvancedPeripheralsInputAdapter) + adapter.type = type + + function adapter:constructor (peripheralName, categories) + self:super('constructor', peripheralName, categories) + end + + return adapter +end + return BaseAdvancedPeripheralsInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua index 2f8c50d..b451de3 100644 --- a/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua @@ -1,31 +1,12 @@ -local o = require 'telem.lib.ObjectModel' -local t = require 'telem.lib.util' local fn = require 'telem.vendor'.fluent.fn -local BaseAdvancedPeripheralsInputAdapter = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' -local EnergyDetectorInputAdapter = o.class(BaseAdvancedPeripheralsInputAdapter) -EnergyDetectorInputAdapter.type = 'EnergyDetectorInputAdapter' +local EnergyDetectorInputAdapter = base.mintAdapter('EnergyDetectorInputAdapter') -function EnergyDetectorInputAdapter:constructor (peripheralName, categories) - self:super('constructor', peripheralName) - - -- TODO this will be a configurable feature later +function EnergyDetectorInputAdapter:beforeRegister () self.prefix = 'apenergy:' - -- TODO make these constants - local allCategories = { - 'basic', - } - - if not categories then - self.categories = { 'basic' } - elseif categories == '*' then - self.categories = allCategories - else - self.categories = categories - end - self.queries = { basic = { transfer_rate = fn():call('getTransferRate'):energyRate(), diff --git a/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua new file mode 100644 index 0000000..ae1db8e --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua @@ -0,0 +1,41 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' +local Metric = require 'telem.lib.Metric' + +local MEBridgeInputAdapter = base.mintAdapter('MEBridgeInputAdapter') + +function MEBridgeInputAdapter:beforeRegister () + self.prefix = 'apmebridge:' + + self.queries = { + basic = {} + } + + self.storageQueries = { + -- items + fn() + :call('listItems') + :mapValues(function (v) + return Metric{ name = v.name, value = v.amount, unit = 'item' } + end), + + -- fluid + fn() + :call('listFluid') + :mapValues(function (v) + return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } + end), + + -- TODO test this when applied mekanistics not installed + -- gas + fn() + :call('listGas') + :mapValues(function (v) + return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } + end), + } + +end + +return MEBridgeInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua new file mode 100644 index 0000000..e389bb6 --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua @@ -0,0 +1,33 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' +local Metric = require 'telem.lib.Metric' + +local RSBridgeInputAdapter = base.mintAdapter('RSBridgeInputAdapter') + +function RSBridgeInputAdapter:beforeRegister () + self.prefix = 'aprsbridge:' + + self.queries = { + basic = {} + } + + self.storageQueries = { + -- items + fn() + :call('listItems') + :mapValues(function (v) + return Metric{ name = v.name, value = v.amount, unit = 'item' } + end), + + -- fluids + fn() + :call('listFluids') + :mapValues(function (v) + return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } + end), + } + +end + +return RSBridgeInputAdapter \ No newline at end of file From 3c04739d8c7946b8f9a6f60402becdcdf04fd42b Mon Sep 17 00:00:00 2001 From: cyberbit Date: Tue, 16 Jul 2024 02:28:13 +0000 Subject: [PATCH 6/8] =?UTF-8?q?=F0=9F=93=A6=20update=20ME=20and=20RS=20bri?= =?UTF-8?q?dge=20adapters=20with=20non-storage=20metrics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MEBridgeInputAdapter.lua | 45 ++++++++++++------- .../RSBridgeInputAdapter.lua | 33 +++++++++----- src/telem/vendor/fluent-entrypoint.lua | 7 +++ 3 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua index ae1db8e..c140eb3 100644 --- a/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua @@ -9,31 +9,44 @@ function MEBridgeInputAdapter:beforeRegister () self.prefix = 'apmebridge:' self.queries = { - basic = {} + basic = { + energy_usage = fn():call('getEnergyUsage'):aeToFe():energyRate(), + item_storage_used = fn():call('getUsedItemStorage'):with('unit', 'bytes'), + fluid_storage_used = fn():call('getUsedFluidStorage'):with('unit', 'bytes'), + cell_count = fn():call('listCells'):count(), + }, + energy = { + energy = fn():call('getEnergyStorage'):aeToFe():energy(), + max_energy = fn():call('getMaxEnergyStorage'):aeToFe():energy(), + }, + storage = { + item_storage_capacity = fn():call('getTotalItemStorage'):with('unit', 'bytes'), + item_storage_available = fn():call('getAvailableItemStorage'):with('unit', 'bytes'), + fluid_storage_capacity = fn():call('getTotalFluidStorage'):with('unit', 'bytes'), + fluid_storage_available = fn():call('getAvailableFluidStorage'):with('unit', 'bytes'), + }, } + -- getCraftingCPUs + -- listCraftableItems + -- listCraftableFluid + self.storageQueries = { -- items - fn() - :call('listItems') - :mapValues(function (v) - return Metric{ name = v.name, value = v.amount, unit = 'item' } - end), + fn():call('listItems'):mapValues(function (v) + return Metric{ name = v.name, value = v.amount, unit = 'item' } + end), -- fluid - fn() - :call('listFluid') - :mapValues(function (v) - return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } - end), + fn():call('listFluid'):mapValues(function (v) + return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } + end), -- TODO test this when applied mekanistics not installed -- gas - fn() - :call('listGas') - :mapValues(function (v) - return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } - end), + fn():call('listGas'):mapValues(function (v) + return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } + end), } end diff --git a/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua index e389bb6..c3a280b 100644 --- a/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua @@ -9,25 +9,34 @@ function RSBridgeInputAdapter:beforeRegister () self.prefix = 'aprsbridge:' self.queries = { - basic = {} + basic = { + energy_usage = fn():call('getEnergyUsage'):energyRate(), + }, + energy = { + energy = fn():call('getEnergyStorage'):energy(), + max_energy = fn():call('getMaxEnergyStorage'):energy(), + }, + storage = { + item_disk_capacity = fn():call('getMaxItemDiskStorage'):with('unit', 'item'), + item_external_capacity = fn():call('getMaxItemExternalStorage'):with('unit', 'item'), + fluid_disk_capacity = fn():call('getMaxFluidDiskStorage'):div(1000):with('unit', 'B'), + + -- TODO not sure what is compatible with this + fluid_external_capacity = fn():call('getMaxFluidExternalStorage'):div(1000):with('unit', 'B'), + }, } self.storageQueries = { -- items - fn() - :call('listItems') - :mapValues(function (v) - return Metric{ name = v.name, value = v.amount, unit = 'item' } - end), + fn():call('listItems'):mapValues(function (v) + return Metric{ name = v.name, value = v.amount, unit = 'item' } + end), -- fluids - fn() - :call('listFluids') - :mapValues(function (v) - return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } - end), + fn():call('listFluids'):mapValues(function (v) + return Metric{ name = v.name, value = v.amount / 1000, unit = 'B' } + end), } - end return RSBridgeInputAdapter \ No newline at end of file diff --git a/src/telem/vendor/fluent-entrypoint.lua b/src/telem/vendor/fluent-entrypoint.lua index 6faec2c..6c6311f 100644 --- a/src/telem/vendor/fluent-entrypoint.lua +++ b/src/telem/vendor/fluent-entrypoint.lua @@ -28,6 +28,13 @@ function Fluent:joulesToFE () end) end +--- Convert the value from Applied Energy to Forge Energy/RF. +function Fluent:aeToFe () + return self:_enqueue(function (this) + this.value = this.value * 2 + end) +end + --- Set unit to fluid unit, 'B'. function Fluent:fluid() return self:with('unit', 'B') From e2b076c54191c4b3c1ffae6c1e8c79b78ff5300f Mon Sep 17 00:00:00 2001 From: cyberbit Date: Thu, 18 Jul 2024 04:37:59 +0000 Subject: [PATCH 7/8] =?UTF-8?q?=F0=9F=93=A6=20add=20environment/player=20d?= =?UTF-8?q?etector,=20geo=20scanner,=20inventory=20manager,=20and=20redsto?= =?UTF-8?q?ne=20integrator=20adapters=20(closes=20#64)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/telem/lib/input.lua | 5 ++ .../BaseAdvancedPeripheralsInputAdapter.lua | 10 ++-- .../EnergyDetectorInputAdapter.lua | 2 +- .../EnvironmentDetectorInputAdapter.lua | 38 +++++++++++++ .../GeoScannerInputAdapter.lua | 24 +++++++++ .../InventoryManagerInputAdapter.lua | 33 ++++++++++++ .../MEBridgeInputAdapter.lua | 2 +- .../PlayerDetectorInputAdapter.lua | 53 +++++++++++++++++++ .../RSBridgeInputAdapter.lua | 2 +- .../RedstoneIntegratorInputAdapter.lua | 46 ++++++++++++++++ 10 files changed, 207 insertions(+), 8 deletions(-) create mode 100644 src/telem/lib/input/advancedPeripherals/EnvironmentDetectorInputAdapter.lua create mode 100644 src/telem/lib/input/advancedPeripherals/GeoScannerInputAdapter.lua create mode 100644 src/telem/lib/input/advancedPeripherals/InventoryManagerInputAdapter.lua create mode 100644 src/telem/lib/input/advancedPeripherals/PlayerDetectorInputAdapter.lua create mode 100644 src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua diff --git a/src/telem/lib/input.lua b/src/telem/lib/input.lua index 0883fb7..b36b9be 100644 --- a/src/telem/lib/input.lua +++ b/src/telem/lib/input.lua @@ -17,7 +17,12 @@ local export = { advancedPeripherals = { energyDetector = requireAP('EnergyDetectorInputAdapter'), + environmentDetector = requireAP('EnvironmentDetectorInputAdapter'), + geoScanner = requireAP('GeoScannerInputAdapter'), + inventoryManager = requireAP('InventoryManagerInputAdapter'), meBridge = requireAP('MEBridgeInputAdapter'), + playerDetector = requireAP('PlayerDetectorInputAdapter'), + redstoneIntegrator = requireAP('RedstoneIntegratorInputAdapter'), rsBridge = requireAP('RSBridgeInputAdapter'), }, diff --git a/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua index 2cbe5f9..dcef21a 100644 --- a/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/BaseAdvancedPeripheralsInputAdapter.lua @@ -9,7 +9,7 @@ local MetricCollection = require 'telem.lib.MetricCollection' local BaseAdvancedPeripheralsInputAdapter = o.class(InputAdapter) BaseAdvancedPeripheralsInputAdapter.type = 'BaseAdvancedPeripheralsInputAdapter' -function BaseAdvancedPeripheralsInputAdapter:constructor (peripheralName, categories) +function BaseAdvancedPeripheralsInputAdapter:constructor (peripheralName, categories, ...) self:super('constructor') self.prefix = 'ap:' @@ -29,12 +29,12 @@ function BaseAdvancedPeripheralsInputAdapter:constructor (peripheralName, catego self:addComponentByPeripheralID(peripheralName) end)() - self:beforeRegister() + self:beforeRegister(peripheralName, categories, ...) self:register() end -function BaseAdvancedPeripheralsInputAdapter:beforeRegister () +function BaseAdvancedPeripheralsInputAdapter:beforeRegister (peripheralName, categories, ...) -- nothing by default, should be overridden by subclasses end @@ -99,8 +99,8 @@ function BaseAdvancedPeripheralsInputAdapter.mintAdapter (type) local adapter = o.class(BaseAdvancedPeripheralsInputAdapter) adapter.type = type - function adapter:constructor (peripheralName, categories) - self:super('constructor', peripheralName, categories) + function adapter:constructor (peripheralName, categories, ...) + self:super('constructor', peripheralName, categories, ...) end return adapter diff --git a/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua index b451de3..88071d8 100644 --- a/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/EnergyDetectorInputAdapter.lua @@ -4,7 +4,7 @@ local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheral local EnergyDetectorInputAdapter = base.mintAdapter('EnergyDetectorInputAdapter') -function EnergyDetectorInputAdapter:beforeRegister () +function EnergyDetectorInputAdapter:beforeRegister (peripheralName, categories) self.prefix = 'apenergy:' self.queries = { diff --git a/src/telem/lib/input/advancedPeripherals/EnvironmentDetectorInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/EnvironmentDetectorInputAdapter.lua new file mode 100644 index 0000000..84410a8 --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/EnvironmentDetectorInputAdapter.lua @@ -0,0 +1,38 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' + +local EnvironmentDetectorInputAdapter = base.mintAdapter('EnvironmentDetectorInputAdapter') + +function EnvironmentDetectorInputAdapter:beforeRegister (peripheralName, categories) + self.prefix = 'apenv:' + + self.queries = { + basic = { + block_light_level = fn():call('getBlockLightLevel'), + day_light_level = fn():call('getDayLightLevel'), + sky_light_level = fn():call('getSkyLightLevel'), + moon_id = fn():call('getMoonId'), + time = fn():call('getTime'), + radiation = fn():call('getRadiationRaw'):with('unit', 'Sv/h'), + can_sleep = fn():call('canSleepHere'):toFlag(), + raining = fn():call('isRaining'):toFlag(), + sunny = fn():call('isSunny'):toFlag(), + thundering = fn():call('isThunder'):toFlag(), + slime_chunk = fn():call('isSlimeChunk'):toFlag(), + }, + } + + -- getBiome + -- getDimensionName + -- getDimensionPaN + -- getDimensionProvider + -- getMoonName + -- getOperationCooldown + -- isDimension + -- listDimensions + -- scanCost + -- scanEntities +end + +return EnvironmentDetectorInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/GeoScannerInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/GeoScannerInputAdapter.lua new file mode 100644 index 0000000..4cf6ee1 --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/GeoScannerInputAdapter.lua @@ -0,0 +1,24 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' +local Metric = require 'telem.lib.Metric' + +local GeoScannerInputAdapter = base.mintAdapter('GeoScannerInputAdapter') + +function GeoScannerInputAdapter:beforeRegister (peripheralName, categories) + self.prefix = 'apgeo:' + + self.queries = { + basic = {}, + } + + self.storageQueries = { + fn():callElse('chunkAnalyze', {}) + :map(function (k, v) return Metric{ name = k, value = v } end) + :values() + } + + -- scan +end + +return GeoScannerInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/InventoryManagerInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/InventoryManagerInputAdapter.lua new file mode 100644 index 0000000..3d1593a --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/InventoryManagerInputAdapter.lua @@ -0,0 +1,33 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' +local Metric = require 'telem.lib.Metric' + +local InventoryManagerInputAdapter = base.mintAdapter('InventoryManagerInputAdapter') + +function InventoryManagerInputAdapter:beforeRegister (peripheralName, categories) + self.prefix = 'apinv:' + + local armor = fn():call('getArmor') + + self.queries = { + basic = { + equipped = fn():call('isPlayerEquipped'):toFlag(), + equipped_helmet = armor:firstWhere('slot', 103):toFlag(), + equipped_chestplate = armor:firstWhere('slot', 102):toFlag(), + equipped_leggings = armor:firstWhere('slot', 101):toFlag(), + equipped_boots = armor:firstWhere('slot', 100):toFlag(), + inventory_available = fn():call('isSpaceAvailable'):toFlag(), + inventory_slots_available = fn():call('getEmptySpace'), + }, + } + + self.storageQueries = { + fn():call('getItems') + :sum('count', 'name') + :map(function (k, v) return Metric{ name = k, value = v, unit = 'item' } end) + :values() + } +end + +return InventoryManagerInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua index c140eb3..be53137 100644 --- a/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/MEBridgeInputAdapter.lua @@ -5,7 +5,7 @@ local Metric = require 'telem.lib.Metric' local MEBridgeInputAdapter = base.mintAdapter('MEBridgeInputAdapter') -function MEBridgeInputAdapter:beforeRegister () +function MEBridgeInputAdapter:beforeRegister (peripheralName, categories) self.prefix = 'apmebridge:' self.queries = { diff --git a/src/telem/lib/input/advancedPeripherals/PlayerDetectorInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/PlayerDetectorInputAdapter.lua new file mode 100644 index 0000000..2626f49 --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/PlayerDetectorInputAdapter.lua @@ -0,0 +1,53 @@ +local fn = require 'telem.vendor'.fluent.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' + +local PlayerDetectorInputAdapter = base.mintAdapter('PlayerDetectorInputAdapter') + +function PlayerDetectorInputAdapter:beforeRegister (peripheralName, categories, playerName) + self.prefix = 'applayer:' + + self.queries = { + basic = { + online_player_count = fn():call('getOnlinePlayers'):count(), + }, + } + + -- getPlayersInRange + -- getPlayersInCoords + -- getPlayersInCubic + -- isPlayerInRange + -- isPlayerInCoords + -- isPlayerInCubic + -- isPlayersInRange + -- isPlayersInCoords + -- isPlayersInCubic + + -- TODO improve this + if playerName then + local playerPos = fn():call('getPlayerPos', playerName) + + self.queries.player = self.queries.player or {} + + self.queries.player.player_eye_height = playerPos:get('eyeHeight'):with('unit', 'm') + self.queries.player.player_pitch = playerPos:get('pitch'):with('unit', '°') + self.queries.player.player_yaw = playerPos:get('yaw'):with('unit', '°') + self.queries.player.player_health = playerPos:get('health') + self.queries.player.player_air_supply = playerPos:get('airSupply') + + -- TODO there is a typo fix pending release, so for now there will be a fallback to the typo + self.queries.player.player_max_health = playerPos:transform(function (v) + return v.maxHealth or v.maxHeatlh + end) + + -- dimension + -- respawnPosition + -- respawnDimension + -- respawnAngle + -- x + -- y + -- z + end +end + +return PlayerDetectorInputAdapter \ No newline at end of file diff --git a/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua index c3a280b..31527eb 100644 --- a/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/RSBridgeInputAdapter.lua @@ -5,7 +5,7 @@ local Metric = require 'telem.lib.Metric' local RSBridgeInputAdapter = base.mintAdapter('RSBridgeInputAdapter') -function RSBridgeInputAdapter:beforeRegister () +function RSBridgeInputAdapter:beforeRegister (peripheralName, categories) self.prefix = 'aprsbridge:' self.queries = { diff --git a/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua new file mode 100644 index 0000000..8f80fa2 --- /dev/null +++ b/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua @@ -0,0 +1,46 @@ +local fl = require 'telem.vendor'.fluent +local fn = fl.fn + +local base = require 'telem.lib.input.advancedPeripherals.BaseAdvancedPeripheralsInputAdapter' + +local RedstoneIntegratorInputAdapter = base.mintAdapter('RedstoneIntegratorInputAdapter') + +function RedstoneIntegratorInputAdapter:beforeRegister (peripheralName, categories, sides) + self.prefix = 'apredstone:' + + self.sides = sides or '*' + + local allRelativeSides = { + 'right', 'left', 'front', 'back', 'top', 'bottom', + } + + local allCardinalSides = { + 'north', 'south', 'east', 'west', 'up', 'down' + } + + local allSides = fl({allRelativeSides, allCardinalSides}):flatten():result() + + if self.sides == '*' then + self.sides = allRelativeSides + elseif type(self.sides) == 'table' then + self.sides = fl(self.sides):intersect(allSides):result() + else + error('sides must be a list of sides or "*"') + end + + self.queries = { + basic = {} + } + + for _, side in ipairs(self.sides) do + print('doign side', side) + self.queries.basic['input_' .. side] = fn():call('getInput', side):toFlag() + self.queries.basic['input_analog_' .. side] = fn():call('getAnalogInput', side) + + -- TODO is there any reason to include these? + -- self.queries.basic['output_' .. side] = fn():call('getOutput', side):toFlag() + -- self.queries.basic['output_analog_' .. side] = fn():call('getAnalogOutput', side) + end +end + +return RedstoneIntegratorInputAdapter \ No newline at end of file From e209c02a3ecd697ff6f26de67f173935dca57d2e Mon Sep 17 00:00:00 2001 From: cyberbit Date: Thu, 18 Jul 2024 04:40:17 +0000 Subject: [PATCH 8/8] =?UTF-8?q?=F0=9F=AA=B2=20remove=20debug=20print=20fro?= =?UTF-8?q?m=20redstone=20integrator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua b/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua index 8f80fa2..bb7e2cf 100644 --- a/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua +++ b/src/telem/lib/input/advancedPeripherals/RedstoneIntegratorInputAdapter.lua @@ -33,7 +33,6 @@ function RedstoneIntegratorInputAdapter:beforeRegister (peripheralName, categori } for _, side in ipairs(self.sides) do - print('doign side', side) self.queries.basic['input_' .. side] = fn():call('getInput', side):toFlag() self.queries.basic['input_analog_' .. side] = fn():call('getAnalogInput', side)