- Баллы
- 66
Требуется наложить текстуру на один или несколько конкретных блоков установленных в мире. Без использования рамок, стоек с бронёй или других энтити. модификация клиента не приветствуется, за исключением ресурс паков.
Пример: у меня есть блок камня и в мире с обычной текстурой, я ставлю камень с метадатой и он должен иметь другую текстуру в отличии от других блоков камня. По итогу у меня будет в мире тот же камень, но с метадатой и заменённой текстурой.
Если это возможно, то прошу помочь реализовать.
Если невозможно, то встаёт вопрос, как работают другие плагины на изменение текстур блоков в мире, в которых ты буквально можешь сделать "новые" блоки без замены старых. Прошу объяснить и по возможности дать код, который позволит реализовать похожий функционал, даже если используются арморстенды или иные энтити.
готов к работе с NMS и ProtocolLib.
Версия - 1.21.1 paper
Зависимости:
Один из последних способов, который пробовал.
Пример: у меня есть блок камня и в мире с обычной текстурой, я ставлю камень с метадатой и он должен иметь другую текстуру в отличии от других блоков камня. По итогу у меня будет в мире тот же камень, но с метадатой и заменённой текстурой.
Если это возможно, то прошу помочь реализовать.
Если невозможно, то встаёт вопрос, как работают другие плагины на изменение текстур блоков в мире, в которых ты буквально можешь сделать "новые" блоки без замены старых. Прошу объяснить и по возможности дать код, который позволит реализовать похожий функционал, даже если используются арморстенды или иные энтити.
готов к работе с NMS и ProtocolLib.
Версия - 1.21.1 paper
Зависимости:
Код:
<dependencies>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.21-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
<version>5.3.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
Один из последних способов, который пробовал.
Код:
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
// Проверяем, что игрок поставил золотой блок
if (event.getItemInHand().hasItemMeta() && block.getType() == Material.GOLD_BLOCK) {
// Изменяем текстуру блока
changeBlockTexture(block.getLocation().toVector(), event.getPlayer());
}
}
private void changeBlockTexture(Vector location, Player player) {
// Изменение текстуры блока с помощью ProtocolLib
// Устанавливаю кастомный блок
PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.BLOCK_CHANGE);
// Указываю местоположение блока
packet.getBlockPositionModifier().write(0, new com.comphenix.protocol.wrappers.BlockPosition(location));
// Устанавливаю ID блока, который будет использоваться для отображения текстуры
packet.getIntegers().write(0, Material.GOLD_BLOCK.ordinal());
packet.getIntegers().write(1, 1);
// Устанавливаю текстуру для кастомного блока
// текстура minecraft:textures/custom_gold_block_texture из ресурс пака
packet.getStrings().write(0, "minecraft:textures/custom_gold_block_texture");
// Отправляю пакет игроку
try {
protocolManager.sendServerPacket(player, packet);
} catch (Exception e) {
e.printStackTrace();
}
}