A block entity (also known as tile entity) is extra data associated with a block, beyond the finite set of block states associated with each block.
Contents
- 1 Usage
- 2 List of block entities
- 3 Block entities and their render limits
- 4 See also
Usage
Block entities store additional information about certain blocks, with the type of information varying by block. In some cases, this information is used to create a more complex model, such as the book on an enchanting table. In other cases, it is used to store contents of an object. Blocks with block entities can be moved by pistons in Bedrock Edition, but not in Java Edition.
List of block entities
These are the current blocks that hold block entities.
- Beehive
Bee Nest
- Signs
- Banners
- Chest
- Trapped Chest
- Dispenser
- Furnace
- Brewing Stand
- Hopper
- Dropper
- Shulker Box
- Barrel
- Smoker
- Blast Furnace
- Campfire
- Soul Campfire
- Lectern
- Furnaces, blast furnaces, and smokers also store the time until the current item is smelted, the time until the furnace’s current fuel item is exhausted, and all of the items that have been smelted since a player emptied the output slot.
- Brewing stands also store the brewing time.
- Hoppers also store the time until the next transfer of an item.
- Chests, trapped chests and shulker boxes also use the block’s position and rotation for the opening and closing animation.
- Lecterns also store the page the book is currently on.
- Beacon
- Monster Spawner
- the entity to be spawned.
- the delay until the next entity is spawned, and the min and max values for the next spawn delay.
- how many entities to spawn per spawn attempt.
- additional data about the entity to be spawned (such as position, effects, and entities stacked on top of it).
- Also uses the block’s position to display the spinning mob inside.
- Note Block [ Bedrock Edition and Minecraft Education only ]
- Piston [ Bedrock Edition and Minecraft Education only ]
- Moving Piston
- Jukebox
- Enchanting Table
- End Portal
- Ender Chest
- Mob Head
- Command Block
- End Gateway
- Structure Block
- Jigsaw Block
- Nether Reactor Core [ Bedrock Edition and Minecraft Education only ]
- Daylight Detector
- Flower Pot [ Bedrock Edition and Minecraft Education only ]
- Redstone Comparator
- Bed
- Cauldron [ Bedrock Edition and Minecraft Education only ]
- Conduit
- Bell
- Lodestone [ Bedrock Edition only ]
- Chalkboard [ Bedrock Edition and Minecraft Education only ]
- Compound Creator [ Bedrock Edition and Minecraft Education only ]
Element Constructor [ Bedrock Edition and Minecraft Education only ]
Lab Table [ Bedrock Edition and Minecraft Education only ]
Material Reducer [ Bedrock Edition and Minecraft Education only ]
Мод Little Tiles — Часть №1 ГАЙД Майнкрафт 1.12.2
Block entities and their render limits
This feature is exclusive to Java Edition.
Some block entities, or their effects, stop being rendered beyond a hard-coded block limit which is modeled after the radius of a sphere. This limit is not affected by the Render Distance nor the Entity Distance scale in the Video Settings.
Block entities that stop rendering beyond 64 blocks include:
Some effects related to block entities stop rendering beyond a number of blocks:
- The beacon and end gateway beams stop rendering beyond 256 blocks in Java Edition or 64 blocks in Bedrock Edition or when the end gateway is out of frame.
- The contents of a campfire stop rendering beyond 64 blocks.
- The book on a lectern stops rendering beyond 64 blocks.
- The mob inside a monster spawner stops spinning beyond the RequiredPlayerRange , which is 16 blocks by default, and stops rendering beyond 64 blocks.
- The note particles emitted by a note block stop rendering beyond 32 blocks.
- Pistons stop animating beyond 64 blocks.
- The book on an enchanting table stops rendering beyond 64 blocks.
- The outlines created by a structure block stop rendering beyond 96 blocks.
- The bell part of the model of a bell, but not the frame, stops rendering beyond 64 blocks.
Источник: minecraft.fandom.com
Tile Entitie#
В данной статье я предоставляю свой перевод гайда с сайта shadowfacts по работе с TileEntity. Исходники примера доступны тут.
В Майнкрафте класс Block используется для представления не просто единичного блока в мире, а блока как типа. Инстанс (экземпляр) Block содержит свойства для каждого экземпляра вашего блока, существующего в мире. Если мы хотим что бы наш блок содержал уникальные данные для каждого отдельно взятого экземпляра нам нужно использовать TileEntity .
Существует распространённый миф что TileEntity это плохо, особенно для производительности. Это не так. Они могут негативно влиять на производительность если они реализованы не умело, как в прочем и любые другие объекты.
Тайлы бывают двух типов: обновляющиеся (ticking) и не обновляющиеся (non-ticking). Обновляющиеся тайлы обновляются каждый игровой тик (обычно 20 раз в секунду). Они влияют на производительность интенсивнее и требуют аккуратной реализации. Не обновляющиеся тайлы существуют для простого хранения данных и в этом туториале мы создадим простой, не обновляющийся TileEntity .
Вспомогательные средства#
Прежде чем мы создадим тайл, мы добавим класс, который упростит их создание в будущем.
В первую очередь создадим класс BlockTileEntity :
Этот класс предоставляет нам следующее: * Он расширяет BaseBlock , содержащий нашу удобную базовую реализацию Block
// ru.austeretony.counter.block.base.BaseBlock.java public class BaseBlock extends Block public BaseBlock(String name, Material material, float hardness, float resistanse, SoundType soundType) super(material); this.setRegistryName(name); this.setUnlocalizedName(name); this.setHardness(hardness); this.setResistance(resistanse); this.setSoundType(soundType); > >
* Он содержит обобщение, представляющее наш класс TileEntity . Он будет использован для создания вспомогательных средств для уменьшения количества необходимых приведений типов для получения экземпляра нашего тайла на определённой позиции и для уверенности в том, что созданный тайл имеет корректный тип. * Он переопределяет hasTileEntity(IBlockState) из Block и возвращает true . Это даёт понять Майнкрафту что у нашего блока есть тайл и его нужно создать. * Он содежит два абстрактных метода: 1) getTileEntityClass() — тут мы будем возвращать класс нашего TileEntity , что позволит ему быть зарегистрированным вместе с блоком, 2) createTileEntity() — более специфичная версия стандартного метода из Block . Майнкрафт вызывает его каждый раз когда нужно создать новый экземпляр тайла, например когда мы устанавливаем наш блок.
Блок#
Теперь когда у нас есть удобная основа самое время создать блок.
Создадим BlockCounter , расширяющий BlockTileEntity .
Наш блок расширяет BlockTileEntity и содержит обобщение TileEntityCounter (который предстоит создать), так как этот тайл принадлежит этому блоку.
В конструкторе мы просто напросто вызываем суперконструктор и передаём туда все параметры, которые будем указывать при создании блока.
В методе getTileEntityClass() вернём TileEntityCounter.class (мы ещё создадим его). Это позволит зарегистрировать его ассоциировав с именем блока.
В createTileEntity() мы возвращаем новый экземпляр класса TileEntityCounter .
Ну и в конце концов в onBlockActivated() , вызываемый при правом клике по блоку мы делаем следующее: * Проверяем, что действия производятся на сервере (это очень важно при работе с TileEntity !). * Достаём экземпляр TileEntityCounter . * Если игрок кликнул по нижней стороне — уменьшаем значение счётчика. * Если клик по верхней стороне — увеличиваем значение. * Отправляем сообщение в чат, содержащие значение счётчика. * Возвращаем true .
Разделение: клиент и сервер#
Как было подмечено выше, перед тем как работать со счётчиком тайла, мы должны удостовериться, что действия происходят на сервере. Делаем мы это потому как в Майнкрафте клиент и сервер полностью разделены и некоторые методы вызываются для обеих сторон.
В многопользовательской игре множество клиентов подключены к одному серверу. В этом случае разделение между сторонами очевидно, но в одиночной игре всё немного сложнее. В многопользовательской игре сервер, к которому происходит подключение, отражает физический сервер и все отдельные подключенные клиенты являются физическими клиентами.
В одиночной игре клиент и сервер тоже разделены даже несмотря на то, что они исполняются на одном компьютере (на одной JVM, но в разных потоках). В одиночной игре клиент подключается к локальному, приватному серверу, функции которого схожи с физическим сервером. В этом случае серверный поток отражает логический сервер, а клиентский поток отражает логический клиент, так как обе логические стороны выполняются на одной физической стороне.
Поле World.isRemote используется для проверки стороны, на которой происходит выполнение (будь она логической или физической). Оно равно true для физического клиента в многопользовательской игре и для логического клиента в одиночной игре. Это поле равно false для физического сервера в многопользовательской игре и для логического сервера в одиночной.
Делая проверку в условии !world.isRemote , мы обеспечиваем уверенность что действия будут производится на сервере (физическом или логическом).
Создание тайла для блока#
Теперь когда у нас есть блок, мы должны создать тайл для него.
Создадим класс TileEntityCounter :
Содержимое весьма не хитрое: * Класс расширяет стандартный TileEntity * Содержит приватное поле count , содержащее значение счётчика. * Переопределяет writeToNBT() и readFromNBT() что бы наши данные были сохранены и загружены с диска. * Предоставляет методы getCount() , incrementCount() , decrementCount() для работы с полем count . Кроме того, в методах, изменяющих значение счётчика ( count ) происходит вызов markDirty() из TileEntity . Он даёт игре понять что данные были изменены с момента последнего сохранения и их нужно перезаписать.
NBT формат#
Данный формат используется для хранения данных в виде пар ключ-значение, которые легко сериализуется в байты и сохраняется на диск. Вы можете ознакомиться с классом NBTTagCompound для представления о типах данных, которые он может хранить. Ванильный код содержит множество хороших примеров по сохранению и чтению сложных структур данных.
В нашем случае мы сохраняем значение поля count как целочисленный тип Integer с ключём в виде строки » count » в NBT в методе writeToNBT() и читаем его в readFromNBT() .
Регистрация#
Тайл нашего блока нужно зарегистрировать. Делать мы это будем там же, где регистрируем наши блоки.
Регистрацию будем производить через вызов GameRegistry.registerTileEntity() и передавать в него класс тайла и его регистрационное имя. Это требуется для того, что бы при загрузке Майнкрафт определял какой TileEntity к какому блоку принадлежит и пересоздавал его загружая из NBT.
Не забывайте, регистрация Block , ItemBlock и TileEntity происходит во время преинициализации в CommonProxy , а регистрация рендера для ItemBlock происходит в процессе преинициализации в ClientProxy (для рендера через ModelLoader ).
Финал#
Теперь, когда все сделано, запускаем игру и достаем наш блок-счётчик из вкладки «блоки». Установив его, кликните ПКМ по верхней стороне блока — счётчик увеличит значение и в чате появится сообщение.
Нажав ПКМ по нижней стороне несколько раз вы увидите это:
Клик ПКМ по другим сторонам выведет в чат сообщение с текущим значением счётчика.
Источник: mcmodding.ru
Мод Little Tiles для Minecraft 1.12.2/1.11.2/1.10.2/1.7.10
Ограниченный набор блоков, фиксированного размера, создает преграды для реализации самых безумных творческих планов, но новая модификация Little Tiles Mod убирает эти глупые ограничения. Она позволяет создавать конструкции с мельчайшими деталями. Новый инструмент Молоток разбивает блоки на плитки, которые могут быть в 4096 раз меньше обычного размера. Они легко комбинируются и подходят для создания дверей, стульев, лестниц и любой мебели. Мод открывает бесконечные возможности, так что остается скачать Little Tiles на Minecraft 1.7.10/1.10.2/1.11.2/1.12.2 и начать сходить с ума!
Скриншоты
Мечи из маленьких блоков
Каменная статуя монстра
Мебель и декорации
Земля
Барные стулья и стойка
Видео обзор и гайд Little Tiles
Установка
- Загрузите Minecraft Forge. Подходящие версии есть тут.
- Скачайте мод и поместите в %appdata%/.minecraft/mods.
- Важно! Для работы модификации необходимо также установить CreativeCore.
v1.2.0-mc1.7.10.jar (271,89 Kb; 9 июня 2017; ⛏ 16551)
v1.4.12-mc1.10.2.jar (519,77 Kb; 9 июня 2017; ⛏ 1067)
v1.5.0-pre84_mc1.11.2.jar (822,96 Kb; 12 марта 2018; ⛏ 484)
v1.5.0-pre26-mc1.12.1.jar (765,64 Kb; 20 октября 2017; ⛏ 542)
v1.5.0-pre83_mc1.12.2.jar (836,37 Kb; 12 марта 2018; ⛏ 2740)
Источник: mody4mine.ru