Этот интерфейс используется для доступа и взаимодействия компьютера с компонентами.
- 1 Интерфейс
- 2 Примеры
- 3 Адреса компонентов
- 4 «Главный» компонент
- 5 Прокси
- 6 Прямые вызовы
- 7 Сигналы
Интерфейс
Возвращает строку документации по заданному методу заданного адресом компонента. Обратите внимание, что вы также можете получить эту строку при помощи функции tostring . Пример: tostring(component.screen.isOn) .
- component.invoke(address:string, method:string[, . ]): .
Вызывает заданный метод заданного адресом компонента. Необязательные аргументы функции посылаются как аргументы заданному методу. Возвращает результат вызова метода, например, значения возвращаемые им.
- component.list([filter:string]):function
Возвращает итерируемый список всех компонентов присоединенных к компьютеру (сети) в виде кортежей «адрес, тип компонента».
Пример использования: for address, componentType in component.list() do . end .
Fabric vs Forge vs Quilt
Если установлен параметр filter , функция возвращает только те компоненты, которые содержат заданную строку (это не шаблон/регулярное выражение). Например, component.list(«red») вернет компоненты redstone .
- component.proxy(address:string):table
Возвращает «прокси» объект компонента. Прокси предоставляет все методы компонента в качестве своих полей, что позволяет обращаться к ним напрямую (без вызова invoke ).
Может использоваться для получения первого компонента некоторого типа:
Результат — прокси первого redstone компонента возвращенного оператором component.list вызывает метод getInput .
Примечание: component.list всегда содержит как минимум два поля: type с названием типа компонента и address с его адресом.
- component.type(address:string):string
Возвращает тип компонента заданного адресом.
- component.get(address: string[, componentType: string]): string | (nil, string)
Пытается найти полный адрес компонента по сокращенному. Возвращает адрес в случае успеха, или nil и текст ошибки в противном случае. Необязательный параметр — фильтр по типу компонентов.
- component.isAvailable(componentType: string): boolean
Проверяет доступен ли главный компонент с указанным типом.
- component.getPrimary(componentType: string): table
Возвращает прокси главного компонента заданного типа. Вызывает ошибку, если такого не существует.
- component.setPrimary(componentType: string, address: string)
Назначает новый главный компонент заданного типа. Адрес может быть сокращенным, но при этом должен быть правильным (если он не равен nil ). Переключает сигналы component_unavailable или component_available если адрес равен nil или новому значению соответственно.
Примеры
Программа пишет «redstone» для каждой красной платы в сети.
Что такое API?
local component = require(«component») — prints `redstone` for each attached redstone card. for _, name in component.list(«red») do print(name) end
Обратите внимание, что Component API позволяет также следующий синтаксис:
local component = require(«component») local rs0 = component.getPrimary(«redstone») local rs1 = component.redstone — syntactic sugar print(rs0 == rs1) — true
Адреса компонентов
Каждый компонент имеет свой адрес. Этот адрес представляет собой UUID — уникальный идентификатор. В большинстве случаев адрес можно сократить до уникальной части.
Чтобы получить полный адрес из сокращенного используйте component.get . Чтобы узнать адрес конкретного устройства вы можете воспользоваться анализатором (зажмите Ctrl и щелкните правой кнопкой мыши).
Получение списка адресов всех компонентов в сети:
# lua Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio lua> local component = require(«component») lua> for k,v in component.list() do print(k, v) end xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx keyboard xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx screen xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx gpu .
Обратите внимание, что компоненты сохраняют свои адреса даже тогда, когда удалены из компьютера. Таким образом, дисковод, который вы вытащили и поставили обратно, сохраняет свой адрес. Это не касается механизмов-блоков. Блоки получают новый адрес каждый раз, когда их ставят.
«Главный» компонент
Component API назначает один из компонентов каждого типа «главным». Если блоков одного типа несколько, «главный» выбирается случайно. Вы можете обращаться к главному компоненту оператором component.xxx , где xxx — это тип.
lua> component.gpu.address xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
В качестве альтернативы, вы можете воспользоваться оператором component.getPrimary(«xxx») . В этом случае можно получить ошибку если не существует главного компонента этого типа. Это можно предварительно проверить оператором component.isAvailable(«xxx») . Получить сообщение об ошибке может быть понятнее, чем nil в первом варианте.
Главный компонент используется, когда компьютер определяет на какой монитор выводить изображение при первом запуске.
Прокси
Есть два способа использования адресов компонентов. Первый — component.invoke(address, method, . ) . Например:
local component = require(«component») component.invoke(modemAddress, «broadcast», port, data)
Более удобный способ — прокси. Прокси — это таблица, которая предоставляет одноимённую функцию для каждого вызова метода через invoke . Кроме того прокси имеет два поля: address , которое определяет адрес компонента, и type , которое содержит его тип. пример использования прокси:
local component = require(«component») local proxy = component.proxy(address) — The call above using the proxy: proxy.broadcast(port, data) — The common proxy fields: print(proxy.address) — address passed to component.proxy above print(proxy.type) — «modem»
Примечание: когда вы обращаетесь к главному компоненту через component.getPrimary или component.xxx — вы используете его прокси.
Прямые вызовы
Некоторые вызовы компонентов могут выполняться как «прямые вызовы». «Прямые вызовы» выполняются в рабочем потоке компьютера. Это означает, что результат будет получен немедленно. Обычные вызовы делегируются в главный поток сервера, чтобы избежать состояния гонки и других конфликтов потоков. Это означает, что обычные вызовы выполняются в течение одного «такта» (50 миллисекунд).
Этот случай относится только к Component API.
Сигналы
Сигналы — важный элемент взаимодействия с компонентами. При помощи сигналов компоненты могут уведомлять компьютер о каких-либо событиях или изменениях вокруг. К примеру, пользовательский ввод обрабатывается компьютером при помощи сигналов. Компьютеры также могут создавать свои собственные сигналы. Это может быть удобно для повторного использования кода, или просто асинхронного доступа к другим частям кода.
Источник: wiki-minecraft.ru
Plugin API
Plugin API [1] — это запланированная функция, которая позволит разработчикам модов и плагинов легко добавлять больше контента к игре. [2] Он позволит установить модификации и плагины без необходимости изменения файла minecraft.jar. Команда Bukkit участвует в разработке Plugin API [3] .
Plugin API был запланирован 5 июля 2010 года, вскоре после выхода Alpha 1.0.1_01 [4] . Изначально утверждалось, что релиз на 1.3, но затем его отложили до 1.4. Curse заявила, что релиз состоится в версии 1.5, но он так и не состоялся [5] . С тех пор дата выхода Plugin API неизвестна. [6] [7] [8]
Особенности
Планируется максимально упростить установку плагинов в игру. [9] Хотя команда Bukkit участвует в разработке Plugin API, он не будет основан на Bukkit.
Следующие возможности планируются как часть Plugin API:
- Плагины будут ориентированы на многопользовательскую игру
- API добавит официальную поддержку модификаций (плагинов), что позволит легко установить плагины в игру, сокращая время и усилия, чтобы изменить minecraft.jar. Уменьшит шанс падения игры.
- На сайтах Minecraft можно будет увидеть самые интересные плагины и пользовательские карты.
- Проще будет добавлять и анимировать модели.
Пакеты ресурсов, добавленные в 1.6, автоматическое обновление лаунчера к новой версии, делают возможным введение Plugin API. Тем не менее, пакеты ресурсов не будут использоваться для добавления плагинов, так как они направлены на изменение внешнего вида игры, в то время как плагины направлены на изменение игровых функций.
На MineCon 2012, Mojang AB поделилась своим мнением по поводу будущего Plugin API. [10] [11] Видеоролик с мероприятия на английском языке: https://youtu.be/1uTl3aWEvEA
Примечания
- ↑https://twitter.com/Dinnerbone/status/184570898920112128
- ↑https://twitter.com/Dinnerbone/status/184583108547444736
- ↑http://www.mojang.com/2012/02/minecraft-team-strengthenedModding API: Bukkit Developing API
- ↑Server scripting
- ↑https://twitter.com/Dinnerbone/status/272733076738682881
- ↑http://www.pcgamer.com/the-future-of-minecraft/
- ↑https://twitter.com/Dinnerbone/status/519799449212973056
- ↑https://twitter.com/Dinnerbone/status/516548988892643328
- ↑https://twitter.com/Dinnerbone/status/184585004389646336
- ↑https://youtu.be/FPUn5-vRNeM
- ↑https://youtu.be/Mv8Sz2sqBB0
Источник: minecraft.fandom.com
Надежда всего мира Minecraft! Проект Sponge Powered API
Привет, шахтеры! Как многие из вас знают, наша любимая игра Minecraft прошла через многое за последние несколько недель. Для начала, краткая сводка произошедшего:
— Компания Mojang, вместе с разработкой Minecraft , была куплена Microsoft за 2,5 миллиарда $. Одной из основных причин продажи компании стало то, что Notch (уже бывший владелец и создатель Minecraft ) уже не справлялся с Mojang, она стала для него большой, слишком глобальной компанией. И, как он сам утверждает: «Отдал ее в хорошие руки».
У всех сложилось свое мнение о Microsoft в этой истории, чаще не самое хорошее, но, сейчас не об этом =)
— Bukkit закрыли! Один из его авторов отправил в соответствующий орган просьбу о прекращении существования — Закон об авторском праве в цифровую эпоху). Сделал он это добровольно, это было его законное право. Также удалены исходный код для Bukkit и его производные ( Spigot , Cauldron ). Ничего больше не доступно.
Отстой, не правда ли? Нет больше Bukkit! Что мы будем делать?
Однако имейте в виду, что Mojang собираются запускать свой «проект Bukkit». Они будут обновлять игру по мере своих возможностей. Посмотрим, что из этого получится 🙂
Но! Есть новость, которая подает больше надежд, чем «проект Bukkit » от Microsoft . Само сообщество Minecraft (обычные игроки и владельцы серверов) собрались вместе, чтобы сделать свой собственный API! Application Programming Interface — это интерфейс программирования, интерфейс создания приложений. Mojang ничего плохого по этому поводу пока не говорят, значит, проект все-таки будет осуществлен до конца.
Название проекта — Sponge API.
Что такое Sponge ?
Да, это губка =), которая представляет собой сочетание нового API (вероятно, основанная на исходном API), реализуемая на Forge и с их участием, при содействии других членов моддинг сообщества Minecraft (Glowstone, Canary и т.д.).
Кто участвует в этом проекте?
sk89q (из WorldEdit / WorldGuard) — руководитель проекта
blood (из MCPC + / Cauldron ) — руководитель проекта
LexManos ( из Forge / FML / MCP)
cpw ( из Forge / FML / MCP)
Участники команды Spout (Zidane / Raphfrk / DDoS / Sleaker / Owexz / Wulfspider)
Участник команды Flow (kitskub)
Участник команды ForgeEssentials (AbrarSyed)
Другие разработчики Bukkit плагинов (KHobbits / Elgarl / ZML)
Участники команды FTB
Команда Glowstone (SpaceManiac)
Участники команды XereoNet squad
Некоторые предыдущие владельцы Bukkit
И, конечно же, любой участник сообщества, который хочет внести свой вклад! Этим участником может стать каждый.
В принципе, новый проект API следует одной главной концепции:
Мы должны решить, что будет с будущими обновлениями.
Тем не менее, не известно, одобрят ли Mojang Sponge API, когда она будет закончена, или, они будут работать сами над тем, что осталось от Bukkit.
Sponge API будет создаваться с использованием уже известного Minecraft кода. Будут использованы Java 1.6 и Spout API. Это будет сделано с техническими требованиями Bukkit, без нарушения их авторского права. MIT License — лицензия свободного программного обеспечения, разработанная Массачусетским технологическим институтом.
Как сообщество пришло к такой замечательной, но сложной в реализации идее? Это потребует очень много усилий! Но, продукт, безусловно, окупится.
Был ли этот проект запущен разработчиками по их собственному желанию? Вовсе нет. Они провели опрос и объявили о проекте на своем IRC канале irc.esper.net in #sponge ( Internet Relay Chat — ретранслируемый интернет-чат ). Большинство пользователей одобрили инициативу, и, именно поэтому, проекту быть!
Sponge Powered API будет создаваться в зависимости от мнения сообщества. Они не будут создавать то, что пользователям не нужно, будут подстраиваться под требования игроков. Они хотят сохранить наследие Minecraft , чтобы помочь владельцам серверов, проектам, таким, как наш, и игрокам.
Как я уже писала, каждый может принять участие в разработке. Если вы хотите помочь сообществу в создании продукта, необходимого всему миру Minecraft , добро пожаловать на их официальный сайт: http://www.spongepowered.org
Может, именно благодаря Вам, нелицензионные проекты Minecraft не вымрут от рук Microsoft =)
Что ж, будем надеяться!
Источник: minecraftonly.ru