InnerCore/TileEntity

Материал из mineprogramming wiki
Перейти к: навигация, поиск

Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире.

 

Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип);

 

Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this.

 

Разъяснение всех элементов прототипа:

 

{

     defaultValues: {

          // здесь прописаны все сохраняемые поля и их значения по умолчанию, далее они будут скопированы в поле data

     },

     container: ..., // стандартное для всех tile entity поле, содержит объект контейнера для данного tile entity, подробнее в главе про контейнеры

     liquidStorage: ..., // стандартное для всех tile entity поле, содержит объект хранилища жидкости для данного tile entity, подробнее в главе про жидкости


     created: function(){

          // событие, вызывается при создании tile entity

     },

    

     init: function(){

          // событие, вызывается при инициализации (загрузке в мир) tile entity

     },

    

     tick: function(){

          // событие, вызывается каждый тик

     },


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

          // событие, вызывается при нажатии на блок tile entity, если возвращает истинное значение, то предотвращает открытие интерфейса

          return false;

     },


     destroyBlock: function(coords, player){

          // событие, вызывается, когда tile entity уничтожается игроком

     },


     redstone: function(params){

          // событие, вызывается, когда на tile entity подается сигнал redstone, или же он прекращает подачу, params.power содержит новую мощность сигнала

     },


     projectileHit: function(coords, projectile){

          // событие, вызывается, когда кидаемый предмет разбивается о данный tile entity, coords.x, coords.y, coords.z - координаты, coords.side - сторона

     },


     destroy: function(){

          // вызывается при попытке уничтожить объект tile entity, если возврращает истинное значение, то предотвращает уничтожение объекта (но не блока, если оно было вызвано уничтожением блока)

     },


     getGuiScreen: function(){

          // событие, вызывается при попытке открыть интерфейс, если возвращает объект интерфейса, то он открывается для данного tile entity, подробнее в разделе про интерфейс

     },

    

     requireMoreLiquid: function(liquid, amount){

          // событие, вызывается, когда из внутреннего хранилища жидкости пытаются выкачать больше жидкости типа liquid, чем там есть, на amount ведер, подробнее в главе про жидкости

     },

    

     selfDestroy: function(), // стандартный метод, уничтожает объект tile entity, учтите, что будет вызвано событие destroy

}

 

Пример регистрации прототипа:


IDRegistry.genBlockID("testBlock");

// ...

// создаем блок


TileEntity.registerPrototype(BlockID.testBlock, {

     defaultValues: {

          someValue: 0 // сохраняемое значение someValue, по умолчанию 0

     },


     tick: function(){

          // что то сделать каждый тик, к примеру выводим someValue

          Debug.message(this.data.someValue);

     },

    

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

          this.data.someValue = 1; // установить значение someValue на 1

     }

    

     // остальные события не трогаем

});