Chests are Chests

Добавляет новые функции к стандартным сундукам, бочкам и подобным предметам, а также к некоторым их аналогам из модов, делая их более интересными и увлекательными в игре.

5,66k

Быстрое задание

Как далеко вы сможете убежать, прежде чем вас поймают толпы?

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`

Зависимости

Требуется API Unruled

Совместимость модов

Внутренняя совместимость

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

Реализован

* Железные сундуки Аннера * Украшения из мифического металла * Усиленные сундуки * Расширенное хранилище * Спектр

натуральный

Известные моды, которые (должны) иметь естественную совместимость с этим модом без дополнительной реализации. * Варианты сундуков * Варианты бочек * Раскраска сундуков * Больше вариантов сундуков

Ведётся работа над

* Лутр

запланированно

* 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

Портфолио

ОБЪЯВЛЕНИЯ
RU — Russian