mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-07-15 08:14:29 +00:00
![Daniel Ratcliffe](/assets/img/avatar_default.png)
Added the complete source code to ComputerCraft 1.79 for Minecraft 1.8.9, plus newly written README and LICENSE files for the open source release.
119 lines
3.2 KiB
Plaintext
119 lines
3.2 KiB
Plaintext
local native = peripheral
|
|
|
|
function getNames()
|
|
local tResults = {}
|
|
for n,sSide in ipairs( rs.getSides() ) do
|
|
if native.isPresent( sSide ) then
|
|
table.insert( tResults, sSide )
|
|
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
|
local tRemote = native.call( sSide, "getNamesRemote" )
|
|
for n,sName in ipairs( tRemote ) do
|
|
table.insert( tResults, sName )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return tResults
|
|
end
|
|
|
|
function isPresent( _sSide )
|
|
if type( _sSide ) ~= "string" then
|
|
error( "Expected string", 2 )
|
|
end
|
|
if native.isPresent( _sSide ) then
|
|
return true
|
|
end
|
|
for n,sSide in ipairs( rs.getSides() ) do
|
|
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
|
if native.call( sSide, "isPresentRemote", _sSide ) then
|
|
return true
|
|
end
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function getType( _sSide )
|
|
if type( _sSide ) ~= "string" then
|
|
error( "Expected string", 2 )
|
|
end
|
|
if native.isPresent( _sSide ) then
|
|
return native.getType( _sSide )
|
|
end
|
|
for n,sSide in ipairs( rs.getSides() ) do
|
|
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
|
if native.call( sSide, "isPresentRemote", _sSide ) then
|
|
return native.call( sSide, "getTypeRemote", _sSide )
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function getMethods( _sSide )
|
|
if type( _sSide ) ~= "string" then
|
|
error( "Expected string", 2 )
|
|
end
|
|
if native.isPresent( _sSide ) then
|
|
return native.getMethods( _sSide )
|
|
end
|
|
for n,sSide in ipairs( rs.getSides() ) do
|
|
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
|
if native.call( sSide, "isPresentRemote", _sSide ) then
|
|
return native.call( sSide, "getMethodsRemote", _sSide )
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function call( _sSide, _sMethod, ... )
|
|
if type( _sSide ) ~= "string" or type( _sMethod ) ~= "string" then
|
|
error( "Expected string, string", 2 )
|
|
end
|
|
if native.isPresent( _sSide ) then
|
|
return native.call( _sSide, _sMethod, ... )
|
|
end
|
|
for n,sSide in ipairs( rs.getSides() ) do
|
|
if native.getType( sSide ) == "modem" and not native.call( sSide, "isWireless" ) then
|
|
if native.call( sSide, "isPresentRemote", _sSide ) then
|
|
return native.call( sSide, "callRemote", _sSide, _sMethod, ... )
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function wrap( _sSide )
|
|
if type( _sSide ) ~= "string" then
|
|
error( "Expected string", 2 )
|
|
end
|
|
if peripheral.isPresent( _sSide ) then
|
|
local tMethods = peripheral.getMethods( _sSide )
|
|
local tResult = {}
|
|
for n,sMethod in ipairs( tMethods ) do
|
|
tResult[sMethod] = function( ... )
|
|
return peripheral.call( _sSide, sMethod, ... )
|
|
end
|
|
end
|
|
return tResult
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function find( sType, fnFilter )
|
|
if type( sType ) ~= "string" or (fnFilter ~= nil and type( fnFilter ) ~= "function") then
|
|
error( "Expected string, [function]", 2 )
|
|
end
|
|
local tResults = {}
|
|
for n,sName in ipairs( peripheral.getNames() ) do
|
|
if peripheral.getType( sName ) == sType then
|
|
local wrapped = peripheral.wrap( sName )
|
|
if fnFilter == nil or fnFilter( sName, wrapped ) then
|
|
table.insert( tResults, wrapped )
|
|
end
|
|
end
|
|
end
|
|
return table.unpack( tResults )
|
|
end
|