Ръководство за начинаещи

Съдържание

Стартиране на проект за приставки

Първо трябва да подготвите всичко, за да създадете приставка

  • Поставете pploader.jar в директорията/plugins /
  • Поставете jython.jar в директорията/lib /

След това нека създадем папка за нашия плъгин. Трябва да го създадете в директорията/plugins/Името на папката трябва да завършва с .py.dir Нека създадем например папката sampleplugin.py.dir След това в папката sampleplugin.py.dir трябва да бъдат създадени два файла

  • plugin.py (Това е основният файл на приставката. Main.py също е разрешен. Всички други файлове ще бъдат игнорирани)
  • plugin.yml (Файл с всички метаданни на приставката. Неговото име, основен клас, версия, кома и т.н.)

Приставката няма да работи без тези два файла.

Първи стъпки за изграждане на вашата приставка

Попълнете своя plugin.yml така изглежда така:

Попълнете своя plugin.py така изглежда така:

Внимание: Правилното отстъп е много важно в този файл. Не използвайте Tab за отстъп. Използвайте 4 интервала. Всеки раздел трябва да е на едно и също ниво! Във всички функции на класа (например def onEnable), първият аргумент винаги трябва да бъде self! Много е важно основният клас да наследява от PythonPlugin. Също така името му трябва да съответства на основния параметър от plugin.yml

Всичко. Приставката е готова. Сега можете да стартирате сървъра. Нашият плъгин ще пише в конзолата, когато стартира

примерна приставка е активирана

onEnable () и onDisable ()

Тези функции се извикват, когато приставката е активирана/деактивирана. По подразбиране приставката ще бъде включена при стартиране на сървъра и можете да конфигурирате съобщението, което е написано в конзолата при стартиране на приставката. onEnable () е първото нещо, което се прави в приставката.

Слушатели на събития (куки)

Слушателите на събития или куките всъщност ще бъдат най-голямата част от вашите приставки. Всичко, което не би се случило с играчите на сървъра, може да бъде уловено чрез тях. Играчът е сложил блок или играчът е убил някакво чудовище, или нещо друго - всичко това се хваща през куката (събития). Преди да създадете такава кука, трябва да я регистрирате от страната на приставката. Добро място за регистриране на куки е мястото, където вашият плъгин се свързва със сървъра (onEnable). Когато регистрирате събитие (кука), сървърът вече ще знае, че когато се случи събитието, той ще уведоми приставката ви за това. Доста стандартен модел за регистриране на събития.

Първата стъпка е да импортирате необходимите класове. Добавете в самото начало на нашия файл plugin.yml

Сега е моментът да напишете клас за слушател на събития. За всяко събитие ще има манипулатор. Поставете следния код след свързване на класовете. Преди нашия клас, клас SampleClass (PythonPlugin):


За да регистрираме самото събитие, ни трябва Plugin Manager. Добавете следния ред към onEnable на нашия основен клас плъгин.

Следващата стъпка е да регистрираме нашия клас за слушатели на събития. Всички куки, които са в клас SimpleListener (PythonListener) ще бъдат автоматично регистрирани. За да направите това, добавете следните редове

Първият ред създава нашия слушател на събития. Вторият го регистрира в Bukkit. Свършен. Сега, когато играч влезе в сървъра, ще му бъде изпратено съобщение в чата Добре дошли в rccraft сървъра

Е, целият код изцяло:

Сега знаете как да използвате събития, но какво, ако трябва да се справите с команди, изпратени от плейъра? За целта използвайте функция в основния клас '' 'onCommand' ''. Този код се извиква, когато играч напише команда в чата, започвайки с символа "/". Например въвеждането на "/ направи нещо" ще извика кода '' 'onCommand' ''. В този случай нищо няма да се случи при извикване. трябва да програмирате околната среда.

Опитайте се да не използвате команди, които вече са взети от други плъгини или от самия bukkit. Например give е една от тези команди.

Методът '' 'onCommand' '' винаги трябва да връща True или False. Ако командата е изпълнена правилно, обикновено връща True. Ако в командата или нейните параметри са допуснати грешки, False се връща. Bukkit от своя страна, ако '' 'onCommand' '' върне False, отпечатайте 'use: property' от вашия plugin.yml файл.

За описанието на '' 'onCommand' '' винаги трябва да посочите 4 параметъра.

  • '' 'sender' '' - кой е изпратил командата (може би конзолата)
  • '' 'cmd' '' - командата, въведена от потребителя (в plugin.yml могат да бъдат изброени няколко команди)

  • '' 'alias' '' - кои от имената на връзките са използвани (например: msg, pm, t)
  • '' 'args' '' - списък с допълнителни аргументи, предадени на командата. например / здравей abc def ще сложи abc в args [0] и деф в аргументи [1]

Добавете onCommand към основния клас на нашия плъгин.

Редът '' 'cmd.getName (). Долен () == "samplecommand"' '' в този ред поставяме командата, която потребителят е въвел с малки букви и след това сравняваме с "samplecommand". Правим това, за да може потребителят да въведе вашата команда във всеки регистър. Или "Samplecommand", или "SampleComMaNd".

Добавете командата към plugin.yml

Трябва също да добавите командата към plugin.yml файл. Добавете следното в края plugin.yml:

  • '' 'samplecommand' '' - Име на екипа
  • '' 'description' '' - Описание на командата.
  • '' 'разрешение' '' - разрешение за вашата команда. Bukkit автоматично ще провери за разрешение и ще отпечата съобщение до потребителя, ако той няма достъп до тази команда
  • '' 'use' '' - Съобщението, което ще бъде изпратено на плейъра, ако методът '' 'onCommand' '' върне False. Пишете, за да може играчът да разбере как да използва тази команда
Всички полета на свойствата и всичко за plugin.yml са описани тук

Конзолни команди срещу команди на Player

Параметърът '' 'подател' '' може да бъде или потребител, или сървърна конзола.

Винаги проверявайте кой е изпратил командата. Важно е. В крайна сметка, ако например искате да отпечатате координатите на плейъра и въведете командата в конзолата, ще възникне грешка.

Друг пример заCommand:

Често се случва приставката ви да се нуждае от променлива, за да запази, когато сървърът е изключен или изключен, обикновено някаква настройка или свойство. Това се постига чрез конфигуриране, тъй като този Bukkit предоставя собствена вградена функция.

Вземете конфигурацията за приставката

За да получите конфигурацията за вашия плъгин, трябва да напишете self.getConfig () plugin.py

Променливата за конфигуриране вече ще съдържа всички ваши настройки на приставката. И в бъдеще ще работим с нея.

Задаване на конфигурационни променливи

С нашата конфигурационна променлива можем да запазваме всички стандартни типове данни във файл (низове, числа, списъци, булеви):

Получаване на конфигурационни променливи

Извличането на конфигурационни променливи се постига чрез използването на различни методи за извличане, както е показано тук:

Първият аргумент за всички функции за конфигуриране е името на свойството (например 'player.damaged'). Вторият аргумент е стойността по подразбиране, която се заменя, ако свойството не е намерено в конфигурацията.

Запазване и зареждане от диск

Има само три команди, които трябва да знаете, за да запазите и заредите настройките от диска:

Определянето дали човек има конкретни разрешения в bukkit е много просто:

За да зададете стойности по подразбиране за разрешения или родителски и дъщерни разрешения, добавете ги към plugin.yml. Това не е задължително, но най-добре е винаги да го правите. По-долу е даден пример plugin.yml:

По подразбиране

По подразбиране, когато не е определено разрешение за играч hasPermission ще върне false. Във вашия plugin.yml можете да промените това, като зададете възела по подразбиране да бъде една от четирите стойности:

  • вярно - разрешението ще бъде достъпно за всички по подразбиране.
  • невярно - разрешението няма да е достъпно за всички по подразбиране.
  • оп - достъпно по подразбиране само за администратори.
  • не оп - достъпно за всички, които не са администратор.

Деца (предци, деца, наследници)

За да могат всички дъщерни разрешения да бъдат включени в разрешенията с *, трябва да го декларирате разделено с плюс точка * Освен това, в секцията за деца, посочете всички дъщерни разрешения:

Задачи за планиране и фонови задачи

Блокови операции

Най-лесният начин за създаване или модифициране на блокове. Първо, ще сменим блока над играча (отгоре) в 5-ти блок от позицията на играча. За целта ще използваме събитието PlayerMove (задейства се всеки път, когато позицията на играча се промени) (манипулаторът трябва да бъде описан в класа PythonListener).

Нека да разгледаме кода. Първо заемаме позицията на играча, след което получаваме „света“, който ни е необходим за последващи операции върху блоковете. След това вземаме текущата позиция на играча по височина и я увеличаваме с 5. След това получаваме информация за текущия блок чрез командата w.getBlockAt (loc); Накрая променяме идентификатора на блока на 1 (камък). Също така можем да променим допълнителните му свойства, можете да добавите нов ред b.setData (3) веднага след реда b.setTypeId (1)

Ще разгледаме и доста прост алгоритъм за конструиране.

Този код ще изгради 3D куб или кубоид с необходимия размер (той трябва да бъде извикан принудително на удобно за вас място). Ако трябва да изчистите блокове, използвайте идентификационна стойност 0 (известна още като въздушен блок)

Отначало управлението на инвентара ви може да изглежда сложно, но всъщност е доста просто. Тук ще бъде описано управлението на инвентара на играча, но това е подходящо и за управление на инвентара на сандъци и подобни блокове:

В метода onPlayerJoin създаваме няколко променливи, за да улесним работата си: плейър, инвентар и диамантена купчина. След това проверяваме дали играчът има куп диаманти. Ако е така, тогава издаваме още една купчина диаманти inventory.addItem (diamondstack) и изпращаме златно съобщение. Ако искахме да му отнемем диамантите от играча, тогава вместо inventory.addItem (diamondstack) щяхме да напишем inventory.remove (diamondstack).

Bukkit API ви позволява да правите много интересни и нестандартни неща. Ето няколко примера:

Как да запалите някого само с команда:

Сега, ако напишете команда като/запали Notch и ако играчът "Notch" е онлайн, Notch ще светне!

Продължавайки темата, представяме начин да убием играча. За това използваме метода onCommand:

Друг начин да убиете играч, но с експлозия: