Контейнеры — различия между версиями

(Created page with " Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и т...")
 
м (Работа с контейнером)
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
  
 
Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса.
 
Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса.
 
 
 
  
 
Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже.
 
Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже.
 
 
 
  
 
Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера.
 
Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера.
 
 
 
  
 
=== Методы ===
 
=== Методы ===
  
 
Создание нового контейнера:
 
Создание нового контейнера:
<pre>var container = new UI.Container();</pre>
+
<pre>var container = new UI.Container();
 
+
</pre>
&nbsp;
 
  
 
Обращение к встроенному контейнеру внутри tile entity: this.container
 
Обращение к встроенному контейнеру внутри tile entity: this.container
 
&nbsp;
 
  
 
=== Работа со слотами ===
 
=== Работа со слотами ===
 
*getSlot("имя слота") - возвращает объект слота с данным именем, если такого слота нет, создает пустой слот на этом имени и возвращает его. Слот это объект вида {id: id предмета, count: кол-во предмета, data: data предмета}. К слотам интерфейса привязываются слоты с такими же именами, как и у элементов этих слотов в интерфейсе.
 
 
&nbsp;
 
  
 
Пример:
 
Пример:
Строка 44: Строка 31:
 
     }
 
     }
  
}</pre>
+
}
 
+
</pre>
&nbsp;
 
  
 
А прототип tile entity имеет событие клика предметом по нему:
 
А прототип tile entity имеет событие клика предметом по нему:
Строка 67: Строка 53:
 
}</pre>
 
}</pre>
  
&nbsp;
+
<br/> Таким образом каждый раз, когда мы будем тапать предметом по блоку данного tile entity, то в слоте test_slot будет лежать тот же самый предмет, что и в руке.
  
Таким образом каждый раз, когда мы будем тапать предметом по блоку данного tile entity, то в слоте test_slot будет лежать тот же самый предмет, что и в руке.
+
=== Работа с контейнером ===
 
 
&nbsp;
 
  
 +
*getSlot("имя слота") - возвращает объект слота с данным именем, если такого слота нет, создает пустой слот на этом имени и возвращает его. Слот это объект вида {id: id предмета, count: кол-во предмета, data: data предмета}. К слотам интерфейса привязываются слоты с такими же именами, как и у элементов этих слотов в интерфейсе.
 
*setSlot("имя слота", id, кол-во, data) - устанавливает переданный предмет в слот с данным именем. Краткая запись того, что было показано в примере.  
 
*setSlot("имя слота", id, кол-во, data) - устанавливает переданный предмет в слот с данным именем. Краткая запись того, что было показано в примере.  
 
*clearSlot("имя слота") - очищает слот с данным именем  
 
*clearSlot("имя слота") - очищает слот с данным именем  
Строка 80: Строка 65:
 
*refreshSlots() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов обновляет данные о слотах в контейнере  
 
*refreshSlots() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов обновляет данные о слотах в контейнере  
 
*applyChanges() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов сохраняет изменения, которые были произведены на контейнере  
 
*applyChanges() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов сохраняет изменения, которые были произведены на контейнере  
 
&nbsp;
 
 
&nbsp;
 
 
=== Работа с интерфейсом ===
 
 
 
*openAs(объект интерфейса любого типа) - открывает данный объект интерфейса и привязывается к нему  
 
*openAs(объект интерфейса любого типа) - открывает данный объект интерфейса и привязывается к нему  
 
*isOpened() - возвращает, открыт ли этот контейнер для какого-то интерфейса  
 
*isOpened() - возвращает, открыт ли этот контейнер для какого-то интерфейса  

Текущая версия на 20:03, 19 августа 2019

Контейнер - это объект, позволяющий хранить предметы в слотах, осуществлять операции с ними и так же обладающий методами для интеграции с любым интерфейсом, который открыт для этого контейнера. Произвольный контейнер может быть открыт как любой интерфейс, при этом он будет привязан ко всем слотам интерфейса.

Каждый объект tile entity в мире по умолчанию обладает контейнером, который автоматически сохраняется и для которого открывается интерфейс, отданый при выполнении события getGuiScreen. Подробнее об этом в уроке по tile entity и ниже.

Все специальные контейнеры, такие как инвентарь игрока или сундука наследуют все методы базового контейнера.

Методы[править]

Создание нового контейнера:

var container = new UI.Container();

Обращение к встроенному контейнеру внутри tile entity: this.container

Работа со слотами[править]

Пример:

//интерфейс tile entity задается так:

{

     // ...

     elements: {

          // ...

          "test_slot": {type: "slot", x: 400, y: 400, size: 100} // самый обычный слот с именем test_slot

     }

}

А прототип tile entity имеет событие клика предметом по нему:

{

     // ...

    

     click: function(id, count, data, coords){

          var slot = this.container.getSlot("test_slot"); // получаем объект слота, который привязан к слоту test_slot в интерфейсе

          slot.id = id; slot.count = count; slot.data = data; // устанавливаем в слот тот предмет, которым тапнули по блоку tile entity

          return false;

     }

}


Таким образом каждый раз, когда мы будем тапать предметом по блоку данного tile entity, то в слоте test_slot будет лежать тот же самый предмет, что и в руке.

Работа с контейнером[править]

  • getSlot("имя слота") - возвращает объект слота с данным именем, если такого слота нет, создает пустой слот на этом имени и возвращает его. Слот это объект вида {id: id предмета, count: кол-во предмета, data: data предмета}. К слотам интерфейса привязываются слоты с такими же именами, как и у элементов этих слотов в интерфейсе.
  • setSlot("имя слота", id, кол-во, data) - устанавливает переданный предмет в слот с данным именем. Краткая запись того, что было показано в примере.
  • clearSlot("имя слота") - очищает слот с данным именем
  • validateSlot("имя слота") - если кол-во или id предмета нулевое или отрицательное, очищает слот. Быстрое исправление некорректных значений слота (пустой слот с кол-вом больше 0, предмет существует, однако его кол-во 0)
  • validateAll() - вызывает метод validateSlot для всех слотов
  • dropAt(x, y, z) - очищает контейнер и дропает все, что содержалось в нем на данных координатах ввиде предметов
  • refreshSlots() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов обновляет данные о слотах в контейнере
  • applyChanges() - ничего не делает в стандартном контейнере, для контейнеров инвентаря блоков и мобов сохраняет изменения, которые были произведены на контейнере
  • openAs(объект интерфейса любого типа) - открывает данный объект интерфейса и привязывается к нему
  • isOpened() - возвращает, открыт ли этот контейнер для какого-то интерфейса
  • close() - если открыт для какого-то интерфейса, закрывает его
  • getGuiContent() - если открыт для какого-то интерфейса, возвращает объект описания данного интерфейса, который можно изменять для динамичного изменения интерфейса. Не работает, если контейнер открыт для группы окон.
  • getGuiScreen()  - если открыт для какого-то интерфейса, возвращает объект этого интерфейса.
  • getElement("имя элемента") - если в интерфейсе, для которого открыт данный контейнер, есть элемент с данным именем возвращает его. ВНИМАНИЕ! Это не тот объект элемента, который задается в объекте описания!
  • requireElement("имя элемента", "тип элемента") - аналогичен getElement, но если элемент имеет тип, отличающийся от данного, то вернет null.
  • setScale("имя элемента шкалы", заполненность 0-1) - если шкала с данным именем существует, устанавливает ее значение на данное, при этом 0 - пустая шкала, 1 - полная
  • setScaleAsLiquid("имя элемента шкалы", строковый id жидкости, заполненность 0-1) - если шкала с данным именем существует, устанавливает ее, как шкалу жидкости, меняя текстуру на текстуру жидкости с данным строковым id, при этом размер шкалы не меняется.
  • setText("имя элемента текста", строка) - если элемент текста с данным именем существует, меняет его содержание на переданную строку
  • setTextSize("имя элемента текста", размер) - если элемент текста с данным именем существует, меняет его размер
  • setTextColor("имя элемента текста", цвет) - если элемент текста с данным именем существует, меняет его цвет
  • setTextShadow("имя элемента текста", значение тени) - если элемент текста с данным именем существует, меняет его тень