Admin (обсуждение | вклад) м (Admin moved page CoreEngine/TILE ENTITY to InnerCore/TileEntity) |
|||
| (не показана 1 промежуточная версия 1 участника) | |||
| Строка 1: | Строка 1: | ||
<div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"> | <div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"><div class="b-pageLayout b-pageLayout__xs" data-layout="xs" id="pageLayout"><div class="b-pageContent m-pageContent__withoutLeft m-pageContent__withoutRight" id="pageContent"> | ||
| − | + | Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | | |
| − | + | Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип); | |
| − | + | | |
| − | + | Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this. | |
| − | + | | |
| + | Разъяснение всех элементов прототипа: | ||
| − | < | + | |
| + | <pre>{ | ||
| − | + | 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 | |
| − | < | + | }</pre> |
| − | + | | |
| + | Пример регистрации прототипа: | ||
| + | <pre> | ||
| − | + | 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 | ||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | // остальные события не трогаем | ||
| + | |||
| + | });</pre> | ||
</div> </div> </div> </div> | </div> </div> </div> </div> | ||
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
}
// остальные события не трогаем
});