1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

redacted

Тема в разделе "Разработка плагинов для новичков", создана пользователем MrTerf, 28 июл 2018.

Статус темы:
Закрыта.
  1. Автор темы
    MrTerf

    MrTerf Активный участник

    Баллы:
    66
    redacted
     
    Последнее редактирование: 11 июл 2023
  2. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Block block = world.getBlockAt(x,y,z);
     
  3. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    На 1.12 - сохраняй material, data либо MaterialData и BlockState
    На 1.13 - сохраняй material, BlockData и BlockState
    Кажется этого достаточно для копии блока.
     
  4. DaemendLord

    DaemendLord Новичок Пользователь

    Баллы:
    21
    Имя в Minecraft:
    _DaemendLord_
    Всё просто:
    Block b = world.getBlockAt(posX , posY, posZ );

    Так в переменной у тебя блок 1 в 1
    Только ставь его куда надо и готово
     
  5. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
  6. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Мне самому стало интересно как ты его будешь ставить
     
  7. MemoryRAVE

    MemoryRAVE Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    xR4V3
    Block#setTypeIdAndData()
     
  8. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Мне кажется это должно сработать (сам не пробовал, альтернатив не вижу).
    PHP:
    public void copyBlock(Block fromBlock to) {
        
    // Получаем точную копию состояния блока
        
    BlockState state from.getState();
        
    BlockState targetState to.getState();
        
    // Применяем данные материала (тип, состояния и т.д.)
        
    targetState.setData(state.getData());
        
    // Применяем состояние к блоку
        
    targetState.update();
    }
     
  9. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    @Deprecated
     
  10. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Эта штука не будет злиться если материалы в блоков разные?
     
  11. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    BlockState захватывает состояние блока полностью. Прям совсем полностью. Больше ничего не нужно.
     
  12. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Уверен? :rolleyes:
     
  13. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Да, это точно. Ошибки выше не по этой причине.
     
  14. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Да, вот тип нужно сначала ставить, мы копируем MaterialData, потому Material должен быть одинаков.
     
  15. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    PHP:
    public void copyBlock(Block fromBlock to) {
        
    // Получаем точную копию состояния блока
        
    BlockState state from.getState();
        
    BlockState targetState to.getState();
        
    // Применяем данные материала (тип, состояния и т.д.)
        
    to.setType(from.getType());
        
    targetState.setData(state.getData());
        
    // Применяем состояние к блоку
        
    targetState.update();
    }
     
  16. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
  17. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    В 1.13 BlockData кажется нормально бы работал с таким, но MaterialData не очень в этом
    Вариант фикса:
    PHP:
    public void copyBlock(Block fromBlock to) {
        
    to.setType(from.getType()); //Меняем материал блока
        // Получаем точную копию состояния блока
        
    BlockState state from.getState();
        
    BlockState targetState to.getState();
        
    // Применяем данные материала (тип, состояния и т.д.)
        
    targetState.setData(state.getData());
        
    // Применяем состояние к блоку
        
    targetState.update();
    }
     
  18. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Я выше добавил в код строчку смены типа перед передачей данных материала.
     
  19. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Ты пробовал мой последний вариант кода выше?
     
  20. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    В 1.12 и ниже это один предмет. Меняется через data.
     
Статус темы:
Закрыта.

Поделиться этой страницей