Дополнительные данные предмета — различия между версиями

(Новая страница: «<div class="mw-parser-output"><div class="mw-parser-output"> = <span style="font-size:18.0pt"><span style="line-height:107%">Работа с дополнител…»)
 
Строка 1: Строка 1:
 
<div class="mw-parser-output"><div class="mw-parser-output">
 
<div class="mw-parser-output"><div class="mw-parser-output">
= <span style="font-size:18.0pt"><span style="line-height:107%">Работа с дополнительными данными предметов</span></span> =
+
<div class="mw-parser-output"><div class="mw-parser-output"><div class="mw-parser-output">
 +
== <span style="font-size:18.0pt"><span style="line-height:107%">Работа с дополнительными данными предметов</span></span> ==
  
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Кроме id, кол-ва и data предмет может иметь еще и дополнительные данные, такие как зачарования, измененное имя и прочее. Далее будет описан интерфейс для работы с ними.</span></span></span>
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Кроме id, кол-ва и data предмет может иметь еще и дополнительные данные, такие как зачарования, измененное имя и прочее. Далее будет описан интерфейс для работы с ними.</span></span></span>
  
<span style="font-size:large;"><span style="line-height:107%">Доступ к доп. данным</span></span>
+
=== <span style="font-size:large;"><span style="line-height:107%">Доступ к дополнительным&nbsp;данным</span></span> ===
  
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Методы Inner Core отдают предметы в виде объектов, содержащих 3 поля - id, count и data, описывающие соответствующие параметры предметов. В дополнение к ним может существовать (только в случае, если предмет имеет доп. данные) поле extra, которое содержит в себе интерфейс для доступа к дополнительным данным предмета.</span></span></span>
+
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Методы Inner Core отдают предметы в виде объектов, содержащих 3 поля - id, count и data, описывающие соответствующие параметры предметов. В дополнение к ним может существовать (только в случае, если предмет имеет доп. данные) поле extra, которое содержит в себе интерфейс для доступа к дополнительным данным предмета<ref>На момент версии 1.1.1.X некоторые методы не поддерживают этот 4 параметр, для получения полностью рабочих методов можно использовать ModAPI.requireGlobal(</ref>.&nbsp;</span></span></span>
  
<u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:107%">Важно:</span></span></u>&nbsp;
+
'''''Важно:&nbsp;'''''
  
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Объект предмета, изменение основных параметров которого поведет изменение реального предмета (например, предметы, полученные из контейнера или в каллбеках брони) обладает таким же качеством при изменении доп. данных (т.е. их изменения изменят доп. данные реального предмета).&nbsp;</span></span></span>
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Объект предмета, изменение основных параметров которого поведет изменение реального предмета (например, предметы, полученные из контейнера или в каллбеках брони) обладает таким же качеством при изменении доп. данных (т.е. их изменения изменят доп. данные реального предмета).&nbsp;</span></span></span>
  
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">И наоборот, объект предмета, который не привязан к реальному предмету (большая часть методов работы с инвентарем, к примеру Player.getCarriedItem()) при изменении доп. данных не изменит сам предмет, потому измененные или новые доп. данные для их применения передаются после параметров id, count, data в устанавливающие методы<font color="#000000" face="Calibri, sans-serif">.<span style="font-size:medium;">&nbsp;</span></font></span></span></span><span style="font-size:12.0pt"><span style="line-height:107%"><span style="font-family:"><span style="color:black">&nbsp;[[#_ftn1|<sup><sup><span style="font-size:12.0pt"><span style="line-height:107%"><span style="font-family:"><span style="color:black">[1]</span></span></span></span></sup></sup>]]&nbsp;</span></span></span></span>
+
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">И наоборот, объект предмета, который не привязан к реальному предмету (большая часть методов работы с инвентарем, к примеру Player.getCarriedItem()) при изменении доп. данных не изменит сам предмет, потому измененные или новые доп. данные для их применения передаются после параметров id, count, data в устанавливающие методы<font color="#000000" face="Calibri, sans-serif">.</font></span></span></span>
<div><div id="ftn1">&nbsp;</div> </div>
+
 
 
== <span style="font-size:large;"><span style="line-height:107%">Класс ItemExtraData</span></span> ==
 
== <span style="font-size:large;"><span style="line-height:107%">Класс ItemExtraData</span></span> ==
  
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Объект доп. данных является объектом типа ItemExtraData, реализующим интерфейс для работы с ними.&nbsp;</span></span></span>
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Объект доп. данных является объектом типа ItemExtraData, реализующим интерфейс для работы с ними.&nbsp;</span></span></span>
  
=== <span style="line-height:103%"><u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:103%">Примечание</span></span></u></span> ===
+
'''''Примечание:'''''
  
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Объект ItemExtraData является сохраняемым объектом, что значит, он может присутствовать в любых сохраняемых данных, автоматически преобразовываться в JSON и загружаться из него.</span></span></span>
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Объект ItemExtraData является сохраняемым объектом, что значит, он может присутствовать в любых сохраняемых данных, автоматически преобразовываться в JSON и загружаться из него.</span></span></span>
  
=== <span style="line-height:162%"><u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:162%">Конструкторы</span></span></u><span style="font-size:12.0pt"><span style="line-height:162%">&nbsp;</span></span></span> ===
+
=== Конструкторы&nbsp; ===
  
 
<span style="line-height:162%"><span style="font-size:12.0pt"><span style="line-height:162%">''new ItemExtraData() - создает новые пустые доп. данные''</span></span></span>
 
<span style="line-height:162%"><span style="font-size:12.0pt"><span style="line-height:162%">''new ItemExtraData() - создает новые пустые доп. данные''</span></span></span>
Строка 28: Строка 29:
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">new ItemExtraData(extraData) - принимает другой объект доп. данных и создает его копию, если передан null, аналогичен первому конструктору</span></span>''</span>
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">new ItemExtraData(extraData) - принимает другой объект доп. данных и создает его копию, если передан null, аналогичен первому конструктору</span></span>''</span>
  
=== <u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:107%">Работа с зачарованиями</span></span></u> ===
+
=== Работа с зачарованиями ===
  
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">extra.isEnchanted() - возвращает true, если предмет зачарован.</span></span>''</span>
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">extra.isEnchanted() - возвращает true, если предмет зачарован.</span></span>''</span>
Строка 42: Строка 43:
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">extra.getAllEnchantNames() - возвращает имена всех присутствующих зачарований, разделенные символом перевода строки (так же, как они отображаются под предметом)</span></span>''</span>
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">extra.getAllEnchantNames() - возвращает имена всех присутствующих зачарований, разделенные символом перевода строки (так же, как они отображаются под предметом)</span></span>''</span>
  
=== <u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:107%">Работа с измененным именем</span></span></u> ===
+
=== Работа с измененным именем ===
  
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">extra.getCustomName() - возвращает измененное имя предмета или null, если оно не изменено</span></span>''</span>
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">extra.getCustomName() - возвращает измененное имя предмета или null, если оно не изменено</span></span>''</span>
Строка 50: Строка 51:
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Произвольные данные нужны чтобы сохранять в конкретном предмете что-то нужное конкретному моду для выполнения функций данного предмета (к примеру, там можно хранить какие-то данные о внутреннем инвентаре, режим инструмента, данные вида пчелы и т.п.)</span></span></span>
 
<span style="line-height:103%"><span style="font-size:12.0pt"><span style="line-height:103%">Произвольные данные нужны чтобы сохранять в конкретном предмете что-то нужное конкретному моду для выполнения функций данного предмета (к примеру, там можно хранить какие-то данные о внутреннем инвентаре, режим инструмента, данные вида пчелы и т.п.)</span></span></span>
  
=== <u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:107%">Работа с произвольными данными</span></span></u> ===
+
=== Работа с произвольными данными ===
  
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">Методы сохранения сохраняют значение какого-то типа под данным именем, чтобы в последствии к нему можно было осуществить доступ:</span></span>''</span>
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">Методы сохранения сохраняют значение какого-то типа под данным именем, чтобы в последствии к нему можно было осуществить доступ:</span></span>''</span>
Строка 66: Строка 67:
 
<span style="line-height:162%">''<span style="font-size:12.0pt"><span style="line-height:162%">extra.getInt(name, fallback)&nbsp; extra.getLong(name, fallback)&nbsp; extra.getFloat(name, fallback)&nbsp; extra.getString(name, fallback)&nbsp; extra.getBoolean(name, fallback)&nbsp; extra.removeCustomData() - удаляет все произвольные данные</span></span>''</span>
 
<span style="line-height:162%">''<span style="font-size:12.0pt"><span style="line-height:162%">extra.getInt(name, fallback)&nbsp; extra.getLong(name, fallback)&nbsp; extra.getFloat(name, fallback)&nbsp; extra.getString(name, fallback)&nbsp; extra.getBoolean(name, fallback)&nbsp; extra.removeCustomData() - удаляет все произвольные данные</span></span>''</span>
  
<span style="line-height:162%"><u style="text-underline:black"><span style="font-size:12.0pt"><span style="line-height:162%">Другие методы:</span></span></u></span>
+
=== Другие методы: ===
  
 
<span style="line-height:162%"><span style="font-size:12.0pt"><span style="line-height:162%">''copy() - создает копию объекта''</span></span></span>
 
<span style="line-height:162%"><span style="font-size:12.0pt"><span style="line-height:162%">''copy() - создает копию объекта''</span></span></span>
  
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">isEmpty() - возвращает true, если не содержит никаких доп. данных (такой объект аналогичен null, т.е. доп. данных нет)</span></span>''</span>
 
<span style="line-height:108%">''<span style="font-size:12.0pt"><span style="line-height:108%">isEmpty() - возвращает true, если не содержит никаких доп. данных (такой объект аналогичен null, т.е. доп. данных нет)</span></span>''</span>
<div>
+
</div> </div> </div>
----
 
<div id="ftn1">
 
[[#_ftnref1|<span style="font-size:10.0pt"><span style="line-height:107%">[1]</span></span>]] На момент версии 1.1.1.X некоторые методы не поддерживают этот 4 параметр, для получения полностью рабочих методов можно использовать ModAPI.requireGlobal("название метода")
 
</div> </div> </div> </div>
 

Версия 23:54, 12 июля 2018

Работа с дополнительными данными предметов

Кроме id, кол-ва и data предмет может иметь еще и дополнительные данные, такие как зачарования, измененное имя и прочее. Далее будет описан интерфейс для работы с ними.

Доступ к дополнительным данным

Методы Inner Core отдают предметы в виде объектов, содержащих 3 поля - id, count и data, описывающие соответствующие параметры предметов. В дополнение к ним может существовать (только в случае, если предмет имеет доп. данные) поле extra, которое содержит в себе интерфейс для доступа к дополнительным данным предмета[1]

Важно: 

Объект предмета, изменение основных параметров которого поведет изменение реального предмета (например, предметы, полученные из контейнера или в каллбеках брони) обладает таким же качеством при изменении доп. данных (т.е. их изменения изменят доп. данные реального предмета). 

И наоборот, объект предмета, который не привязан к реальному предмету (большая часть методов работы с инвентарем, к примеру Player.getCarriedItem()) при изменении доп. данных не изменит сам предмет, потому измененные или новые доп. данные для их применения передаются после параметров id, count, data в устанавливающие методы.

Класс ItemExtraData

Объект доп. данных является объектом типа ItemExtraData, реализующим интерфейс для работы с ними. 

Примечание:

Объект ItemExtraData является сохраняемым объектом, что значит, он может присутствовать в любых сохраняемых данных, автоматически преобразовываться в JSON и загружаться из него.

Конструкторы 

new ItemExtraData() - создает новые пустые доп. данные

new ItemExtraData(extraData) - принимает другой объект доп. данных и создает его копию, если передан null, аналогичен первому конструктору

Работа с зачарованиями

extra.isEnchanted() - возвращает true, если предмет зачарован.

extra.addEnchant(id, level) - добавляет зачарование типа id и уровня level предмету, если зачарование такого типа уже имеется, то изменяет его уровень.

extra.getEnchantLevel(id) - возвращает уровень зачарования типа id или 0, если такого нет extra.removeEnchant(id) - удаляет зачарование данного типа, если оно есть extra.removeAllEnchants() - удаляет все зачарования  extra.getEnchantCount() - возвращает кол-во зачарований

extra.getEnchants() - возвращает объект, содержащий все зачарования, где ключи это типы зачарований, а значения - их уровни extra.getEnchantName(id, level) - возвращает имя зачарования по его типу и уровню

extra.getEnchantName(id) - возвращает имя зачарования по его типу и уровню, который сохранен в доп. данных на данный момент

extra.getAllEnchantNames() - возвращает имена всех присутствующих зачарований, разделенные символом перевода строки (так же, как они отображаются под предметом)

Работа с измененным именем

extra.getCustomName() - возвращает измененное имя предмета или null, если оно не изменено

extra.setCustomName(name) - изменяет имя предмета или убирает измененное имя, если передан null

Произвольные данные нужны чтобы сохранять в конкретном предмете что-то нужное конкретному моду для выполнения функций данного предмета (к примеру, там можно хранить какие-то данные о внутреннем инвентаре, режим инструмента, данные вида пчелы и т.п.)

Работа с произвольными данными

Методы сохранения сохраняют значение какого-то типа под данным именем, чтобы в последствии к нему можно было осуществить доступ:

extra.putInt(name, value) - целое число

extra.putLong(name, value) - большое целое число, больше 32 бит (более 2х миллиардов по модулю)

extra.putFloat(name, value) - 64 битное дробное число

extra.putString(name, value) - строка extra.putBoolean(name, value) - булева переменная (true/false)

Методы доступа отдают значение, сохраненное под данным именем или значение по умолчанию, которое может быть передано вторым параметром (если оно не передано, то значение по умолчанию это null/false/0 в зависимости от типа)

extra.getInt(name, fallback)  extra.getLong(name, fallback)  extra.getFloat(name, fallback)  extra.getString(name, fallback)  extra.getBoolean(name, fallback)  extra.removeCustomData() - удаляет все произвольные данные

Другие методы:

copy() - создает копию объекта

isEmpty() - возвращает true, если не содержит никаких доп. данных (такой объект аналогичен null, т.е. доп. данных нет)

  1. На момент версии 1.1.1.X некоторые методы не поддерживают этот 4 параметр, для получения полностью рабочих методов можно использовать ModAPI.requireGlobal(