Скачать Chests are Chests — Minecraft Моды — MetaMods

Chests are Chests

Активный

Установок

20

Последнее обновление

1 год назад

Версии

1.19 — 1.20.4
Сервер
Fabric
Forge
Liteloader
Neoforge
Quilt
Игровые механики
Хранилища
Утилиты

Chests are Chests

Вы когда-нибудь задумывались, почему предметы не падают в открытый сундук? Признайтесь, большинство из нас не задавалось этим вопросом, пока не появился этот мод. Но если вдуматься — это же так логично!

Теперь сундуки действительно ведут себя как настоящие контейнеры! Вместо того чтобы вручную складывать предметы, вы можете просто бросать их в открытые хранилища — они сами упадут внутрь.

А если предметы могут падать в контейнер, то почему бы им не выпадать из него? С этим модом бочки, открытые снизу, будут высыпать всё своё содержимое на землю!

И это ещё не всё! Когда вы открываете сундук, его крышка может отбрасывать предметы, лежащие сверху. Конечно, для безопасности это работает только с предметами, а не с живыми существами.

Для автоматизации этих процессов мод позволяет открывать контейнеры с помощью раздатчиков. Просто направьте пустой раздатчик на сундук или бочку и активируйте его!

Основные возможности

Падение предметов в открытые контейнеры

  • По умолчанию: включено
  • Игровое правило: chests.insertOpen

Выпадение предметов из контейнеров, открытых снизу

  • По умолчанию: выключено
  • Игровое правило: chests.barrelFall
  • Особое поведение для некоторых предметов (например, снежки падают как брошенные)
  • Игровое правило: chests.barrelFall.throwableSpecial
  • Тег предметов: #chests_are_chests:special_fall

Отбрасывание предметов крышкой сундука

  • По умолчанию: выключено
  • Игровое правило: chests.lidFling
  • Тег типов существ: #chests_are_chests:flingable
  • Горизонтальная скорость отбрасывания: chests.lidFling.horizontalPower
  • Вертикальная скорость отбрасывания: chests.lidFling.verticalPower

Открытие контейнеров раздатчиками

  • По умолчанию: включено
  • Игровое правило: chests.dispenserOpen
  • Длительность автоматического открытия (в тиках): chests.dispenserOpen.duration

Совместимость с другими модами

Мод уже поддерживает интеграцию со следующими аддонами:

  • Anner's Iron Chests
  • Mythic Metals Decorations
  • Reinforced Chests
  • Expanded Storage
  • Spectrum

Естественная совместимость присутствует с модами вроде Variant Chests, Variant Barrels, Chest Colorizer и другими, изменяющими внешний вид сундуков.

Для разработчиков

Если вы создаёте собственные моды с контейнерами, вы можете легко добавить поддержку Chests are Chests. Достаточно реализовать несколько интерфейсов в вашем коде.

Пример реализации контейнера:

public class MyCustomBlockEntity extends BlockEntity implements FallInContainer {
    private boolean isOpen;
    private final int size;
    private final DefaultedList<ItemStack> content;
    private final Map<Integer, Integer> fallUpdateMap = new HashMap<>();

    @Override
    public boolean chests$tryInsertion(ItemEntity entity) {
        return FallInContainer.chests$inventoryInsertion(this.content, entity, this::setStack);
    }

    @Override
    public boolean chests$isOpen() {
        return isOpen;
    }

    @Override
    public VoxelShape chests$InputAreaShape() {
        return FallInContainer.ABOVE;
    }

    @Override
    public void chests$forceOpen(ServerWorld world, BlockPos at, BlockState from) {
        this.isOpen = true;
        this.onOpen();
    }

    @Override
    public boolean chests$tryForceOpen(BlockState from) {
        ServerWorld serverWorld = (ServerWorld) this.getWorld();
        BlockPos blockPos = this.getPos();
        this.chests$forceOpen(serverWorld, blockPos, from);
        ChestsAreChests.scheduleTick(serverWorld, blockPos, duration);
    }

    @Override
    public boolean chests$forceClose() {
        this.isOpen = false;
        this.onClose();
    }

    @Override
    public Map<Integer, Integer> getFallUpdateMap() {
        return this.fallUpdateMap;
    }

    void onOpen() {
        // ...
        // потенциальные вещи для рендеринга
        ChestsAreChests.ejectAbove(Direction.UP, this);
    }
}

Пример реализации предмета:

public class MyCustomItem extends Item implements ContainerItemHelper {
    public Direction[] chests$getFallDirection(ItemStack stack) {
        return new Direction[]{Directions.UP};
    }

    public boolean defaultOnOpenTick(ItemStack stack, FallInContainer container, Direction direction, World world, Vec3d pos, Vec3d velocity) {
        if (!ChestsAreChests.isInArray(direction, chests$getFallDirection(stack))) return false;
        MyGravitatedEntity entity = new MyGravitatedEntity(world, pos.x, pos.y, pos.z, stack.copy());
        entity.setVelocity(velocity);
        world.spawnEntity(entity);
        return true;
    }
}

Видео-обзор

Участники проекта
Nerjal_Nosk

Nerjal_Nosk

Разработчик

RecraftorsMC

RecraftorsMC

Разработчик

Создан: 30 ноя 2023

ID: 8258