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

Поиск по сайту

Результаты поиска по тегам 'openperipheral'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря
  • Путешествия Xytabich'а
  • Рецепты программирования

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Моды и плагины
    • Жалобы
    • Ивенты и конкурсы
    • Файлы
  • Общение
    • Задать вопрос
    • Обратная связь
    • Беседка
    • Шкатулка
  • Технический раздел
    • Корзина

Группы продуктов

Нет результатов для отображения.


Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 18 результатов

  1. Xytabich

    OpenPeripheral: Addons

    Дополнительные блоки и предметы. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Про очки и терминал было рассказано в другой статье. Блоки: PIM - Personal Inventory Manager, функционал такой-же как у инвентаря. События: player_on(name:string, uuid:string) - игрок наступил на платформу player_off(name:string, uuid:string) - игрок сошёл с платформы Сенсор - сканирует область вокруг на наличие блоков или сущностей. Устаревший функционал описывать не буду. Радиус сканирования - куб с длиной сторон 2*радиус+1. Интересный факт: полученное прокси можно использовать на любом отдалении цели от сенсора, даже если цель в других мирах. Но работает это только до выгрузки чанка с сенсором, или сущности. Идентификатор: openperipheral_sensor getEntityIds(type:string):number[] - возвращает идентификаторы сущностей заданного типа в радиусе сканирования. Типы: mob, item, minecart, item_frame, painting. getEntityData(id:number, type:string):table - возвращает прокси сущности по идентификатору и типу сущности. Позиция сущностей относительно сенсора. getPlayers():table[] - возвращает список профилей игроков в радиусе сканирования. getPlayerByName(name:string):table - возвращает прокси игрока по никнейму, если он в радиусе сканирования. getPlayerByUUID(uuid:string):table - возвращает прокси игрока по уникальному идентификатору, если он в радиусе сканирования. sonicScan():table[] - возвращает список блоков в СФЕРИЧЕСКОЙ области! - x, y, z:number - координаты блока относительно сканера - type:string - тип блока: air, solid, liquid, unknown - color:number - битовая маска цвета блока, один из 16ти цветов. 1 << color sonicScanTarget(x, y, z:number):table - то-же что и прошлая функция, но для конкретного блока Селектор - позволяет выбирать предмет на панели. Идентификатор: openperipheral_selector Событие: slot_click(slot:number, name:string) - адрес компонента не передается, name - похож на адрес, но такого компонента не существует. getSlots():table - возвращает список предметов в слотах setSlots(items:table) - установить предметы в слоты, не работает в OpenComputers из-за неправильного конвертирования getSlot(slot:number):table - получить предмет в слоте setSlot(slot:number, item:table) - установить предмет в слот, предмет вида: {id:string, dmg:number} Билетный автомат - печатает билеты из RailCraft. Идентификатор: openperipheral_ticketmachine createTicket(destination:string, amount:number):bool - печатает билет(ы) в указанное направление getOwner():string - возвращает владельца блока и билетов
  2. На повестке дня аддон для OpenComputers и ComputerCraft всех времён и народов, реализующий большое количество функционала для работы с миром Minecraft'а и его модификациями. Но поговорим только о версии для OpenComputers (она несколько обрезана, по сравнению с СС). Жизнь без этого мода оказалась тем ещё кошмаром, особенно при попытке играть на серверах более поздних версий майнкрафта. Но что это был за кошмар, удалось узнать только недавно - OpenPeripheral не только добавлял удобные способы взаимодействия со всем миром, но и дополнял функционал OpenComputers'а при работе со многими модификациями. Итак, аддон состоит из 3х модулей, которые будут описываться отдельно: - Core - собственно, ядро аддона, реализует некоторые базовые функции - Integration - расширенное взаимодействие с майнкрафтом и модами - Addons - дополнительная периферия для пк Информация актуальная для версии Minecraft 1.7.10. Сначала будет добавляться описание API, затем скриншоты и хитрости работы. В этой части разговор пойдет о ядре аддона, так как его функционал является основополагающим для остальных модулей. Итак, в моде реализована система адаптеров - интерфейсов lua-minecraft (он-же драйвер), предоставляющих функционал для взаимодействия с объектами. У каждого адаптера есть свой идентификатор, и этот идентификатор используется для определения "владельца" функционала. В ядре, есть только адаптер для отображения документации объекта. В будущих же статьях будут описаны адаптеры в модуле, и предоставляемый ими функционал. Документация функций Ядро реализует неплохую систему документации всех своих функций, которую можно просмотреть через lua: listMethods([filterSource]):string - возвращает строчку со всеми методами методов. filterSource - идентификатор адаптера Пример: listMethods():"doc(method), getAdvancedMethodsData(method?), listMethods(filterSource?), listSources()" listSources():table - возвращает таблицу {name=true} со всеми адаптерами. Пример: listSources():{["<meta>"]=true, skull=true} - список адаптеров черепа, <meta> - адаптер ядра, skull - адаптер черепов/голов doc(method):string - возвращает текстовое описание метода. Пример: doc("doc"):"function(method:string):string -- Brief description of method" getAdvancedMethodsData([method]):table - возвращает полную информацию о методе, или всех методах. возвращаемая структура: - description:string - текстовое описание - source:string - идентификатор адаптера - returnTypes:string - строчка с возвращаемым типом(типами) данных - args:table - аргументы функции: - name:string - type:string - тип аргумента, но есть баг - отображается java-тип - description:string - nullable:bool? - принимает ли значение nil - optional:bool? - является ли необязательным аргументом - vararg:bool? - переменное кол-во аргументов (или ...) Предметы и сущности Одной из интересных особенностей OpenPeripheral является система доступа к метаданным предметов или сущностей, а именно - прокси (proxy, он же - паттерн "заместитель"). Прокси является неким контейнером, содержащем прямую ссылку на java-объект, что позволяет получать актуальную информацию о предмете или сущности, до тех пор пока прокси или объект не выгрузится из памяти. Многие методы OpenPeripheral, возвращающие данные о предметах или сущностях, могут вернуть прокси. Это позволяет экономить память в условиях огромного объема обрабатываемой информации, например - получение всех предметов ME сети, или наоборот - при малом объеме памяти на пк. Но есть и серьезный минус при работе с прокси - любая попытка доступа к данным будет занимать один игровой тик. Прокси предметов или сущностей возвращают некоторую базовую информацию, например идентификатор, позиция и т.п. Но для более подробной информации используются провайдер - интерфейс, предоставляющий специфичные данные, записанные, например, в NBT. У объекта может быть несколько провайдеров, по этому у провайдера есть идентификатор, или ключ, под которым записаны данные конкретного провайдера в объекте. Прокси реализует доступ как к отдельным провайдерам, так и сразу ко всей информации. Для предметов и сущностей структура прокси одинакова: basic():table - базовая информация об объекте, содержит фиксированные поля. Данные зависят от реализации. all():table - содержит информацию из basic(), а также предоставляемую провайдерами информацию. keys():table - возвращает таблицу {name=true} со всеми провайдерами. single(key):object - возвращает информацию, предоставляемую провайдером. select(keys...):object - возвращает информацию, предоставляемую всеми переданными провайдерами. Примечание: прокси выгруженных объектов, при обращении к функциям, будут возвращать nil. Провайдеры добавляются отдельными модулями OpenPeripheral, а в ядре содержится только базовая информация, возвращаемая функцией base(). Базовая информация предмета: id:string - полный идентификатор предмета mod:name name:string - идентификатор предмета в модификации mod_id:string - идентификатор модификации display_name:string - отображаемое имя, зависит от языка сервера, и назначенного на наковальне имени raw_name:string - имя предмета для локализации, в нижнем регистре qty:number - кол-во предметов в стаке dmg:number - мета, или прочность предмета health_bar:number? - отображаемое в полоске прочности значение, 0.0-1.0 max_dmg:number - максимальная прочность предмета max_size:number - максимальный размер стака Базовая информация сущности: position:table {x,y,z} - относительная или абсолютная позиция сущности name:string - имя сущности id:number - номер сущности (по порядку появления в мире) uuid:string - уникальный идентификатор сущности (идентификатор в базе данных) riddenBy:number? - номер сущности, оседлавшей это существо ridingEntity:number? - номер сущности, которую оседлало это существо Жидкости Информация о жидкости: amount:number - объем жидкости id:number - идентификатор жидкости name:string? - имя жидкости rawName:string? - название жидкости - зависит от языка сервера Информация о хранилище жидкости: capacity:number - общий объем хранилища contents:table - содержащаяся жидкость Игровой профиль Информация о игроке: name:string - имя игрока uuid:string - уникальный идентификатор игрока Если у вас есть мысли, что может дополнить статью - был бы рад услышать.
  3. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Thermal Expansion Адаптеры блоков Цветной светильник - ламиумовый или светокаменный светильник. Идентификатор: te_light setColor|setColour(color:number):bool - установить цвет светильника, формат 0xRRGGBB, возвращает true в случае успеха Ender Storage Адаптеры блоков Блок с частотой - сундук или цистерна с цветным идентификатором. Идентификатор: ender_frequency getColors|getColours():number, number, number - возвращает индексы цветов setColors|getColors(left:number, middle:number, right:number) - установить цвета, формат - битовая маска цвета: 1 << color_index (0-15) getColorNames():string, string, string - возвращает имена цветов setColorNames(left:string, middle:string, right:string) - установить цвета, по имени getFrequency():number - получить частоту ((left & 0x0F) << 8) + ((middle & 0x0F) << 4) + (right & 0x0F) setFrequency(frequency):number - установить частоту, формат - число из цветовых индексов: ((left & 0x0F) << 8) + ((middle & 0x0F) << 4) + (right & 0x0F) Tinkers Mechworks Адаптеры блоков Разводной мост Идентификатор: tmechworks_drawbridge hasExtended():bool - активирован ли мост На этом описание интеграции окончено, с мисткрафтом не знаком, да и там несколько версий, не понятно какую использовать.
  4. Расширение для работы с Thaumcraft. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Адаптеры блоков Контейнер аспектов - устройство/хранилище, содержащее аспекты. Идентификатор: thaumcraft_aspect_container getAspects():table - список хранящихся аспектов - name:string - тип аспекта - quantity:number - количество getAspectsSum():table - таблица {name=count} - сумма аспектов по типам (если в блоке больше одной записи одного типа) getAspectCount(aspect:string):number - сколько аспекта этого типа хранится в блоке Банка Идентификатор: thaumcraft_jar getAspectFilter():string - тип аспекта на бирке getAspects():table - список хранящихся аспектов - name:string - тип аспекта - quantity:number - количество Узел ауры Идентификатор: thaumcraft_node getNodeType():string - тип узла: normal, unstable, dark, tainted, hungry, pure getNodeModifier():string - модификатор узла: bright, pale, fading Транспортировщик эссенции - трубы и всё с ними связанное Идентификатор: thaumcraft_essentia_transport getSuctionAmount(direction:string):number - сила всасывания getSuctionType(direction:string):string - тип всасываемой эссенции getEssentiaAmount(direction:string):number - количество хранящейся эссенции getEssentiaType(direction:string):string - тип хранящейся эссенции Мозг в банке Идентификатор: thaumcraft_brain getXP():number - количество хранящегося опыта Мистическое ухо Идентификатор: thaumcraft_ear getNote():number - установленная нота setNote(note:number) - установить ноту getTone():number - установленный тон setTone(note:number) - установить тон Мистический бур Идентификатор: thaumcraf_bore hasPickaxe():bool - имеется ли кирка isPickaxeBroken():bool - сломана ли кирка getPick():table - предмет кирки isWorking():bool - работает ли бур getRadius():number - радиус работы бура getSpeed():number - скорость работы бура getFortune():number - уровень удачи на кирке hasSilkTouch():bool - имеется ли шёлковое касание на кирке hasNativeClusters():bool - копает ли кирка кластеры, вместо руд Стол расщепления Идентификатор: thaumcraft_deconstructor hasItem():bool - имеется ли предмет hasAspect():bool - имеется ли аспект getAspect():string - тип аспекта Провайдеры предметов Контейнер эссенции Ключ: essentia_container Значение: table - список хранящихся аспектов - name:string - тип аспекта - quantity:number - количество Набалдашник Ключ: wand_focus Значение: table - cost:number - цена использования - isPerTick:bool - цена показана за тик использования - color:number - цвет набалдашника 0xRRGGBB
  5. Расширение для работы с Forestry. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Примечание: OpenComputers может перегружать некоторый функционал, например - getDrone/getQueen в пасеке вернёт другие результаты, но можно использовать информацию предмета. Условия посадки растений: cave - любое место, например - грибы crop - грядки desert - песок nether - песок душ plains - земля или трава water - вода, например - кувшинки Структуры Так как эти структуры часто используются в коде (или они просто слишком огромны), опишу их с самого начала. Вид name:string - название вида пчелы, зависит от языка сервера uid:string - идентификатор пчелы Полная информация о виде authority:string - создатель вида binomialName:string - имя вида name:string - название вида, зависит от языка сервера complexity:number - сложность генома humidity:string - влажность климата: arid, normal, damp temperature:string - температура: none, icy, cold, normal, warm, hot, hellish Мутация allele1:table - вид первой пчелы allele2:table - вид первой пчелы result:table - вид итоговой пчелы chance:number - шанс скрещивания, 0-100 specialConditions:string[] - список условий для скрещивания, текст зависит от языка сервера Гены пчёл species:table - полная информация о виде speed:number - множитель шанса производства lifespan:number - количество циклов, которое живет пчела fertility:number - плодовитость, количество дронов nocturnal:bool - работа ночью tolerantFlyer:bool - работа в дождь caveDwelling:bool - работа в пещерах flowerProvider:string - название используемых цветов, зависит от языка сервера humidityTolerance:string - допустимое отклонение влажности климата, зависит от языка сервера temperatureTolerance:string - допустимое отклонение температуры, зависит от языка сервера flowering:number - скорость опыления - шанс установки цветка или опыления дерева за цикл работы effect:string - название эффекта, зависит от языка сервера territory:table - размер области работы, массив: x, y, z Гены бабочек - возможна ошибка доступа к генам, при анализированной бабочке, но можно использовать методы OpenComputers species:table - полная информация о виде size:number - размер, 0.0-1.0 speed:number - скорость полёта бабочки lifespan:number - время жизни metabolism:number - множитель шанса выпадения лута fertility:number - плодовитость, количество гусениц nocturnal:bool - летает ночью tolerantFlyer:bool - летает в дождь fireResist:bool - имеет сопротивление огню flowerProvider:string - название используемых цветов, зависит от языка сервера humidityTolerance:string - допустимое отклонение влажности климата, зависит от языка сервера temperatureTolerance:string - допустимое отклонение температуры, зависит от языка сервера effect:string - название эффекта, зависит от языка сервера territory:table - размер области работы, массив: x, y, z Гены деревьев species:table - полная информация о виде growth:table - условия роста plant:table - пары {type=true} с возможными условиями посадки дерева girth:number - область посадки саженцев, например у тропического дерева - 2, т.е. необходимо поставить 4 саженца 2х2. height:number - относительная высота, 0.0-2.0 fertility:number - шанс дропа саженца, 0.0-1.0 sappiness:number - множитель шанса дропа саженца 0.0-1.0 fruits:string - тип фруктов yield:number - множитель шанса выпадения фруктов, а также шанса спавна бабочек maturation:number - количество случайных тиков для превращения саженца в дерево effect:string - название эффекта листьев, не используется, зависит от языка сервера territory:table - размер области эффект, массив: x, y, z, не используется Адаптеры блоков Пасека - показывает информацию о пчёлах в пасеке, и предоставляет доступ к базе данных пчёл (за исключением секретных, если не включено в конфиге). Идентификатор: forestry_bees canBreed():bool - возможна ли работа пчелы, зависит от потребностей пчелы. breedingProgress():number - прогресс скрещивания принцессы и дрона, 0-100 getDrone():table - получить гены дрона getQueen():table - получить гены принцессы или королевы(матки) listAllSpecies():table[] - список всех видов пчёл getBeeParents(childType:string):table[] - список всех мутаций, приводящих к данной пчеле, childType - идентификатор пчелы getBeeChildren(parentYpe:string):table[] - список всех мутаций, в которых участвует данная пчелы, parentYpe - идентификатор пчелы getBeeBreedingData():table[] - возвращает список всех возможных скрещиваний (Эксперементальная функция) - allele1:string - название первой пчелы, зависит от языка сервера - allele2:string - название второй пчелы, зависит от языка сервера - result:string - название итоговой пчелы, зависит от языка сервера - chance:number - шанс скрещивания, 0-100 - specialConditions:string[] - список условий для скрещивания, текст зависит от языка сервера Провайдеры предметов Вид - используется для описания пчёл, деревьев и бабочек. Ключ: individual Значение: table - displayName:string - название вида, зависит от языка сервера - ident:string - идентификатор вида - isAnalyzed:bool - были ли предмет анализирован - isSecret:bool - секретный ли это вид - hasEffect:bool - имеется ли эффект - health:number? - здоровье существа - maxHealth:number? - максимальное здоровье существа - isAlive:number? - живо ли существо - type:string - тип вида: bee, butterfly, tree - canSpawn:bool? - может ли пчела давать потомство - generation:number? - поколение пчелы - isNatural:number? - чистая (pristine) или низкая (ignoble) порода пчелы - size:number? - размер бабочки - plantType:string? - список возможных условий посадки дерева - active:table - активные гены - inactive:table - неактивные гены
  6. Расширение для работы с RailCraft. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Адаптеры блоков Присутствие вагонетки Идентификатор: railcraft_has_cart hasCart():bool - имеется ли вагонетка рядлм с устройством Выполнение работы Идентификатор: railcraft_has_work hasWork():bool - имеется ли работа у устройства Потребитель топлива Идентификатор: railcraft_needs_fuel needsFuel():bool - необходимо ли добавить топливо Обслуживаемое устройство Идентификатор: railcraft_needs_maintenance needsMaintenance():bool - необходимо ли обслуживание устройству Нагреваемое устройство Идентификатор: railcraft_temperature getTemperature():number - текущая температура Топка Идентификатор: railcraft_firebox isBurning():bool - горит ли огонь в топке Паровая турбина Идентификатор: railcraft_turbine getTurbineRotorStatus():number - статус турбины, 0-100 процентов getTurbineOutput():number - выход турбины в процентах Провайдеры предметов Жидкое топливо - жидкость, подходящая топке в качестве топлива Ключ: boiler_fuel Значение: table - total:number - количество тепла за весь объем контейнера - per_bucket:number - количество тепла за ведро Билет Ключ: rail-ticket Значение: table - golden:bool - золотой ли это билет - owner:string? - создатель билета - dest:string? - цель билета Провайдеры сущностей Вагонетка Ключ: railcraft_cart Значение: table - hasOwner:bool - имеется ли у вагонетки владелец - owner:string? - игровой профиль владельца вагонетки Раскрашенная вагонетка Ключ: painted_cart Значение: table - primaryColor:number - индекс основного цвета - secondaryColor:number - индекс дополнительного цвета Сцепляемая вагонетка Ключ: linkable_cart Значение: table - linkable:bool - сцепляется ли вагонетка - cartsInTrain:bool? - вагонетка в составе поезда Маршрутная вагонетка Ключ: routable_cart Значение: table - destination:string - цель вагонетки Заправляемая вагонетка Ключ: refuelable_cart Значение: table - needsRefuel:bool - необходима ли заправка Жидкостная вагонетка Ключ: liquid_cart Значение: table - isFilling:bool - заполняется ли вагонетка Энергетическая вагонетка - EU Ключ: energy_cart Значение: table - currentPower:number - хранимая энергия - maxPower:number - максимальная хранимая энергия - transferRate:number - максимальная передаваемая энергия в тик - powerTier:number - энергетический уровень Взрывающаяся вагонетка Ключ: liquid_cart Значение: table - primed:bool - активирован ли взрыв - fuse:number - оставшееся время до взрыва, в тиках
  7. Расширение для работы с MineFactory Reloaded. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Адаптеры блоков Авто-наковальня Идентификатор: mfr_anvil getRepairOnly():bool - получить режим ограничение наковальни "только ремонт" setRepairOnly(repair:bool) - установить ограничение "только ремонт" Авто-дизенчантер Идентификатор: mfr_disenchanter getRepeat():bool - получить режим повтора снятия чаров getRepeat(repeat:bool) - установить режим повтора снятия чаров Авто-зачарователь Идентификатор: mfr_enchanter getTargetLevel():number - текущий уровень зачарования setTargetLevel(level:number) - установить уровень зачарования 1-30 Авто-проигрыватель Идентификатор: mfr_jukebox getCanCopy():bool - можно ли скопировать пластинку getCanPlay():bool - можно ли проиграть пластинку copy() - скопировать пластинку play() - проиграть пластинку play() - остановить пластинку Авто-спавнер Идентификатор: mfr_spawner getSpawnExact():bool - получить режим извлечения setSpawnExact(spawnExact:bool) - установить режим извлечения Сепаратор Идентификатор: mfr_chronotyper getMoveAdults():bool - перемещать ли взрослых setMoveAdults(adults:bool) - установить режим перемещения взрослых Загрузчик чанков Идентификатор: mfr_chunk_loader getRadius():number - текущий радиус загрузки setRadius(radius:number) - установить радиус загрузки Глубокое хранилище Идентификатор: mfr-deep-storage getStoredItems():table - информация о хранящемся стаке getMaxStoredItems():number - максимальное количество предметов Выталкиватель Идентификатор: mfr_ejector getIsWhitelist():bool - получить режим: чёрный/белый список setIsWhitelist(isWhitelist:bool) - установить режим: чёрный (false) или белый(true) список getMatchNBT():bool - есть ли фильтрация по NBT setMatchNBT(matchNBT:bool) - установить фильтрацию по NBT getMatchMeta():bool - есть ли фильтрация по мете setMatchMeta(matchMeta:bool) - установить фильтрацию по мете Комбайн Идентификатор: mfr_harvester getShearLeaves():bool - собираются ли листья setShearLeaves(shearLeaves:bool) - установить режим сбора листьев getHarvestShrooms():bool - собираются ли маленькие грибы setHarvestShrooms(harvestShrooms:bool) - установить режим сбора маленьких грибов getSettings():table - возвращает пары {name=enabled:bool} - список текущих настроек Провайдеры предметов Сафари-сеть Ключ: safari_net Значение: table - type:string - тип сафари-сети: reusable, single_use, jailer, unknown - captured:string - идентификатор моба, или "?" - если случайная сеть
  8. Расширение для работы с Applied Energistics. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Структуры "Отпечаток" (Fingerprint) предмета/жидкости, используется для описания объекта в ME сети id:string - идентификатор dmg:number - мета nbt_hash:string? - хэш-сумма nbt Адаптеры блоков Сеть - какая-либо часть ME сети, провод, интерфейс и т.п. Идентификатор: me_network getStoredPower():number - хранимая в сети энергия getMaxStoredPower():number - размер хранилища энергии getIdlePowerUsage():number - потребление сети в простое getAvgPowerUsage():number - среднестатистическое потребление сети getAvailableItems([details:string]):table[] - список предметов/жидкостей в сети - fingerprint:table - отпечаток предмета/жидкости - size:number - количество предмета/жидкости - is_craftable:bool - есть ли автокрафт - is_fluid:bool - жидкость ли это - is_item:bool - предмет ли это - item:table? - информация о предмете, если указан details: all - все данные, proxy - прокси предмета getItemDetail(item:table[, proxy:bool]):table - подробная информация о предмете, необходимо передать отпечаток getCraftingCPUs():table - получить список процессоров автокрафта - name:string - имя процессора - storage:number - размер хранилища в байтах - coprocessors:number - количество со-процессоров - busy:bool - занят ли сейчас процессор ME интерфейс Идентификатор: me_interface requestCrafting(fingerprint:table[, qty:number[, cpu:string]]) - запросить крафт предмета, необходимо передать отпечаток, количество, имя процессора canExport(direction:string):bool - может ли интерфейс экспортировать предмет в заданный инвентарь exportItem(fingerprint:table, direction:string[, maxAmount:number[, intoSlot:number]]) - экспортировать предмет в заданный инвентарь и слот (если есть в сети), maxAmount - сколько необходимо предметов - fingerprint:table - отпечаток предмета - size:number - сколько предметов было экспортировано - is_craftable:bool - есть ли автокрафт - is_fluid:bool - жидкость ли это - is_item:bool - предмет ли это - item:table - подробная информация о предмете ME накопитель Идентификатор: me_storage getCellCount():number - количество ячеек getCellStatus(slot:number):number, string - статус ячейки - номер статуса и наименование Провайдеры предметов ME предметная ячейка Ключ: me_cell Значение: table - preformatted:bool - настроенная ячейка - fuzzy:bool - ячейка с картой нечёткости - totalBytes:number - общий объем, в байтах - usedBytes:number - использовано байт - freeBytes:number - свободно байт - totalTypes:number - максимальное количество типов предметов - usedTypes:number - использовано типов - freeTypes:number - доступно типов для использования
  9. Расширение для работы с IC2, в том числе Experimental. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Адаптеры блоков Жёрдочки - информация о растении на жёрдочках. Можно узнать параметры растения не анализируя его. Идентификатор: ic2_crop getID():string - идентификатор растения на жёрдочках getSize():number - размер растения (на сколько выросло) getGrowth():number - параметр скорости роста getGain():number - параметр урожайности getResistance():number - параметр сопротивления сорнякам getScanLevel():number - количество сканированний мешочка в анализаторе getNutrientStorage():number - сколько хранится удобрений, 0-100 getHydrationStorage():number - сколько хранится жидкости, 0-100, 1-10 - естественное увлажнение, 11-100 - искусственное увлажнение getWeedExStorage():number - сколько хранится средства от сорняков getHumidity():number - уровень влажности, 0-10 (10 - полное увлажнение) getNutrients():number - уровень удобрений, 0-10 getAirQuality():number - качество воздуха, 0-10 (10 - чистый) Реактор Идентификатор: ic2_reactor|ic2_chamber getHeat():number - нагрев реактора getMaxHeat():number - максимальный нагрев реактора getEUOutput():number - количество вырабатываемой энергии, в EU isActive():bool - активен ли реактор isValid():bool - только у ic2_chamber, правильно ли построен реактор Проводник EU Идентификатор: eu_conductor getEUConductionLoss():number - потеря EU за блок getEUConductorBreakdownEnergy():number - напряжение разрушения проводника getEUInsulationBreakdownEnergy():number - напряжение разрушения изоляции getEUInsulationEnergyAbsorption():number - часть энергии, поглощаемая изоляцией. Лишняя энергия - удар током. Потребитель EU Идентификатор: eu_sink getDemandedEnergy():number - максимальное безопасное напряжение getEUSinkTier():number - уровень напряжения потребителя (1 = LV, 2 = MV, 3 = HV, 4 = EV) Источник EU Идентификатор: eu_source getOfferedEnergy():number - выдаваемое напряжение getEUSourceTier():number - уровень напряжения источника (1 = LV, 2 = MV, 3 = HV, 4 = EV) Хранилище EU Идентификатор: eu_storage getEUStored():number - сколько хранится энергии getEUCapacity():number - размер хранилища getEUOutputPerTick():number - выдаваемое напряжение в тик Машина - информация о устройстве Идентификатор: ic2_machine getProgress():number - прогресс работы, 0.0-100.0 Источник тепловой энергии Идентификатор: ic2_heat_source getMaxKineticEnergy(side:string):number - (в названии баг?) максимальное количество выдаваемой энергии на стороне, в тик Источник кинетической энергии Идентификатор: ic2_kinetic_source getMaxKineticEnergy(side:string):number - максимальное количество выдаваемой энергии на стороне, в тик Провайдеры предметов Электрический предмет Ключ: electric Значение: table - tier:number - уровень предмета - charge:number - уровень заряда - maxCharge:number - максимальный уровень заряда - canProvideEnergy:number - можно ли использовать в качестве аккумулятора - transferLimit:number - максимальное отдаваемое напряжение
  10. CoFH Core, Lib - основы для многих модификаций, использующих Redstone Flux, а так-же для модификаций разработанных самой Team CoFH, например - Thermal Expansion. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Стороны доступны в sides API опенкомпов. Содержание: Адаптеры блоков RF потребители и проводники RF устройство Facing (направление лицевой стороны) Конфигурация сторон Редстоун-контроль Права доступа Контроллер инвентарей Улучшения устройства Эндер-проводник энергии Эндер-проводник жидкостей Эндер-проводник предметов Провайдеры предметов RF устройство Улучшение Усиление Контейнер Адаптеры блоков RF потребители и проводники - информация о буферах энергии в проводниках или потребителях. Идентификатор: rf_provider|rf_receiver getEnergyStored([side:number]) - получить количество хранимой энергии на стороне getMaxEnergyStored([side:number]) - размер хранилища энергии на стороне RF устройство - информация о потреблении устройства, и хранимой энергии. Идентификатор: rf_info getEnergyPerTickInfo():number - потребление энергии в тик getMaxEnergyPerTickInfo():number - максимальне потребление энергии в тик getEnergyInfo():number - количество хранимой энергии getMaxEnergyInfo():number - размер хранилища энергии Facing - можно управлять поворотом блока. Идентификатор: cofh_facing getFacing():number - текущее направление блока setFacing(side:number):bool - установить направление блока allowYAxisFacing():bool - возможно ли установить направление вверх или вниз rotateBlock():bool - циклически поворачивает блок Конфигурация сторон - можно установить конфигурацию сторон блока, но получить текущую нельзя Идентификатор: cofh_sides getNumConfig(side:number):number - количество конфигураций стороны setSide(side:number, config:number):bool - попытка установить конфигурацию стороны, config - индекс конфигурации, счёт с нуля resetSides():bool - сбросить конфигурацию всех сторон incrSide(side:number):bool - циклически увеличивать индекс конфигурации decrSide(side:number):bool - циклически уменьшать индекс конфигурации Редстоун-контроль Идентификатор: cofh_redstone setRedstoneControl(control:string) - установить режим редстоуна, при котором блок будет активен getRedstoneControl():string - получить текущий режим Права доступа - информация о владельце блока, и о текущем режиме доступа Идентификатор: cofh_secure getOwnerName():string - имя владельца getOwner():table - профиль игрока getAccess():string - режим доступа: public, restricted, private Контроллер инвентарей - информация о инвентаре на какой-либо из сторон блока. Идентификатор: cofh_inventory getInventoryContents(side:number):table[] - получить предметы в инвентаре getSizeInventory(side:number):number - получить размер инвентаря isEmpty(side:number):number - пустой ли инвентарь isFull(side:number):number - полный ли инвентарь Улучшения устройства - информация о установленных в устройство улучшениях. Идентификатор: augumentable getAugumentSlots():table[] - возвращает ячейки улучшений getAccess():bool[] - возвращает статус ячеек (открыта/закрыта) Эндер-проводник энергии - например, тессеракт из Thermal Expansion. Идентификатор: cofh_ender_energy getChannelName():string - получить название канала на текущей частоте getFrequency():number - получить частоту setFrequency(frequency:number):bool - установить частоту clearFrequency():bool - стереть частоту canSendEnergy():bool - может ли отправлять энергию canReceiveEnergy():bool - может ли принимать энергию Эндер-проводник жидкостей - например, тессеракт из Thermal Expansion. Идентификатор: cofh_ender_fluid getChannelName():string - получить название канала на текущей частоте getFrequency():number - получить частоту setFrequency(frequency:number):bool - установить частоту clearFrequency():bool - стереть частоту canSendFluid():bool - может ли отправлять жидкости canReceiveFluid():bool - может ли принимать жидкости Эндер-проводник предметов - например, тессеракт из Thermal Expansion. Идентификатор: ender_item getChannelName():string - получить название канала на текущей частоте getFrequency():number - получить частоту setFrequency(frequency:number):bool - установить частоту clearFrequency():bool - стереть частоту canSendItems():bool - может ли отправлять предметы canReceiveItems():bool - может ли принимать предметы Провайдеры предметов RF устройство Ключ: energy_te Значение: table - energyStored - количество хранимой энергии - maxEnergyStored - размер хранилища энергии Улучшение - информация о улучшении для устройств. Ключ: augumented Значение: table {type=level:number} - пары: параметр устройства, и уровень улучшения Усиление - информация о предмете с режимом усиления. Ключ: empowered Значение: bool - true, если включен усиленный режим Контейнер - предмет с инвентарем Ключ: container Значение: table - size - размер инвентаря
  11. Расширение для работы с minecraft. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Содержание: Адаптеры блоков Инвентарь - предоставляет возможность управлять внутренними ячейками любого инвентаря. Идентификатор: inventory getInventoryName():string - название инвентаря getInventorySize():string - количество ячеек в инвентаре getStackInSlot(slotNumber:number[, proxy:bool]):object - получить предмет в ячейке, если proxy не задан или false - возвращает всю информацию о предмете destroyStack(slotNumber:number) - уничтожить стек в ячейке expandStack(stack:table):object - узнать всю информацию о предмете (о любом предмете, даже если такого нет в инвентаре), необходимо передать id и мету swapStacks(fromSlot:number, intoSlot:number[, fromDirection:string[, toDirection:string]]) - поменять местами предметы в слотах -- fromDirection и toDirection используются для инвентарей, с которыми можно взаимодействовать через стороны, например - печь. -- Если передать в эти параметры сторону, то можно расширить поведение подобных инвентарей. -- Например печь swapStacks(1,2) без использования сторон, можно менять верхний и нижние слоты, если в них находится что-то горючее. -- Если передать вторым параметром "DOWN" swapStacks(1,2,nil,"DOWN") - то вынуть топливо уже не возможно. -- Но если в этом слоте есть пустое ведро (от лавы), то поменять слоты становится возможным. condenseItems() - собрать в кучу разбросанные в инвентаре предметы -- использовать с ОСТОРОЖНОСТЬЮ - если первые ячейки инвентаря не смогут принять предмет - он уничтожится Инвентарь в мире - предоставляет возможность взаимодействовать с соседними блоками-инвентарями. Идентификатор: inventory-world pullItem|pullItemIntoSlot(direction:string, slot:number[, maxAmount[, intoSlot]]):number - забрать предмет из соседнего инвентаря. Возвращает сколько количество перемещенных предметов. pushItem|pushItemIntoSlot(direction:string, slot:number[, maxAmount[, intoSlot]]):number - поместить предмет в соседний инвентарь. Возвращает сколько количество перемещенных предметов. Жидкостный бак - можно получить информацию о жидкости в баке. Идентификатор: fluid_tank getInfo():table - информация о хранилище жидкости Жидкостный контроллер - можно получить информацию о жидкостных хранилищах в блоке. Идентификатор: fluid_handler getTankInfo([direction]):table[] - информация о всех хранилищах жидкостей, можно передать конкретную сторону для получения бака Датчик дневного света - позволяет узнать информацию о небе и солнце. Идентификатор: vanilla_daylight_sensor hasSky():bool - имеется ли небо в этом биоме (его нет в энде, например) getSkyLight():number - освещенность неба, 0-15 (работает только в биомах с небом) getBlockLight():number - получить освещенность датчика, 0-15 getCelestialAngle():number - получить угол солнца, 0 это зенит, 0.0-360.0 Табличка - предоставляет управление табличкой. Идентификатор: vanilla_sign getText():string - получить текст таблички setText(text:string) - установить текст getLines():string[] - получить линии таблички setLines(lines:string[]) - установить линии таблички getLine(line:number):string - получить линию таблички setLine(line:number, text:string) - установить линию таблички Нотный блок - предоставляет управление нотным блоком. Идентификатор: vanilla_note getNote():number - получить текущую ноту setPitch(note):bool - установить ноту, 0-25 triggerNote() - проиграть текущую ноту incrementPitch() - увеличить текущую ноту на единицу playSound(sound:string, pitch:number, volume:number[, x:number, y:number, z:number]) - проигрывает ЛЮБОЙ звук из игры -- pitch и volume 0.0-1.0 -- x,y,z - относительно нотного блока -- список основных звуков можно узнать тут - https://minecraft-ru.gamepedia.com/Sounds.json Маяк - можно получить информацию о маяке и эффектах, но выставить необходимый эффект невозможно. Идентификатор: vanilla_beacon getPrimaryEffect():string - имя основного эффекта getSecondaryEffect():string - имя дополнительного эффекта int getLevels():number - количество уровней маяка Варочная стойка - можно получить информацию о времени варки. Для автоматической варки можно воспользоваться методами инвентаря. Идентификатор: vanilla_brewing getBrewTime():number - оставшееся время варки в тиках Компаратор - можно узнать уровень исходящего сигнала... и всё. Идентификатор: vanilla_comparator getOutputSignal():number - сила сигнала, 0-15 Цветочный горшок - можно узнать что в нём. Идентификатор: flower_pot getContents():table - получить информацию о предмете в горшке Печь - информация о состоянии печи. Идентификатор: vanilla_furnace getBurnTime():number - оставшееся время горения, в тиках getCookTime():number - сколько тиков прошло с момента начала обжарки предмета, в тиках getCurrentItemBurnTime():number - полное время обжарки предмета, в тиках isBurning():bool - активна ли печь Спавнер мобов - информация о мобе. Идентификатор: vanilla_spawner getSpawningMobName():string - имя моба Проигрыватель пластинок - можно узнать текущую пластинку. Идентификатор: vanilla_player getRecord():string - получить текущую пластинку Череп/голова - получить информацию о черепе или голове. Идентификатор: skull getType():string - тип головы/черепа getPlayer():string, string - информация о игроке: уникальный идентификатор и имя Провайдеры предметов Ore Dictionary Ключ: ore_dict Значение: table {имя_ore_dict=true} Хэш-сумма всех nbt-данных предмета Ключ: nbt_hash Значение: string Контейнер жидкости - информация о хранилище жидкости Ключ: fluid_container Значение: table Зачарованная книга - список зачарований на книге Ключ: enchanted_book Значение: table - name:string - имя зачарования - level:number - уровень зачарования - fullName:string - название зачарования, зависит от языка сервера Зачарованный предмет - список зачарований на предмете Ключ: ench Значение: table - name:string - имя зачарования - level:number - уровень зачарования - fullName:string - название зачарования, зависит от языка сервера Класс инструмента Ключ: tool_class Значение: table {тип_инструмента=уровень_добычи:number} Зелье Ключ: potion Значение: table - splash:bool - взрывное ли зелье - effects:table - список эффектов зелья - duration:number - длительность эффекта - amplifier:number - сила эффекта - effect - информация о эффекте, структура: - name:string - имя эффекта - instant:bool - моментальный ли эффект от зелья - color:number - цвет частиц зелья, 0xRRGGBB Броня Ключ: armor Значение: table - material:string - материал брони - type:string - тип части брони - color:number? - цвет окрашенной брони, 0xRRGGBB Меч Ключ: sword Значение: table - material:string - материал меча Инструмент Ключ: tool Значение: table - material:string - материал инструмента Время горения предмета в тиках Ключ: burn_time Значение: number Провайдеры сущностей Список предметов в инвентаре сущности Ключ: inventory|inventory-provider Значение: table[] - список proxy Информация о живом существе - огромное количество данных, может съесть память Ключ: living Значение: table - health:number - текущее здоровье - maxHealth:number - максимальное здоровье - yaw:number - поворот тела, вертикальная ось, -360 - 360 - yawHead:number - поворот головы, вертикальная ось, -360 - 360 - pitch:number - поворот головы, поперечная ось, -360 - 360 - heldItem:table - предмет в руке - armor:table - броня сущности - boots:table - предмет ботинок - leggings:table - предмет поножей - chestplate:table - предмет нагрудника - helmet:table - предмет шлема - potionEffects:string[] - список имён действующих эффектов - potion_effects:table[] - подробный список действующих эффектов - duration:number - длительность эффекта, в секундах - amplifier:number - сила эффекта - is_ambient:bool - эффект области, например в зоне действия маяка - effect:table - информация о эффекте - name:string - имя эффекта - instant:bool - моментальный ли эффект от зелья - color:number - цвет частиц зелья, 0xRRGGBB - lookingAt:table - на что смотрит существо - type:string - block или entity - id:number? - индекс сущности, для типа entity - position:number? - абсолютная или относительная(не относительно существа, а относительно сканера, например) позиция блока, для типа block - isAirborne:bool - существо находится в воздухе, т.е. летает или падает - isBurning:bool - существо горит - isAlive:bool - существо живо - isDead:bool - существо мертво, если было сохранено proxy существа - то при смерти значение выставится в true - isInWater:bool - существо в воде - isOnLadder:bool - существо на лестнице - isSleeping:bool - игрок спит - isRiding:bool - существо оседлало другую сущность - isSneaking:bool - существо приседает - isSprinting:bool - существо бежит - isWet:bool - существо мокрое, например после нахождения в воде - isChild:bool - существо-ребёнок Полоска здоровья босса Ключ: boss Значение: table - name:string - имя босса - health:number - текущее здоровье босса - maxHealth:number - максимальное здоровье босса Рамка для предметов Ключ: item_frame Значение: table - item:table - информация о предмете - rotation:number - поворота предмета, 0-3 Картина Ключ: painting Значение: table - title:string - название картины - width:number - ширина картины в блоках - height:number - высота картины в блоках Предмет на земле Ключ: item Значение: table - stack:table - информация о предмете - age:number - какое время предмет находится на земле, в тиках - lifespan:number - общее время "жизни" предмета, в тиках Приручаемое существо, например оцелот Ключ: tameable Значение: table - isTamed:bool - приручено ли существо - isSitting:bool? - сидит ли существо - ownerUUID:string? - uuid игрока, приручившего существо Индивидуальные провайдеры существ Игрок Ключ: player Значение: table - inventory:table[] - список proxy предметов инвентаре - isAirBorne:bool - находится ли в воздухе - isBlocking:bool - блок мечом - profile:table - профиль игрока - foodLevel:number - уровень сытости - isCreativeMode:bool - находится ли в креативе - experience:table - информация о опыте - level:number - уровень игрока - levelProgress:number - прогресс уровня, 0.0-1.0 - nextLevelXp:number - общее количество опыта до следующего уровня Летучая мышь Ключ: bat Значение: table - isHanging:bool - висит ли мышь Крипер Ключ: creeper Значение: table - isCharged:bool - заряженный ли крипер Лошадь, осёл или мул Ключ: horse Значение: table - eatingHaystack:bool - лошать ест сено - hasReproduced:bool - имеет ли потомство, не используется, всегда false - bred:bool - возможно ли размножение - horseType:number - тип лошади, 0-4 - horseVariant:number - раскраска лошади: текстура - первые 8 бит, пятна - следующие 8 бит - horseTemper:number - характер лошади, 0-100, чем больше значение - тем быстрее приручается - horseTame:bool - приручена ли лошадь - ownerUUID:string - uuid владельца лошади - chestedHorse:bool - если сундук на осле/муле - chest:table[]? - список proxy предметов в сундуке Свинья Ключ: pig Значение: table - isSaddled:bool - есть ли седло на свинье Овца Ключ: sheep Значение: table - sheepColor:number - цвет овцы, индекс 0-15 - isSheared:bool - пострижена ли овца Житель Ключ: villager Значение: table - profession:number - профессия жителя, 0-4 - isMating:bool - житель размножается - isPlaying:bool - ребёнок жителя играет - isTrading:bool - сейчас торгует с игроком - customer:table? - профиль игрока-покупателя Ведьма Ключ: witch Значение: table - isAggressive:bool - агрессивна ли ведьма Волк Ключ: wolf Значение: table - isShaking:bool - волк отряхивается - isAngry:bool - волк злой - collarColor:bool - цвет ошейника, индекс 0-15 Зомби Ключ: zombie Значение: table - isVillagerZombie:bool - является ли зомби-жителем - convertingToVillager:bool - сейчас превращается в жителя На этом функционал ванилы окончен.
  12. OpenPeripheral предоставляет мощный функционал по созданию собственных интерфейсов в виде очков дополненной реальности "Terminal Glasses". К сожалению, полного списка функционала и всех нюансов по работе с этими очками не найти. Присутствуют некоторые отрывки, небольшие видео с результатами работы и прочие поделки. Но! Спустя пару бессонных ночей, декомпилированного кода и трёх литров чая, удалось описать полный функционал этих очков. Основные возможности очков и периферии: Отображение геометрических объектов различной сложности и цветовой гаммы. Отображение текста. Отображение жидкостей и предметов. Взаимодействие с мышью/клавиатурой. Чтение сообщений чата. Специальные команды чата, не отображающиеся в нем. Возможность индивидуальной работы с каждым пользователем терминала. Установка очков в любой шлем. Возможности данных очков я опишу по разделам, в лучших традициях вики Для начала, определю некоторые понятия. Система терминальных очков состоит из трёх предметов: терминала, очков, беспроводной клавиатуры. Терминал является центром всей системы, через него происходит общение между компьютером и очками. Также он хранит все данные интерфейса и пользователей. На очки выводится вся графическая информация, а сами очки передают сообщения или команды чата на терминал. Беспроводная клавиатура позволяет дополнить всю систему, своей возможностью контроля элементов при помощи клавиатуры и мыши. Как выводить информацию на очки: local com = require("component") local opb = com.openperipheral_bridge -- Построение интерфейса происходит во внутреннем буффере терминала (он же мост). local text = opb.addText(10, 10, "", 0xffef7f) -- Создаем компонент "Текст". -- Его нужно создать только один раз, в остальное время можно обращаться по ссылке и изменять любой параметр. local counter = 0 while true do -- В качестве примера будет выводится счетчик секунд. text.setText(tostring(counter)) -- Обновляем текста компонента. opb.sync() -- Для отображения графики на экране, необходимо отправить буффер на очки. os.sleep(1) -- Ждем секунду и прибавляем счетчик. counter = counter+1 end API Перед тем как перейти к API, нужно знать: Color:number -- Число в формате TrueColor RGB (по умолчанию 0xffffff). Opacity:number -- Прозрачность, число от 0.0 до 1.0 (по умолчанию 1). Знак '?' -- Опциональный параметр/функция. События Строковые константы VerticalAlignment:[TOP, MIDDLE, BOTTOM] HorizontalAlignment:[LEFT, MIDDLE, RIGHT] GuiElement:[OVERLAY, PORTAL, HOTBAR, CROSSHAIRS, BOSS_HEALTH, HEALTH, ARMOR, FOOD, MOUNT_HEALTH, AIR, EXPERIENCE, JUMP_BAR, OBJECTIVES] Структуры данных SimpleBox, ColoredPoint, Coord, User Абстрактные объекты Drawable, BoundedShape, Box Графические объекты Управление графическими объектами DrawableFactory, DrawableContainer Управление терминалом Вот такая шпаргалка по очкам, надеюсь пригодится
  13. Перенос статьи Эта тема была перенесена из блока "Статьи". Автор оригинала: ShuraGamer. Сначала выскажу огромное спасибо @Totoro, @Alex, @Fingercomp, @LeshaInc за их программы, благодаря которым более-менее смог разобраться в очках. Небольшая предыстория(кому неинтересно, основной текст ниже): Началось все с дверного замка Тоторо, в котором использовались неведомые мне до этого очки для вывода информации под названием Terminal Glasses. Мне захотелось побольше узнать о них, но увы-ни в каких, даже англоязычных источниках подробного гайда я не нашел. Спросил на форуме, может кто знает? Кибер предложил написать гайд самому, на халяву вайт получить. Тут-то , немного покопавшись в документации,я и осознал весь размер подложенной мне свинки... Я, наивная душа, подумал, а, фигня, тут же только вывод данных! OpenPeripheral оказался отдельным модом, и писать гайд только по одной его части не имеет особого смысла. Так что придется разбираться полностью. А пока что-держите первую часть гайда по моду OpenPeripheral - Terminal Glasses! Приятного ознакомления! Итак, начнем мы с физической части нашей парочки - Terminal Glasses и Terminal Glasses Bridge. В дальнейшем я буду называть их "очки" и "мост" для простоты. Методы API одинаковы как в ОС, так и в СС Начнем с принципа работы очков. Он достачно прост: информация передается с компьютера на мост, а с моста уже на очки(прим. Можно подключить несколько очков). Если честно, я хз, как данные передаются на очки, видимо тут квантовая зависимость поиграла... Итак, мы ставим мост рядом с компьютером. Далее мы подключаем очки к мосту, просто райткликнув ими по блоку. Готово! Все подготовления завершены, можем начинать программировать! Сначала подключаем мост к компу: OC -- com = require('component') bridge = com.openperipheral_bridge CC -- bridge = peripheral.wrap(сторона подключения к компьютеру) Или bridge=peripheral.wrap("bridge") Теперь мы разбираемся с API: brige.addBox([X-координата], [Y-координата] , [Размер по вертикали] , [Размер по горизонтали], [Хексадецимальный код*], [Прозрачность**]) -- добавляет прямоугольник по заданным параметрам. *Хексадецимальный код - цветовой код, подробнее - гугл. Малая таблица цветов: Черный #000000 Белый #FFFFFF Красный #FF0000 Зеленый #00FF00 Синий #0000FF Желтый #FFFF00 Морская волна #00FFFF Розовый #00FF00 Подробная таблица цветовых кодов:Тык! Цвета подаются в программу в виде 0xКОД, например 0x000000 **Прозрачность: 1 - полностью видимый; 0 - еле заметный(Дробные числа работают) bridge.addText([X-координата], [Y-координата] , [Строка] , [Хексадецимальный код]) - выводит строку в нужных координатах. bridge.clear() - сбрасывает все данные в мосте. Итак, вы все еще помните принцип передачи данных? Так вот, сами собой данные в очках не появятся, мы должны вручную "отправлять" картинку с моста на очки(При отправлении данных с моста на очки вся предыдущая информация сбрасывается) В этом нам поможет bridge.sync(). Для ясности мы напишем небольшую программку, которая показывала бы нам точное время(Напишем ее на OC): --TIMEONGLASSES-- com = require('component') bridge = com.openperipheral_bridge function addbox() bridge.addBox(1,1,80,10,0xFFFFFF,0.2) end function addtime() datetime = os.date("!*t",os.time()) time ="TIME"..datetime.hour..":"..datetime.min bridge.addText(5,2,time,0xFF0000) end --MAIN-- while true do bridge.clear() addbox() addtime() bridge.sync() os.sleep(0.1) end Итак, господа, разберем по полочкам вышенаписанную программу Функция addbox() создает почти прозрачный прямоугольник слева сверху на экране Функция addtime() выводит текущее время, кому интересна строчка: datetime = os.date("!*t",os.time()), прошу по ссылке: Тык! Далее мы смотрим на главный цикл. Разберем его построчно while true do и end - бесконечный цикл bridge.clear() - очищаем мост для новой информации addbox(),addtime() - добавляем табличку со временем bridge.sync() - отсылаем табличку на очки os.sleep(0.1) - ждем десятую секунды Всем спасибо за внимание, надеюсь, помидоры будут не сильно тухлыми :/ P.S. BB-зло!
  14. 1) Может ли робот получить доступ к component.openperipheral_sensor через адаптер или только через компьютеры и контроллеры? 2) Можно ли определить, как подключены внутренние компоненты, вставлены ли они при сборке, либо в слоты расширения?
  15. Я, кажется, эдак годик (ну ладно-ладно, меньше) назад фигачил чатик и вроде был доволен (нет). Вот тута хранится сей артефакт: http://computercraft.ru/topic/758-chat-dlia-googolglasses/ Как выяснилось впоследствии, чатик был совершенно непродуман и неудобен. К тому же, я изрядно получше научился кодить на Луа. И вот, полностью задолбавшить старым чатиком, я засел писать новый. В этом топике представляю вниманию перевод README на гитхабе. Фичи: Каналы Поддержка беспроводной клавиатуры Модули Сетевой интерфейс Разделённые буферы вывода Конфиг-файл ... Требования: Карта данных или блок данных (OpenSecurity) — нужен для сетевого интерфейса. Соотвественно, мост и очки OpenPeripheral (TODO здесь должна быть картина, наныть у Тоторо). Использование Установка Вам нужны будут мост, очки, адаптер, а также карта или блок данных. Подсоедините адаптер к компьютеру (рядом поставить или кабелем соединить), поставьте мост рядом с адаптером. Вставьте карту данных в компьютер, если вы скрафтили её, или подключите блок данных. Теперь пропишите edit /etc/chat.json и отконфигурируйте по своему желанию. Предсказываю, что наверняка вам хотелось бы сменить список админов, например, чтобы потушить чат по-нормальному. Когда вы морально и физически готовы, пропишите opg-chat. Базовое использование Оденьте очки. Та-даам! Появится на мой взгляд довольно красивый интерфейсик. См. пикчу внизу. Чтобы что-то туды отправить, прямо в чат пишите сообщение, добавив $$ в начало. Чтобы отправить команду, сделайте то же самое, но со / перед сообщением. Кроме того, можно использовать беспроводную клавиатуру, тогда доллары не нужны. Некоторые команды, которые желательно знать stop — стопнуть прогу. Очевидно, только для админов доступно. join <канал> — подключиться к каналу. part [канал/номер вкладки] — покинуть канал. И да, главный канал покинуть нельзя. Приносим извинения. help [команда] — попросить помощи у сервера. Можно дать команду — даст подробную инфу о ней. page <строки> — скроллить историю сообщения на канале. Положительные значения двигают вверх, отрицательные — вниз.На клавиатуре можно просто тыкать [PgUp]/[PgDn]. Продвинутое использование Модули Если вас не устраивает стандартная поставка чата, можно дописать свои модули. Просто создайте файл с разрешением .module в директории /usr/lib/chat-modules и творите магию. Как образец можно использоваться стандартные модули. Окружение (доступные функции) storage — таблица, временная память для всякого. Может быть использована для общения между модулями. apcall(func, args...) — advanced pcall — вырезает всякую ненужную фигню типа номера строчки и пр., оставляя только причину. Использована для показа ошибки пользователям (так как там ошибки для простоты assert'ом гонятся). createChannel — внутренняя функция. addUser(user) — создать пользователя с данным именем. join — рекомендую не использовать функцию. joinN(chan, user) — затаскивает пользователя на канал. Отсылает всякие оповещения, делает события и создаёт канал, если не существует. part — внутрення функция. partN(chan, user[, partMsg]) — заставляет пользователя выйти с канала с опциональной причиной. quitN(user[, quitMsg]) — заставляет его же покинуть вообще все каналы. sendMsgChan(chan, user, msg[, recipients]) — отослать сообщение на канал от имени пользователя. Можно дать таблицу тех, кому будет видно сообщение. sendMsgChanN(chan, user, msg) — то же самое, в принципе, но сделать дополнительные проверки (модерируемый ли канал там, достаточно ли прав). Не всегда полезно может быть — потому используйте функцию выше, если никаких проверок правовых не надо. addObject(surface, objName, funcKey, args...) — рекомендуемый способ для рисования объектов на поверхности (surface). Первым нужно дать таблицу из surfaces, потом задать имя объекту, указать название функции (строкой!) и дать аргументы функции. Нужно, чтобы можно было обратиться к объекту позже. Кроме того, хранит в userdata объекта его имя — если захочется использовать поддержку мыши без напряга. getActiveChannel(user) — вернуть "активный" канал. Т. е. у пользователя открыт возвращаемый канал (вкладка). bridge — прокси моста. surfaces — таблица, содержащая поверхности пользователей. surfaces[user] = { surface = {...}, -- Сама поверхность objects = {...} -- объекты на поверхности, созданные функцией `addObject` } users — список пользователей, созданных функцией addUser. commands — список зарегистрированных команд. isin(tbl, value) — маленькая, но очень полезная функция, которая кочует из одной моей проги в другую. Проходится по таблице и ищет указанное значение. Возвращает true, первый найденный ключ таблицы при успехе и false при неудаче. cfg — таблица с конфигурацией. В неё можно записывать — конфиг сохраняется каждую минуту и при выходе. setMode(chan, user, mode[, arg]) — выставить mode. mode — это параметр типа ±<буква mode>, например, +o, -h. Почти как в IRC. modes — таблица всех доступных modes. getLevel(chan, user) — возвращает маску уровня доступа пользователя. checkLevel(chan, user, levels, any) — проверяет, достаточно ли прав у пользователя. levels — таблица, содержащая уровни ({OP, ADMIN, SERVER}). Если any == true, то пользователя достаточно иметь один из перечисленных уровней для успеха. Иначе, все. reqcom(componentName, required[, msg]) — возвращает прокси компонента. Если его нет, а required ~= true, то вернуть пустой компонент (при его индексации возвращает всегда function() end), если же required == true, то создаст ошибку. Напишет ещё сообщение msg, если дано, а компонента нет. copy(tbl) — тоже очень полезная небольшая рекурсивная функция. Копирует таблицу. Напомню, что в Луа при передачи таблицы в функцию, та не копируется, а даётся той же самой (ну как & в Си-языках), что иногда чрезвычайно полезно, не иногда совсем не нужно. _FILE — строка с именем файла модуля. _MODULE — строка с названием модуля (ну то есть то же имя файла его, но без разрешения) NORMAL, VOICE, HALFOP, OP, ADMIN, SERVER — уровни доступа. PREFIXES — таблица уровень-префикс для вывода на очки. всякие там @, %. addListener(eventName, name, func) — добавить слушатель с данным именем, работающий как event.listen, но игнорирующийся при завершении программы. delListener(eventName, name) — удалить слушатель. command {args} — создать новую команду. Лично я опускаю скобки, так как не люблю их. args = { name = "название команды, которую надо писать через /", level = NORMAL, -- кому позволено писать команду help = "Краткое описание команды в списке /help", doc = [[Длинная документация для команды, можно на несколько строк делать]], func = function(eventName, chan, user, raw, cmd, args...) -- eventName — название события -- chan — канал, откуда отправлено событие -- user — пользователь, запустивший команду -- raw — необработанная команда без / в начале -- cmd — название команды -- args... — аргументы, разделённые пробелом (пробелами) end } Сетевой интерфейс (network.module) Этот модуль позволяет вам создавать своих чат-ботов через сеть. Поддерживает оба типа модемов. Однако, советую знать о Spoofing Card из Computronics — она позволяет указывать адрес отправителя (не только проводная сеть, но и беспроводная). Конфигурация В конфиг-файле (/etc/chat.json) есть секция "net". Пример: "net": { "enabled": true, "modemStrength": 400, "ports": { "6667": true, "6666": ["519187"] } } "enabled" задаёт, загружать ли модуль вообще. Если модем беспроводной, его сила будет установлена в значение параметра "modemStrength". "ports" — список портов, которые программа будет слушать. Левая часть ("6667"), очевидно, порт. Правая часть можно быть или true — тогда программа не будет фильтровать порт, или белый список адресов (или их частей). В моём примере, программа будет принимать соединения на порту 6667 только от адресов, которые начинаются на "519187". Команды <имя пользователя>, "auth", <пароль> — подключиться к серверу. true, "keep", "auth", <сессия> — <сессия> — это временный пароль, требуемый для других команд. <имя пользователя>, "msg", <сессия>, <сообщение> — отправить сообщение или команду на сервер. true, "keep", "ok" — сообщение успешно отправлено. <имя пользователя>, "quit", <сессия>[, причина] — закрыть соединение. true, "close" — успешно закрыто. <имя пользователя>, "chaninfo", <сессия>, <канал> — получить инфу о канале. false, "keep", "you are not on channel" — не на канале. true, "keep", <data> — <data> — это сериализованная таблица со всей информацией. <имя пользователя>, "userinfo", <сессия>, <пользователь> — получить инфу о пользователе. false, "keep", "no such user" — запрошена инфа о несуществующем пользователе. true, "keep", <data> — <data> — это вериализованная таблица, соедржащая инфу о пользователе. Ошибки false, "error", "there is already an open connection for this address" — соединение для данного адреса уже установлено. false, "error", "nickname is already in use" — данное имя пользователя уже используется. false, "error", "no password given" — не дан пароль. false, "error", "could not auth: <причина>" — не смог авторизоваться, неизвестная причина. false, "error", "wrong auth" — нет соединения для авдреса, не тот пользователь или неверная сессия. false, "error", "no message given" — не дано сообщение (3 аргумент). События "event", "chat", <канал>, <пользователь>, <сообщение>, <все>, <получатели> — это собтие создаётся, когда пользователь пишет сообщение на канале. Здесь и ниже, <all> — это булева переменная, которая равна true[/i], когда отдельных получателей не задано (всем на канале отослано), и [il]false в противном случае. Если <all> == true, то <recipients> — сериализованная таблица получателей, иначе — сериализованная строка "all". "event", "notice", <канал>, <типУведомления>, <строкаУведомления>, <получатели> — событие создаётся при уведомлениях. "event", "pm", <пользователь>, <получатель>, <сообщение> — событие создаётся при отправке ЛС. "event", "join", <канал>, <пользователь> — пользователь вошёл на канал. "event", "part", <канал>, <пользователь>, <причина> — пользователь покинул канал. "event", "quit", <пользователь>, <причина> — пользователь вышел с сервера. false, "close", "server is stopping" — сервер завершает работу, соединение закрыто. Пароли Как вы могли заметить, нужен пароль для подключения. Где его взять? Если для пользователя нет пароля (или это имя не было использовано), следует отправлять "" в качестве пароля. Если же он есть, его и нужно отправлять в аргументе. Для установки пароля используйте команду /pass [пароль]. Если аргумент опустить, он будет снят с имени. Пароли хранятся в виде MD5-хешей. Для небольшой программки сойдёт, думаю, и этого. Сессии После небольшого раздумья ко мне пришло решение проблемы со Spoofing card из Computronics. Было решено усложнить жизнь ботам и клиентам, добавив сессию — временный пароль длиной в 16 символов, который даётся при авторизации. Он требуется для большинства других команд. Фуух. А теперь о том, как скачивать. Всё очень просто: устанавливаем OPPM (OpenPrograms Package Manager) и пишем oppm install opg-chat. Вуаля. Кроме того, программа требует OpenOS 1.6 и Lua 5.3. Исходники доступны тут: https://github.com/OpenPrograms/Fingercomp-Programs/tree/master/opg-chat Ах, да, собственно, пикчи этого безобразия:
  16. Думаю, тут самое подходящее место, чтобы опубликовать мое новое творение Узнал я недавно о таком прекрасной модификации для любимой игры: OpenComputers. Разузнав подробности, решил попробовать что-нибудь для нее написать, ведь изучение нового яп всегда пойдет на пользу. И тут меня потянуло на графику. Но стандартные мониторы оставляют желать и искать лучшего. Благо, есть такое дополнение, как OpenPeripheral, расширяющее возможности OC, и, помимо прочего, добавляющее очки, через которые можно нарисовать на экране что-то четкое. Думаю, не стоит больше растягивать предисловие. Представляю вашему вниманию простенький низкоуровневый(пока) графический интерфейс: я назвал его Glass3D. Что можно с ним сделать? Добавить в список вершины по x,y,z Создать полигоны по 3-м вершинам Преобразовывать группы вершин при помощи матриц Быстро все отрисовывать благодаря sync-функции из api моста очков(~30 fps может) Зачем? Отрисовывать красивые схемы, голлограммы из ваших программ, которые смогут быть всегда перед глазами Исходники https://raw.githubusercontent.com/Trientalis/OpenComputersProgramms/master/Glass3D.lua Использование Описание интерфейсов addVertex3D(x,y,z,h):index -- создает новую вершину, параметр h пока не используется(вообще нужен для масштаба) addVertices3D({x1,y1,z1,x2,y2,z2...,xn,yn,zn}):{index1,...indexn} -- принимает координаты точек, возвращает массив индексов removeVertex3D(index) -- удаляет вершину, побочный эффект: смещение, будет решено в будующих версиях addPolygon3D({index1,index2,index3},{color,opacity=1}):name -- добавляет полигон по трем точкам и цвету, возвращает имя полигона index1+"_"+index2+"_"+index3 removePolygon3D(name) -- удаляет полигон, без побочных эффектов transform({index1,...,indexn},{number1,...,number16}) -- умножает текущую матрицу вершин на переданную update() -- применяет матрицы вершин на их координаты, рисует полигоны setFocalLenght(number) -- задает расстояние от глаз пользователя до экрана демо: --Тетраэдр, немного кривой, ну да ладно local gl=dofile("Glass3D.lua") --gl.setFocalLenght(200) gl.addPolygon3D({gl.addVertex3D(-20,15,0),gl.addVertex3D(20,15,0),gl.addVertex3D(0,-20,0)},{color=0xff00ff,opacity=1})--Добавляет 3 вершины и полигон из них gl.addPolygon3D({1,2,gl.addVertex3D(0,0,-25)},{color=0x00ff00,opacity=1})--2вершины у нас уже есть, нужна еще одна gl.addPolygon3D({2,3,4},{color=0x0000ff,opacity=1})--остальные 2 грани gl.addPolygon3D({3,1,4},{color=0xff0000,opacity=1}) local angle=-0.1*math.pi/180--угол поворота for i=1,50 do--вращение по Y gl.transform({1,2,3,4},{math.cos(angle),0,-math.sin(angle),0, 0,1,0,0, math.sin(angle),0,math.cos(angle),0, 0,0,0,1}) gl.update() os.sleep(0.03) end for i=1,50 do--вращение по Y+Z gl.transform({1,2,3,4},{math.cos(angle),math.sin(angle),0,0,-math.sin(angle),math.cos(angle),0,0,0,0,1,0,0,0,0,1}) gl.update() os.sleep(0.03) end for i=1,60 do--вращение по Y+X+Z gl.transform({1,2,3,4},{1,0,0,0, 0,math.cos(angle),math.sin(angle),0, 0,-math.sin(angle),math.cos(angle),0, 0,0,0,1}) gl.update() os.sleep(0.03) end О матрицах матрица параллельного переноса: [ 1 0 0 0 ] [ 0 1 0 0 ] [ 0 0 1 0 ] [ x y z 1 ] матрица растяжения/сжатия: [ z 0 0 0 ] [ 0 y 0 0 ] [ 0 0 x 0 ] [ 0 0 0 1 ] матрица поворота вокруг оси x: [ 1 0 0 0 ] [ 0 cos α sin α 0 ] [ 0 -sin α cos α 0 ] [ 0 0 0 1 ] матрица поворота вокруг оси y: [ cos α 0 -sin α 0 ] [ 0 1 0 0 ] [ sin α 0 cos α 0 ] [ 0 0 0 1 ] матрица поворота вокруг оси z: [ cos α sin α 0 0 ] [-sin α cos α 0 0 ] [ 0 0 1 0 ] [ 0 0 0 1 ] Баги, ошибки Сейчас уже можно нормально пользоваться этим api для простых целей, но имеется один старанный баг, и я никак не могу найти ошибочное место в коде: если применить матрицу поворота по одной оси, потом обновить экран(матрица сольется с вершиной), потом применить поворот по другой оси, эффект прежней матрицы остается А, может быть, это вообще не баг, с матрицы я раньше использовал только для одной из осей. И еще подхрамывает постоянность частота кадров: увеличивается со временем. Спасибо за внимание, надеюсь, вам понравилась моя работа.
  17. У меня есть мод OpenPeripheral. Я пытался сделать обработку событий glasses_chat_message. Видел, как в некоторых программах используют $$команда (команда очков). Вроде ошибок не кидает, но вместо сообщения в терминал выводит какой-то адрес. Если это событие не работает в OpenComputers (а есть такое подозрение), то есть какие-то аналоги приема сообщений из чата (без Computronics)? А если нету и выход - использовать только Chat Box из Computronics, то как обработать ивент там?
  18. Небольшая программка для автоматического переодевания в защитный костюм и обратно с защитой от забывания в инвентаре радиоактивных предметов. Не знаю как вас, но меня всегда раздражало переодеваться для работы с реактором, и вот пришла в голову мысль запилить вот такую утилитку. Суть её в том, чтобы переодеть вас в ЗК, или наоборот(в зависимости от того, в чём вы сейчас), и если вы в ЗК и забыли выложить какие-то стерженьки или кусочки, он перед процедурой переодевания заберёт у вас опасные игрушки. Нужно: PIM, комп, сундук. Чтобы всё правильно работало нужно поставить PIM, рядом сундук(у меня с севера, но в программе можно изменить сторону на 8 строке), стать на PIM в одном из комплектов брони, запустить программу, одеть другой комплект(порядок не имеет значения), снова запустить. Всё! Примечания: В сундуке комплект ЗК хранится в первых 4-х слотах, а ваш шмот в следующих 4-х, так что туда ничего не кладите, особенно плутоний, иначе он оденется вам на голову. Программа не особо полезна, но для тех, кто вручную управляет реактором сэкономит много времени и обезопасит от облучения =) , если у вас есть какая-нибудь программа управления реактором - добавьте в неё эту утилиту - будет вааще зашибись! Ссыль на pastebin
×
×
  • Создать...