|
|
(не показаны 2 промежуточные версии 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 | + | <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"> |
− | m-pageContent__withoutLeft
| + | Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире. |
− | m-pageContent__withoutRight" id="pageContent">
| |
− | {| class="b-pageContent__layout"
| |
− | |-
| |
− | | class="b-pageContent__side" |
| |
− | {| id="internal_wrapper"
| |
− | |-
| |
− | | class="b-pageContent__side m-pageContent__side__middle" id="pageContentMiddle" | <div class="b-workZone
| |
− | m-workZone__withoutSideNav" id="workZone" style="height: auto">
| |
− | {| class="b-workZone__layout"
| |
− | |-
| |
− | | class="b-workZone__side m-workZone__side__article" id="workZone_article" | <div class="b-workZone__content" id="workZone_article__content"><div class="b-article" id="article" style="height: auto"><div class="b-article__preWrapper" style="height: auto"><div class="b-article__wrapper" style="height: auto; min-height: 0px"><div class="b-article__innerWrapper" id="description_on_page_placeholder" style="height: auto"><div class="description_on_page"><div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr">Tile entity - технология, добавляемая Core Engine для быстрого создания интерактивных блоков, таких как сундук или печь, модами. Для регистрации tile entity используется модуль TileEntity. Регистрация производится с помощью привязки к какому то ID блока объекта-прототипа, который будет дополнен и клонирован для каждого tile entity в мире.</div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr">Регистрация прототипа происходит с помощью метода TileEntity.registerPrototype(id блока, прототип);</div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr">Объект прототипа обладает набором событий, областью для сохраняемых данных и контейнером, если какие то события не нужны данному типу tile entity, то их просто можно не писать. Внутри событий и методов обращения, обращаться к текущему объекту tile entity нужно через ключевое слово this.</div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr">Разъяснение всех элементов прототипа:</div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">{</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> defaultValues: {</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // здесь прописаны все сохраняемые поля и их значения по умолчанию, далее они будут скопированы в поле data</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> container: ..., // стандартное для всех tile entity поле, содержит объект контейнера для данного tile entity, подробнее в главе про контейнеры</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> liquidStorage: ..., // стандартное для всех tile entity поле, содержит объект хранилища жидкости для данного tile entity, подробнее в главе про жидкости</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> created: function(){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается при создании tile entity</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> </span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> init: function(){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается при инициализации (загрузке в мир) tile entity</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> </span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> tick: function(){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается каждый тик</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> click: function(id, count, data, coords){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается при нажатии на блок tile entity, если возвращает истинное значение, то предотвращает открытие интерфейса</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> return false;</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> destroyBlock: function(coords, player){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается, когда tile entity уничтожается игроком</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> redstone: function(params){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается, когда на tile entity подается сигнал redstone, или же он прекращает подачу, params.power содержит новую мощность сигнала</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> projectileHit: function(coords, projectile){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается, когда кидаемый предмет разбивается о данный tile entity, coords.x, coords.y, coords.z - координаты, coords.side - сторона</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> destroy: function(){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // вызывается при попытке уничтожить объект tile entity, если возврращает истинное значение, то предотвращает уничтожение объекта (но не блока, если оно было вызвано уничтожением блока)</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> getGuiScreen: function(){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается при попытке открыть интерфейс, если возвращает объект интерфейса, то он открывается для данного tile entity, подробнее в разделе про интерфейс</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> </span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> requireMoreLiquid: function(liquid, amount){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // событие, вызывается, когда из внутреннего хранилища жидкости пытаются выкачать больше жидкости типа liquid, чем там есть, на amount ведер, подробнее в главе про жидкости</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> </span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> selfDestroy: function(), // стандартный метод, уничтожает объект tile entity, учтите, что будет вызвано событие destroy</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">}</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr">Пример регистрации прототипа:</div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">IDRegistry.genBlockID("testBlock");</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">// ...</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">// создаем блок</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">TileEntity.registerPrototype(BlockID.testBlock, {</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> defaultValues: {</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> someValue: 0 // сохраняемое значение someValue, по умолчанию 0</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"> </div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> tick: function(){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // что то сделать каждый тик, к примеру выводим someValue</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> Debug.message(this.data.someValue);</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> },</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> </span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> click: function(id, count, data, coords){</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> this.data.someValue = 1; // установить значение someValue на 1</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> }</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> </span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code"> // остальные события не трогаем</span></div> <div class="p" style="text-align: left; text-indent: 0px; margin-left: 0px; direction: ltr"><span class="code">});</span></div> </div> </div> </div> </div> </div> </div>
| |
− | |}
| |
− | </div>
| |
− | |}
| |
| | | |
− | |}
| + | |
| + | |
| + | Регистрация прототипа происходит с помощью метода 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> |