Chests are Chests
Добавляет новые функции к стандартным сундукам, бочкам и подобным предметам, а также к некоторым их аналогам из модов, делая их более интересными и увлекательными в игре.
Быстрое задание
Как далеко вы сможете убежать, прежде чем вас поймают толпы?
Проверка Minecraft
Подтвердите свой запуск
Пройдите быструю проверку, чтобы получить свой код.
Chests are Chests
Вы когда-нибудь задумывались, почему, когда сундук открыт, предметы не падают внутрь?
...Ладно, признаюсь, я тоже так не думал, пока мне не пришла в голову эта идея. Но если подумать... Это же логично, правда?
Теперь вы можете с гордостью сказать, что Грудь — это грудь! И наслаждайтесь тем, как вещи сами собой попадают в ваше хранилище, вместо того чтобы неуклюже складывать их вручную!
Но поскольку предметы могут упасть *в* открытую коробку... Разве они не должны падать *вниз* из неё, при условии, что она открыта с правильной стороны? Таким образом, можно сделать так, чтобы бочки, открытые и направленные вниз, роняли *всё* своё содержимое на землю!
Возвращаясь к сундуку, если можно открыть крышку, чтобы предметы упали внутрь, разве крышка не должна выбрасывать предметы при открытии? Правильно! С этим модом вы можете сделать так, чтобы при открытии сундука все предметы, стоящие на нём, выбрасывались наружу! (Ограничено только предметами ради сохранения жизни).
И наконец, поскольку открытие контейнера до сих пор всегда было ручной операцией, чтобы автоматизировать эти новые возможности, теперь открыть контейнер можно, активировав *пустой* диспенсер, направленный на этот контейнер!
Теперь игра будет ощущаться более естественно, хотя бы чуть-чуть, согласны?
Особенности
* Вставка предметов в открытые контейнеры * по умолчанию: включено * правило игры: `chests.insertOpen` * Падение предметов из контейнеров, открывающихся снизу * по умолчанию: отключено * правило игры: `chests.barrelFall` * Падение особых предметов (например, снежки, падающие как настоящие брошенные снежки) * по умолчанию: включено * правило игры: `chests.barrelFall.throwableSpecial` * тег предмета: `#chests_are_chests:special_fall` * Бросок предметов из крышек сундуков * по умолчанию: отключено * правило игры: `chests.lidFling` * тег типа сущности: `#chests_are_chests:flingable` * Скорость горизонтального броска * по умолчанию: 0.25 * правило игры: `chests.lidFling.horizontalPower` * Скорость вертикального броска * по умолчанию: 0.6 * правило игры: `chests.lidFling.verticalPower` * Открытие контейнеров путем питания пустых раздатчиков * по умолчанию: включено * правило игры: `chests.dispenserOpen` * Автоматическая продолжительность открытия (в мировых тиках) * по умолчанию: 10 * игровое правило: `chests.dispenserOpen.duration`
Зависимости

Совместимость модов
Внутренняя совместимость
Хотя совместимость планируется, прямая реализация самими модами всегда будет предпочтительнее. Поэтому, если ваш мод планируется, находится в разработке или уже реализован, не стесняйтесь создавать свой собственный, а при необходимости свяжитесь с нами, чтобы получить помощь или сообщить, что нам не нужно поддерживать собственную совместимость.
Реализован
* Железные сундуки Аннера * Украшения из мифического металла * Усиленные сундуки * Расширенное хранилище * Спектр
натуральный
Известные моды, которые (должны) иметь естественную совместимость с этим модом без дополнительной реализации. * Варианты сундуков * Варианты бочек * Раскраска сундуков * Больше вариантов сундуков
Ведётся работа над
* Лутр
запланированно
* myLoot * Больше сундуков * Компактное хранилище
Внутри организации отказано
* Железные сундуки: пополнение запасов. Из-за неправильной регистрации имен авторов мода, работа с этим модом затруднена. Поэтому было решено не пытаться реализовать встроенную совместимость.
Сделать свой собственный
Реализация контейнера
Этот мод изменяет поведение блочных и предметных сущностей. Для обеспечения совместимости с этим модом ваш пользовательский блочный объект должен реализовывать интерфейс `mc.recraftors.chestsarechests.util.FallInContainer`.
Вы также можете использовать другие интерфейсы, такие как `mc.recraftors.chestsarechests.util.BlockOpenableContainer` или `mc.recraftors.chestsarechests.util.BooleanHolder`, которые вы можете использовать по своему усмотрению или же использовать в своих целях, если уже расширяете стандартные классы сундуков или бочек.
Не стесняйтесь обратиться к реализации сундука и бочки за примером того, как обрабатывать открытие и ориентацию блоков в рамках предоставленных методов.
Также не стоит бояться появления новых методов с обновлениями, которые ваш мод не будет использовать, что вызовет проблемы. Удаление методов или изменение основной версии не планируется. Все новые методы будут всегда Поставляется с реализацией по умолчанию, чтобы избежать ненужных проблем.
Реализация элемента
Этот мод позволяет некоторым предметам (зарегистрированным в соответствующем теге предмета) иметь пользовательское поведение при «падении» из контейнера. Для этого сам предмет должен реализовывать интерфейс `mc.recraftors.chestsarechests.util.ContainerItemHelper`.
Этот интерфейс предлагает два метода для реализации. Первый, необязательный, указывает направление падения предмета. Это позволяет указать, с какой открытой стороны контейнера может выпасть предмет. (например, для предметов, падающих под действием силы тяжести, можно указать направление падения вверх).
По умолчанию первый метод вернет `DOWN`.
Второй метод фактически реализует специальное поведение при падении. Он должен использовать первый метод, чтобы определить, следует ли его запускать, и выполнить задуманное. Возвращаемое значение этого метода указывает, упал ли стек предметов (и теоретически был ли он потреблен) или нет, и поэтому не следует пытаться заставить его упасть в том же направлении, чтобы избежать дополнительной нагрузки на вычислительные ресурсы во время выполнения.
Не стесняйтесь обратиться к примерам реализации стрелок или снежков, чтобы понять, как обрабатывать падение особых предметов.
Впрочем, не стоит опасаться появления новых методов с обновлениями, поскольку каждый новый метод, по возможности, будет включать реализацию по умолчанию, основанную на уже существующих методах.
Примеры
Актуальная версия 0.5
Реализация контейнера
```java public class MyCustomBlockEntity extends BlockEntity implements FallInContainer { private boolean isOpen; private final int size; private final DefaultedList контент; частная окончательная карта 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 getFallUpdateMap() { return this.fallUpdateMap; }
void onOpen() { // ... // потенциальные элементы рендеринга ChestsAreChests.ejectAbove(Direction.UP, this); } } ```
Реализация элемента
```java 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; } } ```
Напишите нам в чат или Email