Перейти к содержимому
  • 0
Teen_Romance

PIM из Open Peripherals

Вопрос

Где можно почитать как работать с PIM? Я чета вообще не могу понять как его подключить к компу + мэ системе. Нашел только его методы и какие то куски коды на гите типа 

local pim = proxy("pim")

но что такое proxy - я не знаю. 

Я так понимаю, что proxy, это метод component. А как тогда proxy сделали глобальным методом?

Я вот подключил pim через адаптер, но как с ним работать с мэ + ивенты слушать - пока что загадка

 

в идеале мне нужно чтобы у меня пим  стоял сверху, под ним мэ интерфейс и снизу адаптер. В общем чтобы только пим сверху торчал

Изменено пользователем Teen_Romance

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

PIM по сути сундук, но используется инвентарь игрока, притом того кто первым станет на него

Все доступные методы можно получить прогой https://pastebin.com/wGJbJmX4 посути на любое устройство

Скрытый текст

>> Метод: getInventoryName
Документация: function():string -- Get the name of this inventory
>> Метод: destroyStack
Документация: function(slotNumber:number) -- Destroy a stack
>> Метод: condenseItems
Документация: function() -- Condense and tidy the stacks in an inventory
>> Метод: listMethods
Документация: function(filterSource:string?):string -- List all the methods available
>> Метод: expandStack
Документация: function(stack:{id:string,dmg:number?,qty:number?,...}):table -- Get full stack information from id and/or damage
>> Метод: type
Документация: pim
>> Метод: pushItem
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Push an item from the current inventory into pipe or slot on the other inventory. Returns the amount of items moved
>> Метод: pullItem
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Pull an item from a slot in another inventory into a slot in this one. Returns the amount of items moved
>> Метод: getInventorySize
Документация: function():number -- Get the size of this inventory
>> Метод: pullItemIntoSlot
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Pull an item from a slot in another inventory into a slot in this one. Returns the amount of items moved
>> Метод: doc
Документация: function(method:string):string -- Brief description of method
>> Метод: getStackInSlot
Документация: function(slotNumber:number,proxy:boolean?):object -- Get details of an item in a particular slot
>> Метод: pushItemIntoSlot
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Push an item from the current inventory into pipe or slot on the other inventory. Returns the amount of items moved
>> Метод: slot
Документация: -1
>> Метод: getAllStacks
Документация: function(proxy:boolean?):table -- Get a table with all the items of the chest
>> Метод: listSources
Документация: function():table -- List all method sources
>> Метод: getAdvancedMethodsData
Документация: function(method:string?):table -- Get a complete table of information about all available methods
>> Метод: swapStacks
Документация: function(from:number,to:number,fromDirection:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN}?,fromDirection:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN}?) -- Swap two slots in the inventory
>> Метод: address
Документация: 5456e6f1-48bd-40e2-904a-49d5bf4fd6a6

 

До написания программы можно опробовать методы в действии

lua
=component.pim.getInventoryName()

Получим ник того кто стоит на pim, если нет ни кого то вернёт значение равное "pim"

lua
=component.pim.getAllStacks(0)

Тут получим значения всех ячеек инвентаря одним запросом в виде таблицы

 

Упрощённый пример изъятия денег (Железных блоков) в МЕ интерфейс который стоит под пим

Скрытый текст

local takeMoney = "10"
local money = "minecraft:iron_block"

local com = require('component')
local pim = com.pim

local take = 0
local data = pim.getAllStacks(0)
for i = 1,36 do
  if data[i] then
    if data[i].id == money then
      local push = pim.pushItem("DOWN",i,takeMoney-take) or 0
      take = take + push
      if take >= takeMoney then
        break
      end
    end
  end
end

 

Вариант расположения блоков

Скрытый текст

GI0hHqt.png

Но удобнее использовать MFU чтоб убрать торчащие блоки и провода

 

12 часа назад, Teen_Romance сказал:

но что такое proxy - я не знаю

прокси нужен если нужно использовать несколько одинаковых устройств, в данном случае pim всего один

12 часа назад, Teen_Romance сказал:

как с ним работать с мэ + ивенты слушать - пока что загадка

У пим всего 2 ивента

когда игрок стал на пим "player_on"

и когда ушёл с него "player_off"

Пример получения никнейма

(использовал ивент в виде таблицы, в дальнейшем пригодится для обработки других событий)

(например нажатия кнопок, касание экрана, и тд)

Скрытый текст

local event = require("event")
local name = ""

while true do
  local e = {event.pull()}
  if e[1] == "player_on" then
    name = e[2] or ""
  elseif e[1] == "player_off" then
    name = ""
  end
  print(name)
end

 

Так как установлен мод OpenPeripheral для ме доступны новые методы

Скрытый текст

>> Метод: pushItem
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Push an item from the current inventory into pipe or slot on the other inventory. Returns the amount of items moved
>> Метод: getInventoryName
Документация: function():string -- Get the name of this inventory
>> Метод: getCraftingCPUs
Документация: function():table -- Get a list of tables representing the available CPUs in the network.
>> Метод: getAvailableItems
Документация: function(details:string{NONE,PROXY,ALL}?):table -- Get a list of the stored and craftable items in the network.
>> Метод: getInterfaceConfiguration
Документация: function([slot:number]):table -- Get the configuration of the interface.
>> Метод: getCpus
Документация: function():table -- Get a list of tables representing the available CPUs in the network.
>> Метод: getCraftables
Документация: function([filter:table]):table -- Get a list of known item recipes. These can be used to issue crafting requests.
>> Метод: getIdlePowerUsage
Документация: function():number -- Get the idle power usage of the network.
>> Метод: store
Документация: function(filter:table, dbAddress:string[, startSlot:number[, count:number]]): Boolean -- Store items in the network matching the specified filter in the database with the specified address.
>> Метод: getStackInSlot
Документация: function(slotNumber:number,proxy:boolean?):object -- Get details of an item in a particular slot
>> Метод: pullItemIntoSlot
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Pull an item from a slot in another inventory into a slot in this one. Returns the amount of items moved
>> Метод: condenseItems
Документация: function() -- Condense and tidy the stacks in an inventory
>> Метод: doc
Документация: function(method:string):string -- Brief description of method
>> Метод: type
Документация: me_interface
>> Метод: swapStacks
Документация: function(from:number,to:number,fromDirection:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN}?,fromDirection:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN}?) -- Swap two slots in the inventory
>> Метод: getAdvancedMethodsData
Документация: function(method:string?):table -- Get a complete table of information about all available methods
>> Метод: getMaxStoredPower
Документация: function():number -- Get the maximum stored power in the network.
>> Метод: listMethods
Документация: function(filterSource:string?):string -- List all the methods available
>> Метод: exportItem
Документация: function(fingerprint:{id:string,dmg:number?,nbt_hash:string?},direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},maxAmount:number?,intoSlot:number?):table -- Exports the specified item into the target inventory.
>> Метод: pullItem
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Pull an item from a slot in another inventory into a slot in this one. Returns the amount of items moved
>> Метод: expandStack
Документация: function(stack:{id:string,dmg:number?,qty:number?,...}):table -- Get full stack information from id and/or damage
>> Метод: getItemsInNetwork
Документация: function([filter:table]):table -- Get a list of the stored items in the network.
>> Метод: listSources
Документация: function():table -- List all method sources
>> Метод: address
Документация: 961b9645-a905-4a65-be49-9a785af44f8b
>> Метод: setInterfaceConfiguration
Документация: function([slot:number][, database:address, entry:number[, size:number]]):boolean -- Configure the interface.
>> Метод: getAllStacks
Документация: function(proxy:boolean?):table -- Get a table with all the items of the chest
>> Метод: pushItemIntoSlot
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN},slot:number,maxAmount:number?,intoSlot:number?):number -- Push an item from the current inventory into pipe or slot on the other inventory. Returns the amount of items moved
>> Метод: requestCrafting
Документация: function(fingerprint:{id:string,dmg:number?,nbt_hash:string?},qty:number?,cpu:string?) -- Requests the specified item to get crafted.
>> Метод: getStoredPower
Документация: function():number -- Get the stored power in the network. 
>> Метод: getFluidsInNetwork
Документация: function():table -- Get a list of the stored fluids in the network.
>> Метод: getInventorySize
Документация: function():number -- Get the size of this inventory
>> Метод: slot
Документация: -1
>> Метод: getAvgPowerUsage
Документация: function():number -- Get the average power usage of the network.
>> Метод: destroyStack
Документация: function(slotNumber:number) -- Destroy a stack
>> Метод: getItemDetail
Документация: function(item:{id:string,dmg:number?,nbt_hash:string?},proxy:boolean?):object -- Retrieves details about the specified item from the ME Network.
>> Метод: getAvgPowerInjection
Документация: function():number -- Get the average power injection into the network.
>> Метод: canExport
Документация: function(direction:string{DOWN,UP,NORTH,SOUTH,WEST,EAST,UNKNOWN}):boolean -- Returns true when the interface can export to side.

 

Например с помощью id можно отправить предмет из МЕ в PIM

Скрытый текст

local com = require("component")
local interface = com.me_interface 

local function export(fingerprint,direction,amount)
  local ok, value = pcall(interface.exportItem,fingerprint,direction,amount)
  if ok then
    return value.size
  end
  return 0, value or "error"
end

print(export({id="minecraft:iron_ingot",dmg=0},"UP",10))

 

Разумеется есть и иные способы

Изменено пользователем serafim

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...