From abc1ac34b2ddf79e5a0798dd9e2f1d761583cf4b Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 11 Aug 2024 20:04:21 +0200 Subject: [PATCH 01/83] fix: mouse keybindings not working on neoforge --- CHANGELOG.md | 4 ++++ .../refinedstorage/neoforge/ClientModInitializer.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d316c5e5..3e1394ec1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed + +- Fixed mouse keybindings not working on NeoForge. + ## [2.0.0-milestone.4.7] - 2024-08-11 ### Added diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java index a77f8c0b8..77507e757 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java @@ -71,6 +71,7 @@ private ClientModInitializer() { @SubscribeEvent public static void onClientSetup(final FMLClientSetupEvent e) { NeoForge.EVENT_BUS.addListener(ClientModInitializer::onKeyInput); + NeoForge.EVENT_BUS.addListener(ClientModInitializer::onMouseInput); e.enqueueWork(ClientModInitializer::registerModelPredicates); e.enqueueWork(ClientModInitializer::registerItemProperties); registerBlockEntityRenderer(); @@ -84,6 +85,11 @@ public static void onKeyInput(final InputEvent.Key e) { handleInputEvents(); } + @SubscribeEvent + public static void onMouseInput(final InputEvent.MouseButton.Pre e) { + handleInputEvents(); + } + private static void registerModelPredicates() { Items.INSTANCE.getControllers().forEach(controllerBlockItem -> ItemProperties.register( controllerBlockItem.get(), From 87da4d6ba38346ec4f3140a97be7527da1f2e106 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 11 Aug 2024 20:13:49 +0200 Subject: [PATCH 02/83] chore: sonar fixes --- .../autocrafting/PatternGridContainerMenu.java | 5 +++-- .../ProcessingMatrixResourceSlot.java | 8 ++++---- .../common/networking/TransmittingIcon.java | 7 ++++--- .../refinedstorage/fabric/PlatformImpl.java | 15 --------------- .../refinedstorage/neoforge/ConfigImpl.java | 2 +- 5 files changed, 12 insertions(+), 25 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java index 5fd7de946..042f1338f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java @@ -33,6 +33,7 @@ import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.SmithingRecipe; import net.minecraft.world.item.crafting.StonecutterRecipe; +import org.apache.commons.lang3.tuple.Pair; import org.apiguardian.api.API; public class PatternGridContainerMenu extends AbstractGridContainerMenu { @@ -277,6 +278,7 @@ private void addProcessingMatrixSlots(final int x, int slotX = x; int slotY = y; for (int i = 0; i < resourceContainer.size(); ++i) { + //noinspection SuspiciousNameCombination addSlot(new ProcessingMatrixResourceSlot( resourceContainer, i, @@ -284,8 +286,7 @@ private void addProcessingMatrixSlots(final int x, slotY, input, this::getPatternType, - startY, - endY + Pair.of(startY, endY) )); if ((i + 1) % 3 == 0) { slotX = x; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingMatrixResourceSlot.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingMatrixResourceSlot.java index 4f4fbe277..c1fcea8b3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingMatrixResourceSlot.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingMatrixResourceSlot.java @@ -14,6 +14,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; +import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,8 +44,7 @@ class ProcessingMatrixResourceSlot extends ResourceSlot { final int y, final boolean input, final Supplier patternTypeSupplier, - final int startY, - final int endY) { + final Pair startEndY) { super(resourceContainer, index, input ? INPUT_HELP : OUTPUT_HELP, x, y, ResourceSlotType.FILTER_WITH_AMOUNT); this.patternTypeSupplier = patternTypeSupplier; this.cachedAllowedAlternatives = @@ -52,8 +52,8 @@ class ProcessingMatrixResourceSlot extends ResourceSlot { ? inputResourceContainer.getAllowedTagIds(index) : Collections.emptySet(); this.input = input; - this.startY = startY; - this.endY = endY; + this.startY = startEndY.getLeft(); + this.endY = startEndY.getRight(); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/TransmittingIcon.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/TransmittingIcon.java index db062c2b2..6e7e9b653 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/TransmittingIcon.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/TransmittingIcon.java @@ -47,15 +47,16 @@ void render(final GuiGraphics graphics, final int x3, final int y3) { } final int frame = cycle % 3; switch (frame) { - case 0: - graphics.blitSprite(TRANSMITTING_1, x3, y3 + 3, 14, 6); - break; case 1: graphics.blitSprite(TRANSMITTING_2, x3, y3 + 1, 17, 10); break; case 2: graphics.blitSprite(TRANSMITTING_3, x3, y3, WIDTH_3, 12); break; + case 0: + default: + graphics.blitSprite(TRANSMITTING_1, x3, y3 + 3, 14, 6); + break; } } diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java index 421083629..05993d1cf 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java @@ -195,21 +195,6 @@ public Optional fillContainer(final ItemStack container, } } - private Optional getFilledItemStack(final FluidResource fluidResource, - final SimpleSingleStackStorage interceptingStorage) { - final Storage destination = FluidStorage.ITEM.find( - interceptingStorage.getStack(), - ContainerItemContext.ofSingleSlot(interceptingStorage) - ); - if (destination == null) { - return Optional.empty(); - } - try (Transaction tx = Transaction.openOuter()) { - destination.insert(toFluidVariant(fluidResource), FluidConstants.BUCKET, tx); - return Optional.of(interceptingStorage.getStack()); - } - } - @Override public TransferManager createTransferManager(final AbstractContainerMenu containerMenu) { return new TransferManager(containerMenu, ContainerTransferDestination::new); diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java index 504c04be9..4580cdff5 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java @@ -430,7 +430,7 @@ public boolean isAutoSelected() { @Override public void setAutoSelected(final boolean autoSelected) { - if (autoSelected != this.autoSelected.get()) { + if (autoSelected != Boolean.TRUE.equals(this.autoSelected.get())) { this.autoSelected.set(autoSelected); ConfigImpl.this.spec.save(); } From 13811fa26fb12c9dec3c81c53e8a3169203067f0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 11 Aug 2024 20:26:02 +0200 Subject: [PATCH 03/83] fix: creative items not having correct gui title --- .../refinedstorage/common/content/ContentNames.java | 2 ++ .../common/grid/WirelessGridExtendedMenuProvider.java | 10 ++-------- .../refinedstorage/common/grid/WirelessGridItem.java | 11 +++++++++-- .../portablegrid/AbstractPortableGridBlockEntity.java | 8 +++++++- .../storage/portablegrid/PortableGridBlockItem.java | 5 ++++- .../PortableGridItemExtendedMenuProvider.java | 6 ++---- .../refinedstorage/fabric/ModInitializerImpl.java | 4 ++-- .../refinedstorage/neoforge/ModInitializer.java | 4 ++-- 8 files changed, 30 insertions(+), 20 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java index 8eecbe198..43d0ad43f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java @@ -24,6 +24,7 @@ public final class ContentNames { public static final MutableComponent CONTROLLER = name("controller"); public static final MutableComponent CREATIVE_CONTROLLER = name("creative_controller"); public static final MutableComponent WIRELESS_GRID = createTranslation("item", "wireless_grid"); + public static final MutableComponent CREATIVE_WIRELESS_GRID = createTranslation("item", "creative_wireless_grid"); public static final MutableComponent WIRELESS_TRANSMITTER = name("wireless_transmitter"); public static final MutableComponent REGULATOR_UPGRADE = createTranslation("item", "regulator_upgrade"); public static final MutableComponent STORAGE_MONITOR = name("storage_monitor"); @@ -32,6 +33,7 @@ public final class ContentNames { public static final MutableComponent NETWORK_RECEIVER = name("network_receiver"); public static final MutableComponent NETWORK_TRANSMITTER = name("network_transmitter"); public static final MutableComponent PORTABLE_GRID = name("portable_grid"); + public static final MutableComponent CREATIVE_PORTABLE_GRID = name("creative_portable_grid"); public static final MutableComponent SECURITY_CARD = createTranslation("item", "security_card"); public static final MutableComponent FALLBACK_SECURITY_CARD = createTranslation("item", "fallback_security_card"); public static final MutableComponent SECURITY_MANAGER = name("security_manager"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridExtendedMenuProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridExtendedMenuProvider.java index 74a8eb3c1..13583214a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridExtendedMenuProvider.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridExtendedMenuProvider.java @@ -2,7 +2,6 @@ import com.refinedmods.refinedstorage.common.api.grid.Grid; import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference; -import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.containermenu.ExtendedMenuProvider; import javax.annotation.Nullable; @@ -15,16 +14,11 @@ import net.minecraft.world.inventory.AbstractContainerMenu; class WirelessGridExtendedMenuProvider implements ExtendedMenuProvider { - @Nullable private final Component name; private final Grid grid; private final SlotReference slotReference; - WirelessGridExtendedMenuProvider( - @Nullable final Component name, - final Grid grid, - final SlotReference slotReference - ) { + WirelessGridExtendedMenuProvider(final Component name, final Grid grid, final SlotReference slotReference) { this.name = name; this.grid = grid; this.slotReference = slotReference; @@ -45,7 +39,7 @@ public StreamEncoder getMenuCodec() { @Override public Component getDisplayName() { - return name == null ? ContentNames.WIRELESS_GRID : name; + return name; } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridItem.java index 340059e20..f620203d2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGridItem.java @@ -19,13 +19,18 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import static java.util.Objects.requireNonNullElse; + public class WirelessGridItem extends AbstractNetworkEnergyItem { - public WirelessGridItem() { + private final boolean creative; + + public WirelessGridItem(final boolean creative) { super( new Item.Properties().stacksTo(1), RefinedStorageApi.INSTANCE.getEnergyItemHelper(), RefinedStorageApi.INSTANCE.getNetworkItemHelper() ); + this.creative = creative; } public EnergyStorage createEnergyStorage(final ItemStack stack) { @@ -48,7 +53,9 @@ protected void use(@Nullable final Component name, return; } final Grid grid = new WirelessGrid(context); - final var provider = new WirelessGridExtendedMenuProvider(name, grid, slotReference); + final Component correctedName = requireNonNullElse(name, + creative ? ContentNames.CREATIVE_WIRELESS_GRID : ContentNames.WIRELESS_GRID); + final var provider = new WirelessGridExtendedMenuProvider(correctedName, grid, slotReference); Platform.INSTANCE.getMenuOpener().openMenu(player, provider); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java index 1e406e393..f6813186f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java @@ -35,6 +35,7 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.codec.StreamEncoder; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -69,6 +70,7 @@ public abstract class AbstractPortableGridBlockEntity extends BlockEntity private final EnergyStorage energyStorage; private final RateLimiter activenessChangeRateLimiter = RateLimiter.create(1); private final PortableGrid grid; + private final PortableGridType type; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; @@ -77,6 +79,7 @@ protected AbstractPortableGridBlockEntity(final PortableGridType type, final Blo this.diskInventory = new DiskInventory((inventory, slot) -> onDiskChanged(), 1); this.energyStorage = createEnergyStorage(type, this); this.grid = new InWorldPortableGrid(energyStorage, diskInventory, diskStateListener, this); + this.type = type; } static void readDiskInventory(final CompoundTag tag, @@ -242,7 +245,10 @@ public void setRedstoneMode(final RedstoneMode redstoneMode) { @Override public Component getDisplayName() { - return name == null ? ContentNames.PORTABLE_GRID : name; + final MutableComponent defaultName = type == PortableGridType.CREATIVE + ? ContentNames.CREATIVE_PORTABLE_GRID + : ContentNames.PORTABLE_GRID; + return name == null ? defaultName : name; } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlockItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlockItem.java index 3c0bd225a..f1fb99f4e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlockItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlockItem.java @@ -15,6 +15,7 @@ import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference; import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReferenceHandlerItem; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.storage.Disk; import com.refinedmods.refinedstorage.common.storage.DiskInventory; import com.refinedmods.refinedstorage.common.support.energy.CreativeEnergyStorage; @@ -38,6 +39,7 @@ import net.minecraft.world.level.block.Block; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; +import static java.util.Objects.requireNonNullElse; public class PortableGridBlockItem extends AbstractEnergyBlockItem implements SlotReferenceHandlerItem { private static final Component HELP = createTranslation("item", "portable_grid.help"); @@ -139,7 +141,8 @@ public void use(final ServerPlayer player, final ItemStack stack, final SlotRefe energyStorage.portableGrid = portableGrid; portableGrid.updateStorage(); Platform.INSTANCE.getMenuOpener().openMenu(player, new PortableGridItemExtendedMenuProvider( - stack.get(DataComponents.CUSTOM_NAME), + requireNonNullElse(stack.get(DataComponents.CUSTOM_NAME), + type == PortableGridType.CREATIVE ? ContentNames.CREATIVE_PORTABLE_GRID : ContentNames.PORTABLE_GRID), portableGrid, energyStorage, diskInventory, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridItemExtendedMenuProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridItemExtendedMenuProvider.java index 89f6c70d7..3fcd29742 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridItemExtendedMenuProvider.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridItemExtendedMenuProvider.java @@ -3,7 +3,6 @@ import com.refinedmods.refinedstorage.api.network.energy.EnergyStorage; import com.refinedmods.refinedstorage.common.api.grid.Grid; import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference; -import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.grid.GridData; import com.refinedmods.refinedstorage.common.grid.PortableGridData; import com.refinedmods.refinedstorage.common.storage.DiskInventory; @@ -20,7 +19,6 @@ import net.minecraft.world.inventory.AbstractContainerMenu; class PortableGridItemExtendedMenuProvider implements ExtendedMenuProvider { - @Nullable private final Component name; private final Grid grid; private final EnergyStorage energyStorage; @@ -28,7 +26,7 @@ class PortableGridItemExtendedMenuProvider implements ExtendedMenuProvider getMenuCodec() { @Override public Component getDisplayName() { - return name == null ? ContentNames.PORTABLE_GRID : name; + return name; } @Nullable diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index d0608612f..0694d30fa 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -313,7 +313,7 @@ public boolean allowComponentsUpdateAnimation(final Player player, return AbstractModInitializer.allowComponentsUpdateAnimation(oldStack, newStack); } })); - Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, () -> new WirelessGridItem() { + Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, () -> new WirelessGridItem(false) { @Override public boolean allowComponentsUpdateAnimation(final Player player, final InteractionHand hand, @@ -324,7 +324,7 @@ public boolean allowComponentsUpdateAnimation(final Player player, })); Items.INSTANCE.setCreativeWirelessGrid(callback.register( CREATIVE_WIRELESS_GRID, - () -> new WirelessGridItem() { + () -> new WirelessGridItem(true) { @Override public boolean allowComponentsUpdateAnimation(final Player player, final InteractionHand hand, diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 78cd28929..83b58867e 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -279,7 +279,7 @@ public boolean shouldCauseReequipAnimation(final ItemStack oldStack, return AbstractModInitializer.allowComponentsUpdateAnimation(oldStack, newStack); } })); - Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, () -> new WirelessGridItem() { + Items.INSTANCE.setWirelessGrid(callback.register(WIRELESS_GRID, () -> new WirelessGridItem(false) { @Override public boolean shouldCauseReequipAnimation(final ItemStack oldStack, final ItemStack newStack, @@ -289,7 +289,7 @@ public boolean shouldCauseReequipAnimation(final ItemStack oldStack, })); Items.INSTANCE.setCreativeWirelessGrid(callback.register( CREATIVE_WIRELESS_GRID, - () -> new WirelessGridItem() { + () -> new WirelessGridItem(true) { @Override public boolean shouldCauseReequipAnimation(final ItemStack oldStack, final ItemStack newStack, From ca220425506d55d0cdc3ae35837f7bf04f3414fc Mon Sep 17 00:00:00 2001 From: Raoul Date: Mon, 12 Aug 2024 16:52:18 +0200 Subject: [PATCH 04/83] chore: update translation Turkish from crowdin --- .../assets/refinedstorage/lang/tr_tr.json | 62 ++++++++++++++----- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json index 976dd8177..bee0cba7a 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Disk Sürücüsü", "block.refinedstorage.machine_casing": "Makine Muhafazası", "block.refinedstorage.grid": "Terminal", + "block.refinedstorage.pattern_grid": "Şablon Terminali", "block.refinedstorage.crafting_grid": "Üretim Terminali", "block.refinedstorage.controller": "Denetleyici", "block.refinedstorage.creative_controller": "Yaratıcı Mod Denetleyici", @@ -53,14 +54,27 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Son düzenleme", "gui.refinedstorage.grid.auto_selected": "Otomatik seçili", "gui.refinedstorage.grid.auto_selected.help": "Terminal açılırken arama kutusunun otomatik olarak seçilip seçilmeyeceği.", - "gui.refinedstorage.grid.synchronizer": "Senkronizasyon modu", - "gui.refinedstorage.grid.synchronizer.off": "Kapalı", - "gui.refinedstorage.grid.synchronizer.off.help": "Arama kutusu metnini senkronize etme.", + "gui.refinedstorage.grid.synchronization_mode": "Senkronizasyon modu", + "gui.refinedstorage.grid.synchronization_mode.off": "Kapalı", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Arama kutusu metnini senkronize etme.", "gui.refinedstorage.grid.resource_type": "Kaynak türü", "gui.refinedstorage.grid.resource_type.all": "Hepsi", "gui.refinedstorage.grid.resource_type.help": "Belirli kaynak türlerini filtreleyin.", "gui.refinedstorage.crafting_grid.move.network": "Eşyaları ağa taşı", "gui.refinedstorage.crafting_grid.move.inventory": "Eşyaları envantere taşı", + "gui.refinedstorage.pattern_grid.create_pattern": "Şablon oluştur", + "gui.refinedstorage.pattern_grid.clear": "Temizle", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Belirsiz Mod", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Bileşenleri göz ardı ederek, şablon girdilerini eşleştir.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Şablon girdilerini tam olarak eşleştir.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Girdiler", + "gui.refinedstorage.pattern_grid.processing.outputs": "Çıktılar", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "Depolama ağından çıkarılacak ve hedef envantere eklenecek kaynaklar.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "Üretim görevinin başarılı sayılması için depolama ağına geri gönderilmesi beklenen kaynaklar.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Miktarı ve alternatifleri yapılandırmak için tıkla", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "İzin verilen alternatifler:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatifler", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Genişlet", "gui.refinedstorage.screen_size": "Ekran boyutu", "gui.refinedstorage.screen_size.stretch": "Esnet", "gui.refinedstorage.screen_size.small": "Küçük", @@ -84,6 +98,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Yalnızca filtrelerde yapılandırılmış kaynakların depolama ağına girmesine izin ver.", "gui.refinedstorage.importer.filter_mode.block.help": "Filtrelerde yapılandırılmış kaynakların depolama ağına girmesine izin verme.", "gui.refinedstorage.wireless_transmitter.distance": "%d blok", + "gui.refinedstorage.wireless_transmitter.inactive": "Etkin Değil", "gui.refinedstorage.storage_monitor.filter_help": "Görüntülenecek kaynak.", "gui.refinedstorage.redstone_mode": "Redstone modu", "gui.refinedstorage.redstone_mode.ignore": "Yoksay", @@ -101,23 +116,23 @@ "gui.refinedstorage.scheduling_mode.random.help": "Rastgele bir filtreyi kullan.", "gui.refinedstorage.priority": "Öncelik", "gui.refinedstorage.priority.storage_help": "Depolama ağının kaynakları ekleyeceği veya çıkaracağı sıra, en yüksek-ilk.", - "gui.refinedstorage.amount": "Miktar", - "gui.refinedstorage.amount.reset": "Sıfırla", - "gui.refinedstorage.amount.set": "Ayarla", + "gui.refinedstorage.configure_amount": "Miktarı yapılandır", + "gui.refinedstorage.configure_amount.reset": "Sıfırla", + "gui.refinedstorage.configure_amount.set": "Ayarla", "gui.refinedstorage.filter_mode": "Filtre modu", "gui.refinedstorage.filter_mode.allow": "İzin Listesi", "gui.refinedstorage.filter_mode.block": "Engel Listesi", "gui.refinedstorage.fuzzy_mode": "Belirsiz Mod", "gui.refinedstorage.fuzzy_mode.on": "Açık", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "İzin listesi veya engel listesi için filtreleri tam olarak eşleştir.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Filtreyi tam olarak eşleştir.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Depolama ağından çıkarırken filtreleri tam olarak eşleştir.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Kaynaktan çıkarırken filtreleri tam olarak eşleştir.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Bileşenleri göz ardı ederek, izin listesi veya engel listesi için filtreleri eşleştir.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Bileşenleri göz ardı ederek, filtreyi eşleştir.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Bileşenleri göz ardı ederek, depolama ağından çıkarırken filtreleri eşleştir.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Bileşenleri göz ardı ederek, kaynaktan çıkarırken filtreleri eşleştir.", "gui.refinedstorage.fuzzy_mode.off": "Kapalı", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "NBT etiketlerini karşılaştırmadan izin listesi veya engel listesi için filtreleri eşleştir.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "NBT etiketlerini karşılaştırmadan filtreyi eşleştir.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "NBT etiketlerini karşılaştırmadan depolama ağından çıkarırken filtreleri eşleştir.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "NBT etiketlerini karşılaştırmadan kaynaktan çıkarırken filtreleri eşleştir.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "İzin listesi veya engel listesi için filtreleri tam olarak eşleştir.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Filtreyi tam olarak eşleştir.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Depolama ağından çıkarırken filtreleri tam olarak eşleştir.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Kaynaktan çıkarırken filtreleri tam olarak eşleştir.", "gui.refinedstorage.access_mode": "Erişim modu", "gui.refinedstorage.access_mode.insert_extract": "Ekle ve çıkar", "gui.refinedstorage.access_mode.insert_extract.help": "Depolama ağı, bu depoya ekleme veya çıkarma yapabilecektir.", @@ -133,6 +148,8 @@ "gui.refinedstorage.filter_slot.left_click_for": "Şunun için Sol tıkla", "gui.refinedstorage.filter_slot.right_click_for": "Şunun için Sağ tıkla", "gui.refinedstorage.filter_slot.click_to_clear": "Temizlemek için tıkla", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Miktarı yapılandırmak için tıkla", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Temizlemek için shift tuşuyla tıklayın", "gui.refinedstorage.regulator_upgrade.filter_help": "Hedefte düzenlenmesi gereken kaynak.", "gui.refinedstorage.network_transmitter.status.inactive": "Etkin Değil", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Ağ Kartı Eksik", @@ -170,6 +187,7 @@ "item.refinedstorage.disk_interface.help": "Kaynakları, depolama ağı ve sağlanan depolama diskleri arasında aktarır.", "item.refinedstorage.grid.help": "Depolama ağı ile etkileşime girmeye izin verir.", "item.refinedstorage.crafting_grid.help": "Üretim yetenekleri ile depolama ağına etkileşime izin verir.", + "item.refinedstorage.pattern_grid.help": "Otomatik üretimde kullanılmak üzere Şablonların oluşturulmasına izin verir.", "item.refinedstorage.importer.help": "Kaynakları, harici bir kaynaktan depolama ağına aktarır.", "item.refinedstorage.exporter.help": "Kaynakları, depolama ağından harici bir hedefe aktarır.", "item.refinedstorage.interface.help": "İçe Aktarıcı ve Dışarıya Aktarıcı'nın birleşimi olarak davranır.", @@ -196,8 +214,8 @@ "item.refinedstorage.4k_storage_disk": "4K Depolama Diski", "item.refinedstorage.16k_storage_disk": "16K Depolama Diski", "item.refinedstorage.64k_storage_disk": "64K Depolama Diski", - "item.refinedstorage.storage_disk.help": "%s eşya depolar.", - "item.refinedstorage.storage_block.help": "%s eşya depolar.", + "item.refinedstorage.storage_disk.help": "%s nesne depolar. Boş olduğunda, Depolama Parçasını geri vermek için basılı tutarken kullanın. Depolama Parçası ile birleştirilerek daha yüksek bir seviyeye yükseltilebilir.", + "item.refinedstorage.storage_block.help": "%s nesne depolar. Boş olduğunda, Depolama Parçasını ve Makine Muhafazasını geri vermek için basılı tutarken kullanın. Depolama Parçası ile birleştirilerek daha yüksek bir seviyeye yükseltilebilir.", "item.refinedstorage.creative_storage_disk": "Yaratıcı Mod Depolama Diski", "item.refinedstorage.creative_storage_disk.help": "Sonsuz miktarda eşya depolar.", "item.refinedstorage.creative_storage_block.help": "Sonsuz miktarda eşya depolar.", @@ -271,6 +289,9 @@ "item.refinedstorage.fallback_security_card.help": "Bir oyuncu için eşleşen bir Güvenlik Kartı bulunamazsa yedek olarak görev yapar. Yapılandırmak için sağ tıklayın. Yapılandırmayı temizlemek için çömelirken kullanın.", "item.refinedstorage.portable_grid.help": "Bir depolama ağına bağlı değilken bir depolama diski ile etkileşime girmeye izin verir. Dünyada bir blok olarak veya envanterinizden kullanılabilir.", "item.refinedstorage.storage_monitor.help": "Depolama ağınızdaki belirli bir kaynağın mevcut miktarını gösteren bir blok. Yapılandırmak için SHIFT + sağ tıklayın. Bir yığını çıkarmak için sol tıklayın, tek bir kaynağı çıkarmak için SHIFT + sol tıklayın, bir kaynağı eklemek için sağ tıklayın, kaynakları toplu olarak eklemek için birden çok kez sağ tıklayın.", + "item.refinedstorage.pattern": "Şablon", + "item.refinedstorage.pattern.fuzzy_mode": "Belirsiz Mod", + "item.refinedstorage.pattern.help": "Otomatik üretimde üretilecek tarifi saklamak için kullanılır. Temizlemek için çömelirken kullanın.", "misc.refinedstorage.stored": "Depolanmış: %s", "misc.refinedstorage.stored_with_capacity": "Depolanmış: %s / %s (%d%%)", "misc.refinedstorage.total": "Toplam %d", @@ -298,6 +319,10 @@ "misc.refinedstorage.no_permission.build.break": "%s kırmanıza izin verilmiyor.", "misc.refinedstorage.no_permission.build.rotate": "%s döndürmenize izin verilmiyor.", "misc.refinedstorage.no_permission.build.dismantle": "%s sökmenize izin verilmiyor.", + "misc.refinedstorage.pattern.crafting": "Üretim Şablonu", + "misc.refinedstorage.pattern.processing": "Şablon İşleniyor", + "misc.refinedstorage.pattern.stonecutter": "Taş Yontma Makinesi Şablonu", + "misc.refinedstorage.pattern.smithing_table": "Demirci Masası Şablonu", "key.refinedstorage.focus_search_bar": "Arama çubuğuna odaklan", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Üretim Terminali matriksini, ağa temizle", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Üretim Terminali matriksini, envantere temizle", @@ -320,6 +345,7 @@ "tag.item.refinedstorage.constructors": "Yapıcılar", "tag.item.refinedstorage.controllers": "Denetleyiciler", "tag.item.refinedstorage.crafting_grids": "Üretim Terminalleri", + "tag.item.refinedstorage.pattern_grids": "Şablon Terminalleri", "tag.item.refinedstorage.creative_controllers": "Yaratıcı Mod Denetleyicileri", "tag.item.refinedstorage.destructors": "Yıkıcılar", "tag.item.refinedstorage.detectors": "Dedektörler", @@ -373,6 +399,10 @@ "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "Üretim Terminali tarafından kullanılan enerji.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Üretim matrisi, kapanma davranışı", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "Üretim Terminalini kapatırken, üretim matrisi yuvalarına ne olduğu.", + "text.autoconfig.refinedstorage.option.patternGrid": "Şablon Terminali", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Şablon Terminali için yapılandırma.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Enerji kullanımı", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "Şablon Terminali tarafından kullanılan enerji.", "text.autoconfig.refinedstorage.option.controller": "Denetleyici", "text.autoconfig.refinedstorage.option.controller.tooltip": "Denetleyici için yapılandırma.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Enerji kapasitesi", From 53273b4723769f4c4947afc9b1a9271b64950e9c Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 12 Aug 2024 22:04:39 +0200 Subject: [PATCH 05/83] refactor: remove AbstractLevelInteractingNetworkNodeContainerBlockEntity This can be moved to the base block entity instead. --- .../ConstructorBlockEntity.java | 1 + .../DestructorBlockEntity.java | 1 + .../common/exporter/ExporterBlockEntity.java | 1 + .../common/importer/ImporterBlockEntity.java | 1 + ...actingNetworkNodeContainerBlockEntity.java | 64 ------------------- ...deableNetworkNodeContainerBlockEntity.java | 2 +- .../BaseNetworkNodeContainerBlockEntity.java | 35 +++++++++- 7 files changed, 39 insertions(+), 66 deletions(-) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractLevelInteractingNetworkNodeContainerBlockEntity.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java index 9f7acea16..cf9824871 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java @@ -65,6 +65,7 @@ protected void setFilters(final List filters) { @Override protected void initialize(final ServerLevel level, final Direction direction) { + super.initialize(level, direction); this.strategy = createStrategy(level, direction); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java index 40b5c1833..63bbae98f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java @@ -145,6 +145,7 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent @Override protected void initialize(final ServerLevel level, final Direction direction) { + super.initialize(level, direction); final BlockPos pos = getBlockPos().relative(direction); final Direction incomingDirection = direction.getOpposite(); final List strategies = RefinedStorageApi.INSTANCE.getDestructorStrategyFactories() diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java index 7de0bd47e..d1d05aa3f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java @@ -48,6 +48,7 @@ public ExporterBlockEntity(final BlockPos pos, final BlockState state) { @Override protected void initialize(final ServerLevel level, final Direction direction) { + super.initialize(level, direction); final ExporterTransferStrategy strategy = createStrategy(level, direction); LOGGER.debug("Initialized exporter at {} with strategy {}", worldPosition, strategy); mainNetworkNode.setTransferStrategy(strategy); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java index d2f922a5c..02869d691 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java @@ -67,6 +67,7 @@ public ImporterBlockEntity(final BlockPos pos, final BlockState state) { @Override protected void initialize(final ServerLevel level, final Direction direction) { + super.initialize(level, direction); final List strategies = createStrategies(level, direction); LOGGER.debug("Initialized importer at {} with strategies {}", worldPosition, strategies); mainNetworkNode.setTransferStrategies(strategies); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractLevelInteractingNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractLevelInteractingNetworkNodeContainerBlockEntity.java deleted file mode 100644 index caa4b58f4..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractLevelInteractingNetworkNodeContainerBlockEntity.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.refinedmods.refinedstorage.common.support.network; - -import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; - -public abstract class AbstractLevelInteractingNetworkNodeContainerBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity { - private static final Logger LOGGER = LoggerFactory.getLogger( - AbstractLevelInteractingNetworkNodeContainerBlockEntity.class - ); - - protected AbstractLevelInteractingNetworkNodeContainerBlockEntity( - final BlockEntityType type, - final BlockPos pos, - final BlockState state, - final T node - ) { - super(type, pos, state, node); - } - - // used to handle rotations - @Override - public void setBlockState(final BlockState newBlockState) { - super.setBlockState(newBlockState); - if (!(level instanceof ServerLevel serverLevel)) { - return; - } - initialize(serverLevel); - } - - @Override - public void setLevel(final Level level) { - super.setLevel(level); - if (!(level instanceof ServerLevel serverLevel)) { - return; - } - initialize(serverLevel); - } - - protected final void initialize(final ServerLevel level) { - final Direction direction = tryExtractDirection(getBlockState()); - if (direction == null) { - LOGGER.warn( - "Failed to initialize: could not extract direction from block at {}, state is {}", - worldPosition, - getBlockState() - ); - return; - } - initialize(level, direction); - } - - protected abstract void initialize(ServerLevel level, Direction direction); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java index 6645b061a..9f9f9b4b2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java @@ -23,7 +23,7 @@ import org.slf4j.LoggerFactory; public abstract class AbstractUpgradeableNetworkNodeContainerBlockEntity - extends AbstractLevelInteractingNetworkNodeContainerBlockEntity + extends AbstractRedstoneModeNetworkNodeContainerBlockEntity implements BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger( AbstractUpgradeableNetworkNodeContainerBlockEntity.class diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index b58d133d1..09cbdec73 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -13,12 +13,15 @@ import com.google.common.util.concurrent.RateLimiter; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -26,11 +29,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; + public class BaseNetworkNodeContainerBlockEntity extends AbstractNetworkNodeContainerBlockEntity implements NetworkItemTargetBlockEntity, ConfigurationCardTarget { - private static final String TAG_CUSTOM_NAME = "CustomName"; private static final Logger LOGGER = LoggerFactory.getLogger(BaseNetworkNodeContainerBlockEntity.class); + private static final String TAG_CUSTOM_NAME = "CustomName"; private final RateLimiter activenessChangeRateLimiter = RateLimiter.create(1); @@ -115,12 +120,40 @@ protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate( public void setBlockState(final BlockState newBlockState) { final BlockState oldBlockState = getBlockState(); super.setBlockState(newBlockState); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } if (!doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState)) { return; } containers.update(level); } + @Override + public void setLevel(final Level level) { + super.setLevel(level); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + } + + protected final void initialize(final ServerLevel level) { + final Direction direction = tryExtractDirection(getBlockState()); + if (direction == null) { + LOGGER.warn( + "Failed to initialize: could not extract direction from block at {}, state is {}", + worldPosition, + getBlockState() + ); + return; + } + initialize(level, direction); + } + + protected void initialize(final ServerLevel level, final Direction direction) { + // no op + } + @Nullable @Override public Network getNetworkForItem() { From 9d8c5d6956685f7deffa220a57abf0923cb32d4b Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 12 Aug 2024 22:08:09 +0200 Subject: [PATCH 06/83] refactor: move "placed by player id" out of AbstractRedstoneModeNetworkNodeContainerBlockEntity This belongs in the base block entity instead. --- ...neModeNetworkNodeContainerBlockEntity.java | 40 ------------------- .../BaseNetworkNodeContainerBlockEntity.java | 30 +++++++++++++- 2 files changed, 29 insertions(+), 41 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java index 941729598..7a85c32db 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java @@ -1,31 +1,21 @@ package com.refinedmods.refinedstorage.common.support.network; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; -import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.support.PlayerAwareBlockEntity; import com.refinedmods.refinedstorage.common.support.RedstoneMode; import com.refinedmods.refinedstorage.common.support.RedstoneModeSettings; -import java.util.Objects; -import java.util.UUID; -import javax.annotation.Nullable; - import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; public abstract class AbstractRedstoneModeNetworkNodeContainerBlockEntity extends BaseNetworkNodeContainerBlockEntity implements PlayerAwareBlockEntity { private static final String TAG_REDSTONE_MODE = "rm"; - private static final String TAG_PLACED_BY_PLAYER_ID = "pbpid"; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - @Nullable - private UUID placedByPlayerId; protected AbstractRedstoneModeNetworkNodeContainerBlockEntity(final BlockEntityType type, final BlockPos pos, @@ -41,28 +31,12 @@ protected boolean calculateActive() { && redstoneMode.isActive(level.hasNeighborSignal(worldPosition)); } - @Override - public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - if (placedByPlayerId != null) { - tag.putUUID(TAG_PLACED_BY_PLAYER_ID, placedByPlayerId); - } - } - @Override public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); tag.putInt(TAG_REDSTONE_MODE, RedstoneModeSettings.getRedstoneMode(getRedstoneMode())); } - @Override - public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { - super.loadAdditional(tag, provider); - if (tag.hasUUID(TAG_PLACED_BY_PLAYER_ID)) { - placedByPlayerId = tag.getUUID(TAG_PLACED_BY_PLAYER_ID); - } - } - @Override public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.readConfiguration(tag, provider); @@ -79,18 +53,4 @@ public void setRedstoneMode(final RedstoneMode redstoneMode) { this.redstoneMode = redstoneMode; setChanged(); } - - @Override - public void setPlacedBy(final UUID playerId) { - this.placedByPlayerId = playerId; - setChanged(); - } - - protected final Player getFakePlayer(final ServerLevel serverLevel) { - return Platform.INSTANCE.getFakePlayer(serverLevel, placedByPlayerId); - } - - protected final boolean isPlacedBy(final UUID playerId) { - return Objects.equals(placedByPlayerId, playerId); - } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index 09cbdec73..3d59610e7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -3,12 +3,16 @@ import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; +import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.configurationcard.ConfigurationCardTarget; import com.refinedmods.refinedstorage.common.api.support.network.AbstractNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.api.support.network.item.NetworkItemTargetBlockEntity; +import com.refinedmods.refinedstorage.common.support.PlayerAwareBlockEntity; +import java.util.Objects; +import java.util.UUID; import javax.annotation.Nullable; import com.google.common.util.concurrent.RateLimiter; @@ -21,6 +25,7 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -33,14 +38,17 @@ public class BaseNetworkNodeContainerBlockEntity extends AbstractNetworkNodeContainerBlockEntity - implements NetworkItemTargetBlockEntity, ConfigurationCardTarget { + implements NetworkItemTargetBlockEntity, ConfigurationCardTarget, PlayerAwareBlockEntity { private static final Logger LOGGER = LoggerFactory.getLogger(BaseNetworkNodeContainerBlockEntity.class); private static final String TAG_CUSTOM_NAME = "CustomName"; + private static final String TAG_PLACED_BY_PLAYER_ID = "pbpid"; private final RateLimiter activenessChangeRateLimiter = RateLimiter.create(1); @Nullable private Component name; + @Nullable + private UUID placedByPlayerId; public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, final BlockPos pos, @@ -163,12 +171,18 @@ public Network getNetworkForItem() { @Override public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { super.saveAdditional(tag, provider); + if (placedByPlayerId != null) { + tag.putUUID(TAG_PLACED_BY_PLAYER_ID, placedByPlayerId); + } writeConfiguration(tag, provider); } @Override public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { super.loadAdditional(tag, provider); + if (tag.hasUUID(TAG_PLACED_BY_PLAYER_ID)) { + placedByPlayerId = tag.getUUID(TAG_PLACED_BY_PLAYER_ID); + } readConfiguration(tag, provider); } @@ -201,4 +215,18 @@ protected void collectImplicitComponents(final DataComponentMap.Builder componen protected final Component getName(final Component defaultName) { return name == null ? defaultName : name; } + + @Override + public void setPlacedBy(final UUID playerId) { + this.placedByPlayerId = playerId; + setChanged(); + } + + protected final Player getFakePlayer(final ServerLevel serverLevel) { + return Platform.INSTANCE.getFakePlayer(serverLevel, placedByPlayerId); + } + + protected final boolean isPlacedBy(final UUID playerId) { + return Objects.equals(placedByPlayerId, playerId); + } } From 6f75180f1f67198ab44e6ec1c449e0f7d7d3c1a0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 12 Aug 2024 22:18:17 +0200 Subject: [PATCH 07/83] refactor: remove AbstractRedstoneModeNetworkNodeContainerBlockEntity Moved to base block entity instead. There is only one block that has no redstone mode, and that one has a flag set. --- .../controller/ControllerBlockEntity.java | 4 +- .../common/detector/DetectorBlockEntity.java | 4 +- .../common/grid/AbstractGridBlockEntity.java | 4 +- .../common/iface/InterfaceBlockEntity.java | 4 +- .../NetworkReceiverBlockEntity.java | 5 ++ .../NetworkTransmitterBlockEntity.java | 4 +- .../common/networking/RelayBlockEntity.java | 4 +- .../WirelessTransmitterBlockEntity.java | 4 +- .../security/SecurityManagerBlockEntity.java | 4 +- .../AbstractDiskContainerBlockEntity.java | 4 +- .../ExternalStorageBlockEntity.java | 4 +- .../AbstractStorageBlockBlockEntity.java | 4 +- .../StorageMonitorBlockEntity.java | 4 +- ...neModeNetworkNodeContainerBlockEntity.java | 56 ------------------- ...deableNetworkNodeContainerBlockEntity.java | 2 +- .../BaseNetworkNodeContainerBlockEntity.java | 40 +++++++++++-- 16 files changed, 65 insertions(+), 86 deletions(-) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java index 436e74356..59b762621 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java @@ -11,7 +11,7 @@ import com.refinedmods.refinedstorage.common.support.energy.BlockEntityEnergyStorage; import com.refinedmods.refinedstorage.common.support.energy.CreativeEnergyStorage; import com.refinedmods.refinedstorage.common.support.energy.ItemBlockEnergyStorage; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.google.common.util.concurrent.RateLimiter; import net.minecraft.core.BlockPos; @@ -30,7 +30,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ControllerBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity +public class ControllerBlockEntity extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, TransferableBlockEntityEnergy { private static final Logger LOGGER = LoggerFactory.getLogger(ControllerBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java index f78a38032..370cb256d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java @@ -15,7 +15,7 @@ import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; import com.refinedmods.refinedstorage.common.support.containermenu.SingleAmountData; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -37,7 +37,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class DetectorBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity +public class DetectorBlockEntity extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(DetectorBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index 35872682a..d70553b07 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -17,7 +17,7 @@ import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import java.util.List; @@ -30,7 +30,7 @@ import static java.util.Objects.requireNonNull; public abstract class AbstractGridBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements Grid { protected AbstractGridBlockEntity(final BlockEntityType type, final BlockPos pos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java index f9422b231..bf0ae6050 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java @@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -34,7 +34,7 @@ import net.minecraft.world.level.block.state.BlockState; public class InterfaceBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_EXPORT_ITEMS = "ei"; private static final int EXPORT_SLOTS = 9; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java index e9c2663dc..e72366361 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java @@ -32,6 +32,11 @@ protected InWorldNetworkNodeContainer createMainContainer(final SimpleNetworkNod .build(); } + @Override + protected boolean hasRedstoneMode() { + return false; + } + private NetworkReceiverKey createKey() { return new NetworkReceiverKey(GlobalPos.of(requireNonNull(level).dimension(), getBlockPos())); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java index 131ad3861..33db01c0d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java @@ -11,7 +11,7 @@ import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -39,7 +39,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public class NetworkTransmitterBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger(NetworkTransmitterBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java index cacf099e2..0cf879b3e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java @@ -16,7 +16,7 @@ import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.RedstoneMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -39,7 +39,7 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; import static java.util.Objects.requireNonNull; -public class RelayBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity +public class RelayBlockEntity extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final String TAG_PASS_THROUGH = "passthrough"; private static final String TAG_PASS_ENERGY = "passenergy"; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index ebc62600d..2d1a59b76 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -9,7 +9,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -32,7 +32,7 @@ import net.minecraft.world.level.block.state.BlockState; public class WirelessTransmitterBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_UPGRADES = "upgr"; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java index b546d1bc5..4d5b90020 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java @@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilteredContainer; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.NetworkNodeContainerProviderImpl; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -32,7 +32,7 @@ import net.minecraft.world.level.block.state.BlockState; public class SecurityManagerBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops, NetworkNodeMenuProvider { static final int CARD_AMOUNT = 18; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java index d56946f89..3933ff6ff 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java @@ -8,7 +8,7 @@ import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.FilteredContainer; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -34,7 +34,7 @@ import net.minecraft.world.level.block.state.BlockState; public abstract class AbstractDiskContainerBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { private static final String TAG_DISK_INVENTORY = "inv"; private static final String TAG_DISKS = "disks"; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java index 0ff1d8cdc..79f8ef941 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java @@ -9,7 +9,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -34,7 +34,7 @@ import static java.util.Objects.requireNonNull; public class ExternalStorageBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(ExternalStorageBlockEntity.class); private static final String TAG_TRACKED_RESOURCES = "tr"; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java index 1b5e2cb82..563d33735 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java @@ -12,7 +12,7 @@ import com.refinedmods.refinedstorage.common.storage.StorageConfigurationContainerImpl; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory; abstract class AbstractStorageBlockBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, StorageBlockEntity, AbstractStorageContainerNetworkNode.Provider { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractStorageBlockBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index 3d7d2700b..3c072fdaa 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -15,7 +15,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractRedstoneModeNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -43,7 +43,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class StorageMonitorBlockEntity extends AbstractRedstoneModeNetworkNodeContainerBlockEntity +public class StorageMonitorBlockEntity extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(StorageMonitorBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java deleted file mode 100644 index 7a85c32db..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractRedstoneModeNetworkNodeContainerBlockEntity.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.refinedmods.refinedstorage.common.support.network; - -import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; -import com.refinedmods.refinedstorage.common.support.PlayerAwareBlockEntity; -import com.refinedmods.refinedstorage.common.support.RedstoneMode; -import com.refinedmods.refinedstorage.common.support.RedstoneModeSettings; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; - -public abstract class AbstractRedstoneModeNetworkNodeContainerBlockEntity - extends BaseNetworkNodeContainerBlockEntity implements PlayerAwareBlockEntity { - private static final String TAG_REDSTONE_MODE = "rm"; - - private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - - protected AbstractRedstoneModeNetworkNodeContainerBlockEntity(final BlockEntityType type, - final BlockPos pos, - final BlockState state, - final T node) { - super(type, pos, state, node); - } - - @Override - protected boolean calculateActive() { - return super.calculateActive() - && level != null - && redstoneMode.isActive(level.hasNeighborSignal(worldPosition)); - } - - @Override - public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { - super.writeConfiguration(tag, provider); - tag.putInt(TAG_REDSTONE_MODE, RedstoneModeSettings.getRedstoneMode(getRedstoneMode())); - } - - @Override - public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { - super.readConfiguration(tag, provider); - if (tag.contains(TAG_REDSTONE_MODE)) { - redstoneMode = RedstoneModeSettings.getRedstoneMode(tag.getInt(TAG_REDSTONE_MODE)); - } - } - - public RedstoneMode getRedstoneMode() { - return redstoneMode; - } - - public void setRedstoneMode(final RedstoneMode redstoneMode) { - this.redstoneMode = redstoneMode; - setChanged(); - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java index 9f9f9b4b2..ac798f910 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java @@ -23,7 +23,7 @@ import org.slf4j.LoggerFactory; public abstract class AbstractUpgradeableNetworkNodeContainerBlockEntity - extends AbstractRedstoneModeNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger( AbstractUpgradeableNetworkNodeContainerBlockEntity.class diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index 3d59610e7..d7e759664 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -10,6 +10,8 @@ import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.api.support.network.item.NetworkItemTargetBlockEntity; import com.refinedmods.refinedstorage.common.support.PlayerAwareBlockEntity; +import com.refinedmods.refinedstorage.common.support.RedstoneMode; +import com.refinedmods.refinedstorage.common.support.RedstoneModeSettings; import java.util.Objects; import java.util.UUID; @@ -42,6 +44,7 @@ public class BaseNetworkNodeContainerBlockEntity private static final Logger LOGGER = LoggerFactory.getLogger(BaseNetworkNodeContainerBlockEntity.class); private static final String TAG_CUSTOM_NAME = "CustomName"; private static final String TAG_PLACED_BY_PLAYER_ID = "pbpid"; + private static final String TAG_REDSTONE_MODE = "rm"; private final RateLimiter activenessChangeRateLimiter = RateLimiter.create(1); @@ -50,6 +53,8 @@ public class BaseNetworkNodeContainerBlockEntity @Nullable private UUID placedByPlayerId; + private RedstoneMode redstoneMode = RedstoneMode.IGNORE; + public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, final BlockPos pos, final BlockState state, @@ -67,7 +72,10 @@ protected InWorldNetworkNodeContainer createMainContainer(final T networkNode) { protected boolean calculateActive() { final long energyUsage = mainNetworkNode.getEnergyUsage(); final boolean hasLevel = level != null && level.isLoaded(worldPosition); + final boolean redstoneModeActive = !hasRedstoneMode() + || redstoneMode.isActive(hasLevel && level.hasNeighborSignal(worldPosition)); return hasLevel + && redstoneModeActive && mainNetworkNode.getNetwork() != null && mainNetworkNode.getNetwork().getComponent(EnergyNetworkComponent.class).getStored() >= energyUsage; } @@ -148,11 +156,6 @@ public void setLevel(final Level level) { protected final void initialize(final ServerLevel level) { final Direction direction = tryExtractDirection(getBlockState()); if (direction == null) { - LOGGER.warn( - "Failed to initialize: could not extract direction from block at {}, state is {}", - worldPosition, - getBlockState() - ); return; } initialize(level, direction); @@ -191,6 +194,9 @@ public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provide if (name != null) { tag.putString(TAG_CUSTOM_NAME, Component.Serializer.toJson(name, provider)); } + if (hasRedstoneMode()) { + tag.putInt(TAG_REDSTONE_MODE, RedstoneModeSettings.getRedstoneMode(redstoneMode)); + } } @Override @@ -198,6 +204,26 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider if (tag.contains(TAG_CUSTOM_NAME, Tag.TAG_STRING)) { this.name = parseCustomNameSafe(tag.getString(TAG_CUSTOM_NAME), provider); } + if (hasRedstoneMode() && tag.contains(TAG_REDSTONE_MODE)) { + this.redstoneMode = RedstoneModeSettings.getRedstoneMode(tag.getInt(TAG_REDSTONE_MODE)); + } + } + + private void verifyHasRedstoneMode() { + if (!hasRedstoneMode()) { + throw new IllegalStateException("Block has no redstone mode!"); + } + } + + public RedstoneMode getRedstoneMode() { + verifyHasRedstoneMode(); + return redstoneMode; + } + + public void setRedstoneMode(final RedstoneMode redstoneMode) { + verifyHasRedstoneMode(); + this.redstoneMode = redstoneMode; + setChanged(); } @Override @@ -229,4 +255,8 @@ protected final Player getFakePlayer(final ServerLevel serverLevel) { protected final boolean isPlacedBy(final UUID playerId) { return Objects.equals(placedByPlayerId, playerId); } + + protected boolean hasRedstoneMode() { + return true; + } } From 46fa1cc87a1bae1d27fbae91b75889dd86c2e2ba Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 12 Aug 2024 22:47:55 +0200 Subject: [PATCH 08/83] refactor: simplify UpgradeContainer usage This ensures that we can reuse it across the other block entities and remove AbstractSchedulingNetworkNodeContainerBlockEntity. * Move work tick rate to BaseNetworkNodeContainerBlockEntity. * Move calculation of speed and work tick rate to UpgradeContainer. --- .../WirelessTransmitterBlockEntity.java | 17 ++---- .../WirelessTransmitterContainerMenu.java | 5 +- .../AbstractDiskInterfaceBlockEntity.java | 29 ++-------- .../DiskInterfaceContainerMenu.java | 3 +- .../AbstractSimpleFilterContainerMenu.java | 4 +- ...deableNetworkNodeContainerBlockEntity.java | 55 ++++--------------- .../BaseNetworkNodeContainerBlockEntity.java | 15 ++++- .../common/upgrade/UpgradeContainer.java | 40 ++++++++++---- .../upgrade/UpgradeContainerListener.java | 6 ++ 9 files changed, 76 insertions(+), 98 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 2d1a59b76..058abd3c4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -36,16 +36,17 @@ public class WirelessTransmitterBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_UPGRADES = "upgr"; - private final UpgradeContainer upgradeContainer = new UpgradeContainer( - UpgradeDestinations.WIRELESS_TRANSMITTER, - RefinedStorageApi.INSTANCE.getUpgradeRegistry(), - this::upgradeContainerChanged - ); + private final UpgradeContainer upgradeContainer; public WirelessTransmitterBlockEntity(final BlockPos pos, final BlockState state) { super(BlockEntities.INSTANCE.getWirelessTransmitter(), pos, state, new SimpleNetworkNode( Platform.INSTANCE.getConfig().getWirelessTransmitter().getEnergyUsage() )); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.WIRELESS_TRANSMITTER, (rate, energyUsage) -> { + final long baseUsage = Platform.INSTANCE.getConfig().getWirelessTransmitter().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseUsage + energyUsage); + setChanged(); + }); } @Override @@ -107,12 +108,6 @@ int getRange() { return RefinedStorageApi.INSTANCE.getWirelessTransmitterRangeModifier().modifyRange(upgradeContainer, 0); } - private void upgradeContainerChanged() { - final long baseUsage = Platform.INSTANCE.getConfig().getWirelessTransmitter().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseUsage + upgradeContainer.getEnergyUsage()); - setChanged(); - } - @Override public NonNullList getDrops() { final NonNullList drops = NonNullList.create(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java index b853d3487..58075592d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java @@ -33,10 +33,7 @@ public WirelessTransmitterContainerMenu(final int syncId, final Inventory playerInventory, final WirelessTransmitterData data) { super(Menus.INSTANCE.getWirelessTransmitter(), syncId); - addSlots(playerInventory, new UpgradeContainer( - UpgradeDestinations.WIRELESS_TRANSMITTER, - RefinedStorageApi.INSTANCE.getUpgradeRegistry() - )); + addSlots(playerInventory, new UpgradeContainer(UpgradeDestinations.WIRELESS_TRANSMITTER, null)); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); this.range = data.range(); this.active = data.active(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 666161d25..f1b245560 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -6,7 +6,6 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; import com.refinedmods.refinedstorage.common.Platform; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.storage.SerializableStorage; import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; @@ -43,8 +42,6 @@ public abstract class AbstractDiskInterfaceBlockEntity private static final String TAG_TRANSFER_MODE = "tm"; private final UpgradeContainer upgradeContainer; - private int workTickRate = 9; - private int workTicks; protected AbstractDiskInterfaceBlockEntity(final BlockPos pos, final BlockState state) { super(BlockEntities.INSTANCE.getDiskInterface(), pos, state, new StorageTransferNetworkNode( @@ -52,11 +49,12 @@ protected AbstractDiskInterfaceBlockEntity(final BlockPos pos, final BlockState Platform.INSTANCE.getConfig().getDiskInterface().getEnergyUsagePerDisk(), AMOUNT_OF_DISKS )); - this.upgradeContainer = new UpgradeContainer( - UpgradeDestinations.DISK_INTERFACE, - RefinedStorageApi.INSTANCE.getUpgradeRegistry(), - this::upgradeContainerChanged - ); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.DISK_INTERFACE, (rate, upgradeEnergyUsage) -> { + setWorkTickRate(rate); + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getDiskInterface().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + setChanged(); + }); this.mainNetworkNode.setListener(this); this.mainNetworkNode.setTransferQuotaProvider(storage -> { if (storage instanceof SerializableStorage serializableStorage) { @@ -68,21 +66,6 @@ protected AbstractDiskInterfaceBlockEntity(final BlockPos pos, final BlockState }); } - private void upgradeContainerChanged() { - final int amountOfSpeedUpgrades = upgradeContainer.getAmount(Items.INSTANCE.getSpeedUpgrade()); - this.workTickRate = 9 - (amountOfSpeedUpgrades * 2); - final long baseEnergyUsage = Platform.INSTANCE.getConfig().getDiskInterface().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeContainer.getEnergyUsage()); - setChanged(); - } - - @Override - public final void doWork() { - if (workTicks++ % workTickRate == 0) { - super.doWork(); - } - } - @Override protected void setFilters(final Set filters) { mainNetworkNode.setFilters(filters); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceContainerMenu.java index facd010d9..f592503f5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceContainerMenu.java @@ -2,7 +2,6 @@ import com.refinedmods.refinedstorage.api.network.impl.node.storagetransfer.StorageTransferMode; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.storage.StorageContainerItem; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.content.Menus; @@ -77,7 +76,7 @@ public DiskInterfaceContainerMenu(final int syncId, StorageContainerItem.stackValidator() ), ResourceContainerImpl.createForFilter(resourceContainerData), - new UpgradeContainer(UpgradeDestinations.DISK_INTERFACE, RefinedStorageApi.INSTANCE.getUpgradeRegistry()) + new UpgradeContainer(UpgradeDestinations.DISK_INTERFACE, null) ); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); registerProperty(new ClientProperty<>(PropertyTypes.FUZZY_MODE, false)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java index 19c5ecac6..8b35553bd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java @@ -48,9 +48,7 @@ protected AbstractSimpleFilterContainerMenu(final MenuType type, addSlots( player, ResourceContainerImpl.createForFilter(resourceContainerData), - upgradeDestination == null - ? null - : new UpgradeContainer(upgradeDestination, RefinedStorageApi.INSTANCE.getUpgradeRegistry()) + upgradeDestination == null ? null : new UpgradeContainer(upgradeDestination, null) ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java index ac798f910..d12219131 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java @@ -1,8 +1,6 @@ package com.refinedmods.refinedstorage.common.support.network; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; -import com.refinedmods.refinedstorage.common.content.Items; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; @@ -19,21 +17,13 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public abstract class AbstractUpgradeableNetworkNodeContainerBlockEntity extends BaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops { - private static final Logger LOGGER = LoggerFactory.getLogger( - AbstractUpgradeableNetworkNodeContainerBlockEntity.class - ); - private static final String TAG_UPGRADES = "upgr"; protected final UpgradeContainer upgradeContainer; - private int workTickRate = 9; - private int workTicks; protected AbstractUpgradeableNetworkNodeContainerBlockEntity( final BlockEntityType type, @@ -43,33 +33,14 @@ protected AbstractUpgradeableNetworkNodeContainerBlockEntity( final UpgradeDestinations destination ) { super(type, pos, state, node); - this.upgradeContainer = new UpgradeContainer( - destination, - RefinedStorageApi.INSTANCE.getUpgradeRegistry(), - this::upgradeContainerChanged - ); - } - - @Override - public final void doWork() { - if (workTicks++ % workTickRate == 0) { - super.doWork(); - postDoWork(); - } - } - - protected void postDoWork() { - } - - private void upgradeContainerChanged() { - LOGGER.debug("Reconfiguring {} for upgrades", getBlockPos()); - final int amountOfSpeedUpgrades = upgradeContainer.getAmount(Items.INSTANCE.getSpeedUpgrade()); - this.workTickRate = 9 - (amountOfSpeedUpgrades * 2); - this.setEnergyUsage(upgradeContainer.getEnergyUsage()); - setChanged(); - if (level instanceof ServerLevel serverLevel) { - initialize(serverLevel); - } + this.upgradeContainer = new UpgradeContainer(destination, (rate, upgradeEnergyUsage) -> { + setWorkTickRate(rate); + setEnergyUsage(upgradeEnergyUsage); + setChanged(); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + }); } @Override @@ -96,14 +67,10 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr super.loadAdditional(tag, provider); } - protected abstract void setEnergyUsage(long upgradeEnergyUsage); - @Override public final NonNullList getDrops() { - final NonNullList drops = NonNullList.create(); - for (int i = 0; i < upgradeContainer.getContainerSize(); ++i) { - drops.add(upgradeContainer.getItem(i)); - } - return drops; + return upgradeContainer.getDrops(); } + + protected abstract void setEnergyUsage(long upgradeEnergyUsage); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index d7e759664..547a960cc 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -12,6 +12,7 @@ import com.refinedmods.refinedstorage.common.support.PlayerAwareBlockEntity; import com.refinedmods.refinedstorage.common.support.RedstoneMode; import com.refinedmods.refinedstorage.common.support.RedstoneModeSettings; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import java.util.Objects; import java.util.UUID; @@ -54,6 +55,8 @@ public class BaseNetworkNodeContainerBlockEntity private UUID placedByPlayerId; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; + private int workTickRate = UpgradeContainer.DEFAULT_WORK_TICK_RATE; + private int workTicks; public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, final BlockPos pos, @@ -120,8 +123,18 @@ private void updateActivenessBlockState(final BlockState state, } } + protected final void setWorkTickRate(final int workTickRate) { + this.workTickRate = workTickRate; + } + public void doWork() { - mainNetworkNode.doWork(); + if (workTicks++ % workTickRate == 0) { + mainNetworkNode.doWork(); + postDoWork(); + } + } + + protected void postDoWork() { } protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate( diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index 9b1965096..bf0490b39 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -1,20 +1,24 @@ package com.refinedmods.refinedstorage.common.upgrade; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeDestination; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeItem; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeState; +import com.refinedmods.refinedstorage.common.content.Items; import java.util.ArrayList; import java.util.List; import java.util.OptionalLong; import java.util.Set; import java.util.stream.IntStream; +import javax.annotation.Nullable; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import net.minecraft.core.NonNullList; import net.minecraft.world.SimpleContainer; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -22,25 +26,23 @@ import org.slf4j.LoggerFactory; public class UpgradeContainer extends SimpleContainer implements UpgradeState { + public static final int DEFAULT_WORK_TICK_RATE = 9; + private static final Logger LOGGER = LoggerFactory.getLogger(UpgradeContainer.class); private final UpgradeDestination destination; private final UpgradeRegistry registry; private final Object2IntMap index = new Object2IntOpenHashMap<>(); + @Nullable + private final UpgradeContainerListener listener; - public UpgradeContainer(final UpgradeDestination destination, final UpgradeRegistry registry) { - this(destination, registry, () -> { - }); - } - - public UpgradeContainer(final UpgradeDestination destination, - final UpgradeRegistry registry, - final Runnable listener) { + public UpgradeContainer(final UpgradeDestination destination, @Nullable final UpgradeContainerListener listener) { super(4); this.destination = destination; - this.registry = registry; + this.registry = RefinedStorageApi.INSTANCE.getUpgradeRegistry(); this.addListener(container -> updateIndex()); - this.addListener(container -> listener.run()); + this.addListener(container -> notifyListener()); + this.listener = listener; } @Override @@ -96,6 +98,16 @@ private void updateIndex(final int slotIndex) { index.put(upgradeItem, index.getInt(upgradeItem) + 1); } + private void notifyListener() { + if (listener == null) { + return; + } + LOGGER.debug("Reconfiguring for upgrades"); + final int amountOfSpeedUpgrades = getAmount(Items.INSTANCE.getSpeedUpgrade()); + final int workTickRate = 9 - (amountOfSpeedUpgrades * 2); + listener.updateState(workTickRate, getEnergyUsage()); + } + @Override public int getAmount(final UpgradeItem upgradeItem) { return index.getInt(upgradeItem); @@ -128,4 +140,12 @@ public List getUpgradeItems() { public boolean addUpgradeItem(final Item upgradeItem) { return addItem(new ItemStack(upgradeItem)).isEmpty(); } + + public NonNullList getDrops() { + final NonNullList drops = NonNullList.create(); + for (int i = 0; i < getContainerSize(); ++i) { + drops.add(getItem(i)); + } + return drops; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java new file mode 100644 index 000000000..31e68763c --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage.common.upgrade; + +@FunctionalInterface +public interface UpgradeContainerListener { + void updateState(int workTickRate, long upgradeEnergyUsage); +} From 1940ca748b1c51b8830a125b2f9ba42de023ef3f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 12 Aug 2024 22:59:35 +0200 Subject: [PATCH 09/83] refactor: remove AbstractUpgradeableNetworkNodeContainerBlockEntity --- .../autocrafting/PatternGridBlockEntity.java | 2 +- .../ConstructorBlockEntity.java | 63 ++++++++++++--- .../DestructorBlockEntity.java | 68 ++++++++++++++--- .../common/exporter/ExporterBlockEntity.java | 59 ++++++++++++-- .../common/grid/CraftingGridBlockEntity.java | 2 +- .../common/iface/InterfaceBlockEntity.java | 2 +- .../common/importer/ImporterBlockEntity.java | 67 +++++++++++++--- .../NetworkTransmitterBlockEntity.java | 2 +- .../WirelessTransmitterBlockEntity.java | 2 +- .../WirelessTransmitterContainerMenu.java | 1 - .../security/SecurityManagerBlockEntity.java | 2 +- .../AbstractDiskInterfaceBlockEntity.java | 7 +- .../AbstractSimpleFilterContainerMenu.java | 1 - ...dulingNetworkNodeContainerBlockEntity.java | 8 +- ...deableNetworkNodeContainerBlockEntity.java | 76 ------------------- .../BaseNetworkNodeContainerBlockEntity.java | 20 +++-- .../common/upgrade/UpgradeContainer.java | 2 +- 17 files changed, 249 insertions(+), 135 deletions(-) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java index 6594c0590..1368ef0ee 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java @@ -241,7 +241,7 @@ public StreamEncoder getMenuCodec() { } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { final NonNullList drops = NonNullList.create(); drops.add(patternInput.getItem(0)); drops.add(patternOutput.getItem(0)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java index cf9824871..049876aa7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java @@ -14,8 +14,11 @@ import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.network.AbstractSchedulingNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; +import com.refinedmods.refinedstorage.common.util.ContainerUtil; import java.util.ArrayList; import java.util.Collection; @@ -25,20 +28,26 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; public class ConstructorBlockEntity - extends AbstractSchedulingNetworkNodeContainerBlockEntity { + extends AbstractSchedulingNetworkNodeContainerBlockEntity + implements BlockEntityWithDrops { private static final String TAG_DROP_ITEMS = "di"; + private static final String TAG_UPGRADES = "upgr"; private final Actor actor; private final List tasks = new ArrayList<>(); + private final UpgradeContainer upgradeContainer; @Nullable private TaskExecutor taskExecutor; @@ -51,10 +60,33 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { BlockEntities.INSTANCE.getConstructor(), pos, state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage()), - UpgradeDestinations.CONSTRUCTOR + new SimpleNetworkNode(Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage()) ); this.actor = new NetworkNodeActor(mainNetworkNode); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CONSTRUCTOR, (rate, upgradeEnergyUsage) -> { + setWorkTickRate(rate); + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + setChanged(); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + }); + } + + @Override + protected boolean hasWorkTickRate() { + return true; + } + + @Override + public List getUpgradeItems() { + return upgradeContainer.getUpgradeItems(); + } + + @Override + public boolean addUpgradeItem(final Item upgradeItem) { + return upgradeContainer.addUpgradeItem(upgradeItem); } @Override @@ -102,6 +134,20 @@ public void postDoWork() { )); } + @Override + public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); + } + + @Override + public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + if (tag.contains(TAG_UPGRADES)) { + ContainerUtil.read(tag.getCompound(TAG_UPGRADES), upgradeContainer, provider); + } + super.loadAdditional(tag, provider); + } + @Override public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); @@ -116,6 +162,11 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider } } + @Override + public final NonNullList getDrops() { + return upgradeContainer.getDrops(); + } + boolean isDropItems() { return dropItems; } @@ -139,12 +190,6 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent return new ConstructorContainerMenu(syncId, player, this, filter.getFilterContainer(), upgradeContainer); } - @Override - protected void setEnergyUsage(final long upgradeEnergyUsage) { - final long baseEnergyUsage = Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); - } - @Override protected void setTaskExecutor(final TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java index 63bbae98f..0a1b459f2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java @@ -12,13 +12,16 @@ import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterModeSettings; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractUpgradeableNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; +import com.refinedmods.refinedstorage.common.util.ContainerUtil; import java.util.List; import java.util.Set; @@ -27,6 +30,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; @@ -35,16 +39,22 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -public class DestructorBlockEntity extends AbstractUpgradeableNetworkNodeContainerBlockEntity - implements NetworkNodeExtendedMenuProvider { +public class DestructorBlockEntity + extends BaseNetworkNodeContainerBlockEntity + implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_FILTER_MODE = "fim"; private static final String TAG_PICKUP_ITEMS = "pi"; + private static final String TAG_UPGRADES = "upgr"; private final FilterWithFuzzyMode filterWithFuzzyMode; private final Filter filter = new Filter(); private final Actor actor; + private final UpgradeContainer upgradeContainer; + @Nullable private DestructorStrategy strategy; private boolean pickupItems; @@ -54,8 +64,7 @@ public DestructorBlockEntity(final BlockPos pos, final BlockState state) { BlockEntities.INSTANCE.getDestructor(), pos, state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage()), - UpgradeDestinations.DESTRUCTOR + new SimpleNetworkNode(Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage()) ); this.actor = new NetworkNodeActor(mainNetworkNode); this.filterWithFuzzyMode = FilterWithFuzzyMode.createAndListenForUniqueFilters( @@ -63,6 +72,30 @@ public DestructorBlockEntity(final BlockPos pos, final BlockState state) { this::setChanged, this::setFilters ); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.DESTRUCTOR, (rate, upgradeEnergyUsage) -> { + setWorkTickRate(rate); + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + setChanged(); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + }); + } + + @Override + protected boolean hasWorkTickRate() { + return true; + } + + @Override + public List getUpgradeItems() { + return upgradeContainer.getUpgradeItems(); + } + + @Override + public boolean addUpgradeItem(final Item upgradeItem) { + return upgradeContainer.addUpgradeItem(upgradeItem); } public boolean isPickupItems() { @@ -90,6 +123,25 @@ public void setFilterMode(final FilterMode mode) { setChanged(); } + @Override + public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); + } + + @Override + public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + if (tag.contains(TAG_UPGRADES)) { + ContainerUtil.read(tag.getCompound(TAG_UPGRADES), upgradeContainer, provider); + } + super.loadAdditional(tag, provider); + } + + @Override + public final NonNullList getDrops() { + return upgradeContainer.getDrops(); + } + @Override public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); @@ -110,12 +162,6 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider } } - @Override - protected void setEnergyUsage(final long upgradeEnergyUsage) { - final long baseEnergyUsage = Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); - } - @Override public ResourceContainerData getMenuData() { return ResourceContainerData.of(filterWithFuzzyMode.getFilterContainer()); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java index d1d05aa3f..2e73b1868 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java @@ -13,8 +13,11 @@ import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.content.Items; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.network.AbstractSchedulingNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; +import com.refinedmods.refinedstorage.common.util.ContainerUtil; import java.util.List; import java.util.function.LongSupplier; @@ -22,28 +25,59 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExporterBlockEntity extends AbstractSchedulingNetworkNodeContainerBlockEntity - implements AmountOverride { + implements AmountOverride, BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger(ExporterBlockEntity.class); + private static final String TAG_UPGRADES = "upgr"; + + private final UpgradeContainer upgradeContainer; public ExporterBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getExporter(), pos, state, - new ExporterNetworkNode(0), - UpgradeDestinations.EXPORTER + new ExporterNetworkNode(Platform.INSTANCE.getConfig().getExporter().getEnergyUsage()) ); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.EXPORTER, (rate, upgradeEnergyUsage) -> { + setWorkTickRate(rate); + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getExporter().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + setChanged(); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + }); + } + + @Override + protected boolean hasWorkTickRate() { + return true; + } + + @Override + public List getUpgradeItems() { + return upgradeContainer.getUpgradeItems(); + } + + @Override + public boolean addUpgradeItem(final Item upgradeItem) { + return upgradeContainer.addUpgradeItem(upgradeItem); } @Override @@ -74,9 +108,22 @@ private ExporterTransferStrategy createStrategy(final ServerLevel serverLevel, f } @Override - protected void setEnergyUsage(final long upgradeEnergyUsage) { - final long baseEnergyUsage = Platform.INSTANCE.getConfig().getExporter().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); + } + + @Override + public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + if (tag.contains(TAG_UPGRADES)) { + ContainerUtil.read(tag.getCompound(TAG_UPGRADES), upgradeContainer, provider); + } + super.loadAdditional(tag, provider); + } + + @Override + public final NonNullList getDrops() { + return upgradeContainer.getDrops(); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java index fd5257c2c..ebea38353 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java @@ -105,7 +105,7 @@ public void setLevel(final Level level) { } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { final NonNullList drops = NonNullList.create(); for (int i = 0; i < craftingRecipe.getMatrix().getContainerSize(); ++i) { drops.add(craftingRecipe.getMatrix().getItem(i)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java index bf0ae6050..cfd316d88 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java @@ -177,7 +177,7 @@ public Component getDisplayName() { } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { final NonNullList drops = NonNullList.create(); for (int i = 0; i < exportedResourcesAsContainer.getContainerSize(); ++i) { drops.add(exportedResourcesAsContainer.getItem(i)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java index 02869d691..fd91321a4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java @@ -12,13 +12,16 @@ import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.content.Items; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterModeSettings; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.AbstractUpgradeableNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; +import com.refinedmods.refinedstorage.common.util.ContainerUtil; import java.util.List; import java.util.Set; @@ -28,6 +31,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; @@ -36,26 +40,28 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ImporterBlockEntity - extends AbstractUpgradeableNetworkNodeContainerBlockEntity - implements AmountOverride, NetworkNodeExtendedMenuProvider { + extends BaseNetworkNodeContainerBlockEntity + implements AmountOverride, NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger(ImporterBlockEntity.class); - private static final String TAG_FILTER_MODE = "fim"; + private static final String TAG_UPGRADES = "upgr"; private final FilterWithFuzzyMode filter; + private final UpgradeContainer upgradeContainer; public ImporterBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getImporter(), pos, state, - new ImporterNetworkNode(0), - UpgradeDestinations.IMPORTER + new ImporterNetworkNode(0) ); this.filter = FilterWithFuzzyMode.createAndListenForUniqueFilters( ResourceContainerImpl.createForFilter(), @@ -63,6 +69,30 @@ public ImporterBlockEntity(final BlockPos pos, final BlockState state) { this::setFilters ); this.mainNetworkNode.setNormalizer(filter.createNormalizer()); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.IMPORTER, (rate, upgradeEnergyUsage) -> { + setWorkTickRate(rate); + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getImporter().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + setChanged(); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + }); + } + + @Override + protected boolean hasWorkTickRate() { + return true; + } + + @Override + public List getUpgradeItems() { + return upgradeContainer.getUpgradeItems(); + } + + @Override + public boolean addUpgradeItem(final Item upgradeItem) { + return upgradeContainer.addUpgradeItem(upgradeItem); } @Override @@ -84,6 +114,25 @@ private List createStrategies(final ServerLevel server .toList(); } + @Override + public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); + } + + @Override + public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + if (tag.contains(TAG_UPGRADES)) { + ContainerUtil.read(tag.getCompound(TAG_UPGRADES), upgradeContainer, provider); + } + super.loadAdditional(tag, provider); + } + + @Override + public final NonNullList getDrops() { + return upgradeContainer.getDrops(); + } + @Override public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); @@ -121,12 +170,6 @@ void setFilterMode(final FilterMode mode) { setChanged(); } - @Override - protected void setEnergyUsage(final long upgradeEnergyUsage) { - final long baseEnergyUsage = Platform.INSTANCE.getConfig().getImporter().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); - } - @Override public ResourceContainerData getMenuData() { return ResourceContainerData.of(filter.getFilterContainer()); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java index 33db01c0d..cc2750a09 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java @@ -212,7 +212,7 @@ public Component getDisplayName() { } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { return NonNullList.of(ItemStack.EMPTY, networkCardInventory.getNetworkCard()); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 058abd3c4..56cff9997 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -109,7 +109,7 @@ int getRange() { } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { final NonNullList drops = NonNullList.create(); for (int i = 0; i < upgradeContainer.getContainerSize(); ++i) { drops.add(upgradeContainer.getItem(i)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java index 58075592d..b1fab2cb9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.common.networking; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.content.Menus; import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu; import com.refinedmods.refinedstorage.common.support.RedstoneMode; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java index 4d5b90020..f64970926 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java @@ -134,7 +134,7 @@ public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider pr } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { final NonNullList drops = NonNullList.create(); for (int i = 0; i < securityCards.getContainerSize(); ++i) { drops.add(securityCards.getItem(i)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index f1b245560..4f0262f70 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -66,6 +66,11 @@ protected AbstractDiskInterfaceBlockEntity(final BlockPos pos, final BlockState }); } + @Override + protected boolean hasWorkTickRate() { + return true; + } + @Override protected void setFilters(final Set filters) { mainNetworkNode.setFilters(filters); @@ -136,7 +141,7 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory inv, f } @Override - public NonNullList getDrops() { + public final NonNullList getDrops() { final NonNullList drops = super.getDrops(); for (int i = 0; i < upgradeContainer.getContainerSize(); ++i) { drops.add(upgradeContainer.getItem(i)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java index 8b35553bd..7dc700b44 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.common.support.containermenu; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java index c9bf5cb52..6303abff4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java @@ -9,7 +9,6 @@ import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; -import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import java.util.List; @@ -23,7 +22,7 @@ import net.minecraft.world.level.block.state.BlockState; public abstract class AbstractSchedulingNetworkNodeContainerBlockEntity - extends AbstractUpgradeableNetworkNodeContainerBlockEntity + extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { protected final FilterWithFuzzyMode filter; private final SchedulingMode schedulingMode; @@ -32,10 +31,9 @@ protected AbstractSchedulingNetworkNodeContainerBlockEntity( final BlockEntityType type, final BlockPos pos, final BlockState state, - final T node, - final UpgradeDestinations destination + final T node ) { - super(type, pos, state, node, destination); + super(type, pos, state, node); this.schedulingMode = new SchedulingMode<>(this::setChanged, this::setTaskExecutor); this.filter = FilterWithFuzzyMode.createAndListenForFilters( ResourceContainerImpl.createForFilter(), diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java deleted file mode 100644 index d12219131..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractUpgradeableNetworkNodeContainerBlockEntity.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.refinedmods.refinedstorage.common.support.network; - -import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; -import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; -import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; -import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; -import com.refinedmods.refinedstorage.common.util.ContainerUtil; - -import java.util.List; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.core.NonNullList; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; - -public abstract class AbstractUpgradeableNetworkNodeContainerBlockEntity - extends BaseNetworkNodeContainerBlockEntity - implements BlockEntityWithDrops { - private static final String TAG_UPGRADES = "upgr"; - - protected final UpgradeContainer upgradeContainer; - - protected AbstractUpgradeableNetworkNodeContainerBlockEntity( - final BlockEntityType type, - final BlockPos pos, - final BlockState state, - final T node, - final UpgradeDestinations destination - ) { - super(type, pos, state, node); - this.upgradeContainer = new UpgradeContainer(destination, (rate, upgradeEnergyUsage) -> { - setWorkTickRate(rate); - setEnergyUsage(upgradeEnergyUsage); - setChanged(); - if (level instanceof ServerLevel serverLevel) { - initialize(serverLevel); - } - }); - } - - @Override - public List getUpgradeItems() { - return upgradeContainer.getUpgradeItems(); - } - - @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); - } - - @Override - public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { - super.saveAdditional(tag, provider); - tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); - } - - @Override - public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { - if (tag.contains(TAG_UPGRADES)) { - ContainerUtil.read(tag.getCompound(TAG_UPGRADES), upgradeContainer, provider); - } - super.loadAdditional(tag, provider); - } - - @Override - public final NonNullList getDrops() { - return upgradeContainer.getDrops(); - } - - protected abstract void setEnergyUsage(long upgradeEnergyUsage); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index 547a960cc..c9c380e35 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -55,7 +55,7 @@ public class BaseNetworkNodeContainerBlockEntity private UUID placedByPlayerId; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - private int workTickRate = UpgradeContainer.DEFAULT_WORK_TICK_RATE; + private int workTickRate; private int workTicks; public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, @@ -63,6 +63,7 @@ public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, final BlockState state, final T networkNode) { super(type, pos, state, networkNode); + this.workTickRate = hasWorkTickRate() ? UpgradeContainer.DEFAULT_WORK_TICK_RATE : 0; } @Override @@ -123,12 +124,19 @@ private void updateActivenessBlockState(final BlockState state, } } + protected boolean hasWorkTickRate() { + return false; + } + protected final void setWorkTickRate(final int workTickRate) { + if (!hasWorkTickRate()) { + throw new IllegalStateException("Block has no work tick rate!"); + } this.workTickRate = workTickRate; } public void doWork() { - if (workTicks++ % workTickRate == 0) { + if (workTickRate == 0 || (workTicks++ % workTickRate == 0)) { mainNetworkNode.doWork(); postDoWork(); } @@ -222,6 +230,10 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider } } + protected boolean hasRedstoneMode() { + return true; + } + private void verifyHasRedstoneMode() { if (!hasRedstoneMode()) { throw new IllegalStateException("Block has no redstone mode!"); @@ -268,8 +280,4 @@ protected final Player getFakePlayer(final ServerLevel serverLevel) { protected final boolean isPlacedBy(final UUID playerId) { return Objects.equals(placedByPlayerId, playerId); } - - protected boolean hasRedstoneMode() { - return true; - } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index bf0490b39..2b60d0884 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -104,7 +104,7 @@ private void notifyListener() { } LOGGER.debug("Reconfiguring for upgrades"); final int amountOfSpeedUpgrades = getAmount(Items.INSTANCE.getSpeedUpgrade()); - final int workTickRate = 9 - (amountOfSpeedUpgrades * 2); + final int workTickRate = DEFAULT_WORK_TICK_RATE - (amountOfSpeedUpgrades * 2); listener.updateState(workTickRate, getEnergyUsage()); } From ad2f3e8124bf14ea0d6814a3eb72a205f443b1a8 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 14 Aug 2024 11:06:22 +0200 Subject: [PATCH 10/83] refactor: remove AbstractSchedulingNetworkNodeContainerBlockEntity --- .../ConstructorBlockEntity.java | 96 ++++++++++++------- .../ConstructorContainerMenu.java | 27 +++++- .../DestructorBlockEntity.java | 2 +- .../common/detector/DetectorBlockEntity.java | 2 +- .../common/exporter/ExporterBlockEntity.java | 74 ++++++++++++-- .../exporter/ExporterContainerMenu.java | 35 ++++++- .../common/grid/AbstractGridBlockEntity.java | 2 +- .../common/importer/ImporterBlockEntity.java | 2 +- .../WirelessTransmitterBlockEntity.java | 2 +- .../AbstractDiskContainerBlockEntity.java | 2 +- .../ExternalStorageBlockEntity.java | 2 +- .../StorageMonitorBlockEntity.java | 2 +- .../support/AbstractDirectionalBlock.java | 3 +- .../common/support/SchedulingMode.java | 68 ------------- .../support/SchedulingModeContainer.java | 67 +++++++++++++ .../common/support/SchedulingModeType.java | 57 ++++------- .../AbstractSchedulingContainerMenu.java | 61 ------------ .../AbstractSimpleFilterContainerMenu.java | 3 +- ...dulingNetworkNodeContainerBlockEntity.java | 91 ------------------ .../BaseNetworkNodeContainerBlockEntity.java | 5 +- .../api/network/node/SchedulingMode.java | 16 ++++ .../api/network/node/task/Task.java | 9 -- .../api/network/node/task/TaskExecutor.java | 11 --- .../api/network/node/task/package-info.java | 7 -- .../node/exporter/ExporterNetworkNode.java | 32 +++---- .../impl/node/task/DefaultSchedulingMode.java | 16 ++++ .../impl/node/task/DefaultTaskExecutor.java | 17 ---- .../impl/node/task/RandomSchedulingMode.java | 32 +++++++ .../impl/node/task/RandomTaskExecutor.java | 33 ------- ...tor.java => RoundRobinSchedulingMode.java} | 13 ++- .../AbstractExporterNetworkNodeTest.java | 8 +- ...va => DefaultExporterNetworkNodeTest.java} | 10 +- .../RandomExporterNetworkNodeTest.java | 12 +-- .../RoundRobinExporterNetworkNodeTest.java | 8 +- 34 files changed, 388 insertions(+), 439 deletions(-) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingMode.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSchedulingContainerMenu.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java create mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/SchedulingMode.java delete mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/Task.java delete mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/TaskExecutor.java delete mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/package-info.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultSchedulingMode.java delete mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultTaskExecutor.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomSchedulingMode.java delete mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomTaskExecutor.java rename refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/{RoundRobinTaskExecutor.java => RoundRobinSchedulingMode.java} (72%) rename refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/{FirstAvailableExporterNetworkNodeTest.java => DefaultExporterNetworkNodeTest.java} (94%) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java index 049876aa7..6d528d714 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java @@ -3,8 +3,7 @@ import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; -import com.refinedmods.refinedstorage.api.network.node.task.Task; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.common.Platform; @@ -15,7 +14,13 @@ import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; -import com.refinedmods.refinedstorage.common.support.network.AbstractSchedulingNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; +import com.refinedmods.refinedstorage.common.support.SchedulingModeContainer; +import com.refinedmods.refinedstorage.common.support.SchedulingModeType; +import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; +import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -30,7 +35,9 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamEncoder; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -39,18 +46,17 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -public class ConstructorBlockEntity - extends AbstractSchedulingNetworkNodeContainerBlockEntity - implements BlockEntityWithDrops { +public class ConstructorBlockEntity extends BaseNetworkNodeContainerBlockEntity + implements BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { private static final String TAG_DROP_ITEMS = "di"; private static final String TAG_UPGRADES = "upgr"; private final Actor actor; - private final List tasks = new ArrayList<>(); + private final List tasks = new ArrayList<>(); private final UpgradeContainer upgradeContainer; + private final FilterWithFuzzyMode filter; + private final SchedulingModeContainer schedulingModeContainer; - @Nullable - private TaskExecutor taskExecutor; @Nullable private ConstructorStrategy strategy; private boolean dropItems; @@ -72,6 +78,12 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { initialize(serverLevel); } }); + this.schedulingModeContainer = new SchedulingModeContainer(schedulingMode -> setChanged()); + this.filter = FilterWithFuzzyMode.createAndListenForFilters( + ResourceContainerImpl.createForFilter(), + this::setChanged, + this::setFilters + ); } @Override @@ -89,10 +101,9 @@ public boolean addUpgradeItem(final Item upgradeItem) { return upgradeContainer.addUpgradeItem(upgradeItem); } - @Override - protected void setFilters(final List filters) { + private void setFilters(final List filters) { this.tasks.clear(); - this.tasks.addAll(filters.stream().map(TaskImpl::new).toList()); + this.tasks.addAll(filters.stream().map(ConstructorTask::new).toList()); } @Override @@ -119,19 +130,13 @@ private ConstructorStrategy createStrategy(final ServerLevel serverLevel, final return new CompositeConstructorStrategy(strategies); } + // TODO: Move to own obj :) @Override public void postDoWork() { - if (taskExecutor == null - || mainNetworkNode.getNetwork() == null - || !mainNetworkNode.isActive() - || !(level instanceof ServerLevel serverLevel)) { + if (mainNetworkNode.getNetwork() == null || !mainNetworkNode.isActive()) { return; } - final Player fakePlayer = getFakePlayer(serverLevel); - taskExecutor.execute(tasks, new TaskContext( - mainNetworkNode.getNetwork(), - fakePlayer - )); + schedulingModeContainer.execute(tasks); } @Override @@ -152,6 +157,8 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); tag.putBoolean(TAG_DROP_ITEMS, dropItems); + schedulingModeContainer.writeToTag(tag); + filter.save(tag, provider); } @Override @@ -160,6 +167,27 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider if (tag.contains(TAG_DROP_ITEMS)) { dropItems = tag.getBoolean(TAG_DROP_ITEMS); } + schedulingModeContainer.loadFromTag(tag); + filter.load(tag, provider); + } + + void setSchedulingModeType(final SchedulingModeType type) { + schedulingModeContainer.setType(type); + } + + SchedulingModeType getSchedulingModeType() { + return schedulingModeContainer.getType(); + } + + boolean isFuzzyMode() { + return filter.isFuzzyMode(); + } + + void setFuzzyMode(final boolean fuzzyMode) { + filter.setFuzzyMode(fuzzyMode); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } } @Override @@ -191,32 +219,36 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent } @Override - protected void setTaskExecutor(final TaskExecutor taskExecutor) { - this.taskExecutor = taskExecutor; + public ResourceContainerData getMenuData() { + return ResourceContainerData.of(filter.getFilterContainer()); } @Override - protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, - final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + public StreamEncoder getMenuCodec() { + return ResourceContainerData.STREAM_CODEC; } - protected record TaskContext(Network network, Player player) { + @Override + protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, + final BlockState newBlockState) { + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } - private class TaskImpl implements Task { + private class ConstructorTask implements SchedulingMode.ScheduledTask { private final ResourceKey filter; - private TaskImpl(final ResourceKey filter) { + private ConstructorTask(final ResourceKey filter) { this.filter = filter; } @Override - public boolean run(final TaskContext context) { - if (strategy == null) { + public boolean run() { + final Network network = mainNetworkNode.getNetwork(); + if (strategy == null || !(level instanceof ServerLevel serverLevel) || network == null) { return false; } - strategy.apply(filter, actor, context.player, context.network); + final Player player = getFakePlayer(serverLevel); + strategy.apply(filter, actor, player, network); return true; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java index 2ba899e2b..3646d0010 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java @@ -2,8 +2,11 @@ import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.content.Menus; -import com.refinedmods.refinedstorage.common.support.containermenu.AbstractSchedulingContainerMenu; +import com.refinedmods.refinedstorage.common.support.RedstoneMode; +import com.refinedmods.refinedstorage.common.support.SchedulingModeType; +import com.refinedmods.refinedstorage.common.support.containermenu.AbstractSimpleFilterContainerMenu; import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; +import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage.common.support.containermenu.ServerProperty; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; @@ -15,7 +18,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class ConstructorContainerMenu extends AbstractSchedulingContainerMenu { +public class ConstructorContainerMenu extends AbstractSimpleFilterContainerMenu { private static final MutableComponent FILTER_HELP = createTranslation("gui", "constructor.filter_help"); public ConstructorContainerMenu(final int syncId, @@ -49,13 +52,29 @@ public ConstructorContainerMenu(final int syncId, @Override protected void registerClientProperties() { - super.registerClientProperties(); + registerProperty(new ClientProperty<>(PropertyTypes.FUZZY_MODE, false)); + registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); + registerProperty(new ClientProperty<>(PropertyTypes.SCHEDULING_MODE, SchedulingModeType.DEFAULT)); registerProperty(new ClientProperty<>(ConstructorDestructorPropertyTypes.DROP_ITEMS, false)); } @Override protected void registerServerProperties(final ConstructorBlockEntity blockEntity) { - super.registerServerProperties(blockEntity); + registerProperty(new ServerProperty<>( + PropertyTypes.FUZZY_MODE, + blockEntity::isFuzzyMode, + blockEntity::setFuzzyMode + )); + registerProperty(new ServerProperty<>( + PropertyTypes.REDSTONE_MODE, + blockEntity::getRedstoneMode, + blockEntity::setRedstoneMode + )); + registerProperty(new ServerProperty<>( + PropertyTypes.SCHEDULING_MODE, + blockEntity::getSchedulingModeType, + blockEntity::setSchedulingModeType + )); registerProperty(new ServerProperty<>( ConstructorDestructorPropertyTypes.DROP_ITEMS, blockEntity::isDropItems, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java index 0a1b459f2..4e9ab4685 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java @@ -216,6 +216,6 @@ public void postDoWork() { @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java index 370cb256d..f603d125e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java @@ -173,6 +173,6 @@ public void updateActiveness(final BlockState state, @Nullable final BooleanProp @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java index 2e73b1868..8f6276d0f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java @@ -2,8 +2,8 @@ import com.refinedmods.refinedstorage.api.network.impl.node.exporter.CompositeExporterTransferStrategy; import com.refinedmods.refinedstorage.api.network.impl.node.exporter.ExporterNetworkNode; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; @@ -14,7 +14,13 @@ import com.refinedmods.refinedstorage.common.content.Items; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; -import com.refinedmods.refinedstorage.common.support.network.AbstractSchedulingNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; +import com.refinedmods.refinedstorage.common.support.SchedulingModeContainer; +import com.refinedmods.refinedstorage.common.support.SchedulingModeType; +import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; +import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; +import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -28,7 +34,9 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamEncoder; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -40,12 +48,14 @@ import org.slf4j.LoggerFactory; public class ExporterBlockEntity - extends AbstractSchedulingNetworkNodeContainerBlockEntity - implements AmountOverride, BlockEntityWithDrops { + extends BaseNetworkNodeContainerBlockEntity + implements AmountOverride, BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(ExporterBlockEntity.class); private static final String TAG_UPGRADES = "upgr"; private final UpgradeContainer upgradeContainer; + private final FilterWithFuzzyMode filter; + private final SchedulingModeContainer schedulingModeContainer; public ExporterBlockEntity(final BlockPos pos, final BlockState state) { super( @@ -63,6 +73,17 @@ public ExporterBlockEntity(final BlockPos pos, final BlockState state) { initialize(serverLevel); } }); + this.schedulingModeContainer = new SchedulingModeContainer(this::schedulingModeChanged); + this.filter = FilterWithFuzzyMode.createAndListenForFilters( + ResourceContainerImpl.createForFilter(), + this::setChanged, + this::setFilters + ); + } + + private void schedulingModeChanged(final SchedulingMode schedulingMode) { + mainNetworkNode.setSchedulingMode(schedulingMode); + setChanged(); } @Override @@ -121,6 +142,39 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr super.loadAdditional(tag, provider); } + @Override + public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { + super.writeConfiguration(tag, provider); + schedulingModeContainer.writeToTag(tag); + filter.save(tag, provider); + } + + @Override + public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { + super.readConfiguration(tag, provider); + schedulingModeContainer.loadFromTag(tag); + filter.load(tag, provider); + } + + void setSchedulingModeType(final SchedulingModeType type) { + schedulingModeContainer.setType(type); + } + + SchedulingModeType getSchedulingModeType() { + return schedulingModeContainer.getType(); + } + + boolean isFuzzyMode() { + return filter.isFuzzyMode(); + } + + void setFuzzyMode(final boolean fuzzyMode) { + filter.setFuzzyMode(fuzzyMode); + if (level instanceof ServerLevel serverLevel) { + initialize(serverLevel); + } + } + @Override public final NonNullList getDrops() { return upgradeContainer.getDrops(); @@ -138,12 +192,16 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent } @Override - protected void setTaskExecutor(final TaskExecutor taskExecutor) { - mainNetworkNode.setTaskExecutor(taskExecutor); + public ResourceContainerData getMenuData() { + return ResourceContainerData.of(filter.getFilterContainer()); } @Override - protected void setFilters(final List filters) { + public StreamEncoder getMenuCodec() { + return ResourceContainerData.STREAM_CODEC; + } + + private void setFilters(final List filters) { mainNetworkNode.setFilters(filters); } @@ -172,6 +230,6 @@ private long getAmountStillNeeded(final long amount, final long currentAmount, f @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java index ed9714e9d..6cbf19962 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java @@ -2,7 +2,12 @@ import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.content.Menus; -import com.refinedmods.refinedstorage.common.support.containermenu.AbstractSchedulingContainerMenu; +import com.refinedmods.refinedstorage.common.support.RedstoneMode; +import com.refinedmods.refinedstorage.common.support.SchedulingModeType; +import com.refinedmods.refinedstorage.common.support.containermenu.AbstractSimpleFilterContainerMenu; +import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; +import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage.common.support.containermenu.ServerProperty; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; @@ -13,7 +18,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class ExporterContainerMenu extends AbstractSchedulingContainerMenu { +public class ExporterContainerMenu extends AbstractSimpleFilterContainerMenu { private static final MutableComponent FILTER_HELP = createTranslation("gui", "exporter.filter_help"); public ExporterContainerMenu(final int syncId, @@ -44,4 +49,30 @@ public ExporterContainerMenu(final int syncId, FILTER_HELP ); } + + @Override + protected void registerClientProperties() { + registerProperty(new ClientProperty<>(PropertyTypes.FUZZY_MODE, false)); + registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); + registerProperty(new ClientProperty<>(PropertyTypes.SCHEDULING_MODE, SchedulingModeType.DEFAULT)); + } + + @Override + protected void registerServerProperties(final ExporterBlockEntity blockEntity) { + registerProperty(new ServerProperty<>( + PropertyTypes.FUZZY_MODE, + blockEntity::isFuzzyMode, + blockEntity::setFuzzyMode + )); + registerProperty(new ServerProperty<>( + PropertyTypes.REDSTONE_MODE, + blockEntity::getRedstoneMode, + blockEntity::setRedstoneMode + )); + registerProperty(new ServerProperty<>( + PropertyTypes.SCHEDULING_MODE, + blockEntity::getSchedulingModeType, + blockEntity::setSchedulingModeType + )); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index d70553b07..7686361ce 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -86,6 +86,6 @@ public void removeWatcher(final GridWatcher watcher) { @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java index fd91321a4..1f826890d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java @@ -222,6 +222,6 @@ private long getAmountStillAvailableForImport(final long amount, @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 56cff9997..8208445ba 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -120,7 +120,7 @@ public final NonNullList getDrops() { @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } boolean isActive() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java index 3933ff6ff..492d58068 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java @@ -222,6 +222,6 @@ public StreamEncoder getMenuCode @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java index 79f8ef941..6e08ed04f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java @@ -169,6 +169,6 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index 3c072fdaa..56165e53a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -335,6 +335,6 @@ private void sendDisplayUpdate(final Level level, final long amount, final boole @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { - return AbstractDirectionalBlock.doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState); + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java index c1128fd88..d93d5f958 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java @@ -74,8 +74,7 @@ public BlockState rotated(final T direction) { return defaultBlockState().setValue(getDirectionType().getProperty(), direction); } - public static boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, - final BlockState newBlockState) { + public static boolean didDirectionChange(final BlockState oldBlockState, final BlockState newBlockState) { if (!(newBlockState.getBlock() instanceof AbstractDirectionalBlock newDirectionalBlock)) { return true; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingMode.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingMode.java deleted file mode 100644 index 55e7aa2a8..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingMode.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.refinedmods.refinedstorage.common.support; - -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; - -import java.util.Collections; -import java.util.Random; -import java.util.function.Consumer; -import javax.annotation.Nullable; - -import net.minecraft.nbt.CompoundTag; - -public final class SchedulingMode { - private static final String TAG_SCHEDULING_MODE = "sm"; - - private SchedulingModeType type; - @Nullable - private TaskExecutor taskExecutor; - - private final Runnable listener; - private final Consumer> taskExecutorAcceptor; - - public SchedulingMode(final Runnable listener, final Consumer> taskExecutorAcceptor) { - this.listener = listener; - this.taskExecutorAcceptor = taskExecutorAcceptor; - this.type = SchedulingModeType.DEFAULT; - this.setTaskExecutor(createTaskExecutor(null, type, listener)); - } - - public SchedulingModeType getType() { - return type; - } - - public void setType(final SchedulingModeType type) { - setType(null, type); - listener.run(); - } - - private void setType(@Nullable final CompoundTag tag, final SchedulingModeType newType) { - this.type = newType; - this.setTaskExecutor(createTaskExecutor(tag, newType, listener)); - } - - private void setTaskExecutor(final TaskExecutor taskExecutor) { - this.taskExecutor = taskExecutor; - taskExecutorAcceptor.accept(taskExecutor); - } - - private static TaskExecutor createTaskExecutor( - @Nullable final CompoundTag tag, - final SchedulingModeType type, - final Runnable listener - ) { - return type.createTaskExecutor(tag, list -> Collections.shuffle(list, new Random()), listener); - } - - public void load(final CompoundTag tag) { - if (tag.contains(TAG_SCHEDULING_MODE)) { - setType(tag, SchedulingModeType.getById(tag.getInt(TAG_SCHEDULING_MODE))); - } - } - - public void writeToTag(final CompoundTag tag) { - tag.putInt(TAG_SCHEDULING_MODE, type.getId()); - if (taskExecutor != null) { - type.writeToTag(tag, taskExecutor); - } - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java new file mode 100644 index 000000000..e2ad8a1ec --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java @@ -0,0 +1,67 @@ +package com.refinedmods.refinedstorage.common.support; + +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; + +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.function.Consumer; +import javax.annotation.Nullable; + +import net.minecraft.nbt.CompoundTag; + +public class SchedulingModeContainer { + private static final String TAG_SCHEDULING_MODE = "sm"; + + private final Consumer listener; + + private SchedulingModeType type; + private SchedulingMode schedulingMode; + + public SchedulingModeContainer(final Consumer listener) { + this.listener = listener; + this.type = SchedulingModeType.DEFAULT; + this.schedulingMode = type.createSchedulingMode( + null, + tasks -> Collections.shuffle(tasks, new Random()), + this::notifyListener + ); + } + + public SchedulingModeType getType() { + return type; + } + + public void setType(final SchedulingModeType type) { + setType(null, type); + } + + private void setType(@Nullable final CompoundTag tag, final SchedulingModeType newType) { + this.type = newType; + this.schedulingMode = newType.createSchedulingMode( + tag, + tasks -> Collections.shuffle(tasks, new Random()), + this::notifyListener + ); + notifyListener(); + } + + private void notifyListener() { + listener.accept(schedulingMode); + } + + public void loadFromTag(final CompoundTag tag) { + if (tag.contains(TAG_SCHEDULING_MODE)) { + setType(tag, SchedulingModeType.getById(tag.getInt(TAG_SCHEDULING_MODE))); + } + } + + public void writeToTag(final CompoundTag tag) { + tag.putInt(TAG_SCHEDULING_MODE, type.getId()); + type.writeToTag(tag, schedulingMode); + } + + public void execute(final List tasks) { + schedulingMode.execute(tasks); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeType.java index 3f85ed1e0..d6f0a4f61 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeType.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeType.java @@ -1,9 +1,9 @@ package com.refinedmods.refinedstorage.common.support; -import com.refinedmods.refinedstorage.api.network.impl.node.task.DefaultTaskExecutor; -import com.refinedmods.refinedstorage.api.network.impl.node.task.RandomTaskExecutor; -import com.refinedmods.refinedstorage.api.network.impl.node.task.RoundRobinTaskExecutor; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; +import com.refinedmods.refinedstorage.api.network.impl.node.task.DefaultSchedulingMode; +import com.refinedmods.refinedstorage.api.network.impl.node.task.RandomSchedulingMode; +import com.refinedmods.refinedstorage.api.network.impl.node.task.RoundRobinSchedulingMode; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import javax.annotation.Nullable; @@ -14,21 +14,9 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public enum SchedulingModeType { - DEFAULT( - 0, - createTranslation("gui", "scheduling_mode.default"), - createTranslation("gui", "scheduling_mode.default.help") - ), - ROUND_ROBIN( - 1, - createTranslation("gui", "scheduling_mode.round_robin"), - createTranslation("gui", "scheduling_mode.round_robin.help") - ), - RANDOM( - 2, - createTranslation("gui", "scheduling_mode.random"), - createTranslation("gui", "scheduling_mode.random.help") - ); + DEFAULT(0, "default"), + ROUND_ROBIN(1, "round_robin"), + RANDOM(2, "random"); private static final String TAG_ROUND_ROBIN_INDEX = "rri"; @@ -36,10 +24,10 @@ public enum SchedulingModeType { private final MutableComponent name; private final Component help; - SchedulingModeType(final int id, final MutableComponent name, final MutableComponent help) { + SchedulingModeType(final int id, final String name) { this.id = id; - this.name = name; - this.help = help; + this.name = createTranslation("gui", "scheduling_mode." + name); + this.help = createTranslation("gui", "scheduling_mode." + name + ".help"); } public static SchedulingModeType getById(final int id) { @@ -63,27 +51,24 @@ public int getId() { return id; } - public TaskExecutor createTaskExecutor(@Nullable final CompoundTag tag, - final RandomTaskExecutor.Randomizer randomizer, - final Runnable dirtyCallback) { + public SchedulingMode createSchedulingMode(@Nullable final CompoundTag tag, + final RandomSchedulingMode.Randomizer randomizer, + final Runnable listener) { return switch (this) { - case DEFAULT -> new DefaultTaskExecutor<>(); - case RANDOM -> new RandomTaskExecutor<>(randomizer); - case ROUND_ROBIN -> createRoundRobinExecutor(tag, dirtyCallback); + case DEFAULT -> new DefaultSchedulingMode(); + case RANDOM -> new RandomSchedulingMode(randomizer); + case ROUND_ROBIN -> createRoundRobinSchedulingMode(tag, listener); }; } - private RoundRobinTaskExecutor createRoundRobinExecutor(@Nullable final CompoundTag tag, - final Runnable dirtyCallback) { + private RoundRobinSchedulingMode createRoundRobinSchedulingMode(@Nullable final CompoundTag tag, + final Runnable listener) { final int index = tag != null ? tag.getInt(TAG_ROUND_ROBIN_INDEX) : 0; - return new RoundRobinTaskExecutor<>(new RoundRobinTaskExecutor.State( - dirtyCallback, - index - )); + return new RoundRobinSchedulingMode(new RoundRobinSchedulingMode.State(listener, index)); } - public void writeToTag(final CompoundTag tag, final TaskExecutor taskExecutor) { - if (taskExecutor instanceof RoundRobinTaskExecutor roundRobin) { + public void writeToTag(final CompoundTag tag, final SchedulingMode schedulingMode) { + if (schedulingMode instanceof RoundRobinSchedulingMode roundRobin) { tag.putInt(TAG_ROUND_ROBIN_INDEX, roundRobin.getIndex()); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSchedulingContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSchedulingContainerMenu.java deleted file mode 100644 index 117a0a456..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSchedulingContainerMenu.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.refinedmods.refinedstorage.common.support.containermenu; - -import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; -import com.refinedmods.refinedstorage.common.support.RedstoneMode; -import com.refinedmods.refinedstorage.common.support.SchedulingModeType; -import com.refinedmods.refinedstorage.common.support.network.AbstractSchedulingNetworkNodeContainerBlockEntity; -import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; -import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; -import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.MenuType; - -public abstract class AbstractSchedulingContainerMenu> - extends AbstractSimpleFilterContainerMenu { - protected AbstractSchedulingContainerMenu(final MenuType type, - final int syncId, - final Player player, - final ResourceContainer resourceContainer, - final UpgradeContainer upgradeContainer, - final T blockEntity, - final Component filterHelp) { - super(type, syncId, player, resourceContainer, upgradeContainer, blockEntity, filterHelp); - } - - protected AbstractSchedulingContainerMenu(final MenuType type, - final int syncId, - final Player player, - final ResourceContainerData resourceContainerData, - final UpgradeDestinations upgradeDestination, - final Component filterHelp) { - super(type, syncId, player, resourceContainerData, upgradeDestination, filterHelp); - } - - @Override - protected void registerClientProperties() { - registerProperty(new ClientProperty<>(PropertyTypes.FUZZY_MODE, false)); - registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); - registerProperty(new ClientProperty<>(PropertyTypes.SCHEDULING_MODE, SchedulingModeType.DEFAULT)); - } - - @Override - protected void registerServerProperties(final T blockEntity) { - registerProperty(new ServerProperty<>( - PropertyTypes.FUZZY_MODE, - blockEntity::isFuzzyMode, - blockEntity::setFuzzyMode - )); - registerProperty(new ServerProperty<>( - PropertyTypes.REDSTONE_MODE, - blockEntity::getRedstoneMode, - blockEntity::setRedstoneMode - )); - registerProperty(new ServerProperty<>( - PropertyTypes.SCHEDULING_MODE, - blockEntity::getSchedulingModeType, - blockEntity::setSchedulingModeType - )); - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java index 7dc700b44..959409590 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java @@ -15,8 +15,7 @@ import net.minecraft.world.inventory.Slot; import net.minecraft.world.level.block.entity.BlockEntity; -public abstract class AbstractSimpleFilterContainerMenu - extends AbstractResourceContainerMenu { +public abstract class AbstractSimpleFilterContainerMenu extends AbstractResourceContainerMenu { private static final int FILTER_SLOT_X = 8; private static final int FILTER_SLOT_Y = 20; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java deleted file mode 100644 index 6303abff4..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractSchedulingNetworkNodeContainerBlockEntity.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.refinedmods.refinedstorage.common.support.network; - -import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; -import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; -import com.refinedmods.refinedstorage.common.support.SchedulingMode; -import com.refinedmods.refinedstorage.common.support.SchedulingModeType; -import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; -import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; - -import java.util.List; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.StreamEncoder; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; - -public abstract class AbstractSchedulingNetworkNodeContainerBlockEntity - extends BaseNetworkNodeContainerBlockEntity - implements NetworkNodeExtendedMenuProvider { - protected final FilterWithFuzzyMode filter; - private final SchedulingMode schedulingMode; - - protected AbstractSchedulingNetworkNodeContainerBlockEntity( - final BlockEntityType type, - final BlockPos pos, - final BlockState state, - final T node - ) { - super(type, pos, state, node); - this.schedulingMode = new SchedulingMode<>(this::setChanged, this::setTaskExecutor); - this.filter = FilterWithFuzzyMode.createAndListenForFilters( - ResourceContainerImpl.createForFilter(), - this::setChanged, - this::setFilters - ); - } - - @Override - public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { - super.writeConfiguration(tag, provider); - schedulingMode.writeToTag(tag); - filter.save(tag, provider); - } - - @Override - public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { - super.readConfiguration(tag, provider); - schedulingMode.load(tag); - filter.load(tag, provider); - } - - public void setSchedulingModeType(final SchedulingModeType type) { - schedulingMode.setType(type); - } - - public SchedulingModeType getSchedulingModeType() { - return schedulingMode.getType(); - } - - public boolean isFuzzyMode() { - return filter.isFuzzyMode(); - } - - public void setFuzzyMode(final boolean fuzzyMode) { - filter.setFuzzyMode(fuzzyMode); - if (level instanceof ServerLevel serverLevel) { - initialize(serverLevel); - } - } - - @Override - public ResourceContainerData getMenuData() { - return ResourceContainerData.of(filter.getFilterContainer()); - } - - @Override - public StreamEncoder getMenuCodec() { - return ResourceContainerData.STREAM_CODEC; - } - - protected abstract void setTaskExecutor(TaskExecutor taskExecutor); - - protected abstract void setFilters(List filters); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index c9c380e35..4fadedee6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -160,10 +160,9 @@ public void setBlockState(final BlockState newBlockState) { if (level instanceof ServerLevel serverLevel) { initialize(serverLevel); } - if (!doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState)) { - return; + if (doesBlockStateChangeWarrantNetworkNodeUpdate(oldBlockState, newBlockState)) { + containers.update(level); } - containers.update(level); } @Override diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/SchedulingMode.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/SchedulingMode.java new file mode 100644 index 000000000..bdc0b518a --- /dev/null +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/SchedulingMode.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.api.network.node; + +import java.util.List; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.2.11") +@FunctionalInterface +public interface SchedulingMode { + void execute(List tasks); + + @FunctionalInterface + interface ScheduledTask { + boolean run(); + } +} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/Task.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/Task.java deleted file mode 100644 index 2812ed456..000000000 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/Task.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.refinedmods.refinedstorage.api.network.node.task; - -import org.apiguardian.api.API; - -@API(status = API.Status.STABLE, since = "2.0.0-milestone.2.11") -@FunctionalInterface -public interface Task { - boolean run(C context); -} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/TaskExecutor.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/TaskExecutor.java deleted file mode 100644 index f29d55b0f..000000000 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/TaskExecutor.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.refinedmods.refinedstorage.api.network.node.task; - -import java.util.List; - -import org.apiguardian.api.API; - -@API(status = API.Status.STABLE, since = "2.0.0-milestone.2.11") -@FunctionalInterface -public interface TaskExecutor { - void execute(List> tasks, C context); -} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/package-info.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/package-info.java deleted file mode 100644 index 4499b3e43..000000000 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/node/task/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@ParametersAreNonnullByDefault -@FieldsAndMethodsAreNonnullByDefault -package com.refinedmods.refinedstorage.api.network.node.task; - -import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/ExporterNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/ExporterNetworkNode.java index b6ade059f..50f1b7e16 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/ExporterNetworkNode.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/ExporterNetworkNode.java @@ -1,11 +1,9 @@ package com.refinedmods.refinedstorage.api.network.impl.node.exporter; -import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; -import com.refinedmods.refinedstorage.api.network.node.task.Task; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; @@ -16,11 +14,11 @@ public class ExporterNetworkNode extends AbstractNetworkNode { private long energyUsage; private final Actor actor = new NetworkNodeActor(this); - private final List tasks = new ArrayList<>(); + private final List tasks = new ArrayList<>(); @Nullable private ExporterTransferStrategy transferStrategy; @Nullable - private TaskExecutor taskExecutor; + private SchedulingMode schedulingMode; public ExporterNetworkNode(final long energyUsage) { this.energyUsage = energyUsage; @@ -30,23 +28,22 @@ public void setTransferStrategy(@Nullable final ExporterTransferStrategy transfe this.transferStrategy = transferStrategy; } - public void setTaskExecutor(@Nullable final TaskExecutor taskExecutor) { - this.taskExecutor = taskExecutor; + public void setSchedulingMode(@Nullable final SchedulingMode schedulingMode) { + this.schedulingMode = schedulingMode; } @Override public void doWork() { super.doWork(); - if (network == null || !isActive() || taskExecutor == null) { + if (network == null || !isActive() || schedulingMode == null) { return; } - final TaskContext context = new TaskContext(network, actor); - taskExecutor.execute(tasks, context); + schedulingMode.execute(tasks); } public void setFilters(final List filters) { tasks.clear(); - tasks.addAll(filters.stream().map(TaskImpl::new).toList()); + tasks.addAll(filters.stream().map(ExporterTask::new).toList()); } public void setEnergyUsage(final long energyUsage) { @@ -58,22 +55,19 @@ public long getEnergyUsage() { return energyUsage; } - public record TaskContext(Network network, Actor actor) { - } - - class TaskImpl implements Task { + class ExporterTask implements SchedulingMode.ScheduledTask { private final ResourceKey filter; - TaskImpl(final ResourceKey filter) { + ExporterTask(final ResourceKey filter) { this.filter = filter; } @Override - public boolean run(final TaskContext context) { - if (transferStrategy == null) { + public boolean run() { + if (transferStrategy == null || network == null) { return false; } - return transferStrategy.transfer(filter, context.actor, context.network); + return transferStrategy.transfer(filter, actor, network); } } } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultSchedulingMode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultSchedulingMode.java new file mode 100644 index 000000000..afb44d8e2 --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultSchedulingMode.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.api.network.impl.node.task; + +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; + +import java.util.List; + +public class DefaultSchedulingMode implements SchedulingMode { + @Override + public void execute(final List tasks) { + for (final ScheduledTask task : tasks) { + if (task.run()) { + return; + } + } + } +} diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultTaskExecutor.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultTaskExecutor.java deleted file mode 100644 index 111857b52..000000000 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/DefaultTaskExecutor.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.refinedmods.refinedstorage.api.network.impl.node.task; - -import com.refinedmods.refinedstorage.api.network.node.task.Task; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; - -import java.util.List; - -public class DefaultTaskExecutor implements TaskExecutor { - @Override - public void execute(final List> tasks, final C context) { - for (final Task task : tasks) { - if (task.run(context)) { - return; - } - } - } -} diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomSchedulingMode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomSchedulingMode.java new file mode 100644 index 000000000..eedae4c81 --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomSchedulingMode.java @@ -0,0 +1,32 @@ +package com.refinedmods.refinedstorage.api.network.impl.node.task; + +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; + +import java.util.ArrayList; +import java.util.List; + +public class RandomSchedulingMode implements SchedulingMode { + private final Randomizer randomizer; + + public RandomSchedulingMode(final Randomizer randomizer) { + this.randomizer = randomizer; + } + + @Override + public void execute(final List tasks) { + if (tasks.isEmpty()) { + return; + } + final List shuffledTasks = new ArrayList<>(tasks); + randomizer.shuffle(shuffledTasks); + for (final ScheduledTask task : shuffledTasks) { + if (task.run()) { + return; + } + } + } + + public interface Randomizer { + void shuffle(List list); + } +} diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomTaskExecutor.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomTaskExecutor.java deleted file mode 100644 index 1b8e8aff3..000000000 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RandomTaskExecutor.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.refinedmods.refinedstorage.api.network.impl.node.task; - -import com.refinedmods.refinedstorage.api.network.node.task.Task; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; - -import java.util.ArrayList; -import java.util.List; - -public class RandomTaskExecutor implements TaskExecutor { - private final Randomizer randomizer; - - public RandomTaskExecutor(final Randomizer randomizer) { - this.randomizer = randomizer; - } - - @Override - public void execute(final List> tasks, final C context) { - if (tasks.isEmpty()) { - return; - } - final List> shuffledTasks = new ArrayList<>(tasks); - randomizer.shuffle(shuffledTasks); - for (final Task task : shuffledTasks) { - if (task.run(context)) { - return; - } - } - } - - public interface Randomizer { - void shuffle(List> list); - } -} diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RoundRobinTaskExecutor.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RoundRobinSchedulingMode.java similarity index 72% rename from refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RoundRobinTaskExecutor.java rename to refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RoundRobinSchedulingMode.java index ee10f89b7..ad75e97a6 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RoundRobinTaskExecutor.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/task/RoundRobinSchedulingMode.java @@ -1,26 +1,25 @@ package com.refinedmods.refinedstorage.api.network.impl.node.task; -import com.refinedmods.refinedstorage.api.network.node.task.Task; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import java.util.List; -public class RoundRobinTaskExecutor implements TaskExecutor { +public class RoundRobinSchedulingMode implements SchedulingMode { private final State state; - public RoundRobinTaskExecutor(final State state) { + public RoundRobinSchedulingMode(final State state) { this.state = state; } @Override - public void execute(final List> tasks, final C context) { + public void execute(final List tasks) { if (tasks.isEmpty()) { return; } final int startIndex = state.getIndex() % tasks.size(); for (int i = startIndex; i < tasks.size(); ++i) { - final Task task = tasks.get(i); - if (task.run(context)) { + final ScheduledTask task = tasks.get(i); + if (task.run()) { state.setIndex((state.getIndex() + 1) % tasks.size()); return; } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java index 6d82477d0..56b3b2b6c 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java @@ -2,8 +2,8 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; @@ -39,12 +39,12 @@ abstract class AbstractExporterNetworkNodeTest { @AddNetworkNode(networkId = "nonexistent") ExporterNetworkNode sutWithoutNetwork; - protected abstract TaskExecutor createTaskExecutor(); + protected abstract SchedulingMode createSchedulingMode(); @BeforeEach void setUp() { sut.setEnergyUsage(5); - sut.setTaskExecutor(createTaskExecutor()); + sut.setSchedulingMode(createSchedulingMode()); } @Test @@ -153,7 +153,7 @@ void shouldNotTransferWithoutTaskExecutor( sut.setFilters(List.of(A, B)); sut.setTransferStrategy(createTransferStrategy(destination, 1)); - sut.setTaskExecutor(null); + sut.setSchedulingMode(null); // Act sut.doWork(); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/FirstAvailableExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java similarity index 94% rename from refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/FirstAvailableExporterNetworkNodeTest.java rename to refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java index db9bf6b7f..aefed2b8b 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/FirstAvailableExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java @@ -1,10 +1,10 @@ package com.refinedmods.refinedstorage.api.network.impl.node.exporter; import com.refinedmods.refinedstorage.api.core.Action; -import com.refinedmods.refinedstorage.api.network.impl.node.task.DefaultTaskExecutor; +import com.refinedmods.refinedstorage.api.network.impl.node.task.DefaultSchedulingMode; import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; @@ -25,10 +25,10 @@ import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; import static org.assertj.core.api.Assertions.assertThat; -class FirstAvailableExporterNetworkNodeTest extends AbstractExporterNetworkNodeTest { +class DefaultExporterNetworkNodeTest extends AbstractExporterNetworkNodeTest { @Override - protected TaskExecutor createTaskExecutor() { - return new DefaultTaskExecutor<>(); + protected SchedulingMode createSchedulingMode() { + return new DefaultSchedulingMode(); } @SuppressWarnings("AssertBetweenInconvertibleTypes") // intellij bug diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java index e357f7218..e83190d85 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java @@ -1,9 +1,9 @@ package com.refinedmods.refinedstorage.api.network.impl.node.exporter; import com.refinedmods.refinedstorage.api.core.Action; -import com.refinedmods.refinedstorage.api.network.impl.node.task.RandomTaskExecutor; +import com.refinedmods.refinedstorage.api.network.impl.node.task.RandomSchedulingMode; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.storage.EmptyActor; @@ -21,11 +21,11 @@ class RandomExporterNetworkNodeTest extends AbstractExporterNetworkNodeTest { @Override - protected TaskExecutor createTaskExecutor() { - return new RandomTaskExecutor<>(list -> { + protected SchedulingMode createSchedulingMode() { + return new RandomSchedulingMode(list -> { list.clear(); - list.add(sut.new TaskImpl(A)); - list.add(sut.new TaskImpl(B)); + list.add(sut.new ExporterTask(A)); + list.add(sut.new ExporterTask(B)); }); } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java index 5dbdb29c3..30c056623 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java @@ -1,9 +1,9 @@ package com.refinedmods.refinedstorage.api.network.impl.node.exporter; import com.refinedmods.refinedstorage.api.core.Action; -import com.refinedmods.refinedstorage.api.network.impl.node.task.RoundRobinTaskExecutor; +import com.refinedmods.refinedstorage.api.network.impl.node.task.RoundRobinSchedulingMode; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; -import com.refinedmods.refinedstorage.api.network.node.task.TaskExecutor; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.storage.EmptyActor; @@ -37,8 +37,8 @@ void setUp() { } @Override - protected TaskExecutor createTaskExecutor() { - return new RoundRobinTaskExecutor<>(new RoundRobinTaskExecutor.State(listener, 0)); + protected SchedulingMode createSchedulingMode() { + return new RoundRobinSchedulingMode(new RoundRobinSchedulingMode.State(listener, 0)); } @Test From a9a406a26216438426bac3b3d2cae96bdfba30c1 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 14 Aug 2024 11:25:13 +0200 Subject: [PATCH 11/83] refactor: constructor and destructor now have their own network node Removes #postDoWork. --- .../ConstructorBlockEntity.java | 59 +++------------ .../ConstructorNetworkNode.java | 73 +++++++++++++++++++ .../DestructorBlockEntity.java | 44 ++++------- .../DestructorNetworkNode.java | 57 +++++++++++++++ .../common/importer/ImporterBlockEntity.java | 2 +- .../support/PlayerAwareBlockEntity.java | 1 + .../BaseNetworkNodeContainerBlockEntity.java | 6 +- 7 files changed, 156 insertions(+), 86 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java index 6d528d714..212e8a2c3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java @@ -1,11 +1,5 @@ package com.refinedmods.refinedstorage.common.constructordestructor; -import com.refinedmods.refinedstorage.api.network.Network; -import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; -import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; -import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; -import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategy; @@ -25,7 +19,6 @@ import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.util.ContainerUtil; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.annotation.Nullable; @@ -46,19 +39,15 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -public class ConstructorBlockEntity extends BaseNetworkNodeContainerBlockEntity +public class ConstructorBlockEntity extends BaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { private static final String TAG_DROP_ITEMS = "di"; private static final String TAG_UPGRADES = "upgr"; - private final Actor actor; - private final List tasks = new ArrayList<>(); private final UpgradeContainer upgradeContainer; private final FilterWithFuzzyMode filter; private final SchedulingModeContainer schedulingModeContainer; - @Nullable - private ConstructorStrategy strategy; private boolean dropItems; public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { @@ -66,9 +55,8 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { BlockEntities.INSTANCE.getConstructor(), pos, state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage()) + new ConstructorNetworkNode(Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage()) ); - this.actor = new NetworkNodeActor(mainNetworkNode); this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CONSTRUCTOR, (rate, upgradeEnergyUsage) -> { setWorkTickRate(rate); final long baseEnergyUsage = Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage(); @@ -78,11 +66,14 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { initialize(serverLevel); } }); - this.schedulingModeContainer = new SchedulingModeContainer(schedulingMode -> setChanged()); + this.schedulingModeContainer = new SchedulingModeContainer(schedulingMode -> { + mainNetworkNode.setSchedulingMode(schedulingMode); + setChanged(); + }); this.filter = FilterWithFuzzyMode.createAndListenForFilters( ResourceContainerImpl.createForFilter(), this::setChanged, - this::setFilters + mainNetworkNode::setFilters ); } @@ -101,15 +92,11 @@ public boolean addUpgradeItem(final Item upgradeItem) { return upgradeContainer.addUpgradeItem(upgradeItem); } - private void setFilters(final List filters) { - this.tasks.clear(); - this.tasks.addAll(filters.stream().map(ConstructorTask::new).toList()); - } - @Override protected void initialize(final ServerLevel level, final Direction direction) { super.initialize(level, direction); - this.strategy = createStrategy(level, direction); + mainNetworkNode.setPlayer(getFakePlayer(level)); + mainNetworkNode.setStrategy(createStrategy(level, direction)); } private ConstructorStrategy createStrategy(final ServerLevel serverLevel, final Direction direction) { @@ -130,15 +117,6 @@ private ConstructorStrategy createStrategy(final ServerLevel serverLevel, final return new CompositeConstructorStrategy(strategies); } - // TODO: Move to own obj :) - @Override - public void postDoWork() { - if (mainNetworkNode.getNetwork() == null || !mainNetworkNode.isActive()) { - return; - } - schedulingModeContainer.execute(tasks); - } - @Override public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { super.saveAdditional(tag, provider); @@ -233,23 +211,4 @@ protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState final BlockState newBlockState) { return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } - - private class ConstructorTask implements SchedulingMode.ScheduledTask { - private final ResourceKey filter; - - private ConstructorTask(final ResourceKey filter) { - this.filter = filter; - } - - @Override - public boolean run() { - final Network network = mainNetworkNode.getNetwork(); - if (strategy == null || !(level instanceof ServerLevel serverLevel) || network == null) { - return false; - } - final Player player = getFakePlayer(serverLevel); - strategy.apply(filter, actor, player, network); - return true; - } - } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java new file mode 100644 index 000000000..f1e758cc0 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java @@ -0,0 +1,73 @@ +package com.refinedmods.refinedstorage.common.constructordestructor; + +import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; +import com.refinedmods.refinedstorage.api.network.node.SchedulingMode; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.storage.Actor; +import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategy; + +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; + +import net.minecraft.world.entity.player.Player; + +public class ConstructorNetworkNode extends SimpleNetworkNode { + private final Actor actor = new NetworkNodeActor(this); + private final List tasks = new ArrayList<>(); + + @Nullable + private Player player; + @Nullable + private ConstructorStrategy strategy; + @Nullable + private SchedulingMode schedulingMode; + + ConstructorNetworkNode(final long energyUsage) { + super(energyUsage); + } + + @Override + public void doWork() { + super.doWork(); + if (network == null || !isActive() || schedulingMode == null) { + return; + } + schedulingMode.execute(tasks); + } + + void setPlayer(@Nullable final Player player) { + this.player = player; + } + + void setSchedulingMode(@Nullable final SchedulingMode schedulingMode) { + this.schedulingMode = schedulingMode; + } + + void setFilters(final List filters) { + this.tasks.clear(); + this.tasks.addAll(filters.stream().map(ConstructorTask::new).toList()); + } + + void setStrategy(@Nullable final ConstructorStrategy strategy) { + this.strategy = strategy; + } + + private class ConstructorTask implements SchedulingMode.ScheduledTask { + private final ResourceKey filter; + + private ConstructorTask(final ResourceKey filter) { + this.filter = filter; + } + + @Override + public boolean run() { + if (strategy == null || network == null || player == null) { + return false; + } + strategy.apply(filter, actor, player, network); + return true; + } + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java index 4e9ab4685..2557517ff 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java @@ -1,11 +1,7 @@ package com.refinedmods.refinedstorage.common.constructordestructor; -import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; -import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.filter.Filter; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; -import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategy; @@ -43,20 +39,15 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -public class DestructorBlockEntity - extends BaseNetworkNodeContainerBlockEntity +public class DestructorBlockEntity extends BaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_FILTER_MODE = "fim"; private static final String TAG_PICKUP_ITEMS = "pi"; private static final String TAG_UPGRADES = "upgr"; private final FilterWithFuzzyMode filterWithFuzzyMode; - private final Filter filter = new Filter(); - private final Actor actor; private final UpgradeContainer upgradeContainer; - @Nullable - private DestructorStrategy strategy; private boolean pickupItems; public DestructorBlockEntity(final BlockPos pos, final BlockState state) { @@ -64,9 +55,8 @@ public DestructorBlockEntity(final BlockPos pos, final BlockState state) { BlockEntities.INSTANCE.getDestructor(), pos, state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage()) + new DestructorNetworkNode(Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage()) ); - this.actor = new NetworkNodeActor(mainNetworkNode); this.filterWithFuzzyMode = FilterWithFuzzyMode.createAndListenForUniqueFilters( ResourceContainerImpl.createForFilter(), this::setChanged, @@ -111,15 +101,15 @@ public void setPickupItems(final boolean pickupItems) { } void setFilters(final Set filters) { - filter.setFilters(filters); + mainNetworkNode.setFilters(filters); } public FilterMode getFilterMode() { - return filter.getMode(); + return mainNetworkNode.getFilterMode(); } public void setFilterMode(final FilterMode mode) { - filter.setMode(mode); + mainNetworkNode.setFilterMode(mode); setChanged(); } @@ -145,7 +135,7 @@ public final NonNullList getDrops() { @Override public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); - tag.putInt(TAG_FILTER_MODE, FilterModeSettings.getFilterMode(filter.getMode())); + tag.putInt(TAG_FILTER_MODE, FilterModeSettings.getFilterMode(mainNetworkNode.getFilterMode())); tag.putBoolean(TAG_PICKUP_ITEMS, pickupItems); filterWithFuzzyMode.save(tag, provider); } @@ -155,7 +145,7 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider super.readConfiguration(tag, provider); filterWithFuzzyMode.load(tag, provider); if (tag.contains(TAG_FILTER_MODE)) { - filter.setMode(FilterModeSettings.getFilterMode(tag.getInt(TAG_FILTER_MODE))); + mainNetworkNode.setFilterMode(FilterModeSettings.getFilterMode(tag.getInt(TAG_FILTER_MODE))); } if (tag.contains(TAG_PICKUP_ITEMS)) { pickupItems = tag.getBoolean(TAG_PICKUP_ITEMS); @@ -192,25 +182,19 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent @Override protected void initialize(final ServerLevel level, final Direction direction) { super.initialize(level, direction); + mainNetworkNode.setPlayer(getFakePlayer(level)); + mainNetworkNode.setStrategy(createStrategy(level, direction)); + } + + private CompositeDestructorStrategy createStrategy(final ServerLevel level, + final Direction direction) { final BlockPos pos = getBlockPos().relative(direction); final Direction incomingDirection = direction.getOpposite(); final List strategies = RefinedStorageApi.INSTANCE.getDestructorStrategyFactories() .stream() .flatMap(factory -> factory.create(level, pos, incomingDirection, upgradeContainer, pickupItems).stream()) .toList(); - this.strategy = new CompositeDestructorStrategy(strategies); - } - - @Override - public void postDoWork() { - if (strategy == null - || mainNetworkNode.getNetwork() == null - || !mainNetworkNode.isActive() - || !(level instanceof ServerLevel serverLevel)) { - return; - } - final Player fakePlayer = getFakePlayer(serverLevel); - strategy.apply(filter, actor, mainNetworkNode::getNetwork, fakePlayer); + return new CompositeDestructorStrategy(strategies); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java new file mode 100644 index 000000000..7a1ff2ba3 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java @@ -0,0 +1,57 @@ +package com.refinedmods.refinedstorage.common.constructordestructor; + +import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage.api.network.node.NetworkNodeActor; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.filter.Filter; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; +import com.refinedmods.refinedstorage.api.storage.Actor; +import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategy; + +import java.util.Set; +import javax.annotation.Nullable; + +import net.minecraft.world.entity.player.Player; + +public class DestructorNetworkNode extends SimpleNetworkNode { + private final Actor actor = new NetworkNodeActor(this); + private final Filter filter = new Filter(); + + @Nullable + private DestructorStrategy strategy; + @Nullable + private Player player; + + DestructorNetworkNode(final long energyUsage) { + super(energyUsage); + } + + void setStrategy(@Nullable final DestructorStrategy strategy) { + this.strategy = strategy; + } + + void setPlayer(@Nullable final Player player) { + this.player = player; + } + + FilterMode getFilterMode() { + return filter.getMode(); + } + + void setFilterMode(final FilterMode mode) { + filter.setMode(mode); + } + + void setFilters(final Set filters) { + filter.setFilters(filters); + } + + @Override + public void doWork() { + super.doWork(); + if (strategy == null || network == null || !isActive() || player == null) { + return; + } + strategy.apply(filter, actor, this::getNetwork, player); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java index 1f826890d..64423fd2b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java @@ -61,7 +61,7 @@ public ImporterBlockEntity(final BlockPos pos, final BlockState state) { BlockEntities.INSTANCE.getImporter(), pos, state, - new ImporterNetworkNode(0) + new ImporterNetworkNode(Platform.INSTANCE.getConfig().getImporter().getEnergyUsage()) ); this.filter = FilterWithFuzzyMode.createAndListenForUniqueFilters( ResourceContainerImpl.createForFilter(), diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerAwareBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerAwareBlockEntity.java index ab42f832e..487262900 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerAwareBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerAwareBlockEntity.java @@ -2,6 +2,7 @@ import java.util.UUID; +@FunctionalInterface public interface PlayerAwareBlockEntity { void setPlacedBy(UUID playerId); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index 4fadedee6..802432573 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -138,13 +138,9 @@ protected final void setWorkTickRate(final int workTickRate) { public void doWork() { if (workTickRate == 0 || (workTicks++ % workTickRate == 0)) { mainNetworkNode.doWork(); - postDoWork(); } } - protected void postDoWork() { - } - protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate( final BlockState oldBlockState, final BlockState newBlockState @@ -204,7 +200,7 @@ public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider pr public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { super.loadAdditional(tag, provider); if (tag.hasUUID(TAG_PLACED_BY_PLAYER_ID)) { - placedByPlayerId = tag.getUUID(TAG_PLACED_BY_PLAYER_ID); + setPlacedBy(tag.getUUID(TAG_PLACED_BY_PLAYER_ID)); } readConfiguration(tag, provider); } From dad98e0264ff686412aae1ec28273a81a9a3e500 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 14 Aug 2024 11:43:39 +0200 Subject: [PATCH 12/83] refactor: work tick rate is now entirely determined by the upgrade container --- .../ConstructorBlockEntity.java | 16 ++++---- .../ConstructorDestructorConstants.java | 8 ++++ .../ConstructorNetworkNode.java | 10 +++-- .../DestructorBlockEntity.java | 13 ++----- .../DestructorNetworkNode.java | 10 +++-- .../common/exporter/ExporterBlockEntity.java | 11 ++---- .../common/importer/ImporterBlockEntity.java | 9 +---- .../WirelessTransmitterBlockEntity.java | 4 +- .../AbstractDiskInterfaceBlockEntity.java | 9 +---- .../support/SchedulingModeContainer.java | 1 + .../BaseNetworkNodeContainerBlockEntity.java | 22 ++--------- .../support/network/NetworkNodeTicker.java | 10 +++++ .../common/upgrade/UpgradeContainer.java | 38 +++++++++++++++++-- .../upgrade/UpgradeContainerListener.java | 2 +- .../ConstructorTest.java | 4 +- .../constructordestructor/DestructorTest.java | 1 + .../AbstractExporterNetworkNodeTest.java | 4 +- 17 files changed, 95 insertions(+), 77 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorDestructorConstants.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeTicker.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java index 212e8a2c3..f53b0e82f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.constructordestructor; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategy; @@ -57,15 +58,15 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { state, new ConstructorNetworkNode(Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage()) ); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CONSTRUCTOR, (rate, upgradeEnergyUsage) -> { - setWorkTickRate(rate); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CONSTRUCTOR, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getConstructor().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); if (level instanceof ServerLevel serverLevel) { initialize(serverLevel); } - }); + }, ConstructorDestructorConstants.DEFAULT_WORK_TICK_RATE); + this.ticker = upgradeContainer.getTicker(); this.schedulingModeContainer = new SchedulingModeContainer(schedulingMode -> { mainNetworkNode.setSchedulingMode(schedulingMode); setChanged(); @@ -73,13 +74,12 @@ public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { this.filter = FilterWithFuzzyMode.createAndListenForFilters( ResourceContainerImpl.createForFilter(), this::setChanged, - mainNetworkNode::setFilters + this::setFilters ); } - @Override - protected boolean hasWorkTickRate() { - return true; + void setFilters(final List filters) { + mainNetworkNode.setFilters(filters); } @Override @@ -95,7 +95,7 @@ public boolean addUpgradeItem(final Item upgradeItem) { @Override protected void initialize(final ServerLevel level, final Direction direction) { super.initialize(level, direction); - mainNetworkNode.setPlayer(getFakePlayer(level)); + mainNetworkNode.setPlayerProvider(() -> getFakePlayer(level)); mainNetworkNode.setStrategy(createStrategy(level, direction)); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorDestructorConstants.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorDestructorConstants.java new file mode 100644 index 000000000..809b3087d --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorDestructorConstants.java @@ -0,0 +1,8 @@ +package com.refinedmods.refinedstorage.common.constructordestructor; + +public final class ConstructorDestructorConstants { + static final int DEFAULT_WORK_TICK_RATE = 20; + + private ConstructorDestructorConstants() { + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java index f1e758cc0..4f2117fb4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorNetworkNode.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; import javax.annotation.Nullable; import net.minecraft.world.entity.player.Player; @@ -18,7 +19,7 @@ public class ConstructorNetworkNode extends SimpleNetworkNode { private final List tasks = new ArrayList<>(); @Nullable - private Player player; + private Supplier playerProvider; @Nullable private ConstructorStrategy strategy; @Nullable @@ -37,8 +38,8 @@ public void doWork() { schedulingMode.execute(tasks); } - void setPlayer(@Nullable final Player player) { - this.player = player; + void setPlayerProvider(@Nullable final Supplier playerSupplier) { + this.playerProvider = playerSupplier; } void setSchedulingMode(@Nullable final SchedulingMode schedulingMode) { @@ -63,9 +64,10 @@ private ConstructorTask(final ResourceKey filter) { @Override public boolean run() { - if (strategy == null || network == null || player == null) { + if (strategy == null || network == null || playerProvider == null) { return false; } + final Player player = playerProvider.get(); strategy.apply(filter, actor, player, network); return true; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java index 2557517ff..07348bca0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java @@ -62,20 +62,15 @@ public DestructorBlockEntity(final BlockPos pos, final BlockState state) { this::setChanged, this::setFilters ); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.DESTRUCTOR, (rate, upgradeEnergyUsage) -> { - setWorkTickRate(rate); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.DESTRUCTOR, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getDestructor().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); if (level instanceof ServerLevel serverLevel) { initialize(serverLevel); } - }); - } - - @Override - protected boolean hasWorkTickRate() { - return true; + }, ConstructorDestructorConstants.DEFAULT_WORK_TICK_RATE); + this.ticker = upgradeContainer.getTicker(); } @Override @@ -182,7 +177,7 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent @Override protected void initialize(final ServerLevel level, final Direction direction) { super.initialize(level, direction); - mainNetworkNode.setPlayer(getFakePlayer(level)); + mainNetworkNode.setPlayerProvider(() -> getFakePlayer(level)); mainNetworkNode.setStrategy(createStrategy(level, direction)); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java index 7a1ff2ba3..4e990bfe8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorNetworkNode.java @@ -9,6 +9,7 @@ import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategy; import java.util.Set; +import java.util.function.Supplier; import javax.annotation.Nullable; import net.minecraft.world.entity.player.Player; @@ -20,7 +21,7 @@ public class DestructorNetworkNode extends SimpleNetworkNode { @Nullable private DestructorStrategy strategy; @Nullable - private Player player; + private Supplier playerProvider; DestructorNetworkNode(final long energyUsage) { super(energyUsage); @@ -30,8 +31,8 @@ void setStrategy(@Nullable final DestructorStrategy strategy) { this.strategy = strategy; } - void setPlayer(@Nullable final Player player) { - this.player = player; + void setPlayerProvider(@Nullable final Supplier playerProvider) { + this.playerProvider = playerProvider; } FilterMode getFilterMode() { @@ -49,9 +50,10 @@ void setFilters(final Set filters) { @Override public void doWork() { super.doWork(); - if (strategy == null || network == null || !isActive() || player == null) { + if (strategy == null || network == null || !isActive() || playerProvider == null) { return; } + final Player player = playerProvider.get(); strategy.apply(filter, actor, this::getNetwork, player); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java index 8f6276d0f..a48f6f378 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java @@ -64,8 +64,7 @@ public ExporterBlockEntity(final BlockPos pos, final BlockState state) { state, new ExporterNetworkNode(Platform.INSTANCE.getConfig().getExporter().getEnergyUsage()) ); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.EXPORTER, (rate, upgradeEnergyUsage) -> { - setWorkTickRate(rate); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.EXPORTER, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getExporter().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); @@ -73,6 +72,7 @@ public ExporterBlockEntity(final BlockPos pos, final BlockState state) { initialize(serverLevel); } }); + this.ticker = upgradeContainer.getTicker(); this.schedulingModeContainer = new SchedulingModeContainer(this::schedulingModeChanged); this.filter = FilterWithFuzzyMode.createAndListenForFilters( ResourceContainerImpl.createForFilter(), @@ -86,11 +86,6 @@ private void schedulingModeChanged(final SchedulingMode schedulingMode) { setChanged(); } - @Override - protected boolean hasWorkTickRate() { - return true; - } - @Override public List getUpgradeItems() { return upgradeContainer.getUpgradeItems(); @@ -201,7 +196,7 @@ public StreamEncoder getMenuCode return ResourceContainerData.STREAM_CODEC; } - private void setFilters(final List filters) { + void setFilters(final List filters) { mainNetworkNode.setFilters(filters); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java index 64423fd2b..3d12b80cb 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java @@ -69,8 +69,7 @@ public ImporterBlockEntity(final BlockPos pos, final BlockState state) { this::setFilters ); this.mainNetworkNode.setNormalizer(filter.createNormalizer()); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.IMPORTER, (rate, upgradeEnergyUsage) -> { - setWorkTickRate(rate); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.IMPORTER, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getImporter().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); @@ -78,11 +77,7 @@ public ImporterBlockEntity(final BlockPos pos, final BlockState state) { initialize(serverLevel); } }); - } - - @Override - protected boolean hasWorkTickRate() { - return true; + this.ticker = upgradeContainer.getTicker(); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 8208445ba..bfcfcebd6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -42,9 +42,9 @@ public WirelessTransmitterBlockEntity(final BlockPos pos, final BlockState state super(BlockEntities.INSTANCE.getWirelessTransmitter(), pos, state, new SimpleNetworkNode( Platform.INSTANCE.getConfig().getWirelessTransmitter().getEnergyUsage() )); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.WIRELESS_TRANSMITTER, (rate, energyUsage) -> { + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.WIRELESS_TRANSMITTER, upgradeEnergyUsage -> { final long baseUsage = Platform.INSTANCE.getConfig().getWirelessTransmitter().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseUsage + energyUsage); + mainNetworkNode.setEnergyUsage(baseUsage + upgradeEnergyUsage); setChanged(); }); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 4f0262f70..62eb90427 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -49,12 +49,12 @@ protected AbstractDiskInterfaceBlockEntity(final BlockPos pos, final BlockState Platform.INSTANCE.getConfig().getDiskInterface().getEnergyUsagePerDisk(), AMOUNT_OF_DISKS )); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.DISK_INTERFACE, (rate, upgradeEnergyUsage) -> { - setWorkTickRate(rate); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.DISK_INTERFACE, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getDiskInterface().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); }); + this.ticker = upgradeContainer.getTicker(); this.mainNetworkNode.setListener(this); this.mainNetworkNode.setTransferQuotaProvider(storage -> { if (storage instanceof SerializableStorage serializableStorage) { @@ -66,11 +66,6 @@ protected AbstractDiskInterfaceBlockEntity(final BlockPos pos, final BlockState }); } - @Override - protected boolean hasWorkTickRate() { - return true; - } - @Override protected void setFilters(final Set filters) { mainNetworkNode.setFilters(filters); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java index e2ad8a1ec..b54d3960a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/SchedulingModeContainer.java @@ -26,6 +26,7 @@ public SchedulingModeContainer(final Consumer listener) { tasks -> Collections.shuffle(tasks, new Random()), this::notifyListener ); + notifyListener(); } public SchedulingModeType getType() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java index 802432573..dd4ddcaac 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java @@ -12,7 +12,6 @@ import com.refinedmods.refinedstorage.common.support.PlayerAwareBlockEntity; import com.refinedmods.refinedstorage.common.support.RedstoneMode; import com.refinedmods.refinedstorage.common.support.RedstoneModeSettings; -import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import java.util.Objects; import java.util.UUID; @@ -47,23 +46,21 @@ public class BaseNetworkNodeContainerBlockEntity private static final String TAG_PLACED_BY_PLAYER_ID = "pbpid"; private static final String TAG_REDSTONE_MODE = "rm"; + protected NetworkNodeTicker ticker = NetworkNodeTicker.IMMEDIATE; + private final RateLimiter activenessChangeRateLimiter = RateLimiter.create(1); @Nullable private Component name; @Nullable private UUID placedByPlayerId; - private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - private int workTickRate; - private int workTicks; public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, final BlockPos pos, final BlockState state, final T networkNode) { super(type, pos, state, networkNode); - this.workTickRate = hasWorkTickRate() ? UpgradeContainer.DEFAULT_WORK_TICK_RATE : 0; } @Override @@ -124,21 +121,8 @@ private void updateActivenessBlockState(final BlockState state, } } - protected boolean hasWorkTickRate() { - return false; - } - - protected final void setWorkTickRate(final int workTickRate) { - if (!hasWorkTickRate()) { - throw new IllegalStateException("Block has no work tick rate!"); - } - this.workTickRate = workTickRate; - } - public void doWork() { - if (workTickRate == 0 || (workTicks++ % workTickRate == 0)) { - mainNetworkNode.doWork(); - } + ticker.tick(mainNetworkNode); } protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate( diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeTicker.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeTicker.java new file mode 100644 index 000000000..92034246a --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeTicker.java @@ -0,0 +1,10 @@ +package com.refinedmods.refinedstorage.common.support.network; + +import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; + +@FunctionalInterface +public interface NetworkNodeTicker { + NetworkNodeTicker IMMEDIATE = AbstractNetworkNode::doWork; + + void tick(AbstractNetworkNode networkNode); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index 2b60d0884..410bf51d9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.upgrade; +import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeDestination; @@ -8,6 +9,7 @@ import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeState; import com.refinedmods.refinedstorage.common.content.Items; +import com.refinedmods.refinedstorage.common.support.network.NetworkNodeTicker; import java.util.ArrayList; import java.util.List; @@ -26,7 +28,7 @@ import org.slf4j.LoggerFactory; public class UpgradeContainer extends SimpleContainer implements UpgradeState { - public static final int DEFAULT_WORK_TICK_RATE = 9; + private static final int DEFAULT_WORK_TICK_RATE = 9; private static final Logger LOGGER = LoggerFactory.getLogger(UpgradeContainer.class); @@ -35,14 +37,28 @@ public class UpgradeContainer extends SimpleContainer implements UpgradeState { private final Object2IntMap index = new Object2IntOpenHashMap<>(); @Nullable private final UpgradeContainerListener listener; + private final int defaultWorkTickRate; + private final ThrottledNetworkNodeTicker ticker; public UpgradeContainer(final UpgradeDestination destination, @Nullable final UpgradeContainerListener listener) { + this(destination, listener, DEFAULT_WORK_TICK_RATE); + } + + public UpgradeContainer(final UpgradeDestination destination, + @Nullable final UpgradeContainerListener listener, + final int defaultWorkTickRate) { super(4); this.destination = destination; this.registry = RefinedStorageApi.INSTANCE.getUpgradeRegistry(); this.addListener(container -> updateIndex()); this.addListener(container -> notifyListener()); this.listener = listener; + this.defaultWorkTickRate = defaultWorkTickRate; + this.ticker = new ThrottledNetworkNodeTicker(defaultWorkTickRate); + } + + public NetworkNodeTicker getTicker() { + return ticker; } @Override @@ -104,8 +120,8 @@ private void notifyListener() { } LOGGER.debug("Reconfiguring for upgrades"); final int amountOfSpeedUpgrades = getAmount(Items.INSTANCE.getSpeedUpgrade()); - final int workTickRate = DEFAULT_WORK_TICK_RATE - (amountOfSpeedUpgrades * 2); - listener.updateState(workTickRate, getEnergyUsage()); + ticker.workTickRate = defaultWorkTickRate - (amountOfSpeedUpgrades * 2); + listener.updateState(getEnergyUsage()); } @Override @@ -148,4 +164,20 @@ public NonNullList getDrops() { } return drops; } + + private static class ThrottledNetworkNodeTicker implements NetworkNodeTicker { + private int workTickRate; + private int workTicks; + + private ThrottledNetworkNodeTicker(final int workTickRate) { + this.workTickRate = workTickRate; + } + + @Override + public void tick(final AbstractNetworkNode networkNode) { + if (workTicks++ % workTickRate == 0) { + networkNode.doWork(); + } + } + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java index 31e68763c..9a8d64935 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainerListener.java @@ -2,5 +2,5 @@ @FunctionalInterface public interface UpgradeContainerListener { - void updateState(int workTickRate, long upgradeEnergyUsage); + void updateState(long upgradeEnergyUsage); } diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java index f726490b7..50ce50207 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java @@ -133,7 +133,7 @@ public static void shouldDropItemWithStackUpgrade(final GameTestHelper helper) { // Assert sequence - .thenIdle(9) + .thenIdle(20) .thenExecute(() -> helper.assertBlockNotPresent(Blocks.DIRT, pos.east())) .thenExecute(() -> assertItemEntityPresentExactly( helper, @@ -147,7 +147,7 @@ public static void shouldDropItemWithStackUpgrade(final GameTestHelper helper) { new ResourceAmount(asResource(DIRT), 1), new ResourceAmount(asResource(STONE), 15) )) - .thenIdle(9) + .thenIdle(20) .thenExecute(storageContainsExactly( helper, pos, diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java index c8b41ab50..4db21526c 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java @@ -268,6 +268,7 @@ public static void shouldDrainFluidBlocklist(final GameTestHelper helper) { // Assert sequence + .thenIdle(20) .thenWaitUntil(() -> helper.assertBlockNotPresent(Blocks.WATER, pos.east())) .thenExecute(() -> helper.setBlock(pos.east(), Blocks.LAVA)) .thenIdle(20) diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java index 56b3b2b6c..83c5c4023 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java @@ -141,9 +141,7 @@ void shouldNotTransferWithoutNetwork() { } @Test - void shouldNotTransferWithoutTaskExecutor( - @InjectNetworkStorageComponent final StorageNetworkComponent storage - ) { + void shouldNotTransferWithoutSchedulingMode(@InjectNetworkStorageComponent final StorageNetworkComponent storage) { // Arrange storage.addSource(new StorageImpl()); storage.insert(A, 100, Action.EXECUTE, EmptyActor.INSTANCE); From da665f2e2e0789ee10ee536a858255a15afbe06a Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 12 Aug 2024 11:39:07 +0200 Subject: [PATCH 13/83] feat: use model data for cable connections We go from 90599 states to 3911 states. This moves connection data to server as well (as we have to store and calculate it somewhere). Thanks to Soaryn for notifying me about this! --- .../blockstates/black_cable.json | 63 +------- .../blockstates/black_constructor.json | 55 +------ .../blockstates/black_destructor.json | 55 +------ .../blockstates/black_exporter.json | 55 +------ .../blockstates/black_external_storage.json | 55 +------ .../blockstates/black_importer.json | 55 +------ .../blockstates/blue_cable.json | 63 +------- .../blockstates/blue_constructor.json | 55 +------ .../blockstates/blue_destructor.json | 55 +------ .../blockstates/blue_exporter.json | 55 +------ .../blockstates/blue_external_storage.json | 55 +------ .../blockstates/blue_importer.json | 55 +------ .../blockstates/brown_cable.json | 63 +------- .../blockstates/brown_constructor.json | 55 +------ .../blockstates/brown_destructor.json | 55 +------ .../blockstates/brown_exporter.json | 55 +------ .../blockstates/brown_external_storage.json | 55 +------ .../blockstates/brown_importer.json | 55 +------ .../refinedstorage/blockstates/cable.json | 63 +------- .../blockstates/constructor.json | 55 +------ .../blockstates/cyan_cable.json | 63 +------- .../blockstates/cyan_constructor.json | 55 +------ .../blockstates/cyan_destructor.json | 55 +------ .../blockstates/cyan_exporter.json | 55 +------ .../blockstates/cyan_external_storage.json | 55 +------ .../blockstates/cyan_importer.json | 55 +------ .../blockstates/destructor.json | 55 +------ .../refinedstorage/blockstates/exporter.json | 55 +------ .../blockstates/external_storage.json | 55 +------ .../blockstates/green_cable.json | 63 +------- .../blockstates/green_constructor.json | 55 +------ .../blockstates/green_destructor.json | 55 +------ .../blockstates/green_exporter.json | 55 +------ .../blockstates/green_external_storage.json | 55 +------ .../blockstates/green_importer.json | 55 +------ .../refinedstorage/blockstates/importer.json | 55 +------ .../blockstates/light_blue_cable.json | 63 +------- .../blockstates/light_blue_constructor.json | 55 +------ .../blockstates/light_blue_destructor.json | 55 +------ .../blockstates/light_blue_exporter.json | 55 +------ .../light_blue_external_storage.json | 55 +------ .../blockstates/light_blue_importer.json | 55 +------ .../blockstates/light_gray_cable.json | 63 +------- .../blockstates/light_gray_constructor.json | 55 +------ .../blockstates/light_gray_destructor.json | 55 +------ .../blockstates/light_gray_exporter.json | 55 +------ .../light_gray_external_storage.json | 55 +------ .../blockstates/light_gray_importer.json | 55 +------ .../blockstates/lime_cable.json | 63 +------- .../blockstates/lime_constructor.json | 55 +------ .../blockstates/lime_destructor.json | 55 +------ .../blockstates/lime_exporter.json | 55 +------ .../blockstates/lime_external_storage.json | 55 +------ .../blockstates/lime_importer.json | 55 +------ .../blockstates/magenta_cable.json | 63 +------- .../blockstates/magenta_constructor.json | 55 +------ .../blockstates/magenta_destructor.json | 55 +------ .../blockstates/magenta_exporter.json | 55 +------ .../blockstates/magenta_external_storage.json | 55 +------ .../blockstates/magenta_importer.json | 55 +------ .../blockstates/orange_cable.json | 63 +------- .../blockstates/orange_constructor.json | 55 +------ .../blockstates/orange_destructor.json | 55 +------ .../blockstates/orange_exporter.json | 55 +------ .../blockstates/orange_external_storage.json | 55 +------ .../blockstates/orange_importer.json | 55 +------ .../blockstates/pink_cable.json | 63 +------- .../blockstates/pink_constructor.json | 55 +------ .../blockstates/pink_destructor.json | 55 +------ .../blockstates/pink_exporter.json | 55 +------ .../blockstates/pink_external_storage.json | 55 +------ .../blockstates/pink_importer.json | 55 +------ .../blockstates/purple_cable.json | 63 +------- .../blockstates/purple_constructor.json | 55 +------ .../blockstates/purple_destructor.json | 55 +------ .../blockstates/purple_exporter.json | 55 +------ .../blockstates/purple_external_storage.json | 55 +------ .../blockstates/purple_importer.json | 55 +------ .../refinedstorage/blockstates/red_cable.json | 63 +------- .../blockstates/red_constructor.json | 55 +------ .../blockstates/red_destructor.json | 55 +------ .../blockstates/red_exporter.json | 55 +------ .../blockstates/red_external_storage.json | 55 +------ .../blockstates/red_importer.json | 55 +------ .../blockstates/white_cable.json | 63 +------- .../blockstates/white_constructor.json | 55 +------ .../blockstates/white_destructor.json | 55 +------ .../blockstates/white_exporter.json | 55 +------ .../blockstates/white_external_storage.json | 55 +------ .../blockstates/white_importer.json | 55 +------ .../blockstates/yellow_cable.json | 63 +------- .../blockstates/yellow_constructor.json | 55 +------ .../blockstates/yellow_destructor.json | 55 +------ .../blockstates/yellow_exporter.json | 55 +------ .../blockstates/yellow_external_storage.json | 55 +------ .../blockstates/yellow_importer.json | 55 +------ .../models/block/cable/black.json | 4 + .../models/block/cable/blue.json | 4 + .../models/block/cable/brown.json | 4 + .../models/block/cable/cyan.json | 4 + .../models/block/cable/gray.json | 4 + .../models/block/cable/green.json | 4 + .../models/block/cable/light_blue.json | 4 + .../models/block/cable/light_gray.json | 4 + .../models/block/cable/lime.json | 4 + .../models/block/cable/magenta.json | 4 + .../models/block/cable/orange.json | 4 + .../models/block/cable/pink.json | 4 + .../models/block/cable/purple.json | 4 + .../models/block/cable/red.json | 4 + .../models/block/cable/white.json | 4 + .../models/block/cable/yellow.json | 4 + .../common/AbstractModInitializer.java | 82 ++++------ .../refinedstorage/common/Platform.java | 3 + .../refinedstorage/common/PlatformProxy.java | 8 + .../common/autocrafting/PatternGridData.java | 4 +- .../common/autocrafting/PatternState.java | 4 +- ...va => AbstractConstructorBlockEntity.java} | 7 +- ...ava => AbstractDestructorBlockEntity.java} | 7 +- .../ConstructorBlock.java | 14 +- .../ConstructorContainerMenu.java | 6 +- .../DestructorBlock.java | 14 +- .../DestructorContainerMenu.java | 6 +- .../common/content/BlockConstants.java | 2 + .../common/content/BlockEntities.java | 51 +++---- .../common/content/BlockEntityProvider.java | 10 ++ .../common/content/BlockEntityProviders.java | 25 +++ .../content/BlockEntityTypeFactory.java | 9 +- .../refinedstorage/common/content/Blocks.java | 142 ++++++++++++------ .../controller/ControllerBlockEntity.java | 4 +- .../common/detector/DetectorBlockEntity.java | 4 +- ....java => AbstractExporterBlockEntity.java} | 10 +- .../common/exporter/ExporterBlock.java | 19 ++- .../exporter/ExporterContainerMenu.java | 6 +- .../common/grid/AbstractGridBlockEntity.java | 4 +- .../common/iface/InterfaceBlockEntity.java | 4 +- ....java => AbstractImporterBlockEntity.java} | 10 +- .../common/importer/ImporterBlock.java | 15 +- .../importer/ImporterContainerMenu.java | 6 +- .../networking/AbstractCableBlockEntity.java | 16 ++ .../common/networking/CableBlock.java | 89 +++++++---- .../common/networking/CableConnections.java | 28 ++++ .../NetworkReceiverBlockEntity.java | 4 +- .../NetworkTransmitterBlockEntity.java | 4 +- .../common/networking/RelayBlockEntity.java | 4 +- .../WirelessTransmitterBlockEntity.java | 4 +- .../security/SecurityManagerBlockEntity.java | 4 +- .../AbstractDiskContainerBlockEntity.java | 17 ++- .../storage/DiskStateChangeListener.java | 18 +-- ...orageContainerUpgradeRecipeSerializer.java | 2 +- .../storage/diskdrive/DiskDriveBlock.java | 11 +- .../diskinterface/DiskInterfaceBlock.java | 11 +- ...> AbstractExternalStorageBlockEntity.java} | 10 +- .../externalstorage/ExternalStorageBlock.java | 13 +- .../AbstractPortableGridBlockEntity.java | 8 +- .../portablegrid/PortableGridBlock.java | 11 +- .../AbstractStorageBlockBlockEntity.java | 4 +- .../StorageMonitorBlockEntity.java | 8 +- .../support/AbstractCableLikeBlockEntity.java | 118 +++++++++++++++ .../support/AbstractDirectionalBlock.java | 1 - .../AbstractDirectionalCableBlock.java | 94 +++++++----- .../common/support/CableBlockSupport.java | 135 ----------------- .../common/support/CableShapeCacheKey.java | 16 -- .../common/support/CableShapes.java | 52 +++++++ .../common/support/direction/BiDirection.java | 11 ++ ...tBaseNetworkNodeContainerBlockEntity.java} | 12 +- .../network/NetworkNodeBlockEntityTicker.java | 2 +- .../support/packet/c2s/GridExtractPacket.java | 2 +- .../support/packet/c2s/GridInsertPacket.java | 2 +- .../support/packet/c2s/GridScrollPacket.java | 2 +- .../common/util/PacketUtil.java | 14 -- .../common/util/PlatformUtil.java | 29 ++++ .../fabric/ClientModInitializerImpl.java | 19 +++ .../fabric/ModInitializerImpl.java | 35 +++-- .../refinedstorage/fabric/PlatformImpl.java | 21 +++ .../FabricConstructorBlockEntity.java | 20 +++ .../FabricDestructorBlockEntity.java | 20 +++ .../constructordestructor/package-info.java | 7 + .../exporter/FabricExporterBlockEntity.java | 20 +++ .../importer/FabricImporterBlockEntity.java | 20 +++ .../fabric/networking/CableBakedModel.java | 73 +++++++++ .../fabric/networking/CableUnbakedModel.java | 55 +++++++ .../networking/FabricCableBlockEntity.java | 20 +++ .../fabric/networking/package-info.java | 7 + .../FabricExternalStorageBlockEntity.java | 20 +++ .../neoforge/ClientModInitializer.java | 5 +- .../neoforge/ModInitializer.java | 38 +++-- .../refinedstorage/neoforge/PlatformImpl.java | 23 +++ .../ForgeConstructorBlockEntity.java | 19 +++ .../ForgeDestructorBlockEntity.java | 19 +++ .../constructordestructor/package-info.java | 7 + .../datagen/BlockModelProviderImpl.java | 10 ++ .../datagen/BlockStateProviderImpl.java | 107 ++++--------- .../datagen/CableCustomLoaderBuilder.java | 27 ++++ .../exporter/ForgeExporterBlockEntity.java | 19 +++ .../importer/ForgeImporterBlockEntity.java | 19 +++ .../neoforge/networking/CableBakedModel.java | 88 +++++++++++ .../networking/CableGeometryLoader.java | 20 +++ .../networking/CableUnbakedGeometry.java | 51 +++++++ .../networking/ForgeCableBlockEntity.java | 19 +++ .../neoforge/networking/package-info.java | 7 + .../diskdrive/ForgeDiskDriveBlockEntity.java | 6 - .../ForgeDiskInterfaceBlockEntity.java | 6 - .../ForgeExternalStorageBlockEntity.java | 19 +++ .../ForgePortableGridBlockEntity.java | 6 - .../support/render/ModelProperties.java | 12 ++ .../ConstructorTestPlots.java | 4 +- .../DestructorTestPlots.java | 4 +- .../common/exporter/ExporterTestPlots.java | 4 +- .../common/importer/ImporterTestPlots.java | 4 +- 210 files changed, 1681 insertions(+), 5903 deletions(-) create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/black.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/blue.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/brown.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/cyan.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/gray.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/green.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_blue.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_gray.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/lime.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/magenta.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/orange.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/pink.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/purple.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/red.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/white.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/yellow.json rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/{ConstructorBlockEntity.java => AbstractConstructorBlockEntity.java} (96%) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/{DestructorBlockEntity.java => AbstractDestructorBlockEntity.java} (96%) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProvider.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProviders.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/{ExporterBlockEntity.java => AbstractExporterBlockEntity.java} (96%) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/{ImporterBlockEntity.java => AbstractImporterBlockEntity.java} (96%) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableConnections.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/{ExternalStorageBlockEntity.java => AbstractExternalStorageBlockEntity.java} (95%) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractCableLikeBlockEntity.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableBlockSupport.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapeCacheKey.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapes.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/{BaseNetworkNodeContainerBlockEntity.java => AbstractBaseNetworkNodeContainerBlockEntity.java} (95%) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PacketUtil.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PlatformUtil.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricConstructorBlockEntity.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricDestructorBlockEntity.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/package-info.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricExporterBlockEntity.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricImporterBlockEntity.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableBakedModel.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableUnbakedModel.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/FabricCableBlockEntity.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/package-info.java create mode 100644 refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricExternalStorageBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeConstructorBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeDestructorBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/package-info.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/exporter/ForgeExporterBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/importer/ForgeImporterBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableBakedModel.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableGeometryLoader.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableUnbakedGeometry.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/ForgeCableBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/package-info.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/externalstorage/ForgeExternalStorageBlockEntity.java create mode 100644 refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/support/render/ModelProperties.java diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_cable.json index 4309face1..581a6e59e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/black" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/black" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_constructor.json index a14839054..aafe5eb77 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/black" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/black" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_destructor.json index 91b21745c..c17d79feb 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/black" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/black" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_exporter.json index ee608c843..9e1317c9d 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/black" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/black" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_external_storage.json index 7ae068f16..de36c2a08 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/black" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/black" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_importer.json index 879bf650c..1e5e17ae7 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/black" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/black", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/black" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_cable.json index ac13ee7d2..564c05282 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/blue" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_constructor.json index 8fe655a61..f2f2dec22 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_destructor.json index 785d09cbd..24d92373b 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_exporter.json index fc6a17885..1886daec7 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_external_storage.json index f9f85426c..5aa2e5170 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_importer.json index 8ed0fd17f..b7b2a0da6 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_cable.json index ba61ed542..40870a183 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/brown" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/brown" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_constructor.json index 07b7864b2..e0ad6ab26 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/brown" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/brown" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_destructor.json index 8643f4c79..f81b9ca2c 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/brown" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/brown" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_exporter.json index 4d08b4e0c..476090a6d 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/brown" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/brown" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_external_storage.json index 50e1e27bd..aac86e05e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/brown" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/brown" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_importer.json index 6d2726f79..d3d05ec70 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/brown" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/brown", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/brown" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cable.json index c872049ba..ea328e8a8 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/gray" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/constructor.json index f0c902f02..7bc755eb1 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_cable.json index d7d7362bc..606e3a7dd 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/cyan" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/cyan" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_constructor.json index 478897e07..ef50945c7 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/cyan" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/cyan" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_destructor.json index 7795f885d..b26724fff 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/cyan" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/cyan" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_exporter.json index 37aba6fd0..9aa6b1bb8 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/cyan" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/cyan" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_external_storage.json index b2c4c2921..6632dad00 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/cyan" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/cyan" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_importer.json index 136e1671b..f0ad18194 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/cyan" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/cyan", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/cyan" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/destructor.json index 3b3b47d04..d0e747591 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/exporter.json index c5aa22219..f9cf3fc04 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/external_storage.json index 6af30bcd1..770a1ccf5 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_cable.json index 51d737865..3e9d31300 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/green" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/green" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_constructor.json index fe7f77b32..1b5a94db7 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/green" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/green" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_destructor.json index dd8b7b395..e70f1e999 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/green" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/green" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_exporter.json index 154b941c7..94e18d24d 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/green" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/green" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_external_storage.json index c273ff48f..c8e06a5b2 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/green" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/green" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_importer.json index 43af93e21..4ebd24f65 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/green" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/green", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/green" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/importer.json index dc9c4786a..3d5f045c5 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_cable.json index 1240ef2bd..e30c71afc 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/light_blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/light_blue" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_constructor.json index a4c16ed81..420e768ee 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_destructor.json index 412f10ff1..7ed932195 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_exporter.json index 7e543f779..337a7812c 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_external_storage.json index 83c9bd5e8..5a9ad8ff7 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_importer.json index 52b21c01c..7fbabb8c0 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_blue_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_blue" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_blue", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_blue" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_cable.json index 534465f4d..00b1e4ed6 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/light_gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/light_gray" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_constructor.json index 7f62673da..53c20925a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_destructor.json index 77c820b5a..d97403ccf 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_exporter.json index 81bbee55a..c8f5a267b 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_external_storage.json index aed770625..411b3ae6e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_importer.json index eaa5b8e11..22f826ca2 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/light_gray" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/light_gray", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/light_gray" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_cable.json index e28efe162..70d08266f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/lime" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/lime" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_constructor.json index 08af65b42..c0e79339a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/lime" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/lime" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_destructor.json index 7fad1d75d..b54927ad4 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/lime" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/lime" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_exporter.json index 2cf28fad2..808662a52 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/lime" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/lime" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_external_storage.json index 329782786..476f0bc8a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/lime" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/lime" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_importer.json index a429fc62c..9e57d8eb2 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/lime" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/lime", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/lime" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_cable.json index 9ab9fe409..a4fa2fa31 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/magenta" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/magenta" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_constructor.json index 498560344..479457299 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/magenta" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/magenta" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_destructor.json index 4e1edb983..7724566d1 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/magenta" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/magenta" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_exporter.json index 8272b6dbb..2d19c6f68 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/magenta" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/magenta" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_external_storage.json index 897d12591..830db93ed 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/magenta" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/magenta" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_importer.json index ad56822fd..d08984b5f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/magenta" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/magenta", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/magenta" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_cable.json index 82ac40d83..493d2bcee 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/orange" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/orange" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_constructor.json index cdf7deac5..033250a62 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/orange" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/orange" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_destructor.json index 063c27350..8d61dc0e8 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/orange" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/orange" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_exporter.json index 0ae1e3896..f91b873bd 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/orange" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/orange" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_external_storage.json index f10eecf17..f113690f5 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/orange" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/orange" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_importer.json index e1c8efee3..f3d07af0a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/orange" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/orange", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/orange" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_cable.json index 184969b97..7b87ebc13 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/pink" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/pink" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_constructor.json index 942ecd2ec..63ab19084 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/pink" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/pink" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_destructor.json index 558b15b2d..25e09b37f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/pink" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/pink" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_exporter.json index 0e927a5c9..41668cf84 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/pink" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/pink" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_external_storage.json index b2646156e..1a0c70b8f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/pink" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/pink" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_importer.json index 2c450320d..7e9f851f0 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/pink" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/pink", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/pink" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_cable.json index 16fe6d947..0d84f2741 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/purple" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/purple" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_constructor.json index 1c2c7c250..19c5cf056 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/purple" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/purple" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_destructor.json index a87ca737c..2f6eb356a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/purple" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/purple" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_exporter.json index c3f3c0c0f..c640bb1d4 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/purple" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/purple" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_external_storage.json index 4d5faf355..24dab813a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/purple" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/purple" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_importer.json index e6bf4f22f..1e8875081 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/purple" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/purple", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/purple" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_cable.json index 5ce9bf967..e9ec3dc5c 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/red" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/red" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_constructor.json index 9a04f59d4..965511f7a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/red" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/red" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_destructor.json index 9f5c66d6e..1e071a7ab 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/red" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/red" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_exporter.json index 2db0cac21..b196cafd6 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/red" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/red" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_external_storage.json index 5891cd2af..4874a6e65 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/red" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/red" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_importer.json index bae9e8610..a1419c98d 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/red" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/red", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/red" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_cable.json index ca7d62965..ebabc8a2a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/white" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/white" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_constructor.json index 532942a78..43135cbf5 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/white" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/white" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_destructor.json index 0b4f52a98..e2f8508d2 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/white" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/white" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_exporter.json index a5f5d9ee1..a3290915a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/white" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/white" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_external_storage.json index c2518c593..98b0c1036 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/white" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/white" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_importer.json index f51ca9320..6dce9ef95 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/white" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/white", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/white" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_cable.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_cable.json index 0b8966698..10acd35d0 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_cable.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_cable.json @@ -1,62 +1,7 @@ { - "multipart": [ - { - "apply": { - "model": "refinedstorage:block/cable/core/yellow" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 90 - }, - "when": { - "east": "true" - } + "variants": { + "": { + "model": "refinedstorage:block/cable/yellow" } - ] + } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_constructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_constructor.json index 144d74691..3adfd4a55 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_constructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_constructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/yellow" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/yellow" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_destructor.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_destructor.json index c51c161f5..c873f03db 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_destructor.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_destructor.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/yellow" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/yellow" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_exporter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_exporter.json index 77a277779..a9a51721b 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_exporter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_exporter.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/yellow" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/yellow" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_external_storage.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_external_storage.json index bdb3d2346..e6fd0ff82 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_external_storage.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_external_storage.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/yellow" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/yellow" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_importer.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_importer.json index 2cee8fd0d..e6569aeb4 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_importer.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_importer.json @@ -2,60 +2,7 @@ "multipart": [ { "apply": { - "model": "refinedstorage:block/cable/core/yellow" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 90 - }, - "when": { - "down": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 270 - }, - "when": { - "up": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow" - }, - "when": { - "north": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "x": 180 - }, - "when": { - "south": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 270 - }, - "when": { - "west": "true" - } - }, - { - "apply": { - "model": "refinedstorage:block/cable/extension/yellow", - "y": 90 - }, - "when": { - "east": "true" + "model": "refinedstorage:block/cable/yellow" } }, { diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/black.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/black.json new file mode 100644 index 000000000..eaf590fdf --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/black.json @@ -0,0 +1,4 @@ +{ + "color": "black", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/blue.json new file mode 100644 index 000000000..30036f2b8 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/blue.json @@ -0,0 +1,4 @@ +{ + "color": "blue", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/brown.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/brown.json new file mode 100644 index 000000000..a3101693e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/brown.json @@ -0,0 +1,4 @@ +{ + "color": "brown", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/cyan.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/cyan.json new file mode 100644 index 000000000..f74b8948f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/cyan.json @@ -0,0 +1,4 @@ +{ + "color": "cyan", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/gray.json new file mode 100644 index 000000000..101fb8462 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/gray.json @@ -0,0 +1,4 @@ +{ + "color": "gray", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/green.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/green.json new file mode 100644 index 000000000..759f38930 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/green.json @@ -0,0 +1,4 @@ +{ + "color": "green", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_blue.json new file mode 100644 index 000000000..e35dde2e8 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_blue.json @@ -0,0 +1,4 @@ +{ + "color": "light_blue", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_gray.json new file mode 100644 index 000000000..85a1779d0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/light_gray.json @@ -0,0 +1,4 @@ +{ + "color": "light_gray", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/lime.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/lime.json new file mode 100644 index 000000000..51df53d4d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/lime.json @@ -0,0 +1,4 @@ +{ + "color": "lime", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/magenta.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/magenta.json new file mode 100644 index 000000000..426162b60 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/magenta.json @@ -0,0 +1,4 @@ +{ + "color": "magenta", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/orange.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/orange.json new file mode 100644 index 000000000..c86dc33a3 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/orange.json @@ -0,0 +1,4 @@ +{ + "color": "orange", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/pink.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/pink.json new file mode 100644 index 000000000..1ed14cfee --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/pink.json @@ -0,0 +1,4 @@ +{ + "color": "pink", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/purple.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/purple.json new file mode 100644 index 000000000..0b590f0c0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/purple.json @@ -0,0 +1,4 @@ +{ + "color": "purple", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/red.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/red.json new file mode 100644 index 000000000..91c6ac02e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/red.json @@ -0,0 +1,4 @@ +{ + "color": "red", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/white.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/white.json new file mode 100644 index 000000000..f4d510a95 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/white.json @@ -0,0 +1,4 @@ +{ + "color": "white", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/yellow.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/yellow.json new file mode 100644 index 000000000..ad1f26798 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/cable/yellow.json @@ -0,0 +1,4 @@ +{ + "color": "yellow", + "loader": "refinedstorage:cable" +} \ No newline at end of file diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index c548d7ce8..65d57f3e3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -3,7 +3,6 @@ import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.energy.EnergyNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.node.GraphNetworkComponentImpl; -import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.security.SecurityNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; @@ -24,9 +23,7 @@ import com.refinedmods.refinedstorage.common.configurationcard.ConfigurationCardItem; import com.refinedmods.refinedstorage.common.configurationcard.ConfigurationCardState; import com.refinedmods.refinedstorage.common.constructordestructor.BlockBreakDestructorStrategyFactory; -import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorContainerMenu; -import com.refinedmods.refinedstorage.common.constructordestructor.DestructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.DestructorContainerMenu; import com.refinedmods.refinedstorage.common.constructordestructor.FluidBreakDestructorStrategyFactory; import com.refinedmods.refinedstorage.common.constructordestructor.ItemDropConstructorStrategyFactory; @@ -35,6 +32,7 @@ import com.refinedmods.refinedstorage.common.constructordestructor.PlaceFireworksConstructorStrategy; import com.refinedmods.refinedstorage.common.constructordestructor.PlaceFluidConstructorStrategy; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProviders; import com.refinedmods.refinedstorage.common.content.BlockEntityTypeFactory; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.content.ContentIds; @@ -52,7 +50,6 @@ import com.refinedmods.refinedstorage.common.controller.ControllerType; import com.refinedmods.refinedstorage.common.detector.DetectorBlockEntity; import com.refinedmods.refinedstorage.common.detector.DetectorContainerMenu; -import com.refinedmods.refinedstorage.common.exporter.ExporterBlockEntity; import com.refinedmods.refinedstorage.common.exporter.ExporterContainerMenu; import com.refinedmods.refinedstorage.common.grid.CraftingGridBlockEntity; import com.refinedmods.refinedstorage.common.grid.CraftingGridContainerMenu; @@ -66,7 +63,6 @@ import com.refinedmods.refinedstorage.common.iface.InterfaceBlockEntity; import com.refinedmods.refinedstorage.common.iface.InterfaceContainerMenu; import com.refinedmods.refinedstorage.common.iface.InterfaceData; -import com.refinedmods.refinedstorage.common.importer.ImporterBlockEntity; import com.refinedmods.refinedstorage.common.importer.ImporterContainerMenu; import com.refinedmods.refinedstorage.common.misc.ProcessorItem; import com.refinedmods.refinedstorage.common.misc.WrenchItem; @@ -98,14 +94,10 @@ import com.refinedmods.refinedstorage.common.storage.StorageContainerUpgradeRecipe; import com.refinedmods.refinedstorage.common.storage.StorageContainerUpgradeRecipeSerializer; import com.refinedmods.refinedstorage.common.storage.StorageTypes; -import com.refinedmods.refinedstorage.common.storage.diskdrive.AbstractDiskDriveBlockEntity; import com.refinedmods.refinedstorage.common.storage.diskdrive.DiskDriveBlock; import com.refinedmods.refinedstorage.common.storage.diskdrive.DiskDriveContainerMenu; -import com.refinedmods.refinedstorage.common.storage.diskinterface.AbstractDiskInterfaceBlockEntity; import com.refinedmods.refinedstorage.common.storage.diskinterface.DiskInterfaceContainerMenu; -import com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageBlockEntity; import com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageContainerMenu; -import com.refinedmods.refinedstorage.common.storage.portablegrid.AbstractPortableGridBlockEntity; import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridBlock; import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridBlockContainerMenu; import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridItemContainerMenu; @@ -135,7 +127,6 @@ import com.refinedmods.refinedstorage.common.support.SimpleItem; import com.refinedmods.refinedstorage.common.support.containermenu.SingleAmountData; import com.refinedmods.refinedstorage.common.support.energy.EnergyLootItemFunction; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.component.PlatformStorageNetworkComponent; import com.refinedmods.refinedstorage.common.support.resource.FluidResourceContainerInsertStrategy; import com.refinedmods.refinedstorage.common.support.resource.FluidResourceFactory; @@ -152,12 +143,10 @@ import java.util.Optional; import java.util.UUID; -import java.util.function.BiFunction; import java.util.function.Supplier; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; import net.minecraft.core.GlobalPos; import net.minecraft.core.UUIDUtil; import net.minecraft.core.component.DataComponentType; @@ -169,7 +158,6 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; @@ -291,20 +279,16 @@ private void registerPermissions() { } } - protected final void registerBlocks( - final RegistryCallback callback, - final BiFunction diskDriveBlockEntityFactory, - final BiFunction portableGridBlockEntityFactory, - final BiFunction creativePortableGridBlockEntityFactory, - final BiFunction diskInterfaceBlockEntityFactory - ) { + protected final void registerBlocks(final RegistryCallback callback, + final BlockEntityProviders blockEntityProviders) { Blocks.INSTANCE.setQuartzEnrichedIronBlock(callback.register( ContentIds.QUARTZ_ENRICHED_IRON_BLOCK, SimpleBlock::new)); Blocks.INSTANCE.setQuartzEnrichedCopperBlock( callback.register(ContentIds.QUARTZ_ENRICHED_COPPER_BLOCK, SimpleBlock::new)); - Blocks.INSTANCE.setDiskDrive( - callback.register(ContentIds.DISK_DRIVE, () -> new DiskDriveBlock(diskDriveBlockEntityFactory)) - ); + Blocks.INSTANCE.setDiskDrive(callback.register( + ContentIds.DISK_DRIVE, + () -> new DiskDriveBlock(blockEntityProviders.diskDrive()) + )); Blocks.INSTANCE.setMachineCasing(callback.register(ContentIds.MACHINE_CASING, SimpleBlock::new)); for (final ItemStorageVariant variant : ItemStorageVariant.values()) { Blocks.INSTANCE.setItemStorageBlock(variant, callback.register( @@ -320,16 +304,16 @@ protected final void registerBlocks( } Blocks.INSTANCE.getController().registerBlocks(callback); Blocks.INSTANCE.getCreativeController().registerBlocks(callback); - Blocks.INSTANCE.getCable().registerBlocks(callback); + Blocks.INSTANCE.setCable(blockEntityProviders.cable()).registerBlocks(callback); Blocks.INSTANCE.getGrid().registerBlocks(callback); Blocks.INSTANCE.getCraftingGrid().registerBlocks(callback); Blocks.INSTANCE.getPatternGrid().registerBlocks(callback); Blocks.INSTANCE.getDetector().registerBlocks(callback); - Blocks.INSTANCE.getImporter().registerBlocks(callback); - Blocks.INSTANCE.getExporter().registerBlocks(callback); - Blocks.INSTANCE.getExternalStorage().registerBlocks(callback); - Blocks.INSTANCE.getConstructor().registerBlocks(callback); - Blocks.INSTANCE.getDestructor().registerBlocks(callback); + Blocks.INSTANCE.setImporter(blockEntityProviders.importer()).registerBlocks(callback); + Blocks.INSTANCE.setExporter(blockEntityProviders.exporter()).registerBlocks(callback); + Blocks.INSTANCE.setExternalStorage(blockEntityProviders.externalStorage()).registerBlocks(callback); + Blocks.INSTANCE.setConstructor(blockEntityProviders.constructor()).registerBlocks(callback); + Blocks.INSTANCE.setDestructor(blockEntityProviders.destructor()).registerBlocks(callback); Blocks.INSTANCE.setInterface(callback.register(ContentIds.INTERFACE, InterfaceBlock::new)); Blocks.INSTANCE.getWirelessTransmitter().registerBlocks(callback); Blocks.INSTANCE.setStorageMonitor(callback.register(ContentIds.STORAGE_MONITOR, StorageMonitorBlock::new)); @@ -337,16 +321,16 @@ protected final void registerBlocks( Blocks.INSTANCE.getNetworkTransmitter().registerBlocks(callback); Blocks.INSTANCE.setPortableGrid(callback.register(ContentIds.PORTABLE_GRID, () -> new PortableGridBlock( PortableGridType.NORMAL, - portableGridBlockEntityFactory + blockEntityProviders.portableGrid() ))); Blocks.INSTANCE.setCreativePortableGrid( callback.register(ContentIds.CREATIVE_PORTABLE_GRID, () -> new PortableGridBlock( PortableGridType.CREATIVE, - creativePortableGridBlockEntityFactory + blockEntityProviders.creativePortableGrid() ))); Blocks.INSTANCE.getSecurityManager().registerBlocks(callback); Blocks.INSTANCE.getRelay().registerBlocks(callback); - Blocks.INSTANCE.setDiskInterface(diskInterfaceBlockEntityFactory).registerBlocks(callback); + Blocks.INSTANCE.setDiskInterface(blockEntityProviders.diskInterface()).registerBlocks(callback); } protected final void registerItems(final RegistryCallback callback) { @@ -533,22 +517,11 @@ protected final void registerUpgradeMappings() { protected final void registerBlockEntities( final RegistryCallback> callback, final BlockEntityTypeFactory typeFactory, - final BlockEntityTypeFactory.BlockEntitySupplier diskDriveBlockEntitySupplier, - final BlockEntityTypeFactory.BlockEntitySupplier - portableGridBlockEntitySupplier, - final BlockEntityTypeFactory.BlockEntitySupplier - creativePortableGridBlockEntitySupplier, - final BlockEntityTypeFactory.BlockEntitySupplier - diskInterfaceBlockEntitySupplier + final BlockEntityProviders providers ) { BlockEntities.INSTANCE.setCable(callback.register( ContentIds.CABLE, - () -> typeFactory.create((pos, state) -> new BaseNetworkNodeContainerBlockEntity<>( - BlockEntities.INSTANCE.getCable(), - pos, - state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getCable().getEnergyUsage()) - ), Blocks.INSTANCE.getCable().toArray()) + () -> typeFactory.create(providers.cable(), Blocks.INSTANCE.getCable().toArray()) )); BlockEntities.INSTANCE.setController(callback.register( ContentIds.CONTROLLER, @@ -566,7 +539,7 @@ protected final void registerBlockEntities( )); BlockEntities.INSTANCE.setDiskDrive(callback.register( ContentIds.DISK_DRIVE, - () -> typeFactory.create(diskDriveBlockEntitySupplier, Blocks.INSTANCE.getDiskDrive()) + () -> typeFactory.create(providers.diskDrive(), Blocks.INSTANCE.getDiskDrive()) )); BlockEntities.INSTANCE.setGrid(callback.register( ContentIds.GRID, @@ -600,12 +573,11 @@ protected final void registerBlockEntities( } BlockEntities.INSTANCE.setImporter(callback.register( ContentIds.IMPORTER, - () -> typeFactory.create(ImporterBlockEntity::new, Blocks.INSTANCE.getImporter().toArray()) - + () -> typeFactory.create(providers.importer(), Blocks.INSTANCE.getImporter().toArray()) )); BlockEntities.INSTANCE.setExporter(callback.register( ContentIds.EXPORTER, - () -> typeFactory.create(ExporterBlockEntity::new, Blocks.INSTANCE.getExporter().toArray()) + () -> typeFactory.create(providers.exporter(), Blocks.INSTANCE.getExporter().toArray()) )); BlockEntities.INSTANCE.setInterface(callback.register( @@ -614,7 +586,7 @@ protected final void registerBlockEntities( )); BlockEntities.INSTANCE.setExternalStorage(callback.register( ContentIds.EXTERNAL_STORAGE, - () -> typeFactory.create(ExternalStorageBlockEntity::new, Blocks.INSTANCE.getExternalStorage().toArray()) + () -> typeFactory.create(providers.externalStorage(), Blocks.INSTANCE.getExternalStorage().toArray()) )); BlockEntities.INSTANCE.setDetector(callback.register( ContentIds.DETECTOR, @@ -622,11 +594,11 @@ protected final void registerBlockEntities( )); BlockEntities.INSTANCE.setConstructor(callback.register( ContentIds.CONSTRUCTOR, - () -> typeFactory.create(ConstructorBlockEntity::new, Blocks.INSTANCE.getConstructor().toArray()) + () -> typeFactory.create(providers.constructor(), Blocks.INSTANCE.getConstructor().toArray()) )); BlockEntities.INSTANCE.setDestructor(callback.register( ContentIds.DESTRUCTOR, - () -> typeFactory.create(DestructorBlockEntity::new, Blocks.INSTANCE.getDestructor().toArray()) + () -> typeFactory.create(providers.destructor(), Blocks.INSTANCE.getDestructor().toArray()) )); BlockEntities.INSTANCE.setWirelessTransmitter(callback.register( ContentIds.WIRELESS_TRANSMITTER, @@ -652,12 +624,12 @@ protected final void registerBlockEntities( )); BlockEntities.INSTANCE.setPortableGrid(callback.register( ContentIds.PORTABLE_GRID, - () -> typeFactory.create(portableGridBlockEntitySupplier::create, Blocks.INSTANCE.getPortableGrid()) + () -> typeFactory.create(providers.portableGrid(), Blocks.INSTANCE.getPortableGrid()) )); BlockEntities.INSTANCE.setCreativePortableGrid(callback.register( ContentIds.CREATIVE_PORTABLE_GRID, () -> typeFactory.create( - creativePortableGridBlockEntitySupplier::create, + providers.creativePortableGrid(), Blocks.INSTANCE.getCreativePortableGrid() ) )); @@ -674,7 +646,7 @@ protected final void registerBlockEntities( )); BlockEntities.INSTANCE.setDiskInterface(callback.register( ContentIds.DISK_INTERFACE, - () -> typeFactory.create(diskInterfaceBlockEntitySupplier, Blocks.INSTANCE.getDiskInterface().toArray()) + () -> typeFactory.create(providers.diskInterface(), Blocks.INSTANCE.getDiskInterface().toArray()) )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Platform.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Platform.java index 67245d029..6ddd37732 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Platform.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Platform.java @@ -43,6 +43,7 @@ import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.LiquidBlock; @@ -134,4 +135,6 @@ void saveSavedData(SavedData savedData, int getItemColor(ItemStack stack, int tintIndex); void setSlotY(Slot slot, int y); + + void requestModelDataUpdateOnClient(LevelAccessor level, BlockPos pos, boolean updateChunk); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/PlatformProxy.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/PlatformProxy.java index ac5c84766..42b762805 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/PlatformProxy.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/PlatformProxy.java @@ -43,6 +43,7 @@ import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.LiquidBlock; @@ -260,6 +261,13 @@ public void setSlotY(final Slot slot, final int y) { ensureLoaded().setSlotY(slot, y); } + @Override + public void requestModelDataUpdateOnClient(final LevelAccessor level, + final BlockPos pos, + final boolean updateChunk) { + ensureLoaded().requestModelDataUpdateOnClient(level, pos, updateChunk); + } + private Platform ensureLoaded() { if (platform == null) { throw new IllegalStateException("Platform not loaded yet"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridData.java index c1facf09d..e4330475e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridData.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridData.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.common.grid.GridData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; -import com.refinedmods.refinedstorage.common.util.PacketUtil; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; @@ -15,7 +15,7 @@ public record PatternGridData(GridData gridData, int stonecutterSelectedRecipe) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( GridData.STREAM_CODEC, PatternGridData::gridData, - PacketUtil.enumStreamCodec(PatternType.values()), PatternGridData::patternType, + PlatformUtil.enumStreamCodec(PatternType.values()), PatternGridData::patternType, ProcessingInputData.STREAM_CODEC, PatternGridData::processingInputData, ResourceContainerData.STREAM_CODEC, PatternGridData::processingOutputData, ByteBufCodecs.INT, PatternGridData::stonecutterSelectedRecipe, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternState.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternState.java index 1e8a7b3f4..73b9d0032 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternState.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternState.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.common.util.PacketUtil; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import java.util.UUID; @@ -19,7 +19,7 @@ public record PatternState(UUID id, PatternType type) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( UUIDUtil.STREAM_CODEC, PatternState::id, - PacketUtil.enumStreamCodec(PatternType.values()), PatternState::type, + PlatformUtil.enumStreamCodec(PatternType.values()), PatternState::type, PatternState::new ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java similarity index 96% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java index f53b0e82f..72c0c5889 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java @@ -7,13 +7,13 @@ import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; +import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.SchedulingModeContainer; import com.refinedmods.refinedstorage.common.support.SchedulingModeType; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; @@ -40,7 +40,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -public class ConstructorBlockEntity extends BaseNetworkNodeContainerBlockEntity +public abstract class AbstractConstructorBlockEntity + extends AbstractCableLikeBlockEntity implements BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { private static final String TAG_DROP_ITEMS = "di"; private static final String TAG_UPGRADES = "upgr"; @@ -51,7 +52,7 @@ public class ConstructorBlockEntity extends BaseNetworkNodeContainerBlockEntity< private boolean dropItems; - public ConstructorBlockEntity(final BlockPos pos, final BlockState state) { + protected AbstractConstructorBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getConstructor(), pos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java similarity index 96% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java index 07348bca0..4d39c47ea 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java @@ -7,12 +7,12 @@ import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategy; import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; +import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterModeSettings; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; @@ -39,7 +39,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; -public class DestructorBlockEntity extends BaseNetworkNodeContainerBlockEntity +public abstract class AbstractDestructorBlockEntity + extends AbstractCableLikeBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_FILTER_MODE = "fim"; private static final String TAG_PICKUP_ITEMS = "pi"; @@ -50,7 +51,7 @@ public class DestructorBlockEntity extends BaseNetworkNodeContainerBlockEntity implements BlockItemProvider { private static final Component HELP = createTranslation("item", "constructor.help"); - public ConstructorBlock(final DyeColor color, final MutableComponent name) { + private final BlockEntityProvider blockEntityProvider; + + public ConstructorBlock(final DyeColor color, + final MutableComponent name, + final BlockEntityProvider blockEntityProvider) { super(color, name, new NetworkNodeBlockEntityTicker<>( BlockEntities.INSTANCE::getConstructor, ACTIVE )); + this.blockEntityProvider = blockEntityProvider; } @Override @@ -38,8 +44,8 @@ public BlockColorMap getBlockColorMap() { @Nullable @Override - public BlockEntity newBlockEntity(final BlockPos blockPos, final BlockState blockState) { - return new ConstructorBlockEntity(blockPos, blockState); + public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { + return blockEntityProvider.create(pos, state); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java index 3646d0010..c4fc098f0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorContainerMenu.java @@ -18,7 +18,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class ConstructorContainerMenu extends AbstractSimpleFilterContainerMenu { +public class ConstructorContainerMenu extends AbstractSimpleFilterContainerMenu { private static final MutableComponent FILTER_HELP = createTranslation("gui", "constructor.filter_help"); public ConstructorContainerMenu(final int syncId, @@ -36,7 +36,7 @@ public ConstructorContainerMenu(final int syncId, ConstructorContainerMenu(final int syncId, final Player player, - final ConstructorBlockEntity constructor, + final AbstractConstructorBlockEntity constructor, final ResourceContainer resourceContainer, final UpgradeContainer upgradeContainer) { super( @@ -59,7 +59,7 @@ protected void registerClientProperties() { } @Override - protected void registerServerProperties(final ConstructorBlockEntity blockEntity) { + protected void registerServerProperties(final AbstractConstructorBlockEntity blockEntity) { registerProperty(new ServerProperty<>( PropertyTypes.FUZZY_MODE, blockEntity::isFuzzyMode, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlock.java index 0fcca8aa1..044936375 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorBlock.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.support.BaseBlockItem; import com.refinedmods.refinedstorage.common.support.BlockItemProvider; @@ -19,15 +20,20 @@ import net.minecraft.world.level.block.state.BlockState; public class DestructorBlock extends AbstractConstructorDestructorBlock< - DestructorBlock, DestructorBlockEntity, BaseBlockItem + DestructorBlock, AbstractDestructorBlockEntity, BaseBlockItem > implements BlockItemProvider { private static final Component HELP = IdentifierUtil.createTranslation("item", "destructor.help"); - public DestructorBlock(final DyeColor color, final MutableComponent name) { + private final BlockEntityProvider blockEntityProvider; + + public DestructorBlock(final DyeColor color, + final MutableComponent name, + final BlockEntityProvider blockEntityProvider) { super(color, name, new NetworkNodeBlockEntityTicker<>( BlockEntities.INSTANCE::getDestructor, ACTIVE )); + this.blockEntityProvider = blockEntityProvider; } @Override @@ -37,8 +43,8 @@ public BlockColorMap getBlockColorMap() { @Nullable @Override - public BlockEntity newBlockEntity(final BlockPos blockPos, final BlockState blockState) { - return new DestructorBlockEntity(blockPos, blockState); + public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { + return blockEntityProvider.create(pos, state); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorContainerMenu.java index 3f2b47661..38bd6d26d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorContainerMenu.java @@ -18,7 +18,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class DestructorContainerMenu extends AbstractSimpleFilterContainerMenu { +public class DestructorContainerMenu extends AbstractSimpleFilterContainerMenu { private static final MutableComponent FILTER_HELP = createTranslation("gui", "destructor.filter_help"); public DestructorContainerMenu(final int syncId, @@ -36,7 +36,7 @@ public DestructorContainerMenu(final int syncId, DestructorContainerMenu(final int syncId, final Player player, - final DestructorBlockEntity destructor, + final AbstractDestructorBlockEntity destructor, final ResourceContainer resourceContainer, final UpgradeContainer upgradeContainer) { super( @@ -58,7 +58,7 @@ protected void registerClientProperties() { } @Override - protected void registerServerProperties(final DestructorBlockEntity blockEntity) { + protected void registerServerProperties(final AbstractDestructorBlockEntity blockEntity) { registerProperty(new ServerProperty<>( PropertyTypes.REDSTONE_MODE, blockEntity::getRedstoneMode, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockConstants.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockConstants.java index d5605fc3a..cbba0f217 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockConstants.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockConstants.java @@ -12,6 +12,8 @@ public final class BlockConstants { public static final BlockBehaviour.Properties CABLE_PROPERTIES = BlockBehaviour.Properties .of() .strength(0.35F, 0.35F) + .noOcclusion() + .dynamicShape() .sound(SoundType.GLASS); private BlockConstants() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java index edf871ffa..e182e2340 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java @@ -1,16 +1,16 @@ package com.refinedmods.refinedstorage.common.content; -import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; -import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorBlockEntity; -import com.refinedmods.refinedstorage.common.constructordestructor.DestructorBlockEntity; +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; import com.refinedmods.refinedstorage.common.controller.ControllerBlockEntity; import com.refinedmods.refinedstorage.common.detector.DetectorBlockEntity; -import com.refinedmods.refinedstorage.common.exporter.ExporterBlockEntity; +import com.refinedmods.refinedstorage.common.exporter.AbstractExporterBlockEntity; import com.refinedmods.refinedstorage.common.grid.CraftingGridBlockEntity; import com.refinedmods.refinedstorage.common.grid.GridBlockEntity; import com.refinedmods.refinedstorage.common.iface.InterfaceBlockEntity; -import com.refinedmods.refinedstorage.common.importer.ImporterBlockEntity; +import com.refinedmods.refinedstorage.common.importer.AbstractImporterBlockEntity; +import com.refinedmods.refinedstorage.common.networking.AbstractCableBlockEntity; import com.refinedmods.refinedstorage.common.networking.NetworkReceiverBlockEntity; import com.refinedmods.refinedstorage.common.networking.NetworkTransmitterBlockEntity; import com.refinedmods.refinedstorage.common.networking.RelayBlockEntity; @@ -20,12 +20,11 @@ import com.refinedmods.refinedstorage.common.storage.ItemStorageVariant; import com.refinedmods.refinedstorage.common.storage.diskdrive.AbstractDiskDriveBlockEntity; import com.refinedmods.refinedstorage.common.storage.diskinterface.AbstractDiskInterfaceBlockEntity; -import com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageBlockEntity; +import com.refinedmods.refinedstorage.common.storage.externalstorage.AbstractExternalStorageBlockEntity; import com.refinedmods.refinedstorage.common.storage.portablegrid.AbstractPortableGridBlockEntity; import com.refinedmods.refinedstorage.common.storage.storageblock.FluidStorageBlockBlockEntity; import com.refinedmods.refinedstorage.common.storage.storageblock.ItemStorageBlockBlockEntity; import com.refinedmods.refinedstorage.common.storagemonitor.StorageMonitorBlockEntity; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import java.util.EnumMap; import java.util.Map; @@ -40,7 +39,7 @@ public final class BlockEntities { public static final BlockEntities INSTANCE = new BlockEntities(); @Nullable - private Supplier>> cable; + private Supplier> cable; @Nullable private Supplier> diskDrive; @Nullable @@ -58,19 +57,19 @@ public final class BlockEntities { private final Map>> fluidStorageBlocks = new EnumMap<>(FluidStorageVariant.class); @Nullable - private Supplier> importer; + private Supplier> importer; @Nullable - private Supplier> exporter; + private Supplier> exporter; @Nullable private Supplier> iface; @Nullable - private Supplier> externalStorage; + private Supplier> externalStorage; @Nullable private Supplier> detector; @Nullable - private Supplier> destructor; + private Supplier> destructor; @Nullable - private Supplier> constructor; + private Supplier> constructor; @Nullable private Supplier> wirelessTransmitter; @Nullable @@ -93,13 +92,11 @@ public final class BlockEntities { private BlockEntities() { } - public BlockEntityType> getCable() { + public BlockEntityType getCable() { return requireNonNull(cable).get(); } - public void setCable( - final Supplier>> supplier - ) { + public void setCable(final Supplier> supplier) { this.cable = supplier; } @@ -169,19 +166,19 @@ public BlockEntityType getFluidStorageBlock(final return fluidStorageBlocks.get(variant).get(); } - public BlockEntityType getImporter() { + public BlockEntityType getImporter() { return requireNonNull(importer).get(); } - public void setImporter(final Supplier> supplier) { + public void setImporter(final Supplier> supplier) { this.importer = supplier; } - public BlockEntityType getExporter() { + public BlockEntityType getExporter() { return requireNonNull(exporter).get(); } - public void setExporter(final Supplier> supplier) { + public void setExporter(final Supplier> supplier) { this.exporter = supplier; } @@ -193,11 +190,11 @@ public void setInterface(final Supplier> s this.iface = supplier; } - public BlockEntityType getExternalStorage() { + public BlockEntityType getExternalStorage() { return requireNonNull(externalStorage).get(); } - public void setExternalStorage(final Supplier> supplier) { + public void setExternalStorage(final Supplier> supplier) { this.externalStorage = supplier; } @@ -209,19 +206,19 @@ public void setDetector(final Supplier> sup this.detector = supplier; } - public BlockEntityType getDestructor() { + public BlockEntityType getDestructor() { return requireNonNull(destructor).get(); } - public void setDestructor(final Supplier> supplier) { + public void setDestructor(final Supplier> supplier) { this.destructor = supplier; } - public BlockEntityType getConstructor() { + public BlockEntityType getConstructor() { return requireNonNull(constructor).get(); } - public void setConstructor(final Supplier> supplier) { + public void setConstructor(final Supplier> supplier) { this.constructor = supplier; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProvider.java new file mode 100644 index 000000000..c0cc65775 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProvider.java @@ -0,0 +1,10 @@ +package com.refinedmods.refinedstorage.common.content; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +@FunctionalInterface +public interface BlockEntityProvider { + T create(BlockPos pos, BlockState state); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProviders.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProviders.java new file mode 100644 index 000000000..f9192728b --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityProviders.java @@ -0,0 +1,25 @@ +package com.refinedmods.refinedstorage.common.content; + +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; +import com.refinedmods.refinedstorage.common.exporter.AbstractExporterBlockEntity; +import com.refinedmods.refinedstorage.common.importer.AbstractImporterBlockEntity; +import com.refinedmods.refinedstorage.common.networking.AbstractCableBlockEntity; +import com.refinedmods.refinedstorage.common.storage.diskdrive.AbstractDiskDriveBlockEntity; +import com.refinedmods.refinedstorage.common.storage.diskinterface.AbstractDiskInterfaceBlockEntity; +import com.refinedmods.refinedstorage.common.storage.externalstorage.AbstractExternalStorageBlockEntity; +import com.refinedmods.refinedstorage.common.storage.portablegrid.AbstractPortableGridBlockEntity; + +public record BlockEntityProviders( + BlockEntityProvider diskDrive, + BlockEntityProvider portableGrid, + BlockEntityProvider creativePortableGrid, + BlockEntityProvider diskInterface, + BlockEntityProvider cable, + BlockEntityProvider externalStorage, + BlockEntityProvider exporter, + BlockEntityProvider importer, + BlockEntityProvider constructor, + BlockEntityProvider destructor +) { +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityTypeFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityTypeFactory.java index 7241a7550..c07999fb9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityTypeFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntityTypeFactory.java @@ -1,17 +1,10 @@ package com.refinedmods.refinedstorage.common.content; -import net.minecraft.core.BlockPos; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; @FunctionalInterface public interface BlockEntityTypeFactory { - BlockEntityType create(BlockEntitySupplier factory, Block... allowedBlocks); - - @FunctionalInterface - interface BlockEntitySupplier { - T create(BlockPos pos, BlockState state); - } + BlockEntityType create(BlockEntityProvider factory, Block... allowedBlocks); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java index ee4512331..7026662f4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java @@ -2,7 +2,9 @@ import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlock; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorBlock; +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.DestructorBlock; +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; import com.refinedmods.refinedstorage.common.controller.AbstractControllerBlock; import com.refinedmods.refinedstorage.common.controller.ControllerBlock; import com.refinedmods.refinedstorage.common.controller.ControllerBlockEntityTicker; @@ -10,12 +12,15 @@ import com.refinedmods.refinedstorage.common.controller.CreativeControllerBlock; import com.refinedmods.refinedstorage.common.controller.CreativeControllerBlockItem; import com.refinedmods.refinedstorage.common.detector.DetectorBlock; +import com.refinedmods.refinedstorage.common.exporter.AbstractExporterBlockEntity; import com.refinedmods.refinedstorage.common.exporter.ExporterBlock; import com.refinedmods.refinedstorage.common.grid.CraftingGridBlock; import com.refinedmods.refinedstorage.common.grid.GridBlock; import com.refinedmods.refinedstorage.common.iface.InterfaceBlock; import com.refinedmods.refinedstorage.common.importer.ImporterBlock; +import com.refinedmods.refinedstorage.common.importer.AbstractImporterBlockEntity; import com.refinedmods.refinedstorage.common.networking.CableBlock; +import com.refinedmods.refinedstorage.common.networking.AbstractCableBlockEntity; import com.refinedmods.refinedstorage.common.networking.NetworkReceiverBlock; import com.refinedmods.refinedstorage.common.networking.NetworkTransmitterBlock; import com.refinedmods.refinedstorage.common.networking.RelayBlock; @@ -27,6 +32,7 @@ import com.refinedmods.refinedstorage.common.storage.diskinterface.AbstractDiskInterfaceBlockEntity; import com.refinedmods.refinedstorage.common.storage.diskinterface.DiskInterfaceBlock; import com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageBlock; +import com.refinedmods.refinedstorage.common.storage.externalstorage.AbstractExternalStorageBlockEntity; import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridBlock; import com.refinedmods.refinedstorage.common.storage.storageblock.FluidStorageBlock; import com.refinedmods.refinedstorage.common.storage.storageblock.ItemStorageBlock; @@ -36,13 +42,10 @@ import java.util.EnumMap; import java.util.Map; -import java.util.function.BiFunction; import java.util.function.Supplier; import javax.annotation.Nullable; -import net.minecraft.core.BlockPos; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.level.block.state.BlockState; import static java.util.Objects.requireNonNull; @@ -51,12 +54,8 @@ public final class Blocks { public static final DyeColor CABLE_LIKE_COLOR = DyeColor.GRAY; public static final Blocks INSTANCE = new Blocks(); - private final BlockColorMap cable = new BlockColorMap<>( - CableBlock::new, - ContentIds.CABLE, - ContentNames.CABLE, - CABLE_LIKE_COLOR - ); + @Nullable + private BlockColorMap cable; private final BlockColorMap grid = new BlockColorMap<>( GridBlock::new, ContentIds.GRID, @@ -103,36 +102,16 @@ public final class Blocks { ContentNames.CREATIVE_CONTROLLER, COLOR ); - private final BlockColorMap exporter = new BlockColorMap<>( - ExporterBlock::new, - ContentIds.EXPORTER, - ContentNames.EXPORTER, - CABLE_LIKE_COLOR - ); - private final BlockColorMap importer = new BlockColorMap<>( - ImporterBlock::new, - ContentIds.IMPORTER, - ContentNames.IMPORTER, - CABLE_LIKE_COLOR - ); - private final BlockColorMap externalStorage = new BlockColorMap<>( - ExternalStorageBlock::new, - ContentIds.EXTERNAL_STORAGE, - ContentNames.EXTERNAL_STORAGE, - CABLE_LIKE_COLOR - ); - private final BlockColorMap destructor = new BlockColorMap<>( - DestructorBlock::new, - ContentIds.DESTRUCTOR, - ContentNames.DESTRUCTOR, - CABLE_LIKE_COLOR - ); - private final BlockColorMap constructor = new BlockColorMap<>( - ConstructorBlock::new, - ContentIds.CONSTRUCTOR, - ContentNames.CONSTRUCTOR, - CABLE_LIKE_COLOR - ); + @Nullable + private BlockColorMap exporter; + @Nullable + private BlockColorMap importer; + @Nullable + private BlockColorMap externalStorage; + @Nullable + private BlockColorMap destructor; + @Nullable + private BlockColorMap constructor; private final BlockColorMap wirelessTransmitter = new BlockColorMap<>( WirelessTransmitterBlock::new, ContentIds.WIRELESS_TRANSMITTER, @@ -190,10 +169,20 @@ public final class Blocks { private Blocks() { } - public BlockColorMap getCable() { + public BlockColorMap setCable(final BlockEntityProvider provider) { + cable = new BlockColorMap<>( + (color, name) -> new CableBlock(color, name, provider), + ContentIds.CABLE, + ContentNames.CABLE, + CABLE_LIKE_COLOR + ); return cable; } + public BlockColorMap getCable() { + return requireNonNull(cable); + } + public SimpleBlock getQuartzEnrichedIronBlock() { return requireNonNull(quartzEnrichedIronBlock).get(); } @@ -265,14 +254,38 @@ public FluidStorageBlock getFluidStorageBlock(final FluidStorageVariant variant) return fluidStorageBlocks.get(variant).get(); } - public BlockColorMap getImporter() { + public BlockColorMap setImporter( + final BlockEntityProvider provider + ) { + importer = new BlockColorMap<>( + (pos, state) -> new ImporterBlock(pos, state, provider), + ContentIds.IMPORTER, + ContentNames.IMPORTER, + CABLE_LIKE_COLOR + ); return importer; } - public BlockColorMap getExporter() { + public BlockColorMap getImporter() { + return requireNonNull(importer); + } + + public BlockColorMap setExporter( + final BlockEntityProvider provider + ) { + exporter = new BlockColorMap<>( + (color, name) -> new ExporterBlock(color, name, provider), + ContentIds.EXPORTER, + ContentNames.EXPORTER, + CABLE_LIKE_COLOR + ); return exporter; } + public BlockColorMap getExporter() { + return requireNonNull(exporter); + } + public void setInterface(final Supplier interfaceSupplier) { this.iface = interfaceSupplier; } @@ -281,6 +294,19 @@ public InterfaceBlock getInterface() { return requireNonNull(iface).get(); } + // generate setter for ext storage with block entity provider + public BlockColorMap setExternalStorage( + final BlockEntityProvider provider + ) { + externalStorage = new BlockColorMap<>( + (color, name) -> new ExternalStorageBlock(color, name, provider), + ContentIds.EXTERNAL_STORAGE, + ContentNames.EXTERNAL_STORAGE, + CABLE_LIKE_COLOR + ); + return externalStorage; + } + public BlockColorMap getExternalStorage() { return externalStorage; } @@ -289,14 +315,38 @@ public BlockColorMap getDetector() { return detector; } - public BlockColorMap getDestructor() { + public BlockColorMap setDestructor( + final BlockEntityProvider provider + ) { + destructor = new BlockColorMap<>( + (color, name) -> new DestructorBlock(color, name, provider), + ContentIds.DESTRUCTOR, + ContentNames.DESTRUCTOR, + CABLE_LIKE_COLOR + ); return destructor; } - public BlockColorMap getConstructor() { + public BlockColorMap getDestructor() { + return requireNonNull(destructor); + } + + public BlockColorMap setConstructor( + final BlockEntityProvider provider + ) { + constructor = new BlockColorMap<>( + (color, name) -> new ConstructorBlock(color, name, provider), + ContentIds.CONSTRUCTOR, + ContentNames.CONSTRUCTOR, + CABLE_LIKE_COLOR + ); return constructor; } + public BlockColorMap getConstructor() { + return requireNonNull(constructor); + } + public BlockColorMap getWirelessTransmitter() { return wirelessTransmitter; } @@ -342,13 +392,13 @@ public BlockColorMap getRelay() { } public BlockColorMap setDiskInterface( - final BiFunction blockEntityFactory + final BlockEntityProvider provider ) { this.diskInterface = new BlockColorMap<>( (color, name) -> new DiskInterfaceBlock( color, name, - blockEntityFactory + provider ), ContentIds.DISK_INTERFACE, ContentNames.DISK_INTERFACE, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java index 59b762621..244b2b69f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java @@ -11,7 +11,7 @@ import com.refinedmods.refinedstorage.common.support.energy.BlockEntityEnergyStorage; import com.refinedmods.refinedstorage.common.support.energy.CreativeEnergyStorage; import com.refinedmods.refinedstorage.common.support.energy.ItemBlockEnergyStorage; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.google.common.util.concurrent.RateLimiter; import net.minecraft.core.BlockPos; @@ -30,7 +30,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ControllerBlockEntity extends BaseNetworkNodeContainerBlockEntity +public class ControllerBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, TransferableBlockEntityEnergy { private static final Logger LOGGER = LoggerFactory.getLogger(ControllerBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java index f603d125e..d1a015d74 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java @@ -15,7 +15,7 @@ import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; import com.refinedmods.refinedstorage.common.support.containermenu.SingleAmountData; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -37,7 +37,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class DetectorBlockEntity extends BaseNetworkNodeContainerBlockEntity +public class DetectorBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(DetectorBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java similarity index 96% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java index a48f6f378..8c965fd1b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java @@ -12,13 +12,13 @@ import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.content.Items; +import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.SchedulingModeContainer; import com.refinedmods.refinedstorage.common.support.SchedulingModeType; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; @@ -47,17 +47,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ExporterBlockEntity - extends BaseNetworkNodeContainerBlockEntity +public abstract class AbstractExporterBlockEntity + extends AbstractCableLikeBlockEntity implements AmountOverride, BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(ExporterBlockEntity.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractExporterBlockEntity.class); private static final String TAG_UPGRADES = "upgr"; private final UpgradeContainer upgradeContainer; private final FilterWithFuzzyMode filter; private final SchedulingModeContainer schedulingModeContainer; - public ExporterBlockEntity(final BlockPos pos, final BlockState state) { + protected AbstractExporterBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getExporter(), pos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java index 2358a778a..cea643d7a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalCableBlock; @@ -12,8 +13,8 @@ import com.refinedmods.refinedstorage.common.support.NetworkNodeBlockItem; import com.refinedmods.refinedstorage.common.support.network.NetworkNodeBlockEntityTicker; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; @@ -34,16 +35,22 @@ public class ExporterBlock extends AbstractDirectionalCableBlock implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "exporter.help"); - private static final Map SHAPE_CACHE = new HashMap<>(); - private static final AbstractBlockEntityTicker TICKER = - new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getExporter); + private static final Map SHAPE_CACHE = new ConcurrentHashMap<>(); + private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( + BlockEntities.INSTANCE::getExporter + ); + private final DyeColor color; private final MutableComponent name; + private final BlockEntityProvider blockEntityProvider; - public ExporterBlock(final DyeColor color, final MutableComponent name) { + public ExporterBlock(final DyeColor color, + final MutableComponent name, + final BlockEntityProvider blockEntityProvider) { super(SHAPE_CACHE); this.color = color; this.name = name; + this.blockEntityProvider = blockEntityProvider; } @Override @@ -53,7 +60,7 @@ public DyeColor getColor() { @Override public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { - return new ExporterBlockEntity(pos, state); + return blockEntityProvider.create(pos, state); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java index 6cbf19962..0952012e5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterContainerMenu.java @@ -18,7 +18,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class ExporterContainerMenu extends AbstractSimpleFilterContainerMenu { +public class ExporterContainerMenu extends AbstractSimpleFilterContainerMenu { private static final MutableComponent FILTER_HELP = createTranslation("gui", "exporter.filter_help"); public ExporterContainerMenu(final int syncId, @@ -36,7 +36,7 @@ public ExporterContainerMenu(final int syncId, ExporterContainerMenu(final int syncId, final Player player, - final ExporterBlockEntity exporter, + final AbstractExporterBlockEntity exporter, final ResourceContainer resourceContainer, final UpgradeContainer upgradeContainer) { super( @@ -58,7 +58,7 @@ protected void registerClientProperties() { } @Override - protected void registerServerProperties(final ExporterBlockEntity blockEntity) { + protected void registerServerProperties(final AbstractExporterBlockEntity blockEntity) { registerProperty(new ServerProperty<>( PropertyTypes.FUZZY_MODE, blockEntity::isFuzzyMode, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index 7686361ce..d77af1e98 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -17,7 +17,7 @@ import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import java.util.List; @@ -30,7 +30,7 @@ import static java.util.Objects.requireNonNull; public abstract class AbstractGridBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements Grid { protected AbstractGridBlockEntity(final BlockEntityType type, final BlockPos pos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java index cfd316d88..e8819a5a5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java @@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -34,7 +34,7 @@ import net.minecraft.world.level.block.state.BlockState; public class InterfaceBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_EXPORT_ITEMS = "ei"; private static final int EXPORT_SLOTS = 9; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java similarity index 96% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java index 3d12b80cb..6810e8538 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java @@ -11,12 +11,12 @@ import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.content.Items; +import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterModeSettings; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; @@ -46,17 +46,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ImporterBlockEntity - extends BaseNetworkNodeContainerBlockEntity +public abstract class AbstractImporterBlockEntity + extends AbstractCableLikeBlockEntity implements AmountOverride, NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { - private static final Logger LOGGER = LoggerFactory.getLogger(ImporterBlockEntity.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractImporterBlockEntity.class); private static final String TAG_FILTER_MODE = "fim"; private static final String TAG_UPGRADES = "upgr"; private final FilterWithFuzzyMode filter; private final UpgradeContainer upgradeContainer; - public ImporterBlockEntity(final BlockPos pos, final BlockState state) { + protected AbstractImporterBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getImporter(), pos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java index 979e08309..84e5e921e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalCableBlock; @@ -35,15 +36,21 @@ public class ImporterBlock extends AbstractDirectionalCableBlock implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "importer.help"); private static final Map SHAPE_CACHE = new HashMap<>(); - private static final AbstractBlockEntityTicker TICKER = - new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getImporter); + private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( + BlockEntities.INSTANCE::getImporter + ); + private final DyeColor color; private final MutableComponent name; + private final BlockEntityProvider blockEntityProvider; - public ImporterBlock(final DyeColor color, final MutableComponent name) { + public ImporterBlock(final DyeColor color, + final MutableComponent name, + final BlockEntityProvider blockEntityProvider) { super(SHAPE_CACHE); this.color = color; this.name = name; + this.blockEntityProvider = blockEntityProvider; } @Override @@ -53,7 +60,7 @@ public DyeColor getColor() { @Override public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { - return new ImporterBlockEntity(pos, state); + return blockEntityProvider.create(pos, state); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterContainerMenu.java index eabe0b571..217212c70 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterContainerMenu.java @@ -18,7 +18,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class ImporterContainerMenu extends AbstractSimpleFilterContainerMenu { +public class ImporterContainerMenu extends AbstractSimpleFilterContainerMenu { private static final MutableComponent FILTER_HELP = createTranslation("gui", "importer.filter_help"); public ImporterContainerMenu(final int syncId, @@ -36,7 +36,7 @@ public ImporterContainerMenu(final int syncId, ImporterContainerMenu(final int syncId, final Player player, - final ImporterBlockEntity importer, + final AbstractImporterBlockEntity importer, final ResourceContainer resourceContainer, final UpgradeContainer upgradeContainer) { super( @@ -58,7 +58,7 @@ protected void registerClientProperties() { } @Override - protected void registerServerProperties(final ImporterBlockEntity blockEntity) { + protected void registerServerProperties(final AbstractImporterBlockEntity blockEntity) { registerProperty(new ServerProperty<>( PropertyTypes.FILTER_MODE, blockEntity::getFilterMode, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java new file mode 100644 index 000000000..c9713d97b --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.common.networking; + +import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class AbstractCableBlockEntity extends AbstractCableLikeBlockEntity { + protected AbstractCableBlockEntity(final BlockPos pos, final BlockState state) { + super(BlockEntities.INSTANCE.getCable(), pos, state, new SimpleNetworkNode( + Platform.INSTANCE.getConfig().getCable().getEnergyUsage())); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableBlock.java index 0cb1547c1..9967ffb4d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableBlock.java @@ -1,20 +1,19 @@ package com.refinedmods.refinedstorage.common.networking; -import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.BlockConstants; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage.common.support.AbstractColoredBlock; import com.refinedmods.refinedstorage.common.support.BaseBlockItem; -import com.refinedmods.refinedstorage.common.support.CableBlockSupport; -import com.refinedmods.refinedstorage.common.support.CableShapeCacheKey; +import com.refinedmods.refinedstorage.common.support.CableShapes; import com.refinedmods.refinedstorage.common.support.ColorableBlock; import com.refinedmods.refinedstorage.common.support.NetworkNodeBlockItem; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.NetworkNodeBlockEntityTicker; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import javax.annotation.Nullable; @@ -22,8 +21,8 @@ import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.DyeColor; -import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -40,23 +39,31 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.pathfinder.PathComputationType; import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public class CableBlock extends AbstractColoredBlock implements ColorableBlock, SimpleWaterloggedBlock, EntityBlock { - private static final AbstractBlockEntityTicker> TICKER = - new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getCable); + private static final AbstractBlockEntityTicker TICKER = + new NetworkNodeBlockEntityTicker<>( + BlockEntities.INSTANCE::getCable + ); private static final Component HELP = createTranslation("item", "cable.help"); - public CableBlock(final DyeColor color, final MutableComponent name) { + private final BlockEntityProvider blockEntityProvider; + + public CableBlock(final DyeColor color, + final MutableComponent name, + final BlockEntityProvider blockEntityProvider) { super(BlockConstants.CABLE_PROPERTIES, color, name); + this.blockEntityProvider = blockEntityProvider; } @Override protected BlockState getDefaultState() { - return CableBlockSupport.getDefaultState(super.getDefaultState()); + return super.getDefaultState().setValue(BlockStateProperties.WATERLOGGED, false); } @Override @@ -72,13 +79,9 @@ public FluidState getFluidState(final BlockState state) { } @Override - public BlockState updateShape(final BlockState state, - final Direction direction, - final BlockState newState, - final LevelAccessor level, - final BlockPos pos, - final BlockPos posFrom) { - return CableBlockSupport.getState(state, level, pos, null); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(BlockStateProperties.WATERLOGGED); } @Override @@ -87,14 +90,23 @@ protected boolean isPathfindable(final BlockState state, final PathComputationTy } @Override - public BlockState getStateForPlacement(final BlockPlaceContext ctx) { - return CableBlockSupport.getState(defaultBlockState(), ctx.getLevel(), ctx.getClickedPos(), null); - } - - @Override - protected void createBlockStateDefinition(final StateDefinition.Builder builder) { - super.createBlockStateDefinition(builder); - CableBlockSupport.appendBlockStateProperties(builder); + protected BlockState updateShape(final BlockState state, + final Direction direction, + final BlockState neighborState, + final LevelAccessor level, + final BlockPos pos, + final BlockPos neighborPos) { + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof AbstractCableBlockEntity cable) { + cable.updateConnections(); + if (level instanceof ServerLevel serverLevel) { + PlatformUtil.sendBlockUpdateToClient(serverLevel, pos); + } + } + if (level.isClientSide()) { + Platform.INSTANCE.requestModelDataUpdateOnClient(level, pos, false); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); } @Override @@ -102,18 +114,31 @@ public VoxelShape getShape(final BlockState state, final BlockGetter world, final BlockPos pos, final CollisionContext context) { - final CableShapeCacheKey cacheKey = CableShapeCacheKey.of(state); - return CableBlockSupport.getShape(cacheKey); + final BlockEntity blockEntity = world.getBlockEntity(pos); + if (!(blockEntity instanceof AbstractCableBlockEntity cable)) { + return Shapes.block(); + } + final CableConnections connections = cable.getConnections(); + return CableShapes.getShape(connections); + } + + @Override + protected void onPlace(final BlockState state, + final Level level, + final BlockPos pos, + final BlockState oldState, + final boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof AbstractCableBlockEntity cable) { + cable.updateConnections(); + PlatformUtil.sendBlockUpdateToClient(level, pos); + } } @Override public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { - return new BaseNetworkNodeContainerBlockEntity<>( - BlockEntities.INSTANCE.getCable(), - pos, - state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getCable().getEnergyUsage()) - ); + return blockEntityProvider.create(pos, state); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableConnections.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableConnections.java new file mode 100644 index 000000000..eb3326552 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/CableConnections.java @@ -0,0 +1,28 @@ +package com.refinedmods.refinedstorage.common.networking; + +import net.minecraft.nbt.CompoundTag; + +public record CableConnections(boolean north, boolean east, boolean south, boolean west, boolean up, boolean down) { + public static final CableConnections NONE = new CableConnections(false, false, false, false, false, false); + + public static CableConnections fromTag(final CompoundTag tag) { + return new CableConnections( + tag.getBoolean("North"), + tag.getBoolean("East"), + tag.getBoolean("South"), + tag.getBoolean("West"), + tag.getBoolean("Up"), + tag.getBoolean("Down") + ); + } + + public CompoundTag writeToTag(final CompoundTag tag) { + tag.putBoolean("North", north); + tag.putBoolean("East", east); + tag.putBoolean("South", south); + tag.putBoolean("West", west); + tag.putBoolean("Up", up); + tag.putBoolean("Down", down); + return tag; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java index e72366361..aa2baaacd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java @@ -5,7 +5,7 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.content.BlockEntities; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import net.minecraft.core.BlockPos; @@ -14,7 +14,7 @@ import static java.util.Objects.requireNonNull; -public class NetworkReceiverBlockEntity extends BaseNetworkNodeContainerBlockEntity { +public class NetworkReceiverBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity { public NetworkReceiverBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getNetworkReceiver(), diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java index cc2750a09..94aa9c36e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java @@ -11,7 +11,7 @@ import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -39,7 +39,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public class NetworkTransmitterBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final Logger LOGGER = LoggerFactory.getLogger(NetworkTransmitterBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java index 0cf879b3e..8abe94277 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java @@ -16,7 +16,7 @@ import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.RedstoneMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -39,7 +39,7 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; import static java.util.Objects.requireNonNull; -public class RelayBlockEntity extends BaseNetworkNodeContainerBlockEntity +public class RelayBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final String TAG_PASS_THROUGH = "passthrough"; private static final String TAG_PASS_ENERGY = "passenergy"; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index bfcfcebd6..e8cbe5521 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -9,7 +9,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -32,7 +32,7 @@ import net.minecraft.world.level.block.state.BlockState; public class WirelessTransmitterBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, BlockEntityWithDrops { private static final String TAG_UPGRADES = "upgr"; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java index f64970926..4e159a466 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java @@ -13,7 +13,7 @@ import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilteredContainer; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.NetworkNodeContainerProviderImpl; import com.refinedmods.refinedstorage.common.util.ContainerUtil; @@ -32,7 +32,7 @@ import net.minecraft.world.level.block.state.BlockState; public class SecurityManagerBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops, NetworkNodeMenuProvider { static final int CARD_AMOUNT = 18; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java index 492d58068..a309e4a6a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractDiskContainerBlockEntity.java @@ -2,16 +2,18 @@ import com.refinedmods.refinedstorage.api.network.impl.node.AbstractStorageContainerNetworkNode; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.FilteredContainer; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.util.ContainerUtil; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import java.util.Set; import java.util.function.UnaryOperator; @@ -34,7 +36,7 @@ import net.minecraft.world.level.block.state.BlockState; public abstract class AbstractDiskContainerBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements BlockEntityWithDrops, NetworkNodeExtendedMenuProvider { private static final String TAG_DISK_INVENTORY = "inv"; private static final String TAG_DISKS = "disks"; @@ -66,7 +68,7 @@ protected void containerInitialized() { super.containerInitialized(); // It's important to sync here as the initial update packet might have failed as the network // could possibly be not initialized yet. - diskStateListener.immediateUpdate(); + PlatformUtil.sendBlockUpdateToClient(level, worldPosition); } protected abstract void setFilters(Set filters); @@ -125,7 +127,7 @@ private void initialize(final Level level) { @Override public void activenessChanged(final boolean newActive) { super.activenessChanged(newActive); - diskStateListener.immediateUpdate(); + PlatformUtil.sendBlockUpdateToClient(level, worldPosition); } @Override @@ -168,7 +170,7 @@ private void onDiskChanged(final int slot) { return; } mainNetworkNode.onStorageChanged(slot); - diskStateListener.immediateUpdate(); + PlatformUtil.sendBlockUpdateToClient(level, worldPosition); setChanged(); } @@ -181,7 +183,10 @@ private void fromClientTag(final CompoundTag tag) { } protected void onClientDriveStateUpdated() { - diskStateListener.immediateUpdate(); + if (level == null) { + return; + } + Platform.INSTANCE.requestModelDataUpdateOnClient(level, worldPosition, true); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/DiskStateChangeListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/DiskStateChangeListener.java index 2661a9c43..8bb88900c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/DiskStateChangeListener.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/DiskStateChangeListener.java @@ -1,10 +1,9 @@ package com.refinedmods.refinedstorage.common.storage; import com.refinedmods.refinedstorage.api.storage.StateTrackedStorage; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import com.google.common.util.concurrent.RateLimiter; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -35,19 +34,6 @@ public void updateIfNecessary() { } LOGGER.debug("Disk state change for block at {}", blockEntity.getBlockPos()); syncRequested = false; - immediateUpdate(); - } - - public void immediateUpdate() { - final Level level = blockEntity.getLevel(); - if (level == null) { - return; - } - level.sendBlockUpdated( - blockEntity.getBlockPos(), - blockEntity.getBlockState(), - blockEntity.getBlockState(), - Block.UPDATE_ALL - ); + PlatformUtil.sendBlockUpdateToClient(blockEntity.getLevel(), blockEntity.getBlockPos()); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageContainerUpgradeRecipeSerializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageContainerUpgradeRecipeSerializer.java index 0f0af81d0..a7daeea3e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageContainerUpgradeRecipeSerializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageContainerUpgradeRecipeSerializer.java @@ -9,7 +9,7 @@ import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.crafting.RecipeSerializer; -import static com.refinedmods.refinedstorage.common.util.PacketUtil.enumStreamCodec; +import static com.refinedmods.refinedstorage.common.util.PlatformUtil.enumStreamCodec; public class StorageContainerUpgradeRecipeSerializer & StorageVariant & StringRepresentable> implements RecipeSerializer> { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/DiskDriveBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/DiskDriveBlock.java index cbf567f88..9980e95e6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/DiskDriveBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/DiskDriveBlock.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.storage.StorageNetworkNode; import com.refinedmods.refinedstorage.common.content.BlockConstants; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.storage.DiskContainerBlockEntityTicker; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.NetworkNodeBlockItem; @@ -10,8 +11,6 @@ import com.refinedmods.refinedstorage.common.support.direction.BiDirectionType; import com.refinedmods.refinedstorage.common.support.direction.DirectionType; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.world.item.BlockItem; @@ -29,11 +28,11 @@ public class DiskDriveBlock extends AbstractDirectionalBlock implem private static final DiskContainerBlockEntityTicker TICKER = new DiskContainerBlockEntityTicker<>(BlockEntities.INSTANCE::getDiskDrive); - private final BiFunction blockEntityFactory; + private final BlockEntityProvider blockEntityProvider; - public DiskDriveBlock(final BiFunction blockEntityFactory) { + public DiskDriveBlock(final BlockEntityProvider blockEntityProvider) { super(BlockConstants.PROPERTIES); - this.blockEntityFactory = blockEntityFactory; + this.blockEntityProvider = blockEntityProvider; } @Override @@ -43,7 +42,7 @@ protected DirectionType getDirectionType() { @Override public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { - return blockEntityFactory.apply(pos, state); + return blockEntityProvider.create(pos, state); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceBlock.java index 83f1f66eb..515e41255 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceBlock.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.BlockConstants; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.storage.DiskContainerBlockEntityTicker; import com.refinedmods.refinedstorage.common.support.AbstractActiveColoredDirectionalBlock; @@ -14,7 +15,6 @@ import com.refinedmods.refinedstorage.common.support.direction.BiDirectionType; import com.refinedmods.refinedstorage.common.support.direction.DirectionType; -import java.util.function.BiFunction; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; @@ -37,14 +37,13 @@ public class DiskInterfaceBlock private static final DiskContainerBlockEntityTicker TICKER = new DiskContainerBlockEntityTicker<>(BlockEntities.INSTANCE::getDiskInterface, ACTIVE); - private final BiFunction blockEntityFactory; + private final BlockEntityProvider blockEntityProvider; public DiskInterfaceBlock(final DyeColor color, final MutableComponent name, - final BiFunction - blockEntityFactory) { + final BlockEntityProvider blockEntityProvider) { super(BlockConstants.PROPERTIES, color, name); - this.blockEntityFactory = blockEntityFactory; + this.blockEntityProvider = blockEntityProvider; } @Override @@ -63,7 +62,7 @@ public BlockEntityTicker getTicker(final Level level, @Nullable @Override public BlockEntity newBlockEntity(final BlockPos blockPos, final BlockState blockState) { - return blockEntityFactory.apply(blockPos, blockState); + return blockEntityProvider.create(blockPos, blockState); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java similarity index 95% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java index 6e08ed04f..91305e649 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java @@ -6,10 +6,10 @@ import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.storage.StorageConfigurationContainerImpl; +import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -33,10 +33,10 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; import static java.util.Objects.requireNonNull; -public class ExternalStorageBlockEntity - extends BaseNetworkNodeContainerBlockEntity +public abstract class AbstractExternalStorageBlockEntity + extends AbstractCableLikeBlockEntity implements NetworkNodeExtendedMenuProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(ExternalStorageBlockEntity.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractExternalStorageBlockEntity.class); private static final String TAG_TRACKED_RESOURCES = "tr"; private final FilterWithFuzzyMode filter; @@ -46,7 +46,7 @@ public class ExternalStorageBlockEntity private final ExternalStorageWorkRate workRate = new ExternalStorageWorkRate(); private boolean initialized; - public ExternalStorageBlockEntity(final BlockPos pos, final BlockState state) { + protected AbstractExternalStorageBlockEntity(final BlockPos pos, final BlockState state) { super(BlockEntities.INSTANCE.getExternalStorage(), pos, state, new ExternalStorageNetworkNode( Platform.INSTANCE.getConfig().getExternalStorage().getEnergyUsage(), System::currentTimeMillis diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlock.java index 73c7a47aa..6d0c9cab5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageBlock.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.support.AbstractBlockEntityTicker; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalCableBlock; @@ -39,17 +40,21 @@ public class ExternalStorageBlock extends AbstractDirectionalCableBlock implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "external_storage.help"); private static final Map SHAPE_CACHE = new HashMap<>(); - private static final AbstractBlockEntityTicker TICKER = + private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getExternalStorage); private static final Logger LOGGER = LoggerFactory.getLogger(ExternalStorageBlock.class); private final DyeColor color; private final MutableComponent name; + private final BlockEntityProvider blockEntityProvider; - public ExternalStorageBlock(final DyeColor color, final MutableComponent name) { + public ExternalStorageBlock(final DyeColor color, + final MutableComponent name, + final BlockEntityProvider blockEntityProvider) { super(SHAPE_CACHE); this.color = color; this.name = name; + this.blockEntityProvider = blockEntityProvider; } @Override @@ -59,7 +64,7 @@ public DyeColor getColor() { @Override public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { - return new ExternalStorageBlockEntity(pos, state); + return blockEntityProvider.create(pos, state); } @Nullable @@ -79,7 +84,7 @@ public void neighborChanged(final BlockState state, final boolean moving) { super.neighborChanged(state, level, pos, block, fromPos, moving); if (level instanceof ServerLevel serverLevel - && level.getBlockEntity(pos) instanceof ExternalStorageBlockEntity blockEntity) { + && level.getBlockEntity(pos) instanceof AbstractExternalStorageBlockEntity blockEntity) { LOGGER.debug("External storage neighbor has changed, reloading {}", pos); blockEntity.loadStorage(serverLevel); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java index f6813186f..1a2fb7077 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/AbstractPortableGridBlockEntity.java @@ -22,6 +22,7 @@ import com.refinedmods.refinedstorage.common.support.energy.CreativeEnergyStorage; import com.refinedmods.refinedstorage.common.support.energy.ItemBlockEnergyStorage; import com.refinedmods.refinedstorage.common.util.ContainerUtil; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import java.util.Optional; import javax.annotation.Nullable; @@ -146,7 +147,7 @@ private void onDiskChanged() { return; } grid.updateStorage(); - diskStateListener.immediateUpdate(); + PlatformUtil.sendBlockUpdateToClient(level, worldPosition); setChanged(); } @@ -191,7 +192,10 @@ private void fromClientTag(final CompoundTag tag) { } protected void onClientDriveStateUpdated() { - diskStateListener.immediateUpdate(); + if (level == null) { + return; + } + Platform.INSTANCE.requestModelDataUpdateOnClient(level, worldPosition, true); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlock.java index e855c833a..ee7a2f803 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGridBlock.java @@ -2,13 +2,12 @@ import com.refinedmods.refinedstorage.common.content.BlockConstants; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.direction.BiDirection; import com.refinedmods.refinedstorage.common.support.direction.BiDirectionType; import com.refinedmods.refinedstorage.common.support.direction.DirectionType; -import java.util.function.BiFunction; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -33,15 +32,15 @@ public class PortableGridBlock extends AbstractDirectionalBlock imp private static final VoxelShape SHAPE_VERTICAL_WEST = box(16 - 13.2, 0, 0, 16, 16, 16); private final PortableGridBlockEntityTicker ticker; - private final BiFunction blockEntityFactory; + private final BlockEntityProvider blockEntityProvider; public PortableGridBlock(final PortableGridType type, - final BiFunction factory) { + final BlockEntityProvider blockEntityProvider) { super(BlockConstants.PROPERTIES); this.ticker = new PortableGridBlockEntityTicker(() -> type == PortableGridType.NORMAL ? BlockEntities.INSTANCE.getPortableGrid() : BlockEntities.INSTANCE.getCreativePortableGrid()); - this.blockEntityFactory = factory; + this.blockEntityProvider = blockEntityProvider; } @Override @@ -80,7 +79,7 @@ public VoxelShape getShape(final BlockState state, @Override public BlockEntity newBlockEntity(final BlockPos blockPos, final BlockState blockState) { - return blockEntityFactory.apply(blockPos, blockState); + return blockEntityProvider.create(blockPos, blockState); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java index 563d33735..df59512f3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/AbstractStorageBlockBlockEntity.java @@ -12,7 +12,7 @@ import com.refinedmods.refinedstorage.common.storage.StorageConfigurationContainerImpl; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; @@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory; abstract class AbstractStorageBlockBlockEntity - extends BaseNetworkNodeContainerBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider, StorageBlockEntity, AbstractStorageContainerNetworkNode.Provider { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractStorageBlockBlockEntity.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index 56165e53a..0fc90d92d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -15,10 +15,11 @@ import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.FilterWithFuzzyMode; import com.refinedmods.refinedstorage.common.support.containermenu.NetworkNodeExtendedMenuProvider; -import com.refinedmods.refinedstorage.common.support.network.BaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import javax.annotation.Nullable; @@ -38,12 +39,11 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class StorageMonitorBlockEntity extends BaseNetworkNodeContainerBlockEntity +public class StorageMonitorBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(StorageMonitorBlockEntity.class); @@ -328,8 +328,8 @@ private void sendDisplayUpdate() { private void sendDisplayUpdate(final Level level, final long amount, final boolean active) { currentAmount = amount; currentlyActive = active; - level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL); LOGGER.debug("Sending display update for storage monitor {} with amount {}", worldPosition, amount); + PlatformUtil.sendBlockUpdateToClient(level, worldPosition); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractCableLikeBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractCableLikeBlockEntity.java new file mode 100644 index 000000000..f8f601ccf --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractCableLikeBlockEntity.java @@ -0,0 +1,118 @@ +package com.refinedmods.refinedstorage.common.support; + +import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; +import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.api.support.network.NetworkNodeContainerProvider; +import com.refinedmods.refinedstorage.common.networking.CableConnections; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; + +public abstract class AbstractCableLikeBlockEntity + extends AbstractBaseNetworkNodeContainerBlockEntity { + protected CableConnections connections = CableConnections.NONE; + + protected AbstractCableLikeBlockEntity(final BlockEntityType type, + final BlockPos pos, + final BlockState state, + final T networkNode) { + super(type, pos, state, networkNode); + } + + @Override + public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + connections.writeToTag(tag); + } + + @Override + public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.loadAdditional(tag, provider); + connections = CableConnections.fromTag(tag); + if (level != null && level.isClientSide()) { + Platform.INSTANCE.requestModelDataUpdateOnClient(level, getBlockPos(), true); + } + } + + public final void updateConnections() { + this.connections = computeConnections(level, getBlockState(), worldPosition); + setChanged(); + } + + @Override + public Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public CompoundTag getUpdateTag(final HolderLookup.Provider provider) { + return connections.writeToTag(new CompoundTag()); + } + + public CableConnections getConnections() { + return connections; + } + + private static CableConnections computeConnections(@Nullable final Level level, + final BlockState state, + final BlockPos pos) { + if (level == null) { + return CableConnections.NONE; + } + final Direction myDirection = tryExtractDirection(state); + final boolean north = hasVisualConnection(state, level, pos, Direction.NORTH, myDirection); + final boolean east = hasVisualConnection(state, level, pos, Direction.EAST, myDirection); + final boolean south = hasVisualConnection(state, level, pos, Direction.SOUTH, myDirection); + final boolean west = hasVisualConnection(state, level, pos, Direction.WEST, myDirection); + final boolean up = hasVisualConnection(state, level, pos, Direction.UP, myDirection); + final boolean down = hasVisualConnection(state, level, pos, Direction.DOWN, myDirection); + return new CableConnections(north, east, south, west, up, down); + } + + private static boolean hasVisualConnection( + final BlockState blockState, + final Level level, + final BlockPos pos, + final Direction direction, + @Nullable final Direction blacklistedDirection + ) { + if (direction == blacklistedDirection) { + return false; + } + final BlockPos offsetPos = pos.relative(direction); + final NetworkNodeContainerProvider neighbor = Platform.INSTANCE.getContainerProvider( + level, + offsetPos, + direction.getOpposite() + ); + if (neighbor == null) { + return false; + } + return neighbor.getContainers() + .stream() + .anyMatch(container -> container.canAcceptIncomingConnection(direction.getOpposite(), blockState)); + } + + @Override + public void setBlockState(final BlockState newBlockState) { + super.setBlockState(newBlockState); + if (level != null && !level.isClientSide()) { + updateConnections(); + PlatformUtil.sendBlockUpdateToClient(level, getBlockPos()); + } + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java index d93d5f958..385ffed9e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalBlock.java @@ -46,7 +46,6 @@ public BlockState getStateForPlacement(final BlockPlaceContext ctx) { } @Override - @SuppressWarnings("deprecation") public BlockState rotate(final BlockState state, final Rotation rotation) { final EnumProperty directionProperty = getDirectionType().getProperty(); final T currentDirection = state.getValue(directionProperty); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalCableBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalCableBlock.java index ad11b4043..87c3f585e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalCableBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractDirectionalCableBlock.java @@ -1,21 +1,24 @@ package com.refinedmods.refinedstorage.common.support; +import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.content.BlockConstants; +import com.refinedmods.refinedstorage.common.networking.CableConnections; import com.refinedmods.refinedstorage.common.support.direction.DefaultDirectionType; import com.refinedmods.refinedstorage.common.support.direction.DirectionType; +import com.refinedmods.refinedstorage.common.util.PlatformUtil; import java.util.Map; -import java.util.Objects; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -26,8 +29,7 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -public abstract class AbstractDirectionalCableBlock - extends AbstractDirectionalBlock +public abstract class AbstractDirectionalCableBlock extends AbstractDirectionalBlock implements SimpleWaterloggedBlock { private final Map shapeCache; @@ -43,7 +45,7 @@ protected DirectionType getDirectionType() { @Override protected BlockState getDefaultState() { - return CableBlockSupport.getDefaultState(super.getDefaultState()); + return super.getDefaultState().setValue(BlockStateProperties.WATERLOGGED, false); } @Override @@ -59,19 +61,9 @@ public FluidState getFluidState(final BlockState state) { } @Override - public BlockState updateShape(final BlockState state, - final Direction direction, - final BlockState newState, - final LevelAccessor level, - final BlockPos pos, - final BlockPos posFrom) { - return CableBlockSupport.getState(state, level, pos, getDirection(state)); - } - - @Override - protected BlockState getRotatedBlockState(final BlockState state, final Level level, final BlockPos pos) { - final BlockState rotated = super.getRotatedBlockState(state, level, pos); - return CableBlockSupport.getState(rotated, level, pos, getDirection(rotated)); + protected void createBlockStateDefinition(final StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(BlockStateProperties.WATERLOGGED); } @Override @@ -80,21 +72,23 @@ protected boolean isPathfindable(final BlockState state, final PathComputationTy } @Override - public BlockState getStateForPlacement(final BlockPlaceContext ctx) { - final BlockState stateWithDirection = Objects.requireNonNull(super.getStateForPlacement(ctx)); - final Direction direction = getDirection(stateWithDirection); - return CableBlockSupport.getState( - stateWithDirection, - ctx.getLevel(), - ctx.getClickedPos(), - direction - ); - } - - @Override - protected void createBlockStateDefinition(final StateDefinition.Builder builder) { - super.createBlockStateDefinition(builder); - CableBlockSupport.appendBlockStateProperties(builder); + protected BlockState updateShape(final BlockState state, + final Direction direction, + final BlockState neighborState, + final LevelAccessor level, + final BlockPos pos, + final BlockPos neighborPos) { + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof AbstractCableLikeBlockEntity cable) { + cable.updateConnections(); + if (level instanceof ServerLevel serverLevel) { + PlatformUtil.sendBlockUpdateToClient(serverLevel, pos); + } + } + if (level.isClientSide()) { + Platform.INSTANCE.requestModelDataUpdateOnClient(level, pos, false); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); } @Override @@ -102,25 +96,43 @@ public VoxelShape getShape(final BlockState state, final BlockGetter world, final BlockPos pos, final CollisionContext context) { - final CableShapeCacheKey cableShapeCacheKey = CableShapeCacheKey.of(state); + final BlockEntity blockEntity = world.getBlockEntity(pos); + if (!(blockEntity instanceof AbstractCableLikeBlockEntity cable)) { + return Shapes.block(); + } + final CableConnections connections = cable.getConnections(); final Direction direction = getDirection(state); if (direction == null) { - return CableBlockSupport.getShape(cableShapeCacheKey); + return CableShapes.getShape(connections); } - final DirectionalCacheShapeCacheKey directionalCacheShapeCacheKey = new DirectionalCacheShapeCacheKey( - cableShapeCacheKey, + final DirectionalCacheShapeCacheKey directionalCacheKey = new DirectionalCacheShapeCacheKey( + connections, direction ); - return shapeCache.computeIfAbsent(directionalCacheShapeCacheKey, this::calculateShape); + return shapeCache.computeIfAbsent(directionalCacheKey, this::computeShape); } - private VoxelShape calculateShape(final DirectionalCacheShapeCacheKey cacheKey) { + private VoxelShape computeShape(final DirectionalCacheShapeCacheKey cacheKey) { return Shapes.or( - CableBlockSupport.getShape(cacheKey.cableShapeCacheKey), + CableShapes.getShape(cacheKey.connections), getExtensionShape(cacheKey.direction) ); } + @Override + protected void onPlace(final BlockState state, + final Level level, + final BlockPos pos, + final BlockState oldState, + final boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof AbstractCableLikeBlockEntity cable) { + cable.updateConnections(); + PlatformUtil.sendBlockUpdateToClient(level, pos); + } + } + @Override @Nullable protected VoxelShape getScreenOpenableShape(final BlockState state) { @@ -133,6 +145,6 @@ protected VoxelShape getScreenOpenableShape(final BlockState state) { protected abstract VoxelShape getExtensionShape(Direction direction); - protected record DirectionalCacheShapeCacheKey(CableShapeCacheKey cableShapeCacheKey, Direction direction) { + protected record DirectionalCacheShapeCacheKey(CableConnections connections, Direction direction) { } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableBlockSupport.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableBlockSupport.java deleted file mode 100644 index 9fcb94357..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableBlockSupport.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.refinedmods.refinedstorage.common.support; - -import com.refinedmods.refinedstorage.common.Platform; -import com.refinedmods.refinedstorage.common.api.support.network.NetworkNodeContainerProvider; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Nullable; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.phys.shapes.Shapes; -import net.minecraft.world.phys.shapes.VoxelShape; - -import static net.minecraft.world.level.block.Block.box; - -public final class CableBlockSupport { - public static final BooleanProperty NORTH = BooleanProperty.create("north"); - public static final BooleanProperty EAST = BooleanProperty.create("east"); - public static final BooleanProperty SOUTH = BooleanProperty.create("south"); - public static final BooleanProperty WEST = BooleanProperty.create("west"); - public static final BooleanProperty UP = BooleanProperty.create("up"); - public static final BooleanProperty DOWN = BooleanProperty.create("down"); - - private static final VoxelShape SHAPE_CORE = box(6, 6, 6, 10, 10, 10); - private static final VoxelShape SHAPE_NORTH = box(6, 6, 0, 10, 10, 6); - private static final VoxelShape SHAPE_EAST = box(10, 6, 6, 16, 10, 10); - private static final VoxelShape SHAPE_SOUTH = box(6, 6, 10, 10, 10, 16); - private static final VoxelShape SHAPE_WEST = box(0, 6, 6, 6, 10, 10); - private static final VoxelShape SHAPE_UP = box(6, 10, 6, 10, 16, 10); - private static final VoxelShape SHAPE_DOWN = box(6, 0, 6, 10, 6, 10); - private static final Map SHAPE_CACHE = new HashMap<>(); - - private CableBlockSupport() { - } - - public static BlockState getDefaultState(final BlockState state) { - return state - .setValue(NORTH, false) - .setValue(EAST, false) - .setValue(SOUTH, false) - .setValue(WEST, false) - .setValue(UP, false) - .setValue(DOWN, false) - .setValue(BlockStateProperties.WATERLOGGED, false); - } - - public static void appendBlockStateProperties(final StateDefinition.Builder builder) { - builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, BlockStateProperties.WATERLOGGED); - } - - public static VoxelShape getShape(final CableShapeCacheKey cacheKey) { - return SHAPE_CACHE.computeIfAbsent(cacheKey, CableBlockSupport::calculateShape); - } - - private static VoxelShape calculateShape(final CableShapeCacheKey cacheKey) { - VoxelShape shape = SHAPE_CORE; - if (cacheKey.north()) { - shape = Shapes.or(shape, SHAPE_NORTH); - } - if (cacheKey.east()) { - shape = Shapes.or(shape, SHAPE_EAST); - } - if (cacheKey.south()) { - shape = Shapes.or(shape, SHAPE_SOUTH); - } - if (cacheKey.west()) { - shape = Shapes.or(shape, SHAPE_WEST); - } - if (cacheKey.up()) { - shape = Shapes.or(shape, SHAPE_UP); - } - if (cacheKey.down()) { - shape = Shapes.or(shape, SHAPE_DOWN); - } - return shape; - } - - public static BlockState getState( - final BlockState currentState, - final LevelAccessor levelAccessor, - final BlockPos pos, - @Nullable final Direction blacklistedDirection - ) { - if (!(levelAccessor instanceof Level level)) { - return currentState; - } - - final boolean north = hasVisualConnection(currentState, level, pos, Direction.NORTH, blacklistedDirection); - final boolean east = hasVisualConnection(currentState, level, pos, Direction.EAST, blacklistedDirection); - final boolean south = hasVisualConnection(currentState, level, pos, Direction.SOUTH, blacklistedDirection); - final boolean west = hasVisualConnection(currentState, level, pos, Direction.WEST, blacklistedDirection); - final boolean up = hasVisualConnection(currentState, level, pos, Direction.UP, blacklistedDirection); - final boolean down = hasVisualConnection(currentState, level, pos, Direction.DOWN, blacklistedDirection); - - return currentState - .setValue(NORTH, north) - .setValue(EAST, east) - .setValue(SOUTH, south) - .setValue(WEST, west) - .setValue(UP, up) - .setValue(DOWN, down); - } - - private static boolean hasVisualConnection( - final BlockState blockState, - final Level level, - final BlockPos pos, - final Direction direction, - @Nullable final Direction blacklistedDirection - ) { - if (direction == blacklistedDirection) { - return false; - } - final BlockPos offsetPos = pos.relative(direction); - final NetworkNodeContainerProvider neighbor = Platform.INSTANCE.getContainerProvider( - level, - offsetPos, - direction.getOpposite() - ); - if (neighbor == null) { - return false; - } - return neighbor.getContainers() - .stream() - .anyMatch(container -> container.canAcceptIncomingConnection(direction.getOpposite(), blockState)); - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapeCacheKey.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapeCacheKey.java deleted file mode 100644 index b3f456736..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapeCacheKey.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.refinedmods.refinedstorage.common.support; - -import net.minecraft.world.level.block.state.BlockState; - -public record CableShapeCacheKey(boolean north, boolean east, boolean south, boolean west, boolean up, boolean down) { - public static CableShapeCacheKey of(final BlockState state) { - return new CableShapeCacheKey( - state.getValue(CableBlockSupport.NORTH), - state.getValue(CableBlockSupport.EAST), - state.getValue(CableBlockSupport.SOUTH), - state.getValue(CableBlockSupport.WEST), - state.getValue(CableBlockSupport.UP), - state.getValue(CableBlockSupport.DOWN) - ); - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapes.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapes.java new file mode 100644 index 000000000..f16bbc602 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/CableShapes.java @@ -0,0 +1,52 @@ +package com.refinedmods.refinedstorage.common.support; + +import com.refinedmods.refinedstorage.common.networking.CableConnections; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +import static net.minecraft.world.level.block.Block.box; + +public final class CableShapes { + private static final VoxelShape CORE = box(6, 6, 6, 10, 10, 10); + private static final VoxelShape NORTH = box(6, 6, 0, 10, 10, 6); + private static final VoxelShape EAST = box(10, 6, 6, 16, 10, 10); + private static final VoxelShape SOUTH = box(6, 6, 10, 10, 10, 16); + private static final VoxelShape WEST = box(0, 6, 6, 6, 10, 10); + private static final VoxelShape UP = box(6, 10, 6, 10, 16, 10); + private static final VoxelShape DOWN = box(6, 0, 6, 10, 6, 10); + private static final Map CACHE = new HashMap<>(); + + private CableShapes() { + } + + public static VoxelShape getShape(final CableConnections connections) { + return CACHE.computeIfAbsent(connections, CableShapes::computeShape); + } + + private static VoxelShape computeShape(final CableConnections connections) { + VoxelShape shape = CORE; + if (connections.north()) { + shape = Shapes.or(shape, NORTH); + } + if (connections.east()) { + shape = Shapes.or(shape, EAST); + } + if (connections.south()) { + shape = Shapes.or(shape, SOUTH); + } + if (connections.west()) { + shape = Shapes.or(shape, WEST); + } + if (connections.up()) { + shape = Shapes.or(shape, UP); + } + if (connections.down()) { + shape = Shapes.or(shape, DOWN); + } + return shape; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/direction/BiDirection.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/direction/BiDirection.java index fa9e42996..47773c6a1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/direction/BiDirection.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/direction/BiDirection.java @@ -38,6 +38,17 @@ public enum BiDirection implements StringRepresentable { this.direction = direction; } + public static BiDirection forDirection(final Direction direction) { + return switch (direction) { + case NORTH -> NORTH; + case EAST -> EAST; + case SOUTH -> SOUTH; + case WEST -> WEST; + case UP -> UP_NORTH; + case DOWN -> DOWN_NORTH; + }; + } + public static BiDirection forHorizontal(final Direction horizontalDirection) { return switch (horizontalDirection) { case NORTH -> NORTH; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java similarity index 95% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java index dd4ddcaac..7266dae54 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/BaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java @@ -38,10 +38,10 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; -public class BaseNetworkNodeContainerBlockEntity +public abstract class AbstractBaseNetworkNodeContainerBlockEntity extends AbstractNetworkNodeContainerBlockEntity implements NetworkItemTargetBlockEntity, ConfigurationCardTarget, PlayerAwareBlockEntity { - private static final Logger LOGGER = LoggerFactory.getLogger(BaseNetworkNodeContainerBlockEntity.class); + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractBaseNetworkNodeContainerBlockEntity.class); private static final String TAG_CUSTOM_NAME = "CustomName"; private static final String TAG_PLACED_BY_PLAYER_ID = "pbpid"; private static final String TAG_REDSTONE_MODE = "rm"; @@ -56,10 +56,10 @@ public class BaseNetworkNodeContainerBlockEntity private UUID placedByPlayerId; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - public BaseNetworkNodeContainerBlockEntity(final BlockEntityType type, - final BlockPos pos, - final BlockState state, - final T networkNode) { + protected AbstractBaseNetworkNodeContainerBlockEntity(final BlockEntityType type, + final BlockPos pos, + final BlockState state, + final T networkNode) { super(type, pos, state, networkNode); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeBlockEntityTicker.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeBlockEntityTicker.java index 331b9381d..707dbce2b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeBlockEntityTicker.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/NetworkNodeBlockEntityTicker.java @@ -14,7 +14,7 @@ public class NetworkNodeBlockEntityTicker< N extends AbstractNetworkNode, - T extends BaseNetworkNodeContainerBlockEntity + T extends AbstractBaseNetworkNodeContainerBlockEntity > extends AbstractBlockEntityTicker { @Nullable private final BooleanProperty activenessProperty; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridExtractPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridExtractPacket.java index f8347bd17..96f2a55ba 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridExtractPacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridExtractPacket.java @@ -12,7 +12,7 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; -import static com.refinedmods.refinedstorage.common.util.PacketUtil.enumStreamCodec; +import static com.refinedmods.refinedstorage.common.util.PlatformUtil.enumStreamCodec; public record GridExtractPacket( PlatformResourceKey resource, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridInsertPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridInsertPacket.java index d987e14fc..dd65b1886 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridInsertPacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridInsertPacket.java @@ -10,7 +10,7 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; -import static com.refinedmods.refinedstorage.common.util.PacketUtil.enumStreamCodec; +import static com.refinedmods.refinedstorage.common.util.PlatformUtil.enumStreamCodec; public record GridInsertPacket(GridInsertMode mode, boolean tryAlternatives) implements CustomPacketPayload { public static final Type PACKET_TYPE = new Type<>(createIdentifier("grid_insert")); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridScrollPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridScrollPacket.java index af502a242..1f39b4cf6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridScrollPacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/GridScrollPacket.java @@ -12,7 +12,7 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; -import static com.refinedmods.refinedstorage.common.util.PacketUtil.enumStreamCodec; +import static com.refinedmods.refinedstorage.common.util.PlatformUtil.enumStreamCodec; public record GridScrollPacket( PlatformResourceKey resource, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PacketUtil.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PacketUtil.java deleted file mode 100644 index 286e4d22d..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PacketUtil.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.refinedmods.refinedstorage.common.util; - -import io.netty.buffer.ByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; - -public final class PacketUtil { - private PacketUtil() { - } - - public static > StreamCodec enumStreamCodec(final T[] values) { - return ByteBufCodecs.idMapper(id -> id < 0 || id >= values.length ? values[0] : values[id], Enum::ordinal); - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PlatformUtil.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PlatformUtil.java new file mode 100644 index 000000000..b3c138a20 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/PlatformUtil.java @@ -0,0 +1,29 @@ +package com.refinedmods.refinedstorage.common.util; + +import javax.annotation.Nullable; + +import io.netty.buffer.ByteBuf; +import net.minecraft.core.BlockPos; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; + +public final class PlatformUtil { + private PlatformUtil() { + } + + public static > StreamCodec enumStreamCodec(final T[] values) { + return ByteBufCodecs.idMapper(id -> id < 0 || id >= values.length ? values[0] : values[id], Enum::ordinal); + } + + public static void sendBlockUpdateToClient(@Nullable final Level level, final BlockPos pos) { + if (level == null) { + return; + } + if (level.isClientSide()) { + throw new IllegalArgumentException("Cannot send block update to client from client"); + } + level.sendBlockUpdated(pos, level.getBlockState(pos), level.getBlockState(pos), Block.UPDATE_ALL); + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index 9dbd105d8..62e4b49af 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -38,6 +38,7 @@ import com.refinedmods.refinedstorage.common.util.IdentifierUtil; import com.refinedmods.refinedstorage.fabric.autocrafting.PatternUnbakedModel; import com.refinedmods.refinedstorage.fabric.mixin.ItemPropertiesAccessor; +import com.refinedmods.refinedstorage.fabric.networking.CableUnbakedModel; import com.refinedmods.refinedstorage.fabric.storage.diskdrive.DiskDriveBlockEntityRendererImpl; import com.refinedmods.refinedstorage.fabric.storage.diskdrive.DiskDriveUnbakedModel; import com.refinedmods.refinedstorage.fabric.storage.diskinterface.DiskInterfaceBlockEntityRendererImpl; @@ -309,6 +310,7 @@ private void registerCustomModels() { registerDiskModels(); final QuadRotators quadRotators = new QuadRotators(); ModelLoadingPlugin.register(pluginContext -> { + registerCustomCableModels(pluginContext, quadRotators); registerCustomDiskDriveModels(pluginContext, quadRotators); registerCustomDiskInterfaceModels(pluginContext, quadRotators); registerCustomPortableGridModels(pluginContext, quadRotators); @@ -316,6 +318,23 @@ private void registerCustomModels() { }); } + private void registerCustomCableModels(final ModelLoadingPlugin.Context pluginContext, + final QuadRotators quadRotators) { + pluginContext.resolveModel().register(context -> { + if (context.id().getNamespace().equals(IdentifierUtil.MOD_ID) + && context.id().getPath().startsWith(BLOCK_PREFIX + "/cable/") + && !context.id().getPath().startsWith(BLOCK_PREFIX + "/cable/core") + && !context.id().getPath().startsWith(BLOCK_PREFIX + "/cable/extension")) { + final DyeColor color = DyeColor.byName( + context.id().getPath().replace(BLOCK_PREFIX + "/cable/", ""), + Blocks.INSTANCE.getCable().getDefault().getColor() + ); + return new CableUnbakedModel(quadRotators, color); + } + return null; + }); + } + private void registerCustomDiskInterfaceModels(final ModelLoadingPlugin.Context pluginContext, final QuadRotators quadRotators) { pluginContext.resolveModel().register(context -> { diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index 0694d30fa..5c39a51ba 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -5,6 +5,8 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.network.AbstractNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; +import com.refinedmods.refinedstorage.common.content.BlockEntityProviders; import com.refinedmods.refinedstorage.common.content.BlockEntityTypeFactory; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.content.ContentNames; @@ -67,15 +69,21 @@ import com.refinedmods.refinedstorage.fabric.api.RefinedStorageFabricApi; import com.refinedmods.refinedstorage.fabric.api.RefinedStorageFabricApiProxy; import com.refinedmods.refinedstorage.fabric.api.RefinedStoragePlugin; +import com.refinedmods.refinedstorage.fabric.constructordestructor.FabricConstructorBlockEntity; +import com.refinedmods.refinedstorage.fabric.constructordestructor.FabricDestructorBlockEntity; +import com.refinedmods.refinedstorage.fabric.exporter.FabricExporterBlockEntity; import com.refinedmods.refinedstorage.fabric.exporter.FabricStorageExporterTransferStrategyFactory; import com.refinedmods.refinedstorage.fabric.grid.strategy.FluidGridExtractionStrategy; import com.refinedmods.refinedstorage.fabric.grid.strategy.FluidGridInsertionStrategy; import com.refinedmods.refinedstorage.fabric.grid.strategy.ItemGridExtractionStrategy; import com.refinedmods.refinedstorage.fabric.grid.strategy.ItemGridScrollingStrategy; +import com.refinedmods.refinedstorage.fabric.importer.FabricImporterBlockEntity; import com.refinedmods.refinedstorage.fabric.importer.FabricStorageImporterTransferStrategyFactory; +import com.refinedmods.refinedstorage.fabric.networking.FabricCableBlockEntity; import com.refinedmods.refinedstorage.fabric.security.NetworkNodeBreakSecurityEventListener; import com.refinedmods.refinedstorage.fabric.storage.diskdrive.FabricDiskDriveBlockEntity; import com.refinedmods.refinedstorage.fabric.storage.diskinterface.FabricDiskInterfaceBlockEntity; +import com.refinedmods.refinedstorage.fabric.storage.externalstorage.FabricExternalStorageBlockEntity; import com.refinedmods.refinedstorage.fabric.storage.externalstorage.FabricStoragePlatformExternalStorageProviderFactory; import com.refinedmods.refinedstorage.fabric.storage.portablegrid.FabricPortableGridBlockEntity; import com.refinedmods.refinedstorage.fabric.support.energy.EnergyStorageAdapter; @@ -142,6 +150,18 @@ import static com.refinedmods.refinedstorage.fabric.support.resource.VariantUtil.toItemVariant; public class ModInitializerImpl extends AbstractModInitializer implements ModInitializer { + private static final BlockEntityProviders BLOCK_ENTITY_PROVIDERS = new BlockEntityProviders( + FabricDiskDriveBlockEntity::new, + (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.NORMAL, pos, state), + (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.CREATIVE, pos, state), + FabricDiskInterfaceBlockEntity::new, + FabricCableBlockEntity::new, + FabricExternalStorageBlockEntity::new, + FabricExporterBlockEntity::new, + FabricImporterBlockEntity::new, + FabricConstructorBlockEntity::new, + FabricDestructorBlockEntity::new + ); private static final Logger LOGGER = LoggerFactory.getLogger(ModInitializerImpl.class); private static final String PLUGIN_ENTRYPOINT_KEY = "refinedstorage_plugin"; @@ -257,13 +277,7 @@ private void registerExternalStorageProviderFactories() { } private void registerContent() { - registerBlocks( - new DirectRegistryCallback<>(BuiltInRegistries.BLOCK), - FabricDiskDriveBlockEntity::new, - (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.NORMAL, pos, state), - (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.CREATIVE, pos, state), - FabricDiskInterfaceBlockEntity::new - ); + registerBlocks(new DirectRegistryCallback<>(BuiltInRegistries.BLOCK), BLOCK_ENTITY_PROVIDERS); final DirectRegistryCallback itemRegistryCallback = new DirectRegistryCallback<>(BuiltInRegistries.ITEM); registerItems(itemRegistryCallback); registerCustomItems(itemRegistryCallback); @@ -274,15 +288,12 @@ private void registerContent() { new BlockEntityTypeFactory() { @SuppressWarnings("DataFlowIssue") // data type can be null @Override - public BlockEntityType create(final BlockEntitySupplier factory, + public BlockEntityType create(final BlockEntityProvider factory, final Block... allowedBlocks) { return new BlockEntityType<>(factory::create, new HashSet<>(Arrays.asList(allowedBlocks)), null); } }, - FabricDiskDriveBlockEntity::new, - (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.NORMAL, pos, state), - (pos, state) -> new FabricPortableGridBlockEntity(PortableGridType.CREATIVE, pos, state), - FabricDiskInterfaceBlockEntity::new + BLOCK_ENTITY_PROVIDERS ); registerMenus(new DirectRegistryCallback<>(BuiltInRegistries.MENU), new MenuTypeFactory() { @Override diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java index 05993d1cf..b1674abd4 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/PlatformImpl.java @@ -475,6 +475,27 @@ public void setSlotY(final Slot slot, final int y) { slot.y = y; } + @Override + public void requestModelDataUpdateOnClient(final LevelAccessor level, + final BlockPos pos, + final boolean updateChunk) { + if (!level.isClientSide()) { + throw new IllegalArgumentException("Cannot request model data update on server"); + } + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity == null) { + return; + } + if (updateChunk && level instanceof Level updatable) { + updatable.sendBlockUpdated( + blockEntity.getBlockPos(), + blockEntity.getBlockState(), + blockEntity.getBlockState(), + Block.UPDATE_ALL + ); + } + } + private void doSave(final CompoundTag compoundTag, final Path tempFile, final Path targetPath) throws IOException { // Write to temp file first. NbtIo.writeCompressed(compoundTag, tempFile); diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricConstructorBlockEntity.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricConstructorBlockEntity.java new file mode 100644 index 000000000..a587c2acc --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricConstructorBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.fabric.constructordestructor; + +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricConstructorBlockEntity extends AbstractConstructorBlockEntity { + public FabricConstructorBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + @Nullable + public Object getRenderData() { + return connections; + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricDestructorBlockEntity.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricDestructorBlockEntity.java new file mode 100644 index 000000000..3feecc128 --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/FabricDestructorBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.fabric.constructordestructor; + +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricDestructorBlockEntity extends AbstractDestructorBlockEntity { + public FabricDestructorBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + @Nullable + public Object getRenderData() { + return connections; + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/package-info.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/package-info.java new file mode 100644 index 000000000..b2798a73b --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/constructordestructor/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.fabric.constructordestructor; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricExporterBlockEntity.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricExporterBlockEntity.java new file mode 100644 index 000000000..6b62e8dff --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricExporterBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.fabric.exporter; + +import com.refinedmods.refinedstorage.common.exporter.AbstractExporterBlockEntity; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricExporterBlockEntity extends AbstractExporterBlockEntity { + public FabricExporterBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + @Nullable + public Object getRenderData() { + return connections; + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricImporterBlockEntity.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricImporterBlockEntity.java new file mode 100644 index 000000000..53086ca0e --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricImporterBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.fabric.importer; + +import com.refinedmods.refinedstorage.common.importer.AbstractImporterBlockEntity; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricImporterBlockEntity extends AbstractImporterBlockEntity { + public FabricImporterBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + @Nullable + public Object getRenderData() { + return connections; + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableBakedModel.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableBakedModel.java new file mode 100644 index 000000000..309f7dffd --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableBakedModel.java @@ -0,0 +1,73 @@ +package com.refinedmods.refinedstorage.fabric.networking; + +import com.refinedmods.refinedstorage.common.networking.CableConnections; +import com.refinedmods.refinedstorage.common.support.direction.BiDirection; +import com.refinedmods.refinedstorage.fabric.support.render.QuadRotators; + +import java.util.function.Supplier; + +import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel; +import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; + +class CableBakedModel extends ForwardingBakedModel { + private final QuadRotators quadRotators; + private final BakedModel extension; + + CableBakedModel(final QuadRotators quadRotators, final BakedModel core, final BakedModel extension) { + this.wrapped = core; + this.quadRotators = quadRotators; + this.extension = extension; + } + + @Override + public void emitBlockQuads(final BlockAndTintGetter blockView, + final BlockState state, + final BlockPos pos, + final Supplier randomSupplier, + final RenderContext context) { + super.emitBlockQuads(blockView, state, pos, randomSupplier, context); + if (!(blockView.getBlockEntityRenderData(pos) instanceof CableConnections connections)) { + return; + } + if (connections.north()) { + addExtension(blockView, state, pos, Direction.NORTH, randomSupplier, context); + } + if (connections.east()) { + addExtension(blockView, state, pos, Direction.EAST, randomSupplier, context); + } + if (connections.south()) { + addExtension(blockView, state, pos, Direction.SOUTH, randomSupplier, context); + } + if (connections.west()) { + addExtension(blockView, state, pos, Direction.WEST, randomSupplier, context); + } + if (connections.up()) { + addExtension(blockView, state, pos, Direction.UP, randomSupplier, context); + } + if (connections.down()) { + addExtension(blockView, state, pos, Direction.DOWN, randomSupplier, context); + } + } + + private void addExtension(final BlockAndTintGetter blockView, + final BlockState state, + final BlockPos pos, + final Direction direction, + final Supplier randomSupplier, + final RenderContext context) { + context.pushTransform(quadRotators.forDirection(BiDirection.forDirection(direction))); + extension.emitBlockQuads(blockView, state, pos, randomSupplier, context); + context.popTransform(); + } + + @Override + public boolean isVanillaAdapter() { + return false; + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableUnbakedModel.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableUnbakedModel.java new file mode 100644 index 000000000..aac7c6e43 --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/CableUnbakedModel.java @@ -0,0 +1,55 @@ +package com.refinedmods.refinedstorage.fabric.networking; + +import com.refinedmods.refinedstorage.fabric.support.render.QuadRotators; + +import java.util.Collection; +import java.util.Set; +import java.util.function.Function; +import javax.annotation.Nullable; + +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.DyeColor; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static java.util.Objects.requireNonNull; + +public class CableUnbakedModel implements UnbakedModel { + private final QuadRotators quadRotators; + private final ResourceLocation coreModel; + private final ResourceLocation extensionModel; + + public CableUnbakedModel(final QuadRotators quadRotators, final DyeColor color) { + this.quadRotators = quadRotators; + this.coreModel = createIdentifier("block/cable/core/" + color.getName()); + this.extensionModel = createIdentifier("block/cable/extension/" + color.getName()); + } + + @Override + public Collection getDependencies() { + return Set.of(coreModel, extensionModel); + } + + @Override + public void resolveParents(final Function resolver) { + resolver.apply(coreModel).resolveParents(resolver); + resolver.apply(extensionModel).resolveParents(resolver); + } + + @Nullable + @Override + public BakedModel bake(final ModelBaker baker, + final Function spriteGetter, + final ModelState state) { + return new CableBakedModel( + quadRotators, + requireNonNull(baker.bake(coreModel, state)), + requireNonNull(baker.bake(extensionModel, state)) + ); + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/FabricCableBlockEntity.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/FabricCableBlockEntity.java new file mode 100644 index 000000000..7b3eea838 --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/FabricCableBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.fabric.networking; + +import com.refinedmods.refinedstorage.common.networking.AbstractCableBlockEntity; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricCableBlockEntity extends AbstractCableBlockEntity { + public FabricCableBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + @Nullable + public Object getRenderData() { + return connections; + } +} diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/package-info.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/package-info.java new file mode 100644 index 000000000..b1ecf5762 --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/networking/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.fabric.networking; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricExternalStorageBlockEntity.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricExternalStorageBlockEntity.java new file mode 100644 index 000000000..33d2d2240 --- /dev/null +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricExternalStorageBlockEntity.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.fabric.storage.externalstorage; + +import com.refinedmods.refinedstorage.common.storage.externalstorage.AbstractExternalStorageBlockEntity; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricExternalStorageBlockEntity extends AbstractExternalStorageBlockEntity { + public FabricExternalStorageBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + @Nullable + public Object getRenderData() { + return connections; + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java index 77507e757..9d1bd1218 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java @@ -25,6 +25,7 @@ import com.refinedmods.refinedstorage.common.upgrade.RegulatorUpgradeItem; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinationClientTooltipComponent; import com.refinedmods.refinedstorage.neoforge.autocrafting.PatternGeometryLoader; +import com.refinedmods.refinedstorage.neoforge.networking.CableGeometryLoader; import com.refinedmods.refinedstorage.neoforge.storage.diskdrive.DiskDriveBlockEntityRendererImpl; import com.refinedmods.refinedstorage.neoforge.storage.diskdrive.DiskDriveGeometryLoader; import com.refinedmods.refinedstorage.neoforge.storage.diskinterface.DiskInterfaceBlockEntityRendererImpl; @@ -59,6 +60,7 @@ import net.neoforged.neoforge.common.NeoForge; import org.lwjgl.glfw.GLFW; +import static com.refinedmods.refinedstorage.common.content.ContentIds.CABLE; import static com.refinedmods.refinedstorage.common.content.ContentIds.DISK_DRIVE; import static com.refinedmods.refinedstorage.common.content.ContentIds.PATTERN; import static com.refinedmods.refinedstorage.common.content.ContentIds.PORTABLE_GRID; @@ -99,7 +101,7 @@ private static void registerModelPredicates() { } @SubscribeEvent - public static void onRegisterModelGeometry(final ModelEvent.RegisterGeometryLoaders e) { + public static void onRegisterCustomModels(final ModelEvent.RegisterGeometryLoaders e) { registerDiskModels(); e.register(PATTERN, new PatternGeometryLoader()); e.register(DISK_DRIVE, new DiskDriveGeometryLoader()); @@ -107,6 +109,7 @@ public static void onRegisterModelGeometry(final ModelEvent.RegisterGeometryLoad Blocks.INSTANCE.getDiskInterface().forEach( (color, id, supplier) -> e.register(id, new DiskInterfaceGeometryLoader(color)) ); + e.register(CABLE, new CableGeometryLoader()); } @SubscribeEvent diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 83b58867e..779935f9d 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -7,6 +7,8 @@ import com.refinedmods.refinedstorage.common.api.support.network.AbstractNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.api.support.network.NetworkNodeContainerProvider; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.BlockEntityProvider; +import com.refinedmods.refinedstorage.common.content.BlockEntityProviders; import com.refinedmods.refinedstorage.common.content.BlockEntityTypeFactory; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.content.ContentNames; @@ -65,17 +67,23 @@ import com.refinedmods.refinedstorage.common.util.ServerEventQueue; import com.refinedmods.refinedstorage.neoforge.api.RefinedStorageNeoForgeApi; import com.refinedmods.refinedstorage.neoforge.api.RefinedStorageNeoForgeApiProxy; +import com.refinedmods.refinedstorage.neoforge.constructordestructor.ForgeConstructorBlockEntity; +import com.refinedmods.refinedstorage.neoforge.constructordestructor.ForgeDestructorBlockEntity; import com.refinedmods.refinedstorage.neoforge.exporter.FluidHandlerExporterTransferStrategyFactory; +import com.refinedmods.refinedstorage.neoforge.exporter.ForgeExporterBlockEntity; import com.refinedmods.refinedstorage.neoforge.exporter.ItemHandlerExporterTransferStrategyFactory; import com.refinedmods.refinedstorage.neoforge.grid.strategy.FluidGridExtractionStrategy; import com.refinedmods.refinedstorage.neoforge.grid.strategy.FluidGridInsertionStrategy; import com.refinedmods.refinedstorage.neoforge.grid.strategy.ItemGridExtractionStrategy; import com.refinedmods.refinedstorage.neoforge.grid.strategy.ItemGridScrollingStrategy; import com.refinedmods.refinedstorage.neoforge.importer.FluidHandlerImporterTransferStrategyFactory; +import com.refinedmods.refinedstorage.neoforge.importer.ForgeImporterBlockEntity; import com.refinedmods.refinedstorage.neoforge.importer.ItemHandlerImporterTransferStrategyFactory; +import com.refinedmods.refinedstorage.neoforge.networking.ForgeCableBlockEntity; import com.refinedmods.refinedstorage.neoforge.storage.diskdrive.ForgeDiskDriveBlockEntity; import com.refinedmods.refinedstorage.neoforge.storage.diskinterface.ForgeDiskInterfaceBlockEntity; import com.refinedmods.refinedstorage.neoforge.storage.externalstorage.FluidHandlerPlatformExternalStorageProviderFactory; +import com.refinedmods.refinedstorage.neoforge.storage.externalstorage.ForgeExternalStorageBlockEntity; import com.refinedmods.refinedstorage.neoforge.storage.externalstorage.ItemHandlerPlatformExternalStorageProviderFactory; import com.refinedmods.refinedstorage.neoforge.storage.portablegrid.ForgePortableGridBlockEntity; import com.refinedmods.refinedstorage.neoforge.support.energy.EnergyStorageAdapter; @@ -145,6 +153,19 @@ @Mod(IdentifierUtil.MOD_ID) public class ModInitializer extends AbstractModInitializer { + private static final BlockEntityProviders BLOCK_ENTITY_PROVIDERS = new BlockEntityProviders( + ForgeDiskDriveBlockEntity::new, + (pos, state) -> new ForgePortableGridBlockEntity(PortableGridType.NORMAL, pos, state), + (pos, state) -> new ForgePortableGridBlockEntity(PortableGridType.CREATIVE, pos, state), + ForgeDiskInterfaceBlockEntity::new, + ForgeCableBlockEntity::new, + ForgeExternalStorageBlockEntity::new, + ForgeExporterBlockEntity::new, + ForgeImporterBlockEntity::new, + ForgeConstructorBlockEntity::new, + ForgeDestructorBlockEntity::new + ); + private final DeferredRegister blockRegistry = DeferredRegister.create(BuiltInRegistries.BLOCK, IdentifierUtil.MOD_ID); private final DeferredRegister itemRegistry = @@ -179,7 +200,7 @@ public ModInitializer(final IEventBus eventBus, final ModContainer modContainer) if (FMLEnvironment.dist == Dist.CLIENT) { eventBus.addListener(ClientModInitializer::onClientSetup); - eventBus.addListener(ClientModInitializer::onRegisterModelGeometry); + eventBus.addListener(ClientModInitializer::onRegisterCustomModels); eventBus.addListener(ClientModInitializer::onRegisterMenuScreens); eventBus.addListener(ClientModInitializer::onRegisterKeyMappings); eventBus.addListener(ClientModInitializer::onRegisterItemColors); @@ -251,13 +272,7 @@ private void registerContent(final IEventBus eventBus) { } private void registerBlocks(final IEventBus eventBus) { - registerBlocks( - new ForgeRegistryCallback<>(blockRegistry), - ForgeDiskDriveBlockEntity::new, - (pos, state) -> new ForgePortableGridBlockEntity(PortableGridType.NORMAL, pos, state), - (pos, state) -> new ForgePortableGridBlockEntity(PortableGridType.CREATIVE, pos, state), - ForgeDiskInterfaceBlockEntity::new - ); + registerBlocks(new ForgeRegistryCallback<>(blockRegistry), BLOCK_ENTITY_PROVIDERS); blockRegistry.register(eventBus); } @@ -346,15 +361,12 @@ private void registerBlockEntities(final IEventBus eventBus) { new BlockEntityTypeFactory() { @SuppressWarnings("DataFlowIssue") // data type can be null @Override - public BlockEntityType create(final BlockEntitySupplier factory, + public BlockEntityType create(final BlockEntityProvider factory, final Block... allowedBlocks) { return new BlockEntityType<>(factory::create, new HashSet<>(Arrays.asList(allowedBlocks)), null); } }, - ForgeDiskDriveBlockEntity::new, - (pos, state) -> new ForgePortableGridBlockEntity(PortableGridType.NORMAL, pos, state), - (pos, state) -> new ForgePortableGridBlockEntity(PortableGridType.CREATIVE, pos, state), - ForgeDiskInterfaceBlockEntity::new + BLOCK_ENTITY_PROVIDERS ); blockEntityTypeRegistry.register(eventBus); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/PlatformImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/PlatformImpl.java index a533b9629..fcf017130 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/PlatformImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/PlatformImpl.java @@ -58,6 +58,7 @@ import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.LiquidBlock; @@ -395,4 +396,26 @@ public int getItemColor(final ItemStack stack, final int tintIndex) { public void setSlotY(final Slot slot, final int y) { slot.y = y; } + + @Override + public void requestModelDataUpdateOnClient(final LevelAccessor level, + final BlockPos pos, + final boolean updateChunk) { + if (!level.isClientSide()) { + throw new IllegalArgumentException("Cannot request model data update on server"); + } + final BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity == null) { + return; + } + blockEntity.requestModelDataUpdate(); + if (updateChunk && level instanceof Level updatable) { + updatable.sendBlockUpdated( + blockEntity.getBlockPos(), + blockEntity.getBlockState(), + blockEntity.getBlockState(), + Block.UPDATE_ALL + ); + } + } } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeConstructorBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeConstructorBlockEntity.java new file mode 100644 index 000000000..21bc0889a --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeConstructorBlockEntity.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.neoforge.constructordestructor; + +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.data.ModelData; + +public class ForgeConstructorBlockEntity extends AbstractConstructorBlockEntity { + public ForgeConstructorBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + public ModelData getModelData() { + return ModelData.builder().with(ModelProperties.CABLE_CONNECTIONS, connections).build(); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeDestructorBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeDestructorBlockEntity.java new file mode 100644 index 000000000..6b9ea0508 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/ForgeDestructorBlockEntity.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.neoforge.constructordestructor; + +import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.data.ModelData; + +public class ForgeDestructorBlockEntity extends AbstractDestructorBlockEntity { + public ForgeDestructorBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + public ModelData getModelData() { + return ModelData.builder().with(ModelProperties.CABLE_CONNECTIONS, connections).build(); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/package-info.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/package-info.java new file mode 100644 index 000000000..1360da082 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/constructordestructor/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.neoforge.constructordestructor; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java index aee8cee99..ec95c73b7 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.common.content.BlockColorMap; import com.refinedmods.refinedstorage.common.content.Blocks; +import com.refinedmods.refinedstorage.common.content.ContentIds; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; @@ -71,6 +72,14 @@ private void registerCables() { withExistingParent("block/cable/extension/" + color.getName(), extensionBase) .texture("cable", texture) .texture(PARTICLE_TEXTURE, texture); + getBuilder("block/cable/" + color.getName()) + .customLoader((blockModelBuilder, existingFileHelper) -> new CableCustomLoaderBuilder( + ContentIds.CABLE, + blockModelBuilder, + existingFileHelper, + color + ) { + }).end(); }); } @@ -273,6 +282,7 @@ private void registerRelays() { } private void registerDiskInterfaces() { + // TODO: add color as property and use single loader? registerRightLeftBackFrontTopModel(Blocks.INSTANCE.getDiskInterface(), "disk_interface", "base_"); Blocks.INSTANCE.getDiskInterface() .forEach((color, id, block) -> getBuilder("block/disk_interface/" + color.getName()) diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java index b8f689113..247d90ccc 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java @@ -9,14 +9,11 @@ import com.refinedmods.refinedstorage.common.networking.NetworkReceiverBlock; import com.refinedmods.refinedstorage.common.networking.NetworkTransmitterBlock; import com.refinedmods.refinedstorage.common.support.AbstractActiveColoredDirectionalBlock; -import com.refinedmods.refinedstorage.common.support.CableBlockSupport; import com.refinedmods.refinedstorage.common.support.direction.BiDirection; import com.refinedmods.refinedstorage.common.support.direction.BiDirectionType; import com.refinedmods.refinedstorage.common.support.direction.DefaultDirectionType; import com.refinedmods.refinedstorage.common.support.direction.HorizontalDirectionType; -import java.util.EnumMap; -import java.util.Map; import java.util.function.Supplier; import net.minecraft.core.Direction; @@ -25,7 +22,6 @@ import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.neoforged.neoforge.client.model.generators.BlockStateProvider; import net.neoforged.neoforge.client.model.generators.ConfiguredModel; import net.neoforged.neoforge.client.model.generators.ModelFile; @@ -38,15 +34,6 @@ public class BlockStateProviderImpl extends BlockStateProvider { private static final String BLOCK_PREFIX = "block"; - private static final Map PROPERTY_BY_DIRECTION = new EnumMap<>(Map.of( - Direction.NORTH, CableBlockSupport.NORTH, - Direction.EAST, CableBlockSupport.EAST, - Direction.SOUTH, CableBlockSupport.SOUTH, - Direction.WEST, CableBlockSupport.WEST, - Direction.UP, CableBlockSupport.UP, - Direction.DOWN, CableBlockSupport.DOWN - )); - private final ExistingFileHelper existingFileHelper; public BlockStateProviderImpl(final PackOutput output, final ExistingFileHelper existingFileHelper) { @@ -57,15 +44,15 @@ public BlockStateProviderImpl(final PackOutput output, final ExistingFileHelper @Override protected void registerStatesAndModels() { registerCables(); - registerExporters(); - registerImporters(); - registerExternalStorages(); + registerCableLike(Blocks.INSTANCE.getImporter(), "importer"); + registerCableLike(Blocks.INSTANCE.getExporter(), "exporter"); + registerCableLike(Blocks.INSTANCE.getExternalStorage(), "external_storage"); registerControllers(); registerGrids(); registerDetectors(); registerWirelessTransmitters(); - registerConstructorDestructors(Blocks.INSTANCE.getConstructor(), "constructor"); - registerConstructorDestructors(Blocks.INSTANCE.getDestructor(), "destructor"); + registerConstructorDestructor(Blocks.INSTANCE.getConstructor(), "constructor"); + registerConstructorDestructor(Blocks.INSTANCE.getDestructor(), "destructor"); registerNetworkReceivers(); registerNetworkTransmitters(); registerSecurityManagers(); @@ -74,64 +61,29 @@ protected void registerStatesAndModels() { } private void registerCables() { - Blocks.INSTANCE.getCable().forEach((color, id, block) -> addCableWithExtensions(block.get(), color)); - } - - private void registerExporters() { - Blocks.INSTANCE.getExporter().forEach((color, id, block) -> { - final MultiPartBlockStateBuilder builder = addCableWithExtensions(block.get(), color); - final ModelFile exporterModel = modelFile(createIdentifier("block/exporter")); - PROPERTY_BY_DIRECTION.forEach((direction, property) -> { - final var part = builder.part(); - addDirectionalRotation(direction, part); - part.modelFile(exporterModel).addModel() - .condition(DefaultDirectionType.FACE_CLICKED.getProperty(), direction); - }); - }); - } - - private void registerImporters() { - Blocks.INSTANCE.getImporter().forEach((color, id, block) -> { - final MultiPartBlockStateBuilder builder = addCableWithExtensions(block.get(), color); - final ModelFile importerModel = modelFile(createIdentifier("block/importer")); - PROPERTY_BY_DIRECTION.forEach((direction, property) -> { - final var part = builder.part(); - addDirectionalRotation(direction, part); - part.modelFile(importerModel).addModel() - .condition(DefaultDirectionType.FACE_CLICKED.getProperty(), direction); - }); + Blocks.INSTANCE.getCable().forEach((color, id, block) -> { + final var builder = getVariantBuilder(block.get()); + builder.addModels( + builder.partialState(), + ConfiguredModel.builder().modelFile(modelFile(createIdentifier("block/cable/" + color.getName()))) + .build() + ); }); } - private void registerExternalStorages() { - Blocks.INSTANCE.getExternalStorage().forEach((color, id, block) -> { - final MultiPartBlockStateBuilder builder = addCableWithExtensions(block.get(), color); - final ModelFile model = modelFile(createIdentifier("block/external_storage")); - PROPERTY_BY_DIRECTION.forEach((direction, property) -> { + private void registerCableLike(final BlockColorMap blockMap, final String type) { + final ModelFile model = modelFile(createIdentifier("block/" + type)); + blockMap.forEach((color, id, block) -> { + final MultiPartBlockStateBuilder builder = getMultipartBuilder(block.get()); + final var cablePart = builder.part(); + cablePart.modelFile(modelFile(createIdentifier("block/cable/" + color.getName()))) + .addModel(); + for (final Direction direction : Direction.values()) { final var part = builder.part(); addDirectionalRotation(direction, part); - part.modelFile(model) - .addModel() + part.modelFile(model).addModel() .condition(DefaultDirectionType.FACE_CLICKED.getProperty(), direction); - }); - }); - } - - private MultiPartBlockStateBuilder addCableWithExtensions(final Block block, final DyeColor color) { - final var builder = getMultipartBuilder(block) - .part() - .modelFile(modelFile(createIdentifier("block/cable/core/" + color.getName()))).addModel() - .end(); - final ModelFile extension = modelFile(createIdentifier("block/cable/extension/" + color.getName())); - addForEachDirection(builder, extension); - return builder; - } - - private static void addForEachDirection(final MultiPartBlockStateBuilder builder, final ModelFile extension) { - PROPERTY_BY_DIRECTION.forEach((direction, property) -> { - final var part = builder.part(); - addDirectionalRotation(direction, part); - part.modelFile(extension).addModel().condition(property, true); + } }); } @@ -227,12 +179,15 @@ private void registerWirelessTransmitters() { }); } - private void registerConstructorDestructors(final BlockColorMap blockMap, final String type) { + private void registerConstructorDestructor(final BlockColorMap blockMap, final String type) { + final ModelFile activeModel = modelFile(createIdentifier(BLOCK_PREFIX + "/" + type + "/active")); + final ModelFile inactiveModel = modelFile(createIdentifier(BLOCK_PREFIX + "/" + type + "/inactive")); blockMap.forEach((color, id, block) -> { - final MultiPartBlockStateBuilder builder = addCableWithExtensions(block.get(), color); - final ModelFile activeModel = modelFile(createIdentifier(BLOCK_PREFIX + "/" + type + "/active")); - final ModelFile inactiveModel = modelFile(createIdentifier(BLOCK_PREFIX + "/" + type + "/inactive")); - PROPERTY_BY_DIRECTION.forEach((direction, property) -> { + final MultiPartBlockStateBuilder builder = getMultipartBuilder(block.get()); + final var cablePart = builder.part(); + cablePart.modelFile(modelFile(createIdentifier("block/cable/" + color.getName()))) + .addModel(); + for (final Direction direction : Direction.values()) { final var part = builder.part(); addDirectionalRotation(direction, part); part.modelFile(activeModel) @@ -245,7 +200,7 @@ private void registerConstructorDestructors(final BlockColorMap blockMap, .condition(DefaultDirectionType.FACE_CLICKED.getProperty(), direction) .condition(AbstractConstructorDestructorBlock.ACTIVE, false) .end(); - }); + } }); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java new file mode 100644 index 000000000..9fc4322bc --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java @@ -0,0 +1,27 @@ +package com.refinedmods.refinedstorage.neoforge.datagen; + +import com.google.gson.JsonObject; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.DyeColor; +import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; +import net.neoforged.neoforge.client.model.generators.CustomLoaderBuilder; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +class CableCustomLoaderBuilder extends CustomLoaderBuilder { + private final DyeColor color; + + CableCustomLoaderBuilder(final ResourceLocation loaderId, + final BlockModelBuilder parent, + final ExistingFileHelper existingFileHelper, + final DyeColor color) { + super(loaderId, parent, existingFileHelper, true); + this.color = color; + } + + @Override + public JsonObject toJson(final JsonObject json) { + final JsonObject value = super.toJson(json); + value.addProperty("color", color.getName()); + return value; + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/exporter/ForgeExporterBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/exporter/ForgeExporterBlockEntity.java new file mode 100644 index 000000000..07871cdc6 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/exporter/ForgeExporterBlockEntity.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.neoforge.exporter; + +import com.refinedmods.refinedstorage.common.exporter.AbstractExporterBlockEntity; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.data.ModelData; + +public class ForgeExporterBlockEntity extends AbstractExporterBlockEntity { + public ForgeExporterBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + public ModelData getModelData() { + return ModelData.builder().with(ModelProperties.CABLE_CONNECTIONS, connections).build(); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/importer/ForgeImporterBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/importer/ForgeImporterBlockEntity.java new file mode 100644 index 000000000..d9aec2db3 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/importer/ForgeImporterBlockEntity.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.neoforge.importer; + +import com.refinedmods.refinedstorage.common.importer.AbstractImporterBlockEntity; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.data.ModelData; + +public class ForgeImporterBlockEntity extends AbstractImporterBlockEntity { + public ForgeImporterBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + public ModelData getModelData() { + return ModelData.builder().with(ModelProperties.CABLE_CONNECTIONS, connections).build(); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableBakedModel.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableBakedModel.java new file mode 100644 index 000000000..e5d264713 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableBakedModel.java @@ -0,0 +1,88 @@ +package com.refinedmods.refinedstorage.neoforge.networking; + +import com.refinedmods.refinedstorage.common.networking.CableConnections; +import com.refinedmods.refinedstorage.common.support.direction.BiDirection; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; +import com.refinedmods.refinedstorage.neoforge.support.render.RotationTranslationModelBaker; +import com.refinedmods.refinedstorage.neoforge.support.render.TransformationBuilder; + +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.mojang.math.Transformation; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.BakedModelWrapper; +import net.neoforged.neoforge.client.model.data.ModelData; + +class CableBakedModel extends BakedModelWrapper { + private final LoadingCache> cache; + private final RotationTranslationModelBaker extensionBaker; + + CableBakedModel(final BakedModel core, final RotationTranslationModelBaker extensionBaker) { + super(core); + this.extensionBaker = extensionBaker; + this.cache = CacheBuilder.newBuilder().build(CacheLoader.from(cacheKey -> { + final RandomSource rand = RandomSource.create(); + final List quads = new ArrayList<>(super.getQuads( + null, + cacheKey.side, + rand, + ModelData.EMPTY, + null + )); + if (cacheKey.connections.north()) { + addExtension(quads, Direction.NORTH, cacheKey.side, rand); + } + if (cacheKey.connections.east()) { + addExtension(quads, Direction.EAST, cacheKey.side, rand); + } + if (cacheKey.connections.south()) { + addExtension(quads, Direction.SOUTH, cacheKey.side, rand); + } + if (cacheKey.connections.west()) { + addExtension(quads, Direction.WEST, cacheKey.side, rand); + } + if (cacheKey.connections.up()) { + addExtension(quads, Direction.UP, cacheKey.side, rand); + } + if (cacheKey.connections.down()) { + addExtension(quads, Direction.DOWN, cacheKey.side, rand); + } + return quads; + })); + } + + @Override + public List getQuads(@Nullable final BlockState state, + @Nullable final Direction side, + final RandomSource rand, + final ModelData extraData, + @Nullable final RenderType renderType) { + final CableConnections connections = extraData.get(ModelProperties.CABLE_CONNECTIONS); + if (connections == null) { + return super.getQuads(state, side, rand, extraData, renderType); + } + return cache.getUnchecked(new CacheKey(side, connections)); + } + + private void addExtension(final List quads, + final Direction direction, + @Nullable final Direction side, + final RandomSource randomSource) { + final Transformation transformation = TransformationBuilder.create().rotate(BiDirection.forDirection(direction)) + .build(); + quads.addAll(extensionBaker.bake(transformation, side, randomSource)); + } + + private record CacheKey(@Nullable Direction side, CableConnections connections) { + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableGeometryLoader.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableGeometryLoader.java new file mode 100644 index 000000000..e4b2677b6 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableGeometryLoader.java @@ -0,0 +1,20 @@ +package com.refinedmods.refinedstorage.neoforge.networking; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonObject; +import com.google.gson.JsonParseException; +import net.minecraft.world.item.DyeColor; +import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; + +import static com.refinedmods.refinedstorage.common.content.Blocks.CABLE_LIKE_COLOR; + +public class CableGeometryLoader implements IGeometryLoader { + @Override + public CableUnbakedGeometry read(final JsonObject jsonObject, + final JsonDeserializationContext jsonDeserializationContext) + throws JsonParseException { + final String color = jsonObject.get("color").getAsString(); + final DyeColor dyeColor = DyeColor.byName(color, CABLE_LIKE_COLOR); + return new CableUnbakedGeometry(dyeColor); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableUnbakedGeometry.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableUnbakedGeometry.java new file mode 100644 index 000000000..a74248ba7 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/CableUnbakedGeometry.java @@ -0,0 +1,51 @@ +package com.refinedmods.refinedstorage.neoforge.networking; + +import com.refinedmods.refinedstorage.neoforge.support.render.RotationTranslationModelBaker; + +import java.util.function.Function; + +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.DyeColor; +import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static java.util.Objects.requireNonNull; + +public class CableUnbakedGeometry implements IUnbakedGeometry { + private final ResourceLocation coreModel; + private final ResourceLocation extensionModel; + + CableUnbakedGeometry(final DyeColor color) { + this.coreModel = createIdentifier("block/cable/core/" + color.getName()); + this.extensionModel = createIdentifier("block/cable/extension/" + color.getName()); + } + + @Override + public void resolveParents(final Function modelGetter, + final IGeometryBakingContext context) { + modelGetter.apply(coreModel).resolveParents(modelGetter); + modelGetter.apply(extensionModel).resolveParents(modelGetter); + } + + @Override + public BakedModel bake(final IGeometryBakingContext ctx, + final ModelBaker modelBaker, + final Function function, + final ModelState modelState, + final ItemOverrides itemOverrides) { + return new CableBakedModel( + requireNonNull(modelBaker.bake(coreModel, modelState, function)), + new RotationTranslationModelBaker( + modelState, modelBaker, function, extensionModel + ) + ); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/ForgeCableBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/ForgeCableBlockEntity.java new file mode 100644 index 000000000..ef248976f --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/ForgeCableBlockEntity.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.neoforge.networking; + +import com.refinedmods.refinedstorage.common.networking.AbstractCableBlockEntity; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.data.ModelData; + +public class ForgeCableBlockEntity extends AbstractCableBlockEntity { + public ForgeCableBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + public ModelData getModelData() { + return ModelData.builder().with(ModelProperties.CABLE_CONNECTIONS, connections).build(); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/package-info.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/package-info.java new file mode 100644 index 000000000..da450c793 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/networking/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.neoforge.networking; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskdrive/ForgeDiskDriveBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskdrive/ForgeDiskDriveBlockEntity.java index 8d0a14f00..aedb03e69 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskdrive/ForgeDiskDriveBlockEntity.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskdrive/ForgeDiskDriveBlockEntity.java @@ -17,12 +17,6 @@ public ForgeDiskDriveBlockEntity(final BlockPos pos, final BlockState state) { super(pos, state); } - @Override - protected void onClientDriveStateUpdated() { - requestModelDataUpdate(); - super.onClientDriveStateUpdated(); - } - @Nonnull @Override public ModelData getModelData() { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/ForgeDiskInterfaceBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/ForgeDiskInterfaceBlockEntity.java index 4a4a3d98d..f667467da 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/ForgeDiskInterfaceBlockEntity.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/ForgeDiskInterfaceBlockEntity.java @@ -17,12 +17,6 @@ public ForgeDiskInterfaceBlockEntity(final BlockPos pos, final BlockState state) super(pos, state); } - @Override - protected void onClientDriveStateUpdated() { - requestModelDataUpdate(); - super.onClientDriveStateUpdated(); - } - @Nonnull @Override public ModelData getModelData() { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/externalstorage/ForgeExternalStorageBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/externalstorage/ForgeExternalStorageBlockEntity.java new file mode 100644 index 000000000..d3439a74e --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/externalstorage/ForgeExternalStorageBlockEntity.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.neoforge.storage.externalstorage; + +import com.refinedmods.refinedstorage.common.storage.externalstorage.AbstractExternalStorageBlockEntity; +import com.refinedmods.refinedstorage.neoforge.support.render.ModelProperties; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.data.ModelData; + +public class ForgeExternalStorageBlockEntity extends AbstractExternalStorageBlockEntity { + public ForgeExternalStorageBlockEntity(final BlockPos pos, final BlockState state) { + super(pos, state); + } + + @Override + public ModelData getModelData() { + return ModelData.builder().with(ModelProperties.CABLE_CONNECTIONS, connections).build(); + } +} diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/portablegrid/ForgePortableGridBlockEntity.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/portablegrid/ForgePortableGridBlockEntity.java index 2c197d74f..f8c386a52 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/portablegrid/ForgePortableGridBlockEntity.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/portablegrid/ForgePortableGridBlockEntity.java @@ -18,12 +18,6 @@ public ForgePortableGridBlockEntity(final PortableGridType type, final BlockPos super(type, pos, state); } - @Override - protected void onClientDriveStateUpdated() { - requestModelDataUpdate(); - super.onClientDriveStateUpdated(); - } - @Nonnull @Override public ModelData getModelData() { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/support/render/ModelProperties.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/support/render/ModelProperties.java new file mode 100644 index 000000000..6cf1e3107 --- /dev/null +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/support/render/ModelProperties.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage.neoforge.support.render; + +import com.refinedmods.refinedstorage.common.networking.CableConnections; + +import net.neoforged.neoforge.client.model.data.ModelProperty; + +public final class ModelProperties { + public static final ModelProperty CABLE_CONNECTIONS = new ModelProperty<>(); + + private ModelProperties() { + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTestPlots.java index 6dffb40cd..39de460c6 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTestPlots.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTestPlots.java @@ -19,7 +19,7 @@ private ConstructorTestPlots() { static void preparePlot(final GameTestHelper helper, final Direction direction, - final TriConsumer consumer) { + final TriConsumer consumer) { helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); helper.setBlock( @@ -29,7 +29,7 @@ static void preparePlot(final GameTestHelper helper, final BlockPos constructorPos = ZERO.above().above().above(); helper.setBlock(constructorPos, RSBLOCKS.getConstructor().getDefault().rotated(direction)); consumer.accept( - requireBlockEntity(helper, constructorPos, ConstructorBlockEntity.class), + requireBlockEntity(helper, constructorPos, AbstractConstructorBlockEntity.class), constructorPos, helper.startSequence() ); diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTestPlots.java index 0df2e00de..b3454be79 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTestPlots.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTestPlots.java @@ -19,7 +19,7 @@ private DestructorTestPlots() { static void preparePlot(final GameTestHelper helper, final Direction direction, - final TriConsumer consumer) { + final TriConsumer consumer) { helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); helper.setBlock( @@ -29,7 +29,7 @@ static void preparePlot(final GameTestHelper helper, final BlockPos destructorPos = ZERO.above().above().above(); helper.setBlock(destructorPos, RSBLOCKS.getDestructor().getDefault().rotated(direction)); consumer.accept( - requireBlockEntity(helper, destructorPos, DestructorBlockEntity.class), + requireBlockEntity(helper, destructorPos, AbstractDestructorBlockEntity.class), destructorPos, helper.startSequence() ); diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTestPlots.java index 3ceb1ed51..6bad1fa4e 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTestPlots.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTestPlots.java @@ -21,7 +21,7 @@ private ExporterTestPlots() { static void preparePlot(final GameTestHelper helper, final Block block, final Direction direction, - final TriConsumer consumer) { + final TriConsumer consumer) { helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); helper.setBlock( @@ -32,7 +32,7 @@ static void preparePlot(final GameTestHelper helper, helper.setBlock(exporterPos, RSBLOCKS.getExporter().getDefault().rotated(direction)); helper.setBlock(exporterPos.east(), block); consumer.accept( - requireBlockEntity(helper, exporterPos, ExporterBlockEntity.class), + requireBlockEntity(helper, exporterPos, AbstractExporterBlockEntity.class), exporterPos, helper.startSequence() ); diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java index 9c07f625c..898bb6d4f 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java @@ -25,7 +25,7 @@ private ImporterTestPlots() { static void preparePlot(final GameTestHelper helper, final Direction direction, - final TriConsumer consumer) { + final TriConsumer consumer) { helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); helper.setBlock( @@ -35,7 +35,7 @@ static void preparePlot(final GameTestHelper helper, final BlockPos importerPos = ZERO.above().above().above(); helper.setBlock(importerPos, RSBLOCKS.getImporter().getDefault().rotated(direction)); consumer.accept( - requireBlockEntity(helper, importerPos, ImporterBlockEntity.class), + requireBlockEntity(helper, importerPos, AbstractImporterBlockEntity.class), importerPos, helper.startSequence() ); From 5028bbb56f56e0d86f71ad30de3493e862eaa57e Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 14 Aug 2024 21:10:58 +0200 Subject: [PATCH 14/83] refactor: disk interface model now has a color property on forge --- CHANGELOG.md | 4 ++++ config/checkstyle/checkstyle.xml | 4 +++- .../models/block/disk_interface/black.json | 3 ++- .../models/block/disk_interface/blue.json | 3 ++- .../models/block/disk_interface/brown.json | 3 ++- .../models/block/disk_interface/cyan.json | 3 ++- .../models/block/disk_interface/gray.json | 3 ++- .../models/block/disk_interface/green.json | 3 ++- .../models/block/disk_interface/light_blue.json | 1 + .../models/block/disk_interface/light_gray.json | 3 ++- .../models/block/disk_interface/lime.json | 3 ++- .../models/block/disk_interface/magenta.json | 3 ++- .../models/block/disk_interface/orange.json | 3 ++- .../models/block/disk_interface/pink.json | 3 ++- .../models/block/disk_interface/purple.json | 3 ++- .../models/block/disk_interface/red.json | 3 ++- .../models/block/disk_interface/white.json | 3 ++- .../models/block/disk_interface/yellow.json | 3 ++- .../models/item/black_disk_interface.json | 3 ++- .../models/item/blue_disk_interface.json | 3 ++- .../models/item/brown_disk_interface.json | 3 ++- .../models/item/cyan_disk_interface.json | 3 ++- .../refinedstorage/models/item/disk_interface.json | 1 + .../models/item/gray_disk_interface.json | 3 ++- .../models/item/green_disk_interface.json | 3 ++- .../models/item/light_gray_disk_interface.json | 3 ++- .../models/item/lime_disk_interface.json | 3 ++- .../models/item/magenta_disk_interface.json | 3 ++- .../models/item/orange_disk_interface.json | 3 ++- .../models/item/pink_disk_interface.json | 3 ++- .../models/item/purple_disk_interface.json | 3 ++- .../models/item/red_disk_interface.json | 3 ++- .../models/item/white_disk_interface.json | 3 ++- .../models/item/yellow_disk_interface.json | 3 ++- .../refinedstorage/common/content/Blocks.java | 13 +++++++------ .../common/exporter/ExporterBlock.java | 5 ++--- .../common/importer/ImporterBlock.java | 5 ++--- .../neoforge/ClientModInitializer.java | 6 ++---- .../neoforge/datagen/BlockModelProviderImpl.java | 10 ++++------ ...Builder.java => ColoredCustomLoaderBuilder.java} | 12 ++++++------ .../neoforge/datagen/ItemModelProviderImpl.java | 8 ++++---- .../diskinterface/DiskInterfaceGeometryLoader.java | 12 +++++------- 42 files changed, 101 insertions(+), 70 deletions(-) rename refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/{CableCustomLoaderBuilder.java => ColoredCustomLoaderBuilder.java} (61%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e1394ec1..8eee358d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed + +- Optimized memory usage and startup time of cable models. After updating, cables will appear disconnected, but this is only visual. Cause a block update to fix this. + ### Fixed - Fixed mouse keybindings not working on NeoForge. diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 49d68cdb1..17c992bd4 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -109,7 +109,9 @@ - + + + diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/black.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/black.json index 47bcf93c9..301a3d76c 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/black.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/black.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:black_disk_interface" + "color": "black", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/blue.json index c4376dc8b..81dd9b752 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/blue.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/blue.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:blue_disk_interface" + "color": "blue", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/brown.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/brown.json index 3b4cc4011..c8f70c2a3 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/brown.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/brown.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:brown_disk_interface" + "color": "brown", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/cyan.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/cyan.json index 7744a3b75..e07184b27 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/cyan.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/cyan.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:cyan_disk_interface" + "color": "cyan", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/gray.json index 36d8b1e02..fe9326d6f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/gray.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/gray.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:gray_disk_interface" + "color": "gray", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/green.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/green.json index b6767a803..699db9508 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/green.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/green.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:green_disk_interface" + "color": "green", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_blue.json index b77981d41..9d90f595e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_blue.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_blue.json @@ -1,3 +1,4 @@ { + "color": "light_blue", "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_gray.json index 2a93274c2..104c6297e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_gray.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/light_gray.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:light_gray_disk_interface" + "color": "light_gray", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/lime.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/lime.json index efb6e86fa..4ff14a6fe 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/lime.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/lime.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:lime_disk_interface" + "color": "lime", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/magenta.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/magenta.json index 8e013eb99..58bbbfe91 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/magenta.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/magenta.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:magenta_disk_interface" + "color": "magenta", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/orange.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/orange.json index 5b4861e4a..4e8332956 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/orange.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/orange.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:orange_disk_interface" + "color": "orange", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/pink.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/pink.json index cd6d82ca6..a28afd77f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/pink.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/pink.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:pink_disk_interface" + "color": "pink", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/purple.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/purple.json index c1f2a6350..fa3deef43 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/purple.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/purple.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:purple_disk_interface" + "color": "purple", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/red.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/red.json index b379ab9dd..a7b4d343a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/red.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/red.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:red_disk_interface" + "color": "red", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/white.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/white.json index aa7be645d..fd841efcf 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/white.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/white.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:white_disk_interface" + "color": "white", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/yellow.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/yellow.json index 3d5b3a3b1..59b511dcf 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/yellow.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/disk_interface/yellow.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:yellow_disk_interface" + "color": "yellow", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_disk_interface.json index 47bcf93c9..301a3d76c 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:black_disk_interface" + "color": "black", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_disk_interface.json index c4376dc8b..81dd9b752 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:blue_disk_interface" + "color": "blue", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_disk_interface.json index 3b4cc4011..c8f70c2a3 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:brown_disk_interface" + "color": "brown", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_disk_interface.json index 7744a3b75..e07184b27 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:cyan_disk_interface" + "color": "cyan", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/disk_interface.json index b77981d41..9d90f595e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/disk_interface.json @@ -1,3 +1,4 @@ { + "color": "light_blue", "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_disk_interface.json index 36d8b1e02..fe9326d6f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:gray_disk_interface" + "color": "gray", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_disk_interface.json index b6767a803..699db9508 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:green_disk_interface" + "color": "green", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_disk_interface.json index 2a93274c2..104c6297e 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:light_gray_disk_interface" + "color": "light_gray", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_disk_interface.json index efb6e86fa..4ff14a6fe 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:lime_disk_interface" + "color": "lime", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_disk_interface.json index 8e013eb99..58bbbfe91 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:magenta_disk_interface" + "color": "magenta", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_disk_interface.json index 5b4861e4a..4e8332956 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:orange_disk_interface" + "color": "orange", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_disk_interface.json index cd6d82ca6..a28afd77f 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:pink_disk_interface" + "color": "pink", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_disk_interface.json index c1f2a6350..fa3deef43 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:purple_disk_interface" + "color": "purple", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_disk_interface.json index b379ab9dd..a7b4d343a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:red_disk_interface" + "color": "red", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_disk_interface.json index aa7be645d..fd841efcf 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:white_disk_interface" + "color": "white", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_disk_interface.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_disk_interface.json index 3d5b3a3b1..59b511dcf 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_disk_interface.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_disk_interface.json @@ -1,3 +1,4 @@ { - "loader": "refinedstorage:yellow_disk_interface" + "color": "yellow", + "loader": "refinedstorage:disk_interface" } \ No newline at end of file diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java index 7026662f4..46b1016ae 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java @@ -1,10 +1,10 @@ package com.refinedmods.refinedstorage.common.content; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlock; -import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorBlock; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; -import com.refinedmods.refinedstorage.common.constructordestructor.DestructorBlock; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; +import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorBlock; +import com.refinedmods.refinedstorage.common.constructordestructor.DestructorBlock; import com.refinedmods.refinedstorage.common.controller.AbstractControllerBlock; import com.refinedmods.refinedstorage.common.controller.ControllerBlock; import com.refinedmods.refinedstorage.common.controller.ControllerBlockEntityTicker; @@ -17,10 +17,10 @@ import com.refinedmods.refinedstorage.common.grid.CraftingGridBlock; import com.refinedmods.refinedstorage.common.grid.GridBlock; import com.refinedmods.refinedstorage.common.iface.InterfaceBlock; -import com.refinedmods.refinedstorage.common.importer.ImporterBlock; import com.refinedmods.refinedstorage.common.importer.AbstractImporterBlockEntity; -import com.refinedmods.refinedstorage.common.networking.CableBlock; +import com.refinedmods.refinedstorage.common.importer.ImporterBlock; import com.refinedmods.refinedstorage.common.networking.AbstractCableBlockEntity; +import com.refinedmods.refinedstorage.common.networking.CableBlock; import com.refinedmods.refinedstorage.common.networking.NetworkReceiverBlock; import com.refinedmods.refinedstorage.common.networking.NetworkTransmitterBlock; import com.refinedmods.refinedstorage.common.networking.RelayBlock; @@ -31,8 +31,8 @@ import com.refinedmods.refinedstorage.common.storage.diskdrive.DiskDriveBlock; import com.refinedmods.refinedstorage.common.storage.diskinterface.AbstractDiskInterfaceBlockEntity; import com.refinedmods.refinedstorage.common.storage.diskinterface.DiskInterfaceBlock; -import com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageBlock; import com.refinedmods.refinedstorage.common.storage.externalstorage.AbstractExternalStorageBlockEntity; +import com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageBlock; import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridBlock; import com.refinedmods.refinedstorage.common.storage.storageblock.FluidStorageBlock; import com.refinedmods.refinedstorage.common.storage.storageblock.ItemStorageBlock; @@ -169,7 +169,8 @@ public final class Blocks { private Blocks() { } - public BlockColorMap setCable(final BlockEntityProvider provider) { + public BlockColorMap setCable( + final BlockEntityProvider provider) { cable = new BlockColorMap<>( (color, name) -> new CableBlock(color, name, provider), ContentIds.CABLE, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java index cea643d7a..9f29833f6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterBlock.java @@ -36,9 +36,8 @@ public class ExporterBlock extends AbstractDirectionalCableBlock implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "exporter.help"); private static final Map SHAPE_CACHE = new ConcurrentHashMap<>(); - private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( - BlockEntities.INSTANCE::getExporter - ); + private static final AbstractBlockEntityTicker TICKER = + new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getExporter); private final DyeColor color; private final MutableComponent name; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java index 84e5e921e..cf33a246f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterBlock.java @@ -36,9 +36,8 @@ public class ImporterBlock extends AbstractDirectionalCableBlock implements ColorableBlock, EntityBlock, BlockItemProvider { private static final Component HELP = createTranslation("item", "importer.help"); private static final Map SHAPE_CACHE = new HashMap<>(); - private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( - BlockEntities.INSTANCE::getImporter - ); + private static final AbstractBlockEntityTicker TICKER = + new NetworkNodeBlockEntityTicker<>(BlockEntities.INSTANCE::getImporter); private final DyeColor color; private final MutableComponent name; diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java index 9d1bd1218..2a0effae4 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java @@ -10,7 +10,6 @@ import com.refinedmods.refinedstorage.common.autocrafting.PatternTooltipCache; import com.refinedmods.refinedstorage.common.configurationcard.ConfigurationCardItemPropertyFunction; import com.refinedmods.refinedstorage.common.content.BlockEntities; -import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.content.Items; import com.refinedmods.refinedstorage.common.content.KeyMappings; @@ -62,6 +61,7 @@ import static com.refinedmods.refinedstorage.common.content.ContentIds.CABLE; import static com.refinedmods.refinedstorage.common.content.ContentIds.DISK_DRIVE; +import static com.refinedmods.refinedstorage.common.content.ContentIds.DISK_INTERFACE; import static com.refinedmods.refinedstorage.common.content.ContentIds.PATTERN; import static com.refinedmods.refinedstorage.common.content.ContentIds.PORTABLE_GRID; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; @@ -106,9 +106,7 @@ public static void onRegisterCustomModels(final ModelEvent.RegisterGeometryLoade e.register(PATTERN, new PatternGeometryLoader()); e.register(DISK_DRIVE, new DiskDriveGeometryLoader()); e.register(PORTABLE_GRID, new PortableGridGeometryLoader()); - Blocks.INSTANCE.getDiskInterface().forEach( - (color, id, supplier) -> e.register(id, new DiskInterfaceGeometryLoader(color)) - ); + e.register(DISK_INTERFACE, new DiskInterfaceGeometryLoader()); e.register(CABLE, new CableGeometryLoader()); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java index ec95c73b7..8d2345d8c 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java @@ -7,7 +7,6 @@ import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.neoforged.neoforge.client.model.generators.BlockModelProvider; -import net.neoforged.neoforge.client.model.generators.CustomLoaderBuilder; import net.neoforged.neoforge.common.data.ExistingFileHelper; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.MOD_ID; @@ -73,7 +72,7 @@ private void registerCables() { .texture("cable", texture) .texture(PARTICLE_TEXTURE, texture); getBuilder("block/cable/" + color.getName()) - .customLoader((blockModelBuilder, existingFileHelper) -> new CableCustomLoaderBuilder( + .customLoader((blockModelBuilder, existingFileHelper) -> new ColoredCustomLoaderBuilder<>( ContentIds.CABLE, blockModelBuilder, existingFileHelper, @@ -282,15 +281,14 @@ private void registerRelays() { } private void registerDiskInterfaces() { - // TODO: add color as property and use single loader? registerRightLeftBackFrontTopModel(Blocks.INSTANCE.getDiskInterface(), "disk_interface", "base_"); Blocks.INSTANCE.getDiskInterface() .forEach((color, id, block) -> getBuilder("block/disk_interface/" + color.getName()) - .customLoader((blockModelBuilder, existingFileHelper) -> new CustomLoaderBuilder<>( - id, + .customLoader((blockModelBuilder, existingFileHelper) -> new ColoredCustomLoaderBuilder<>( + ContentIds.DISK_INTERFACE, blockModelBuilder, existingFileHelper, - true + color ) { }).end()); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ColoredCustomLoaderBuilder.java similarity index 61% rename from refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java rename to refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ColoredCustomLoaderBuilder.java index 9fc4322bc..42ca3e08f 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/CableCustomLoaderBuilder.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ColoredCustomLoaderBuilder.java @@ -3,17 +3,17 @@ import com.google.gson.JsonObject; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; -import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; import net.neoforged.neoforge.client.model.generators.CustomLoaderBuilder; +import net.neoforged.neoforge.client.model.generators.ModelBuilder; import net.neoforged.neoforge.common.data.ExistingFileHelper; -class CableCustomLoaderBuilder extends CustomLoaderBuilder { +class ColoredCustomLoaderBuilder> extends CustomLoaderBuilder { private final DyeColor color; - CableCustomLoaderBuilder(final ResourceLocation loaderId, - final BlockModelBuilder parent, - final ExistingFileHelper existingFileHelper, - final DyeColor color) { + ColoredCustomLoaderBuilder(final ResourceLocation loaderId, + final T parent, + final ExistingFileHelper existingFileHelper, + final DyeColor color) { super(loaderId, parent, existingFileHelper, true); this.color = color; } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java index 72ae46e81..1b34f7ac6 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.common.constructordestructor.DestructorBlock; import com.refinedmods.refinedstorage.common.content.Blocks; import com.refinedmods.refinedstorage.common.content.ColorMap; +import com.refinedmods.refinedstorage.common.content.ContentIds; import com.refinedmods.refinedstorage.common.exporter.ExporterBlock; import com.refinedmods.refinedstorage.common.importer.ImporterBlock; import com.refinedmods.refinedstorage.common.networking.CableBlock; @@ -15,7 +16,6 @@ import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; -import net.neoforged.neoforge.client.model.generators.CustomLoaderBuilder; import net.neoforged.neoforge.client.model.generators.ItemModelProvider; import net.neoforged.neoforge.client.model.generators.ModelFile; import net.neoforged.neoforge.common.data.ExistingFileHelper; @@ -209,11 +209,11 @@ private void registerRelays() { private void registerDiskInterfaces() { final var blocks = Blocks.INSTANCE.getDiskInterface(); blocks.forEach((color, id, block) -> getBuilder(id.getPath()).customLoader( - (blockModelBuilder, existingFileHelper) -> new CustomLoaderBuilder<>( - id, + (blockModelBuilder, existingFileHelper) -> new ColoredCustomLoaderBuilder<>( + ContentIds.DISK_INTERFACE, blockModelBuilder, existingFileHelper, - true + color ) { }).end()); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/DiskInterfaceGeometryLoader.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/DiskInterfaceGeometryLoader.java index ee3971486..ed5490763 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/DiskInterfaceGeometryLoader.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/storage/diskinterface/DiskInterfaceGeometryLoader.java @@ -5,16 +5,14 @@ import net.minecraft.world.item.DyeColor; import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; -public class DiskInterfaceGeometryLoader implements IGeometryLoader { - private final DyeColor color; - - public DiskInterfaceGeometryLoader(final DyeColor color) { - this.color = color; - } +import static com.refinedmods.refinedstorage.common.content.Blocks.COLOR; +public class DiskInterfaceGeometryLoader implements IGeometryLoader { @Override public DiskInterfaceUnbakedGeometry read(final JsonObject jsonObject, final JsonDeserializationContext deserializationContext) { - return new DiskInterfaceUnbakedGeometry(color); + final String color = jsonObject.get("color").getAsString(); + final DyeColor dyeColor = DyeColor.byName(color, COLOR); + return new DiskInterfaceUnbakedGeometry(dyeColor); } } From d3fe39d8c6dfdb585fd4e6f8b317b046a90533b9 Mon Sep 17 00:00:00 2001 From: Raoul Date: Thu, 15 Aug 2024 11:42:36 +0200 Subject: [PATCH 15/83] chore: update translation Chinese Traditional from crowdin --- .../assets/refinedstorage/lang/zh_tw.json | 194 ++++++++++-------- 1 file changed, 112 insertions(+), 82 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json index adf9fc563..1c1983983 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json @@ -1,82 +1,96 @@ { - "mod.refinedstorage": "Refined Storage", - "block.refinedstorage.cable": "Cable", - "block.refinedstorage.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", - "block.refinedstorage.quartz_enriched_copper_block": "Block of Quartz Enriched Copper", - "block.refinedstorage.disk_drive": "Disk Drive", - "block.refinedstorage.machine_casing": "Machine Casing", - "block.refinedstorage.grid": "Grid", - "block.refinedstorage.crafting_grid": "Crafting Grid", - "block.refinedstorage.controller": "Controller", - "block.refinedstorage.creative_controller": "Creative Controller", - "block.refinedstorage.1k_storage_block": "1K Storage Block", - "block.refinedstorage.4k_storage_block": "4K Storage Block", - "block.refinedstorage.16k_storage_block": "16K Storage Block", - "block.refinedstorage.64k_storage_block": "64K Storage Block", - "block.refinedstorage.creative_storage_block": "Creative Storage Block", - "block.refinedstorage.64b_fluid_storage_block": "64B Fluid Storage Block", - "block.refinedstorage.256b_fluid_storage_block": "256B Fluid Storage Block", - "block.refinedstorage.1024b_fluid_storage_block": "1024B Fluid Storage Block", - "block.refinedstorage.4096b_fluid_storage_block": "4096B Fluid Storage Block", - "block.refinedstorage.creative_fluid_storage_block": "Creative Fluid Storage Block", - "block.refinedstorage.importer": "Importer", - "block.refinedstorage.exporter": "Exporter", - "block.refinedstorage.interface": "Interface", - "block.refinedstorage.external_storage": "External Storage", - "block.refinedstorage.detector": "Detector", - "block.refinedstorage.constructor": "Constructor", - "block.refinedstorage.destructor": "Destructor", - "block.refinedstorage.wireless_transmitter": "Wireless Transmitter", - "block.refinedstorage.storage_monitor": "Storage Monitor", - "block.refinedstorage.network_receiver": "Network Receiver", - "block.refinedstorage.network_transmitter": "Network Transmitter", - "block.refinedstorage.portable_grid": "Portable Grid", - "block.refinedstorage.creative_portable_grid": "Creative Portable Grid", - "block.refinedstorage.security_manager": "Security Manager", + "mod.refinedstorage": "精緻存儲", + "block.refinedstorage.cable": "纜線", + "block.refinedstorage.quartz_enriched_iron_block": "富石英鐵方塊", + "block.refinedstorage.quartz_enriched_copper_block": "富石英銅方塊", + "block.refinedstorage.disk_drive": "硬碟驅動器", + "block.refinedstorage.machine_casing": "機器外殼", + "block.refinedstorage.grid": "終端", + "block.refinedstorage.pattern_grid": "模板終端", + "block.refinedstorage.crafting_grid": "合成終端", + "block.refinedstorage.controller": "控制器", + "block.refinedstorage.creative_controller": "創造控制器", + "block.refinedstorage.1k_storage_block": "1k 儲存方塊", + "block.refinedstorage.4k_storage_block": "4k 儲存方塊", + "block.refinedstorage.16k_storage_block": "16k 儲存方塊", + "block.refinedstorage.64k_storage_block": "64k 儲存方塊", + "block.refinedstorage.creative_storage_block": "創造儲存方塊", + "block.refinedstorage.64b_fluid_storage_block": "64B 液體存儲方塊", + "block.refinedstorage.256b_fluid_storage_block": "256B 液體存儲方塊", + "block.refinedstorage.1024b_fluid_storage_block": "1024B 液體存儲方塊", + "block.refinedstorage.4096b_fluid_storage_block": "4096B 液體存儲方塊", + "block.refinedstorage.creative_fluid_storage_block": "創造液體存儲方塊", + "block.refinedstorage.importer": "匯入器", + "block.refinedstorage.exporter": "匯出器", + "block.refinedstorage.interface": "介面", + "block.refinedstorage.external_storage": "外部儲存空間", + "block.refinedstorage.detector": "偵測器", + "block.refinedstorage.constructor": "建構器", + "block.refinedstorage.destructor": "解構器", + "block.refinedstorage.wireless_transmitter": "無線傳輸器", + "block.refinedstorage.storage_monitor": "儲存監控器", + "block.refinedstorage.network_receiver": "網路接收器", + "block.refinedstorage.network_transmitter": "網路發送器", + "block.refinedstorage.portable_grid": "攜帶式終端", + "block.refinedstorage.creative_portable_grid": "創造攜帶式終端", + "block.refinedstorage.security_manager": "權限管理器", "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", - "block.refinedstorage.relay": "Relay", - "block.refinedstorage.disk_interface": "Disk Interface", - "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", - "gui.refinedstorage.disk_drive.disks": "Disks", + "block.refinedstorage.relay": "中繼", + "block.refinedstorage.disk_interface": "硬碟介面", + "gui.refinedstorage.controller.redstone_mode_help": "未啟動該裝置時,存儲網路將無法將其作為能量來源", + "gui.refinedstorage.disk_drive.disks": "硬碟", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", "gui.refinedstorage.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", - "gui.refinedstorage.grid.sorting.direction": "Sorting direction", - "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", - "gui.refinedstorage.grid.sorting.direction.descending": "Descending", - "gui.refinedstorage.grid.sorting.type": "Sorting type", - "gui.refinedstorage.grid.sorting.type.quantity": "Quantity", - "gui.refinedstorage.grid.sorting.type.name": "Name", - "gui.refinedstorage.grid.sorting.type.id": "ID", - "gui.refinedstorage.grid.sorting.type.last_modified": "Last modified", - "gui.refinedstorage.grid.auto_selected": "Auto-selected", - "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Synchronization mode", - "gui.refinedstorage.grid.synchronizer.off": "Off", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", - "gui.refinedstorage.grid.resource_type": "Resource type", - "gui.refinedstorage.grid.resource_type.all": "All", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", - "gui.refinedstorage.crafting_grid.move.network": "Move items to network", - "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", - "gui.refinedstorage.screen_size": "Screen size", - "gui.refinedstorage.screen_size.stretch": "Stretch", - "gui.refinedstorage.screen_size.small": "Small", - "gui.refinedstorage.screen_size.medium": "Medium", - "gui.refinedstorage.screen_size.large": "Large", - "gui.refinedstorage.screen_size.extra_large": "Extra large", - "gui.refinedstorage.detector.mode": "Mode", - "gui.refinedstorage.detector.mode.under": "Emit redstone signal when under the amount", - "gui.refinedstorage.detector.mode.equal": "Emit redstone signal when on the amount", - "gui.refinedstorage.detector.mode.above": "Emit redstone signal when above the amount", - "gui.refinedstorage.detector.filter_help": "The resource that should be detected in the storage network.", - "gui.refinedstorage.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage.grid.sorting.direction": "排序方向", + "gui.refinedstorage.grid.sorting.direction.ascending": "昇冪排序", + "gui.refinedstorage.grid.sorting.direction.descending": "降冪排序", + "gui.refinedstorage.grid.sorting.type": "排序類型", + "gui.refinedstorage.grid.sorting.type.quantity": "數量", + "gui.refinedstorage.grid.sorting.type.name": "名稱", + "gui.refinedstorage.grid.sorting.type.id": "物品ID", + "gui.refinedstorage.grid.sorting.type.last_modified": "上次修改", + "gui.refinedstorage.grid.auto_selected": "自動選取", + "gui.refinedstorage.grid.auto_selected.help": "當開啟終端時是否自動選取", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "關閉", + "gui.refinedstorage.grid.synchronization_mode.off.help": "不要同步搜尋欄位", + "gui.refinedstorage.grid.resource_type": "資源類型", + "gui.refinedstorage.grid.resource_type.all": "全部", + "gui.refinedstorage.grid.resource_type.help": "過濾特定資源類型", + "gui.refinedstorage.crafting_grid.move.network": "將物品移入網路", + "gui.refinedstorage.crafting_grid.move.inventory": "將物品移入背包", + "gui.refinedstorage.pattern_grid.create_pattern": "創建樣板", + "gui.refinedstorage.pattern_grid.clear": "清除", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "輸入", + "gui.refinedstorage.pattern_grid.processing.outputs": "輸出", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "擴展", + "gui.refinedstorage.screen_size": "螢幕大小", + "gui.refinedstorage.screen_size.stretch": "拉伸", + "gui.refinedstorage.screen_size.small": "小", + "gui.refinedstorage.screen_size.medium": "中", + "gui.refinedstorage.screen_size.large": "大", + "gui.refinedstorage.screen_size.extra_large": "特大", + "gui.refinedstorage.detector.mode": "模式", + "gui.refinedstorage.detector.mode.under": "當數量低於特定數值時即發出紅石信號", + "gui.refinedstorage.detector.mode.equal": "當數量等於特定數值時即發出紅石信號", + "gui.refinedstorage.detector.mode.above": "當數量大於特定數值時即發出紅石信號", + "gui.refinedstorage.detector.filter_help": "在網路中該被檢測的資源", + "gui.refinedstorage.destructor.pickup_items": "撿起物品而非破壞之", "gui.refinedstorage.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", "gui.refinedstorage.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", "gui.refinedstorage.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", - "gui.refinedstorage.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage.constructor.drop_items": "掉落物品而非放置之", "gui.refinedstorage.constructor.filter_help": "The resources that should be placed from the storage network.", "gui.refinedstorage.interface.filter_help": "The resources that should be exported from the storage network.", "gui.refinedstorage.exporter.filter_help": "The resources that should be exported from the storage network.", @@ -84,6 +98,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "Redstone mode", "gui.refinedstorage.redstone_mode.ignore": "Ignore", @@ -101,23 +116,23 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Amount", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Set", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Filter mode", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", "gui.refinedstorage.fuzzy_mode.on": "On", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Off", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -133,6 +148,8 @@ "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -170,6 +187,7 @@ "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -196,8 +214,8 @@ "item.refinedstorage.4k_storage_disk": "4K Storage Disk", "item.refinedstorage.16k_storage_disk": "16K Storage Disk", "item.refinedstorage.64k_storage_disk": "64K Storage Disk", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -271,6 +289,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +319,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +345,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -373,6 +399,10 @@ "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", From ab15150db4966c3746936d0be7544c92c3b6905e Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 18 Aug 2024 13:15:51 +0200 Subject: [PATCH 16/83] fix: reuse grid resources when rebuilding view list This fixes performance issues with gathering item tooltips. --- CHANGELOG.md | 1 + .../api/grid/view/GridViewImpl.java | 70 +++++++++++-------- 2 files changed, 43 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8eee358d9..4f57381a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed - Optimized memory usage and startup time of cable models. After updating, cables will appear disconnected, but this is only visual. Cause a block update to fix this. +- Optimized performance of searching in the Grid. ### Fixed diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java index 6f84f5c7e..e0a82b56b 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java @@ -28,9 +28,7 @@ public class GridViewImpl implements GridView { private final GridResourceFactory resourceFactory; private final Map trackedResources = new HashMap<>(); - private List viewList = new ArrayList<>(); - private final Map viewListIndex = new HashMap<>(); - + private ViewList viewList = new ViewList(new ArrayList<>(), new HashMap<>()); private GridSortingType sortingType; private GridSortingDirection sortingDirection = GridSortingDirection.ASCENDING; private BiPredicate filter = (view, resource) -> true; @@ -100,22 +98,35 @@ public long getAmount(final ResourceKey resource) { @Override public void sort() { LOGGER.info("Sorting grid view"); + viewList = createViewList(); + notifyListener(); + } - viewListIndex.clear(); - - final List newViewList = new ArrayList<>(); + private ViewList createViewList() { + final List list = new ArrayList<>(); + final Map index = new HashMap<>(); for (final ResourceKey resource : backingList.getAll()) { - resourceFactory.apply(resource).ifPresent(gridResource -> { - if (filter.test(this, gridResource)) { - newViewList.add(gridResource); - viewListIndex.put(resource, gridResource); - } - }); + final GridResource existingGridResource = viewList.index.get(resource); + if (existingGridResource != null) { + tryAddGridResourceIntoViewList(existingGridResource, list, index, resource); + } else { + resourceFactory.apply(resource).ifPresent( + gridResource -> tryAddGridResourceIntoViewList(gridResource, list, index, resource) + ); + } } - newViewList.sort(getComparator()); - viewList = newViewList; + list.sort(getComparator()); + return new ViewList(list, index); + } - notifyListener(); + private void tryAddGridResourceIntoViewList(final GridResource gridResource, + final List list, + final Map index, + final ResourceKey resource) { + if (filter.test(this, gridResource)) { + list.add(gridResource); + index.put(resource, gridResource); + } } @Override @@ -126,7 +137,7 @@ public void onChange(final ResourceKey resource, updateOrRemoveTrackedResource(resource, trackedResource); - final GridResource gridResource = viewListIndex.get(resource); + final GridResource gridResource = viewList.index.get(resource); if (gridResource != null) { LOGGER.debug("{} was already found in the view list", resource); if (gridResource.isZeroed()) { @@ -162,12 +173,12 @@ private void reinsertZeroedResourceIntoViewList(final ResourceKey resource, final GridResource oldGridResource) { LOGGER.debug("{} was zeroed, unzeroing", resource); final GridResource newResource = resourceFactory.apply(operationResult.resource()).orElseThrow(); - viewListIndex.put(resource, newResource); + viewList.index.put(resource, newResource); final int index = CoreValidations.validateNotNegative( - viewList.indexOf(oldGridResource), + viewList.list.indexOf(oldGridResource), "Cannot reinsert previously zeroed resource, it was not found" ); - viewList.set(index, newResource); + viewList.list.set(index, newResource); } private void handleChangeForExistingResource(final ResourceKey resource, @@ -189,9 +200,9 @@ private void handleChangeForExistingResource(final ResourceKey resource, private void updateExistingResourceInViewList(final ResourceKey resource, final GridResource gridResource, final boolean noLongerAvailable) { - viewList.remove(gridResource); + viewList.list.remove(gridResource); if (noLongerAvailable) { - viewListIndex.remove(resource); + viewList.index.remove(resource); notifyListener(); } else { addIntoView(gridResource); @@ -204,7 +215,7 @@ private void handleChangeForNewResource(final ResourceKey resource, final GridResource gridResource = resourceFactory.apply(operationResult.resource()).orElseThrow(); if (filter.test(this, gridResource)) { LOGGER.debug("Filter allowed, actually adding {}", resource); - viewListIndex.put(resource, gridResource); + viewList.index.put(resource, gridResource); addIntoView(gridResource); notifyListener(); } @@ -212,11 +223,11 @@ private void handleChangeForNewResource(final ResourceKey resource, private void addIntoView(final GridResource resource) { // Calculate the position according to sorting rules. - final int wouldBePosition = Collections.binarySearch(viewList, resource, getComparator()); + final int wouldBePosition = Collections.binarySearch(viewList.list, resource, getComparator()); // Most of the time, the "would be" position is negative, indicating that the resource wasn't found yet in the // list, comparing with sorting rules. The absolute of this position would be the "real" position if sorted. if (wouldBePosition < 0) { - viewList.add(-wouldBePosition - 1, resource); + viewList.list.add(-wouldBePosition - 1, resource); } else { // If the "would-be" position is positive, this means that the resource is already contained in the list, // comparing with sorting rules. @@ -225,7 +236,7 @@ private void addIntoView(final GridResource resource) { // For example: a resource with different identity but the same name (in Minecraft: an enchanted book // with different NBT). // In that case, just insert it after the "existing" resource. - viewList.add(wouldBePosition + 1, resource); + viewList.list.add(wouldBePosition + 1, resource); } } @@ -247,7 +258,7 @@ private Comparator getComparator() { @Override public List getViewList() { - return viewList; + return viewList.list; } @Override @@ -258,8 +269,11 @@ public ResourceList copyBackingList() { @Override public void clear() { backingList.clear(); - viewListIndex.clear(); + viewList.index.clear(); trackedResources.clear(); - viewList.clear(); + viewList.list.clear(); + } + + private record ViewList(List list, Map index) { } } From 3d4d1b7c279f8fc4864ac062ddea39f2d8890981 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 23 Aug 2024 18:06:47 +0200 Subject: [PATCH 17/83] feat: crafter block --- .../blockstates/black_crafter.json | 56 +++++++++++++ .../blockstates/blue_crafter.json | 56 +++++++++++++ .../blockstates/brown_crafter.json | 56 +++++++++++++ .../refinedstorage/blockstates/crafter.json | 56 +++++++++++++ .../blockstates/cyan_crafter.json | 56 +++++++++++++ .../blockstates/gray_crafter.json | 56 +++++++++++++ .../blockstates/green_crafter.json | 56 +++++++++++++ .../blockstates/light_gray_crafter.json | 56 +++++++++++++ .../blockstates/lime_crafter.json | 56 +++++++++++++ .../blockstates/magenta_crafter.json | 56 +++++++++++++ .../blockstates/orange_crafter.json | 56 +++++++++++++ .../blockstates/pink_crafter.json | 56 +++++++++++++ .../blockstates/purple_crafter.json | 56 +++++++++++++ .../blockstates/red_crafter.json | 56 +++++++++++++ .../blockstates/white_crafter.json | 56 +++++++++++++ .../blockstates/yellow_crafter.json | 56 +++++++++++++ .../models/block/crafter/black.json | 18 ++++ .../models/block/crafter/blue.json | 18 ++++ .../models/block/crafter/brown.json | 18 ++++ .../models/block/crafter/cyan.json | 18 ++++ .../models/block/crafter/gray.json | 18 ++++ .../models/block/crafter/green.json | 18 ++++ .../models/block/crafter/inactive.json | 18 ++++ .../models/block/crafter/light_blue.json | 18 ++++ .../models/block/crafter/light_gray.json | 18 ++++ .../models/block/crafter/lime.json | 18 ++++ .../models/block/crafter/magenta.json | 18 ++++ .../models/block/crafter/orange.json | 18 ++++ .../models/block/crafter/pink.json | 18 ++++ .../models/block/crafter/purple.json | 18 ++++ .../models/block/crafter/red.json | 18 ++++ .../models/block/crafter/white.json | 18 ++++ .../models/block/crafter/yellow.json | 18 ++++ .../models/item/black_crafter.json | 3 + .../models/item/blue_crafter.json | 3 + .../models/item/brown_crafter.json | 3 + .../refinedstorage/models/item/crafter.json | 3 + .../models/item/cyan_crafter.json | 3 + .../models/item/gray_crafter.json | 3 + .../models/item/green_crafter.json | 3 + .../models/item/light_gray_crafter.json | 3 + .../models/item/lime_crafter.json | 3 + .../models/item/magenta_crafter.json | 3 + .../models/item/orange_crafter.json | 3 + .../models/item/pink_crafter.json | 3 + .../models/item/purple_crafter.json | 3 + .../models/item/red_crafter.json | 3 + .../models/item/white_crafter.json | 3 + .../models/item/yellow_crafter.json | 3 + .../recipes/misc/coloring/black_crafter.json | 32 ++++++++ .../recipes/misc/coloring/blue_crafter.json | 32 ++++++++ .../recipes/misc/coloring/brown_crafter.json | 32 ++++++++ .../recipes/misc/coloring/cyan_crafter.json | 32 ++++++++ .../recipes/misc/coloring/gray_crafter.json | 32 ++++++++ .../recipes/misc/coloring/green_crafter.json | 32 ++++++++ .../misc/coloring/light_blue_crafter.json | 32 ++++++++ .../misc/coloring/light_gray_crafter.json | 32 ++++++++ .../recipes/misc/coloring/lime_crafter.json | 32 ++++++++ .../misc/coloring/magenta_crafter.json | 32 ++++++++ .../recipes/misc/coloring/orange_crafter.json | 32 ++++++++ .../recipes/misc/coloring/pink_crafter.json | 32 ++++++++ .../recipes/misc/coloring/purple_crafter.json | 32 ++++++++ .../recipes/misc/coloring/red_crafter.json | 32 ++++++++ .../recipes/misc/coloring/white_crafter.json | 32 ++++++++ .../recipes/misc/coloring/yellow_crafter.json | 32 ++++++++ .../loot_table/blocks/black_crafter.json | 30 +++++++ .../loot_table/blocks/blue_crafter.json | 30 +++++++ .../loot_table/blocks/brown_crafter.json | 30 +++++++ .../loot_table/blocks/crafter.json | 30 +++++++ .../loot_table/blocks/cyan_crafter.json | 30 +++++++ .../loot_table/blocks/gray_crafter.json | 30 +++++++ .../loot_table/blocks/green_crafter.json | 30 +++++++ .../loot_table/blocks/light_gray_crafter.json | 30 +++++++ .../loot_table/blocks/lime_crafter.json | 30 +++++++ .../loot_table/blocks/magenta_crafter.json | 30 +++++++ .../loot_table/blocks/orange_crafter.json | 30 +++++++ .../loot_table/blocks/pink_crafter.json | 30 +++++++ .../loot_table/blocks/purple_crafter.json | 30 +++++++ .../loot_table/blocks/red_crafter.json | 30 +++++++ .../loot_table/blocks/white_crafter.json | 30 +++++++ .../loot_table/blocks/yellow_crafter.json | 30 +++++++ .../recipe/coloring/black_crafter.json | 16 ++++ .../recipe/coloring/blue_crafter.json | 16 ++++ .../recipe/coloring/brown_crafter.json | 16 ++++ .../recipe/coloring/cyan_crafter.json | 16 ++++ .../recipe/coloring/gray_crafter.json | 16 ++++ .../recipe/coloring/green_crafter.json | 16 ++++ .../recipe/coloring/light_blue_crafter.json | 16 ++++ .../recipe/coloring/light_gray_crafter.json | 16 ++++ .../recipe/coloring/lime_crafter.json | 16 ++++ .../recipe/coloring/magenta_crafter.json | 16 ++++ .../recipe/coloring/orange_crafter.json | 16 ++++ .../recipe/coloring/pink_crafter.json | 16 ++++ .../recipe/coloring/purple_crafter.json | 16 ++++ .../recipe/coloring/red_crafter.json | 16 ++++ .../recipe/coloring/white_crafter.json | 16 ++++ .../recipe/coloring/yellow_crafter.json | 16 ++++ .../refinedstorage/tags/item/crafters.json | 20 +++++ .../common/AbstractModInitializer.java | 7 ++ .../refinedstorage/common/Config.java | 2 + .../common/autocrafting/CrafterBlock.java | 77 ++++++++++++++++++ .../autocrafting/CrafterBlockEntity.java | 29 +++++++ .../CrafterConnectionStrategy.java | 28 +++++++ .../common/content/BlockEntities.java | 11 +++ .../refinedstorage/common/content/Blocks.java | 11 +++ .../common/content/ContentIds.java | 1 + .../common/content/ContentNames.java | 1 + .../common/content/CreativeModeTabItems.java | 1 + .../common/content/DefaultEnergyUsage.java | 1 + .../refinedstorage/common/content/Items.java | 9 ++ .../refinedstorage/common/content/Tags.java | 1 + .../common/grid/AbstractGridBlockEntity.java | 3 +- .../assets/refinedstorage/lang/en_us.json | 11 ++- .../block/crafter/cutouts/side/black.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/blue.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/brown.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/cyan.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/gray.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/green.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/inactive.png | Bin 0 -> 247 bytes .../block/crafter/cutouts/side/light_blue.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/light_gray.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/lime.png | Bin 0 -> 2991 bytes .../block/crafter/cutouts/side/magenta.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/orange.png | Bin 0 -> 3006 bytes .../block/crafter/cutouts/side/pink.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/purple.png | Bin 0 -> 2991 bytes .../block/crafter/cutouts/side/red.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/white.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/side/yellow.png | Bin 0 -> 3007 bytes .../block/crafter/cutouts/top/black.png | Bin 0 -> 2812 bytes .../block/crafter/cutouts/top/blue.png | Bin 0 -> 2813 bytes .../block/crafter/cutouts/top/brown.png | Bin 0 -> 2814 bytes .../block/crafter/cutouts/top/cyan.png | Bin 0 -> 2816 bytes .../block/crafter/cutouts/top/gray.png | Bin 0 -> 2815 bytes .../block/crafter/cutouts/top/green.png | Bin 0 -> 2812 bytes .../block/crafter/cutouts/top/inactive.png | Bin 0 -> 223 bytes .../block/crafter/cutouts/top/light_blue.png | Bin 0 -> 2813 bytes .../block/crafter/cutouts/top/light_gray.png | Bin 0 -> 2813 bytes .../block/crafter/cutouts/top/lime.png | Bin 0 -> 2814 bytes .../block/crafter/cutouts/top/magenta.png | Bin 0 -> 2813 bytes .../block/crafter/cutouts/top/orange.png | Bin 0 -> 2815 bytes .../block/crafter/cutouts/top/pink.png | Bin 0 -> 2814 bytes .../block/crafter/cutouts/top/purple.png | Bin 0 -> 2815 bytes .../block/crafter/cutouts/top/red.png | Bin 0 -> 2813 bytes .../block/crafter/cutouts/top/white.png | Bin 0 -> 2812 bytes .../block/crafter/cutouts/top/yellow.png | Bin 0 -> 2813 bytes .../textures/block/crafter/side.png | Bin 0 -> 765 bytes .../textures/block/crafter/top.png | Bin 0 -> 729 bytes .../refinedstorage/textures/gui/crafter.png | Bin 0 -> 1989 bytes .../advancement/autocrafting.json | 32 ++++++++ .../data/refinedstorage/recipe/crafter.json | 28 +++++++ .../fabric/ClientModInitializerImpl.java | 19 ++++- .../refinedstorage/fabric/ConfigImpl.java | 10 +++ .../fabric/ModInitializerImpl.java | 1 + .../refinedstorage/neoforge/ConfigImpl.java | 7 ++ .../neoforge/ModInitializer.java | 1 + .../datagen/BlockModelProviderImpl.java | 40 +++++++++ .../datagen/BlockStateProviderImpl.java | 39 +++++++-- .../datagen/ItemModelProviderImpl.java | 9 ++ .../datagen/loot/BlockDropProvider.java | 2 + .../recipe/RecoloringRecipeProvider.java | 3 + .../datagen/tag/ItemTagsProviderImpl.java | 5 ++ 163 files changed, 2894 insertions(+), 13 deletions(-) create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/black.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/blue.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/brown.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/cyan.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/gray.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/green.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/inactive.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_blue.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_gray.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/lime.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/magenta.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/orange.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/pink.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/purple.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/red.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/white.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/yellow.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/black.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/blue.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/brown.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/cyan.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/gray.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/green.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/inactive.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_blue.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_gray.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/lime.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/magenta.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/orange.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/pink.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/purple.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/red.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/white.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/yellow.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/side.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/top.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafter.png create mode 100644 refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json create mode 100644 refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json new file mode 100644 index 000000000..3efddbdce --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/black", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/black", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/black", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/black", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/black" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/black", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json new file mode 100644 index 000000000..67a82b4c7 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/blue", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/blue", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/blue", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/blue", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/blue" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/blue", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json new file mode 100644 index 000000000..f7e980273 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/brown", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/brown", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/brown", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/brown", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/brown" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/brown", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json new file mode 100644 index 000000000..ebb944768 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/light_blue", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/light_blue", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/light_blue", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/light_blue", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/light_blue" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/light_blue", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json new file mode 100644 index 000000000..ec6336bdc --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/cyan", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/cyan", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/cyan", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/cyan", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/cyan" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/cyan", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json new file mode 100644 index 000000000..0d17db938 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/gray", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/gray", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/gray", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/gray", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/gray" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/gray", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json new file mode 100644 index 000000000..843091a40 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/green", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/green", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/green", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/green", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/green" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/green", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json new file mode 100644 index 000000000..0adc18f77 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/light_gray", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/light_gray", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/light_gray", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/light_gray", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/light_gray" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/light_gray", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json new file mode 100644 index 000000000..bb1a371ad --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/lime", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/lime", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/lime", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/lime", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/lime" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/lime", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json new file mode 100644 index 000000000..a560d8148 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/magenta", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/magenta", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/magenta", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/magenta", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/magenta" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/magenta", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json new file mode 100644 index 000000000..d03485bba --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/orange", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/orange", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/orange", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/orange", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/orange" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/orange", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json new file mode 100644 index 000000000..735409627 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/pink", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/pink", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/pink", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/pink", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/pink" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/pink", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json new file mode 100644 index 000000000..d2c25823b --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/purple", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/purple", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/purple", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/purple", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/purple" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/purple", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json new file mode 100644 index 000000000..5cddc0110 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/red", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/red", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/red", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/red", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/red" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/red", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json new file mode 100644 index 000000000..259d76b6e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/white", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/white", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/white", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/white", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/white" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/white", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json new file mode 100644 index 000000000..bdbdb3e3c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/crafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/crafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/crafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/crafter/yellow", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/crafter/yellow", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/crafter/yellow", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/crafter/yellow", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/crafter/yellow" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/crafter/yellow", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json new file mode 100644 index 000000000..80593f95a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/black", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/black", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/black", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/black", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/black", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json new file mode 100644 index 000000000..e8f631301 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/blue", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/blue", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/blue", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/blue", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/blue", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json new file mode 100644 index 000000000..254921b3b --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/brown", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/brown", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/brown", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/brown", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/brown", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json new file mode 100644 index 000000000..7dcf4b2bc --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/cyan", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/cyan", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/cyan", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/cyan", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/cyan", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json new file mode 100644 index 000000000..fbca35d3c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/gray", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/gray", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/gray", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/gray", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/gray", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json new file mode 100644 index 000000000..b061aad2c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/green", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/green", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/green", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/green", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/green", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json new file mode 100644 index 000000000..d102b64cf --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/inactive", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/inactive", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/inactive", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/inactive", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/inactive", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json new file mode 100644 index 000000000..0e835aee2 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/light_blue", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/light_blue", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/light_blue", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/light_blue", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/light_blue", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json new file mode 100644 index 000000000..4586aad1f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/light_gray", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/light_gray", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/light_gray", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/light_gray", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/light_gray", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json new file mode 100644 index 000000000..a97de199a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/lime", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/lime", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/lime", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/lime", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/lime", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json new file mode 100644 index 000000000..ed891c156 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/magenta", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/magenta", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/magenta", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/magenta", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/magenta", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json new file mode 100644 index 000000000..50547c38e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/orange", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/orange", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/orange", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/orange", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/orange", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json new file mode 100644 index 000000000..015d13d72 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/pink", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/pink", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/pink", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/pink", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/pink", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json new file mode 100644 index 000000000..c55c5aa8a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/purple", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/purple", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/purple", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/purple", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/purple", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json new file mode 100644 index 000000000..c8872d6ba --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/red", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/red", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/red", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/red", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/red", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json new file mode 100644 index 000000000..bb0443b64 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/white", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/white", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/white", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/white", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/white", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json new file mode 100644 index 000000000..b5ce91e01 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/crafter/cutouts/side/yellow", + "cutout_north": "refinedstorage:block/crafter/cutouts/side/yellow", + "cutout_south": "refinedstorage:block/crafter/cutouts/side/yellow", + "cutout_up": "refinedstorage:block/crafter/cutouts/top/yellow", + "cutout_west": "refinedstorage:block/crafter/cutouts/side/yellow", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/crafter/side", + "north": "refinedstorage:block/crafter/side", + "particle": "refinedstorage:block/crafter/side", + "south": "refinedstorage:block/crafter/side", + "up": "refinedstorage:block/crafter/top", + "west": "refinedstorage:block/crafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json new file mode 100644 index 000000000..98633c2cc --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/black" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json new file mode 100644 index 000000000..d434378e6 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/blue" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json new file mode 100644 index 000000000..6f6b63b57 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/brown" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json new file mode 100644 index 000000000..db4b4e848 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/light_blue" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json new file mode 100644 index 000000000..bb4ce620c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/cyan" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json new file mode 100644 index 000000000..518058aaf --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/gray" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json new file mode 100644 index 000000000..412af43ce --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/green" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json new file mode 100644 index 000000000..202f076dd --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/light_gray" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json new file mode 100644 index 000000000..162cdffaa --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/lime" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json new file mode 100644 index 000000000..d9243b1e0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/magenta" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json new file mode 100644 index 000000000..e7aa14eca --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/orange" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json new file mode 100644 index 000000000..6336b4fc4 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/pink" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json new file mode 100644 index 000000000..f6cd434fb --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/purple" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json new file mode 100644 index 000000000..68cd81152 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/red" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json new file mode 100644 index 000000000..66dcfa851 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/white" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json new file mode 100644 index 000000000..195eaf6dd --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/crafter/yellow" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json new file mode 100644 index 000000000..79dbd5749 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/black_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/black_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json new file mode 100644 index 000000000..651b3a5f5 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/blue_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/blue_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json new file mode 100644 index 000000000..b6533e45a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/brown_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/brown_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json new file mode 100644 index 000000000..2416c2308 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/cyan_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/cyan_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json new file mode 100644 index 000000000..fbf672c93 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/gray_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/gray_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json new file mode 100644 index 000000000..741854daf --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/green_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/green_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json new file mode 100644 index 000000000..03d3a94ad --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/light_blue_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/light_blue_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json new file mode 100644 index 000000000..65e9fee43 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/light_gray_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/light_gray_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json new file mode 100644 index 000000000..acf330d01 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/lime_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/lime_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json new file mode 100644 index 000000000..eb7cf31d0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/magenta_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/magenta_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json new file mode 100644 index 000000000..77bba14c1 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/orange_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/orange_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json new file mode 100644 index 000000000..4c0d71038 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/pink_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/pink_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json new file mode 100644 index 000000000..8b4de13bf --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/purple_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/purple_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json new file mode 100644 index 000000000..371f8765d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/red_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/red_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json new file mode 100644 index 000000000..6c0bf9067 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/white_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/white_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json new file mode 100644 index 000000000..f36cce8de --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_crafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:crafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/yellow_crafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_crafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/yellow_crafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json new file mode 100644 index 000000000..9e3f87067 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:black_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/black_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json new file mode 100644 index 000000000..5d0ca047f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:blue_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/blue_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json new file mode 100644 index 000000000..a5c65c9fb --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:brown_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/brown_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json new file mode 100644 index 000000000..2e0025c58 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json new file mode 100644 index 000000000..757a47795 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:cyan_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/cyan_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json new file mode 100644 index 000000000..560f3f68a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:gray_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/gray_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json new file mode 100644 index 000000000..a99ea230a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:green_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/green_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json new file mode 100644 index 000000000..3a55004ce --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:light_gray_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/light_gray_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json new file mode 100644 index 000000000..02cba6ebf --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:lime_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/lime_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json new file mode 100644 index 000000000..0a11c938e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:magenta_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/magenta_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json new file mode 100644 index 000000000..2191b7186 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:orange_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/orange_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json new file mode 100644 index 000000000..c86e79cbb --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:pink_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/pink_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json new file mode 100644 index 000000000..e2ac59182 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:purple_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/purple_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json new file mode 100644 index 000000000..892e7097e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:red_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/red_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json new file mode 100644 index 000000000..40453b663 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:white_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/white_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json new file mode 100644 index 000000000..af9313455 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:yellow_crafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/yellow_crafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json new file mode 100644 index 000000000..c4aff7eba --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/black" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:black_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json new file mode 100644 index 000000000..0fc17ef1a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/blue" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:blue_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json new file mode 100644 index 000000000..5837706b0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/brown" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:brown_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json new file mode 100644 index 000000000..118726fe9 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/cyan" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:cyan_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json new file mode 100644 index 000000000..2752d0972 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/gray" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:gray_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json new file mode 100644 index 000000000..8b8dadde7 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/green" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:green_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json new file mode 100644 index 000000000..ec954a018 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/light_blue" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json new file mode 100644 index 000000000..84a06b2ed --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/light_gray" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:light_gray_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json new file mode 100644 index 000000000..30da99e3d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/lime" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:lime_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json new file mode 100644 index 000000000..a71de1b35 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/magenta" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:magenta_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json new file mode 100644 index 000000000..c9933b779 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/orange" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:orange_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json new file mode 100644 index 000000000..b2f0afa8e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/pink" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:pink_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json new file mode 100644 index 000000000..591e2fb1c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/purple" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:purple_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json new file mode 100644 index 000000000..37c8788fc --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/red" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:red_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json new file mode 100644 index 000000000..a0bf7182e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/white" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:white_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json new file mode 100644 index 000000000..0828bcda9 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "refinedstorage:crafters" + }, + { + "tag": "c:dyes/yellow" + } + ], + "result": { + "count": 1, + "id": "refinedstorage:yellow_crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json new file mode 100644 index 000000000..bcc58380b --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json @@ -0,0 +1,20 @@ +{ + "values": [ + "refinedstorage:white_crafter", + "refinedstorage:orange_crafter", + "refinedstorage:magenta_crafter", + "refinedstorage:crafter", + "refinedstorage:yellow_crafter", + "refinedstorage:lime_crafter", + "refinedstorage:pink_crafter", + "refinedstorage:gray_crafter", + "refinedstorage:light_gray_crafter", + "refinedstorage:cyan_crafter", + "refinedstorage:purple_crafter", + "refinedstorage:blue_crafter", + "refinedstorage:brown_crafter", + "refinedstorage:green_crafter", + "refinedstorage:red_crafter", + "refinedstorage:black_crafter" + ] +} \ No newline at end of file diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index 65d57f3e3..efad1019f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -11,6 +11,7 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApiProxy; import com.refinedmods.refinedstorage.common.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.CraftingPatternState; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; @@ -331,6 +332,7 @@ protected final void registerBlocks(final RegistryCallback callback, Blocks.INSTANCE.getSecurityManager().registerBlocks(callback); Blocks.INSTANCE.getRelay().registerBlocks(callback); Blocks.INSTANCE.setDiskInterface(blockEntityProviders.diskInterface()).registerBlocks(callback); + Blocks.INSTANCE.getCrafter().registerBlocks(callback); } protected final void registerItems(final RegistryCallback callback) { @@ -353,6 +355,7 @@ protected final void registerItems(final RegistryCallback callback) { Blocks.INSTANCE.getSecurityManager().registerItems(callback, Items.INSTANCE::addSecurityManager); Blocks.INSTANCE.getRelay().registerItems(callback, Items.INSTANCE::addRelay); Blocks.INSTANCE.getDiskInterface().registerItems(callback, Items.INSTANCE::addDiskInterface); + Blocks.INSTANCE.getCrafter().registerItems(callback, Items.INSTANCE::addCrafter); registerStorageItems(callback); registerUpgrades(callback); } @@ -648,6 +651,10 @@ protected final void registerBlockEntities( ContentIds.DISK_INTERFACE, () -> typeFactory.create(providers.diskInterface(), Blocks.INSTANCE.getDiskInterface().toArray()) )); + BlockEntities.INSTANCE.setCrafter(callback.register( + ContentIds.CRAFTER, + () -> typeFactory.create(CrafterBlockEntity::new, Blocks.INSTANCE.getCrafter().toArray()) + )); } protected final void registerMenus(final RegistryCallback> callback, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java index 6feeb0d92..79641b639 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java @@ -72,6 +72,8 @@ public interface Config { RelayEntry getRelay(); + SimpleEnergyUsageEntry getCrafter(); + interface SimpleEnergyUsageEntry { long getEnergyUsage(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java new file mode 100644 index 000000000..40f36dddd --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java @@ -0,0 +1,77 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.content.BlockColorMap; +import com.refinedmods.refinedstorage.common.content.BlockConstants; +import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.Blocks; +import com.refinedmods.refinedstorage.common.support.AbstractActiveColoredDirectionalBlock; +import com.refinedmods.refinedstorage.common.support.AbstractBlockEntityTicker; +import com.refinedmods.refinedstorage.common.support.BaseBlockItem; +import com.refinedmods.refinedstorage.common.support.BlockItemProvider; +import com.refinedmods.refinedstorage.common.support.NetworkNodeBlockItem; +import com.refinedmods.refinedstorage.common.support.direction.DefaultDirectionType; +import com.refinedmods.refinedstorage.common.support.direction.DirectionType; +import com.refinedmods.refinedstorage.common.support.network.NetworkNodeBlockEntityTicker; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + +public class CrafterBlock extends AbstractActiveColoredDirectionalBlock + implements BlockItemProvider, EntityBlock { + private static final Component HELP = createTranslation("item", "crafter.help"); + private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( + BlockEntities.INSTANCE::getCrafter, + ACTIVE + ); + + public CrafterBlock(final DyeColor color, final MutableComponent name) { + super(BlockConstants.PROPERTIES, color, name); + } + + @Override + protected DirectionType getDirectionType() { + return DefaultDirectionType.FACE_PLAYER; + } + + @Override + public BlockColorMap getBlockColorMap() { + return Blocks.INSTANCE.getCrafter(); + } + + @Override + public boolean canAlwaysConnect() { + return true; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { + return new CrafterBlockEntity(pos, state); + } + + @Nullable + @Override + public BlockEntityTicker getTicker(final Level level, + final BlockState blockState, + final BlockEntityType type) { + return TICKER.get(level, type); + } + + @Override + public BaseBlockItem createBlockItem() { + return new NetworkNodeBlockItem(this, HELP); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java new file mode 100644 index 000000000..b78177a85 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -0,0 +1,29 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; +import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; + +public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity { + public CrafterBlockEntity(final BlockPos pos, final BlockState state) { + super( + BlockEntities.INSTANCE.getCrafter(), + pos, + state, + new SimpleNetworkNode(Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage()) + ); + } + + @Override + protected InWorldNetworkNodeContainer createMainContainer(final SimpleNetworkNode networkNode) { + return RefinedStorageApi.INSTANCE.createNetworkNodeContainer(this, networkNode) + .connectionStrategy(new CrafterConnectionStrategy(this::getBlockState, getBlockPos())) + .build(); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java new file mode 100644 index 000000000..e60f5fc6f --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java @@ -0,0 +1,28 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.api.support.network.ConnectionSink; +import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; + +import java.util.function.Supplier; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; + +class CrafterConnectionStrategy extends ColoredConnectionStrategy { + CrafterConnectionStrategy(final Supplier blockStateProvider, final BlockPos origin) { + super(blockStateProvider, origin); + } + + @Override + public void addOutgoingConnections(final ConnectionSink sink) { + for (final Direction direction : Direction.values()) { + sink.tryConnectInSameDimension(origin.relative(direction), direction.getOpposite()); + } + } + + @Override + public boolean canAcceptIncomingConnection(final Direction incomingDirection, final BlockState connectingState) { + return colorsAllowConnecting(connectingState); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java index e182e2340..0dc196060 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.content; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; @@ -88,6 +89,8 @@ public final class BlockEntities { private Supplier> relay; @Nullable private Supplier> diskInterface; + @Nullable + private Supplier> crafter; private BlockEntities() { } @@ -293,4 +296,12 @@ public BlockEntityType getDiskInterface() { public void setDiskInterface(final Supplier> supplier) { this.diskInterface = supplier; } + + public BlockEntityType getCrafter() { + return requireNonNull(crafter).get(); + } + + public void setCrafter(final Supplier> supplier) { + this.crafter = supplier; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java index 46b1016ae..52979ac31 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.content; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlock; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlock; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; @@ -144,6 +145,12 @@ public final class Blocks { ); @Nullable private BlockColorMap diskInterface; + private final BlockColorMap crafter = new BlockColorMap<>( + CrafterBlock::new, + ContentIds.CRAFTER, + ContentNames.CRAFTER, + COLOR + ); @Nullable private Supplier quartzEnrichedIronBlock; @@ -411,4 +418,8 @@ public BlockColorMap setDiskInterface( public BlockColorMap getDiskInterface() { return requireNonNull(diskInterface); } + + public BlockColorMap getCrafter() { + return crafter; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java index 644e76bb6..5b477fd38 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java @@ -65,6 +65,7 @@ public final class ContentIds { public static final ResourceLocation RELAY = createIdentifier("relay"); public static final ResourceLocation DISK_INTERFACE = createIdentifier("disk_interface"); public static final ResourceLocation PATTERN = createIdentifier("pattern"); + public static final ResourceLocation CRAFTER = createIdentifier("crafter"); private ContentIds() { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java index 43d0ad43f..08b3c65f0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java @@ -39,6 +39,7 @@ public final class ContentNames { public static final MutableComponent SECURITY_MANAGER = name("security_manager"); public static final MutableComponent RELAY = name("relay"); public static final MutableComponent DISK_INTERFACE = name("disk_interface"); + public static final MutableComponent CRAFTER = name("crafter"); public static final String CLEAR_CRAFTING_MATRIX_TO_NETWORK_TRANSLATION_KEY = createTranslationKey("key", "clear_crafting_grid_matrix_to_network"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java index 8c2156f1b..5aa97d549 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java @@ -58,6 +58,7 @@ private static void appendBlocks(final Consumer consumer) { Items.INSTANCE.getSecurityManagers().stream().map(Supplier::get).forEach(itemConsumer); Items.INSTANCE.getRelays().stream().map(Supplier::get).forEach(itemConsumer); Items.INSTANCE.getDiskInterfaces().stream().map(Supplier::get).forEach(itemConsumer); + Items.INSTANCE.getCrafters().stream().map(Supplier::get).forEach(itemConsumer); } private static void appendBlockColors(final Consumer consumer, final BlockColorMap map) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java index 00b51eed3..3ee31ab9d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java @@ -22,6 +22,7 @@ public final class DefaultEnergyUsage { public static final long SECURITY_MANAGER = 16; public static final long RELAY_INPUT_NETWORK = 8; public static final long RELAY_OUTPUT_NETWORK = 8; + public static final long CRAFTER = 4; public static final long CONTROLLER_CAPACITY = 1000; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java index ed2b1723e..d21089a56 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java @@ -51,6 +51,7 @@ public final class Items { private final List> allSecurityManagers = new ArrayList<>(); private final List> allRelays = new ArrayList<>(); private final List> allDiskInterfaces = new ArrayList<>(); + private final List> allCrafters = new ArrayList<>(); @Nullable private Supplier quartzEnrichedIron; @Nullable @@ -438,6 +439,14 @@ public List> getDiskInterfaces() { return Collections.unmodifiableList(allDiskInterfaces); } + public void addCrafter(final Supplier supplier) { + allCrafters.add(supplier); + } + + public List> getCrafters() { + return Collections.unmodifiableList(allCrafters); + } + public Item getNetworkCard() { return requireNonNull(networkCard).get(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java index 06509a2ba..19f308085 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java @@ -27,6 +27,7 @@ public final class Tags { public static final TagKey SECURITY_MANAGERS = createTag("security_managers"); public static final TagKey RELAYS = createTag("relays"); public static final TagKey DISK_INTERFACES = createTag("disk_interfaces"); + public static final TagKey CRAFTERS = createTag("crafters"); private Tags() { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index d77af1e98..4de556a45 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -29,8 +29,7 @@ import static java.util.Objects.requireNonNull; -public abstract class AbstractGridBlockEntity - extends AbstractBaseNetworkNodeContainerBlockEntity +public abstract class AbstractGridBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements Grid { protected AbstractGridBlockEntity(final BlockEntityType type, final BlockPos pos, diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index bd293288c..510c3b8ea 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -37,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.crafter": "Crafter", "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", "gui.refinedstorage.disk_drive.disks": "Disks", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -196,6 +197,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.crafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -361,6 +363,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -553,6 +556,10 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.crafter": "Crafter", + "text.autoconfig.refinedstorage.option.crafter.tooltip": "Configuration for the Crafter.", + "text.autoconfig.refinedstorage.option.crafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.crafter.energyUsage.tooltip": "The energy used by the Crafter.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -595,5 +602,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with a Crafter by using patterns created in a Pattern Grid" } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/black.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/black.png new file mode 100644 index 0000000000000000000000000000000000000000..5fea70779708c09a217f865935080aae160a6188 GIT binary patch literal 3007 zcmc&$%WvF77vtCC zFV72tu(-C`-h}ZL{(td2ysybGZ^1B^ZQi*hJbd!TPcXUAU+yjo!dD+J{Dv>W{MC)S zy$+1muP@!W;dMIgR;vlqPd;2~!0}3Btl_{68l=`1Ex_ znEy5EZRgwFyB=Yq1`e1{8auKZ;w@&tD%&VidHbduCVdCM$Fh ztsbUy>u|kC4tI$gNH^bFoNrD%;4q>&7AK=&oOzR$R5147o0AnuEFk%AOIqd<#qI8f zxWZB@S`Aeus;Y^$+d!6KSn73AQ#DmlO$BK(vOLxBkS$h^1mZ-onFgV^*}h$ggIP-& zTfY+Oo0n1r7V9#(uy?o3S zc@#cFAYVBKrIY9xP`*+_6K^G@IA>{(vEej^Hm16X8fs|bwR=$8! zi3gOdIj)2A8b}p6 zI^pck=H-&@ctF9A&k5)fma#A&C;sEOJaEc(26QhhmV{6gdRpp%@^TLR<~%ePHP1k0C^$){2T%QsE{DGjP@P8p>z&RhGt33R1YJet$$B!6onzS(pz1 literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..245fdceb4b302093b16fa9bde7b55c311e9ff9c9 GIT binary patch literal 3007 zcmc&$OKjXk7oK;I z-Bg^oapHo6RB=EEajbwIi&Vs&UbrI;aHu$NfFlz8v-Y}Mnl=$nOZIsF`R0Gk|Co2z z*DfBPKQ*r?%JJ2e_6Ce6=KN?lO!gUVQsG`~8#6kDqrxfa&e;e)Y|iU!(3;zSX(pQ!%U&CIVg?4--HuO7q+}A@my0)qwY+xTXDk`;MkYtfgIc zIz}g1;{9mlddfGiuXXA5Yt&=fxmSsDco;-7t02M1VlqZk&@binG%NlafuFXEcqHJQA@g z*^)qP=PeC1E=(CF74JAJ{RN)W$0X5l&5))|fQ(kSWIG*9G+1!7m%|V-(O1geW69nFV`*@0x~>tv`bWi^AP~p^W;W zNQVRtE*g>^*ORz6k=E(>t8tc-nDW(jO9NGFQN(;=)4-{7g2Fm;P~h4I3hI<0!YnVa z4Mt6ePxrS4-IhTm_ZNA_1O*<|Y4{B{a4iD@Kg5QMcxV$uXy_u+a2pNgQceOo<@S0S zL9Ua*ELW)&1CAkYxE5srvRIv?2D35pa3DVp^DG-%^#FW$U+$6^h_oXZ_}tP|dD=d( z2UUs8ua<^O;+726!FEBcn+7~Omfv#y%0BD&m*0pZaIvYWGG6?N{7tA~pn&T*mQ&K# zqcI_U0 zE@xUvj`leFgL%1NJL+@r<6{E4fMp`gM`^zUJBWC0fUqOeoH!mLR%lv|>pCSH^-;GlDFd3<+b+B^H<;b12WK@ A0ssI2 literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/brown.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5c3b8bc3f9801c7fa64a5307caa7c4a1774ce1 GIT binary patch literal 3007 zcmc&$&2QX96nFZ8Xwm|L3#vF+ZVyE;YmYzIR+f@x(5&_!-YX6q5XXwrBZngXfL{0);81bk07oQvv-Y|hHEkk3Ev>!t<~Q%-H}Acf&$c$N zom)J=s3^+0jrDdHzHi9it0&=o3BA4zpM|`8?TYf?$vaPBaH_x3Sy7aS_m+Mqr(yi& z*7e>ReC>;8uHv&@|Fw1NEDV+8=?LDh6y443Kjfo4di>>Mkeo@^Z{>=z^p^ZBDEB{q zTTvE&i+el8PUm_+#i&7;2zg^NN~IcQ`SK(s^bRl7koV)HrTy~lV@-`&OS|cGj83}B z2l4vdjBnrF?9sb-sL!;^ADmlUo&=y_#0#QMM#CfzCM|8MIDr3BtZV8NQru~2E7GF6 z)7es2MaEUPVIXQ4rt0|(?Ao?#ysw&uY3PQdV-sOFFzf((YV~MfPF0sP76sk*)yf=< zTH2r}(m>b8<8fnbHAL3evG4o3Vd|!d0DNPFskz*AMvEf0gG!au+{0*@I%#( zMm0Jw*7m@oD!@b0d2c`EdY9*7H=}%Q4=i4oIhGe){*0evEC+bKI30*W<1BL$fU`+)D6Mu3gLZXN&&7DxL>LKzJrk&Os! zTs$IuuBStr~u zReHrhW5k=TMOg@LcpNpEjggN-`Erx4IF?h%x8eyO?zCfI zEiWB$=VxvmoSF6**>IMpg&M5KIi%ixEv`DpHveQ!R0)T%I<41$&@wtI6PGis632(^ z{qa~X)s6=oczj7hm#|z!#h7G#r4QsET`>AF0?EnV%frB)jScK_6#15m9BvyZv>Xq) zO`nE_Wpa+a84b^eVFlO@OlwwZe<_S|5gm}E&*9L54*HJ-)-suLSopw2?_Z8{v6sv{=>kiNcMO(mwYM72%N_}%UfEMiIGaubQsfVaq4>stB$w2 zp4CFAbKUDWWHO$`b9pjvv35uOmuw%Ip~q{o|KCO~>+%LN-&dCP!&^|*nc5}WSLI$# z&-vi6{&L*>g@ZqUljMlAg<+q%q30mtyCK4kEOR)a5V0cDa$MJ;5s}p(wTZudw#;&_ zq-O52HtkrY6mEhr0;*=$P&ulvvOIxSkikWD?cUE1;gWlCqrK9*v`ufXo&0ghF!7@g uci8=fAD(=F_Tu2H6Q{p8^Yu3;l>5J)`sw4z`S0Ydcw=p|{ou;&PyYm>lA2}! literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/cyan.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..4d065f7eb01bc5d07efe262da8f522c8769c59c6 GIT binary patch literal 3007 zcmcgu%WvF77lr`SCQC`PX%o>6QFc*NBt*wE<6Wz}9%DP% zO^@6-aj!UVKpZQeM-D~&0ln}qz=0D7I3mF}Ywul z@%*BqDCaiTo7*rxFW+ZQ!uPWNTpNakeEa%U<^H2re}T!V?n-M#QNH;QXe^=KeYRhKgs1>4PQl{lC+ zv|dr9fnf}X!`jfQiL7g2-}en<8m6fOLeKY;f{gSezgRM<*fe=gvp6kck*Ja_3B_*F z&_LtTltDV>o#d6jz;nikqz0}bY1$ab=oFXkX8o}Sj2gVp2Rtcqz~U(uywz$=;d9vz z22*ritnGnDm4S27d1pW6#x~EzZbtdq9!R`6Q7kXE`GJ3qu^r&k&1p{*BJYXEIAOYc z$Q4B#Jw~8hIRxdS_%TqqGKHqWYQ{++vW^h_NepdGbW=@SGu6vC63RE44GmPS#W4#oagZ6>rtXJzU&p>3={{zlGWJZ@MSdMJ zW3s;~=&lSZxxdUaCMfWjo<`s^-;Hc5)RE&kx=C$YuQS)v5vhCJqrSrrxV@Lfkn5yB z%T;Q{fMdk#u0>g>Tg>CY!p5LgC_fJKEgM^22wEM;T@`(iwFCp7Tbe3QI{@~eDv|ls z&~QcEk)hh(Es36q;4!fLR_nKpSU*^PKZ(J`rl!hx3C8l`rw2BD>^<2G?AaJ$m+O&lxw^w`q=%N{ z>2BSpA+k))u{UwU-_5WBYzL+_Nwt4uM!AXhNYdrdw4j3iCx+RO1h#|gI>R2*eaD7W zh-XcG6MaWXL&=5GBHp|n)YKlPEKPlVO4vZ z=CfJ|b*6e9$C-?0@l2e|N}Q^r{!g-xj?iNj+46*DBlKw<;+X zy?srd<+#rW^XkiS;};r#0G;HB-omg?-4NOe@!e3zj!bjn_&Tv7({fzbp%IbUAi0Tu z-CHIxSGs2AvNo<*B^7RhFauXjuAy=^y~^?gNcr_U&VK#v3FY2zr+)rubpCsJE8bY!Y~H_m`;)%_Sy+-< literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..971dc80415db9bb5e85a1197e6cccdab638ff11b GIT binary patch literal 3007 zcmc&$&2QX96nFZ8XhH;n1E}I)xjhuYtY`eWwz8Bon>H(TLzFBuJ<;*Zc-QK#ZEPpI z>5&^JPFyMu91!AE0X=dk;t%Mh{{kF1aeyNdyjgqQjhZ$QpO)6%dGnk1@tgPF%*R`s z*OnL0FDi<%+}UVv!}lfmd;T=MFQFHA;Ioi#U%R5*d-(d#FgVj+?XD`yH=iv1PS3*l z<*nn>}{tHuJc4`R(P!m5C1;MxvnVWHgL(f6~&XihcMm#k!_WA;s;Mwkj>E zyWK5yEy;xHG%#Wq8>;Iyh+|m}eoHm5fpu)_#6ZOHvE>t2tsV``sp?9`Lw~z{wK4~z zmNqDg)YtX#c-$D9jU?;q#Pd8I8@gd2K%o2}F6acs`GrzRrKT-%mPKh1C9x{i(jeI@ zS{ispQy zqZ*wT>-*qQ72uKRymycaeOu(oUdF`wK3Kdkb1W~m#bbU>upHp^;&hM{Nj^xPLP9-# zh>9W#pJGtX9D<5T^c1L^siCRAmI+!USuaV3vmDx*`KB7AVW^jGL@`gs`5Q9uYJq6e zLbNoQPzX1XiF=0OW8&N7O$>i<3GG6Pa$3-Num|{_fqm@xws{Dg@F+Yu7Rs3)CfSI> z#ziCA7kV1^r`Eb%zZ2&LjhX1QTN=39h$8MctuPFljzHKmLKFs;hnjAPk%y_r7CC zhx1ycR~$5kqUo572gu~EKuvBDtPrnyOK(V2zGGF|u{T=9G;DBS>rd`RmqKO#p zwj*FIFCB5_XKo&znf4gja8{;;>Tg6jq~1X-t~$q#_;5~C35St7tyiD2GCC#`SHRwt z;^>IIKN-vA`td*jkIzWx5|$@nF{YVV?F0G87mR*_KyteO>@bLH5lkS3L(g=OEi8-z z({_>5^jLsRLkQx|Xm~OV(9!YCK90gd|t4lU@Q|43jElxH}$i9+GH$m5m+ zb%hM~`hLu- z|g6D=YfZEvV{D?UL=Q zaxbUnynj@GIcfgF!SBOKa?IJniN~D4wGs8401;c3Iki1R&CoDy$FW&RWi?1`$=^O( zW;s_`k0!Vn7+W-In literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/green.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/green.png new file mode 100644 index 0000000000000000000000000000000000000000..b539c4096fced2ad8d8f579a8220346217926a21 GIT binary patch literal 3007 zcmcgu&5zqe6nDQ6-K7En2ecqzxkYLPj%V!Hj;(~U-E6xnHOp!@sJmR~cxIefO+3c- zZn708IC0`$ao~VBRzQy&iueP{feU{C95``+BNDu^6E`c;?uw6Eik*4$oA))p_hvrc z+_-jbVQE28lymEA?Jf8|Cx1_$g7-!J*=_io$hNLsQSLr?7XKh; zVEp{%_3kQsm%JCxca|=_`|4|(FT;?2|G`J_c`D!9*#1*K%Dwxa-v`OrWNkN7l*Je1 z?}T#a)0Y%w;rFP!lkaq{`&0~Tgo%LH#=`{AiqgD1P6)llb2Z?-C~j%Lesf<_Bi7Px z*d5eKR(L;JyPfjw+Z$ba`xf<>cKOY73(c_)8iqV4>UcPaGk@ID3dKJBmtsRx3rK#e zr7cT~>P}} zoeDlz?QmG3vwU?QJemYJ7oBwv5^ikqOzfqUukM4z^HayNe2YKK&oPz*yjq;}MJ}?w zctjGa=|ic=qwo<1<;)={A4iXX%9#q9_$w(Vxk$T045l2~ocgAkxMr#sZ$vQ@qwJCl ze6oPINzPlEB$SRCx`n!?=_Bmh_;mz-Pzmh-MH$J-EZ75l*F-)B_B9TH1&hLiBcY7? zp-6`WHZB^H9ygM>S6J(G{Pj4?Nlf{AyQP7vwJ2hKNVy#lV(Sg!I65)wfgYH3S9d&u z5Oy8x;l^}*ThKj8D!IO_GbSkLsCL75x$EM9TRNf`>8@LE=na>8dSJPA<~A(HCH7R? z+i3)~P6o4DrB_UP#T$-AS)g0Y<$8nFvF_nOzHH`Mb!@o-06)_NLM=;2_rKxha zeNYds5?Nm@4NrtSlB$EfQs|lp9s|qwWPbOE`G?c*#1W*})KtkAzp%dzJq#RhY}xl}vqbI9Xk2wlQ55#}S3^5q^R|LB4-juA*k_8%VxcIy~nhwGtd zIl9g32>50Lg&Q6XkY#d?-Dw*B9)=}L&9tVa_K(6S7tub6dmIie=%D{iU?>PF<46xJ zr=gpTx~CHkRfwY`90>W1?Io7+R4U|>|l`#hZ?UqVs>=P^&SmKLUBsFEZZM6@VQ zV?Sn-7SDMEB z7BuNh?K0a}DX%29QdbJHMU&`MvSdxAIoJzPi!Ad*$Yb Fe*rSLmlgm3 literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/inactive.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..d0b5cc6285574fe48e5fcf88746371c787e97378 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Ziqbt@978Pp?_TicI-tPg8W^7N*X_=Kr}$EVj0e0@)~_Ep6rFV7VX#|x zvDuAZ$~NOp&@P2bhHVMwb_(rZ3=umMl(89ZJ6T-G@yGywoO#8f~4 literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee641e510a7e07359db1f9f2ffd3fae1daa6d7a GIT binary patch literal 3007 zcmc&$&2QX96nANhXi5cw1E_GY+#ZTx)-(RLm8GQFw29OWQL?DXiO!D4yH<8R#&)us z9+5co#EnD5fdk@%Dxe1r9E$h@df`7naNvXx96|7A?R7V5+C+R>T6^csZ{Ejm-g`5* z*H*8cn>#fUpOwF-PQv>VdS(MYC-U`cSCl*VU;YsWr+N$R1x5M%{j^!xt50?$@}pS!}ki2TTkbG!$Ll7!OlGE6V)kaZ1@XFVrsY#Yt29>8pF18i!5o zhTX>PbdmStH#a{HK*Nw1R2>foNgj-w+C*^x|D{;h)Cr{6 zZfXnCqPp2$Qx`?XRi}Xw!`M(=zd;AB{$hk=YPgPba?b>)6l@0|5f%dr3jZD9JCBN-8xip0g}Yi&!M8 zR7<;Jr)X;6aT&@mt#v1P#TPKAk7=rt29}{sfFY}K=}tD7cn~t35BQKLMGja}V}Y%9 zyM`aCb~vojd9kz$9#sJziq1QGDc9F|E_O1;mv+J8g{fnCvCbdxbByHxuNS9%QHZ=R z9zjAqeSnH0jvir9&K!X9ar_9VoT;H{u$XaLh^!;TV46c~Q{PmBGz|69jW`L#D1Su; zUM=7)TJWYO6AEDunYd#Z0VaV>Ud8YSm(Vt(Xh;h>3-$ruF>pZ4fcOW%B8;QGBcUM+ zB9RR#Y+O8~J+7xoZ(^<84px%9pb6tEt)>R9HsUx8IOd_pIYEx?*~s^-2>FJ!{w2Q9mk|RnreG9 zi=o!(U{ce(Q+&2h(pQF;Hx1s?3*QVt)gA7&zeAwh5F? znsdu$GsOII}Zb2WKWdMmC)JNudVIaSo}sSBtC8vBBS&5mmxLtWN3`wxEoT z$;9QMR*B<7_WpP*mug3S4m>_4p-WgUqGCidzR&~mk1iPf7=h$;_wiv6*CLoW97R4P zoy{$bx~AUj>7 zW!FZ`k%4h;A?Ep}&zQ?Og=~L#e-7;-|6yQEB)dGDNxqb36wYIw|KOGtd?bX^-!-{~S^%W9yu4@XU8n6~5CETXa+ zq&D%l&z5PluIT+R9SWY}!QXhA3Io^hC!q<6Wz}wy~Y; zCP#YW#JN!p91y)#K#v@X_yc<3Uw{KA4sb+*H*2r65!)u>qn6g*dGnk1@tgPF%xCLs zx98_B&nb#Bzq-=efbW~~cm52#ucJ3M;d3h6xP4Q3^8Cs#FgV*?Y%eOxH=kepgPw!& zTkCf^%kX{p@ZqCJj~+jMd~k38!%O+zK73xwH`X@)l#lZC*_Y2iav@o{mnq7{x8?7Y zvVU+%QRaRRJ6riy`;N!rL5=d*7q!tK0konl+!!U4JrKF-i*6V-wO_w`rl}!sYIp56 zZYN8k7q0B3Vsme;!}cC9muolPpPyS8d7xn+a;lC7{V4NBO>L~$ga1;jYw8%1KWJ); z(xST6URRgmRH#l3BZje|*4-L$EX%>~sRlN%j%}S7h&Ud$JW^N7M+0-Jx{&g~+i2Y? z&B3Ut_3}LNbbUA+)`n&+PP;mBU0273ZWss6{@4S~bkP?B5#2RteRoQcjlyNS>@L>6zSOf2t!#j6v?vV21v@^gaa0IwD&y*Q7vUi<I^rGVUXj*9B^Di-1?YeA(PJEn?Pv;PBAyQrwTzcFciuQ&Z(`d!Qa% zrLw-78YzWaGFAKAg|Kd5cyuD)<@~*4<`1Voib9|msFC^NjqPtj4+94r+cxb|z8;Q5 zf2$P&YgyrlGd*+f=*+ms$cD2pE>v$N%pmo4D{aj*o~f%beOSqGn*2w&U0=pt2gI zw)kJ4Et8xpsF}K~jXPE$g_|IZfU3zgRF0~vtcai$q;OHaa=tMSm)vWst;NpuO?H3z z%ug4wL7slF#rIGB`22_0ul2qgH%neoQzuE*F; zcGC+I5(iKvkhq~<_y;O+g#(9j=1>WVBbOfF00%zAp;CBbd){Nd3H}Z|nn*kNW24SMd8{=UDXhm5#Jx&O{ z%5$~H`%&D|e);NaO^sMfyX16?PO`)|qvdNUzj*CJmtMO{eWsm${rLRCH~}08=Qq$%cO`{}_M661+q$jrWmIfY|p$wB+cbrvx0dxA8Bsy*wGPDB7XpKv@ z(m~+?qdFh(A&>J6u(-woTb)h~pQ&~@tkGG1b{jmZ0-TA?x;qKi*LfzkQp(S6gT<2* z$Fh8#-{a>1%K=_5PBuj@vQ2Rx66)zaROC^3AA@pc50sCi`#|MP4NZcjl#^VfT_FaO z99oq*=%taUoUN}S~+rhKK{(!kY56tTdC zY^5P12zwqyl-LI9dA^TK#|cBvB#vWRll5&uw`5Yu^<|wgK|x2o8-Ytq({Vu?tg;bn z+6?(UKSZ9x9NS~mVH{7it)>ywIvGrBm0mH>7;?|GDC;4MH97K_jggOg^5Zbyva!|d z0f+bOE{TCiJAwh{;H}*40Mvu4MAlbJ1EYm-L#FCrs}wd(10EgAZ#92;pZR;!Z^aQ% zY-*~^m!PnJ5qcOn;5v@wRPwcG%m*9o2w2NXN8IU|%X?>v9wQshLQ$x}a+E>p?bPC` zb6n)_PKhevAX1BZ4G1lxqcU+h(<*T^WA6{fa;bK-$$`fQBy*+_bTQU5-NEa*@Mj3R_MSxt>pZhGlY&n-d!T9)=}L&9o+^_K(6S7tu`; z_c*^74H6=smYrgq8pIk}g`IUmgGF9*$EIQRoNN%lEg81|{#YdVPd zF4TY{%bYkqB35Wxj_W!!B(fT$Hu0~|mPyW))J$F0ijGxE;U)+pplWgrm81G9%VTH- zDO^;o7gmqLCAYoOUhI0S^zQEN>03t*Utc>h_x+_KyU%=jh5m4-&;R`6_a|GB>BZM77&Leen6)^47d^_CovSnJe%A E1uX@c761SM literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/magenta.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..12b05978033b812cb531a8fcdc681e499afc326a GIT binary patch literal 3007 zcmcgu%WvF77utt=(YrcI=7h>}H3Pjoyp-nFvpF}9Q4 zv=WEjIQ3A8L&X6k#IXW;8N&SGm(QNFq}{|7k% z^Ox4IwwGZHU%B<+*}HdM|Lpc_AH($fThT8tJXdV2ZT=}A<-x&sF>7eo zoEB=OOS~Je+|2mq&9yeYxlMhhU3~l0+`=#b4t-t_b=dDEc`$5fBgO&zOR}M#YKU@kpmV_u;8s$ zYXYCiw%?zi^I~}yG^z}oiO$=5DK|EFE_O1?mv=$pxv^q-vB4kv=MdWgKG~dhMIrL8 zc!Coq%llkW#L*K3%9VXkK8&9Ll`9iy8Z2d;6e4R2(HqCm`dByB#5GgBa4k-l802qA z!>bLvNebT3WI*Ytu3M;WngPOrgWp8(gGy)%LX?q$OoM&Ew@nm40OI{%!QyD|Kq#X@ zB(gq%gNys5!;LiQjHI<%!D^BhB%yq@+0a1MS{$>WZqKQBCHI$k#smc(lhX)n+ae?kfk$KkH*TAH-9)x-npQnz9;#DH#@yb` zV#syUo8~IDV!$!tb=RUS)Gg+5z0Pc``#6*zhxwL`EiVKgK9;*AdLnBH20jOEDHDmBvUMk{FuUy~1GO97M;4F+1HCTyr2)(@txvCtS{DUb{MeN1uC|?6YOY5i% zT+XzL9M3rW!+E)6JLq!o<5L2keuv3-3;v67-5Ln$cH#~ zxQ+DCay;Fw`!qzB$vO7MZuq+yR)Fomw8nY)kIX1H(Jo0k9GVtX(Er3R?s%SSaT7{{ z1$88nxmowXI)^f9BM<&(8aA_rJVV2%NOpNP6?`el2=rr~RbOxKkKV|EFu zDpRxc_GNjNqdp(ZsxOC)UugURbdm#l3&YTuLeJ5O?}j>dWSSGl*NGLGmgBk(ji9%b z+K7MMTgEY0x@PLKHmX=96>fqs16Pf&p>j64%JKwCK?WDqxznfb!X@|oYICuDVUyli zKKA20GVz0Vw%ENRKRo*Gh4bAnj-L4R8gHCH#=@NJ4trINrv5#Yy@Get7>N3%yf0S zdv|8zDS`(<@RUms%t>zn9|u9fqu@cjdGO-JgC`Gq2ohMUx_dgaWH-C`Z0Me;zrOk( zU;Y1I^=|v(h2yiQW)(#_zP!|25xR0N zgMO6yqlT6%_QiiG)-^SUWLF#7g0!fvwc6?;Pnhb|ARrJLs_WH|V_6P-Sv8;mb!h9z z0Lby7YMLx1Nf>7#k5s7^2YfSYXu{(nltEnSj?$7Z!JIzAv5sm`hL!^^?t-ST5kz;&_8+Jl){?kWfwUq9O~s`xulnyP#|o?gN!G6*Tr26NWRMbU5#i zbErM`O*K%>P@lgXMwAcJ7i8e&0@lPCYiKf|0IUNOb_~OZ$hXl;Q2c=fv?WrM;tWrM zJ%R5S&_~Ee&Mq*gVR!pLC?$TECj%@tE*#(<)8nX@TWhuatSdcj2Z+v=2L>QOwv8~sj2ZQ@wo6GUY903{wMwt3(AZ^l$0RfWCUqI8QwsqP1@dE4&$N)~ z27<%;b{Bb{CoN6|=ccC0-S≶VPE()zDBWT$8EV-z`n4z& z6dRf<^Tp5YuZkWf9B^#gv`cwA9I^gdGZd_)g(HH@d__KUW%o?pV`Rgb%L~zUEyfsNmT3UnwM>91a)8&x2J;ZK2@#3=;Qs8{L;l0S2#>Z{ zGLd{SPOvzSS&}xiZo&sDj^lnv^5WFDB3d4ARXwX2S0}pHVaTK`2`BPo(qiR~`Y+i& zFhdX5WdFa7oYUnEWU{Z!>3g@JvNJUcw$IDG%+Gm$ul{n_{1pekFHVvJ&K8P1;smY@ zu;&B-*|N;B?E!3d4byfUn{=_P2C0qz?XzW^a|JaMm$kfO6;g2%6eB^^_!=rl)m4^7 zq7@|KqS|a8yCp8UtIN%WPW=+OJ$-Ly=ffLEzJ2b=V_!|Z*FN>g=WoG#Pu!&IKb=@# zzx&5KH=e!beDr$zWP5rBt9M?ccjxDCPJR5%nMAeQwV##K$IicT=IPttD>F07kDuwE V&c6A>7xEIleC}fN&e`?1{{$$(orM4Z literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/pink.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/pink.png new file mode 100644 index 0000000000000000000000000000000000000000..6a23621e0a1e21a7ddccc2c6dba75dc6e4abd252 GIT binary patch literal 3007 zcmcguJ&fE$6n6d)xe$S%K@o-JqzHmp&-ia`>y~i2z2r{H9;e$yxm0949`9P&wTt2*$?BC%l1{uL zeut!+AH6C`3%`fGt$eF<$z}1VLH*d{jmanhv?MK_n<#B#CWlBQfe3Ye4S#ncbn z&Gv=L9E@7ZAkPz5RmbCTW2`sgw67A!aa63SnuY*@vfU`B6BK2qOC^<>HqTfZCV3b~ zvQSICcsp+?;BgtsD5-TvS;ZGHr%q_1k_Hx`6+oZWxMVvW79RLavY_;D9dTY_*%QAfUAu#^j*VnY+bi(ge}65O$~x<+u+Cv zh@+d_c0e>;-;UX~NGh?utTR7mprhUm*R=e=@oXD$%xuJ{VIhZkI@iKi!H;CT!fWyajm*Ziac48km*A-dp zwhQXPRVwPMrGU{wxFu3`xLpdH8iq$D;$6*O*=PRo^t(|A6l;ns^2IIeccF)Y1D0v( zW+mSUCw#co4uQ3-bi|sSxw3br=rN+2}uXJhjoo}(wx%p_b_yq7_O#IOYI+pQ7&Qw8ud9GTF^oNo4_P za2P=}Fl^*_m?LZkrcO*oe8Za;*xVlS348r9?3LGh9N78 zQ{9RD>UgW`SCZ`^XTk+b;di(bI Ht2h1vVosey literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/purple.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..679c525203eff3868d90a3d9c68a3213d567932c GIT binary patch literal 2991 zcmcguONbmr81DFt8&-lMgdo^<4pFqGtNPu|j_YP8$u2m_vKh(7gQU8uX12*pciY{& zGn<>s`~1GeDy!- z?X`1f=jV>kDT*?`y3$&Q-=p$9{0MxX`E{4V&!K$%>?!5iw@?2BgNJ%c?IlI|?7btm z>BBI7EM2*jE6R~4<$Fl^=;LFGGWT25*(f&JuLLX^G$>C((HIR;HL$pHWsugg<9y5)FsF}bs*?tmu9ZN}YFxUN^-Bvl z(?wqlL|o*6B{deDAu(0F2ESYE7) zJNz7AJHYGB>1I+S`DSt#66)nWR1{J7E(+z!9;g^acY(^48kz>nnV?0Ib&{k%iJ`TL zZK^>UhWgyaDCWs9e_lF1-XL1E5KT=66v7@damO$MOahy{fZ-3Wplt|IP768>_5t59 za6s&U;631kN8O!$p_~QXBpXmTxM)CoLQmsfsjb}(R^z;&F%zq;rUs@qqKF4wj5!Z& z4_Tf^k>D0XKD9A&2=jf)Fkzfb_O}wYC4)-tukws13}n=&5%`>W)a5QR2*$|tEE|QK zTF7L?CO*7Qmrtaf&mzcm+Mkvxt>V%u;W;MbAu_oukjE{8d=ko!&3)4%rW*o>cl0hN z{UmEA95^>MRi1VL;=xoZ^Q)1fv3ABg2@|8P?PkM{`Z3YI6`Vn{Qw)C2POPZ<3G zj^uRv-fj@rBA7S=b$!!8wy-b?P1{9|=d%!-h7iP^(C~LR%z#*dVNO!*AGuL&Vw*JX z320hSLH`rST%S`@aEd(PLATk;Vo$1)j8gd^UV@bR%vZ>%pX-1(R zi!5(y-7FcXG)?;vE0a^-j`_H~)%mOzi8@ui4niguSu_03Fsr^CG=8D+2hd6O=`Ec2%n4l^QQrv> zv1OW5+eg&w8m8?yHtSNE=2BYnuY1cR<|=BYE^B4Qs%GIP2qU0sat)QE`YJ18C)NTyZ~X=E C$eiB* literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/red.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/red.png new file mode 100644 index 0000000000000000000000000000000000000000..5f828fa0af3cc357360cddce3cbe4e70a0d2d339 GIT binary patch literal 3007 zcmc&$&2QX96nDQ6O$eY?l~BdOa(gI(S$oD`v6ZEy*|dq&4N8TyhjCZZ>+QxRW zn+geu8yC1&95^5@NEJ|V;!wmN&Pl+^zAww)^C#ea3B9xlpJVyPwJXZ~N3Z?@gOlCG_M)PE_3`ZQ z^c0NGtY7ae!}r$Q+@Wmg^HTXPNY^-hmAs^+z!_OXqZfd`N`%qIO z-qdc`ZKItoiC(mFHxrw8*E;O(9p-WE@|$xr3nL#i3`9ZI(V!pa{-~*yihcMm#k!`J zkm62LTa*^nt@gUQlw?A68U|v9K~&dkV8^l?;|-M<#Lx{}#{^-=H!L5!YW-+nPE{8& z9{L-ttF<{8HML$*q`s~Xhr`CuY$RD%$DZfu2GI#YfI#_fT+k7U^9z-dT1`vjEQ``2 zN@7*2r9rY?G&S(J3T2Q^bjNwk7ci%fXsY9eAww&HoK0})cGfRF;7k{NF%WT)0~SxP zz*f6Gfgh-LFqok8VtEHVsslU_op*Lqp>K#h+0K|)-T{jj#*XF1hS=lh2+ILJS)BHg zBFTHnQ%IOh@1vrK!lxLNGy9-o6g>qhXC~0pU&;h6lB|;?{c#Shk9|`KZV>g-jVR{H zFn>)3UM~y_(_jzq9b)*9fTq0N_#7kGDxZt3{$tb+4n4$wd}T<;k?gi971QWc$zzJzA6f|2A?#mp72iCu8pYY1PI%*%&F}mYKFwL9mi%N zmDM1%C4c*D8RuL@&D3SB>{yi)Zh|lZs>at)IhtH$MGUPVgNy3g7vF5dCHLZLYq4`_ zliglE@zbn9@PoIu_`PF4Jo^5Hi@nc}pZfIlmtP-O?)`T1=Ub!m-^p9?>hfCa{*~Jw F{0Z@kmj3_% literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/white.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/white.png new file mode 100644 index 0000000000000000000000000000000000000000..7dce0cea19aff5eb814731f52fe6712173620f51 GIT binary patch literal 3007 zcmcgu&2QX96nDQ6O{qX|K@|tf?V$*~p7H0}$`aCS+C=JxC|T6>M8`AZT`RjDV>{VR zj@&qLk2r8Z9D1mLibIt{QT~8l_!mHk69+gV!5e#byAj(a;-i+<-g)zz_wk$e-pr@# zYqu`XU71r9;ihhkS5%Suwp8{G@<`;%3q1(JrL*9v#hW6{>V@-`&L%ZX& zP%B;H-FRg`!s+jh~rs)94Lq(w>8BIjNj~BWm@|eXHE<2d&`Kbq6I{BJ^-2#IHF%Hrc~azn#S<*B)oM-P zGu8I{6LelI?}A680B54}_Fl@34W5ggjPm7Ouy}RsSYB-Kr~I5^Ilw22)2=8)-WAUv zVKRM;iXx7lVNlK-gYseg45*x$K+|9;h(Ku!o(ndTLwN_ zz?-Dt4NWGLj_SIF+NK#G960zL1bnEv{vaA1C0@{yB1}kZZVJRb!KDT$Dw>V%(rZ8c_DE4)b5h#iL50UaBgX;-0c9= zgR4Z=S3`pkO5v7F)!t4e^h^Ygf#rKNfA@s>r_&!MF;Hx3s?3+5w7&^G3>6yF7XUZNU8_s-LsKH8{L+b5K#G}r!$v>VFjfA~eE$cNPw2F?( z#O1(tC5~t8{pnb))(^TIczjMmSFl_}#eigdu><6vTrkEd0?Enl^TWWNjS+Ua9{HB5 zI~?*Yv>Z=&>pl&UWkLpfV;cS*h818tFs*T^{i86dMYKzj4u?YvI_Q5Am>FR+l(}!2 z$kM&Yj`Yx_P!x59IHiznHlG#P%pURr1EV6@<=Is7r6eP89`h`3Xi+BmDoN8`Ov~al zb`v%_-X`^|7DAosUZ)|G@hqOolWB_+chvvM_Q@G~swP|Q&~%2rsEwRA zThOR8H7mAn%DpVl`CwLmIc@&J!5_d$a>Ciduut94b9Canp^hC{=EU)JVnwFqxUNGZ zBCA1a6aV^b8RuL@&D3SB>{yi)Zh|lZs>at)IhtH$c>=8*8S@2g)c6C{q0%h;J5QXeKfrCy}T8#F0VBo+_?A2 EUsAK3@&Et; literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/yellow.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..536afa40c08ed85f68a52aaa36739d901c5b9d28 GIT binary patch literal 3007 zcmcgu&2Jk;6yJU!no@!21tNr2+a8KwyfgdhUB#3%PMb(|h!Ufw2SjIQ#`Y@q&a%6S zop9sE2_XcBibIhQ$BNPu;!wmN&R)s^}Ne4kUlr%%B9B6@ZcKF9KntCzJq4_^8O1}EE#jYUnn`{9{C z=qVUKzkaQ`4B!3t&VBUpi?=_2`IArQVfbTB?!xD(VqCsw`q{aKK?oXpqM-Vq*G=+pP&0;#L-?=6rlAiZ z#dghDR2KEE#=5>FGogDGj2On2?gtg(IgW>4(=BXa6T2p{5b;9ngv8fJj{)X%eIetm zaHD=@WDZ6(qf-=VXqx?gztXoWGHaV82m%vZrez^OpnNYW=l~`8`BKS9OO ziLTVrNbVFh13WH6>7^6hNj~BWm@@}7HAw}l(1t+HCb)Db>kd8O%oJVG6G@Q+mQ1j~ zR--Y2&s5v%P0)F69hFpSeOYH*GSD&EjgVTLG2io1HS#=Ebsd2sx8)++=2gsi4-NybK~I5u*ax|voI{wa3#(m_4X#>QRmnc?@ozE!fvb&>ougT zjE(Hbv;Lw5&`kw?=bt4)D zQ5Dga=OQ<7d=yl%jUvJw&K#dJ9?S}CW)FFSfiaovifk(RQkqdXk42W(j8-OlI!)7V z%!b8j?k0S6yiMv^FQh)zy^caA7g;=&C({-u?&$xM?L#y4Xic`GS0b@nyJg$uw#`{xCz1ts2X2G)o5~+6$!M03@)l~pa14ATyih0 z))$)>H`&eQ6F;577Pz3bD{I)@l&@?fA#fo?bdH6e|~2$|DC!OuP(3E J?_9q5{$KQmn=SwV literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/black.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/black.png new file mode 100644 index 0000000000000000000000000000000000000000..869f57fa06b248f98e5d68663c418e8d3dd2bc50 GIT binary patch literal 2812 zcmcIm&2QX96n9loAW#XZ91s_bD$={+odYmmPBGhlq_m;V>~lXtn7MR+u7aZ zR22!S2PCdkNC?51BSPYUfPa7sC&YXM8a54m3MqFw#&u;--{`ICi!v9w*TRTl zZ0UZ`BA(-T_)Xoy7B;bK5(^P8#7;)xzw!C%MNF3T)5&GC5L8rv;Wn~y-?BnXLYKUO z;R9FD9;7CxC7lNcfbUyafh~LlEO`>|oeJeFjAcHguyDzcZV59>x2D#5y>K}#N}4jU z-0c`ZwUs11B(~>AJoXT4a~B1~aZ%f14)T28jXZ`e$||-nzbo0UN-8zKsxK}X=xA0W zjB#K&b{r$>xHh7`6QIDg2ofy7gv6d_M|8&Ky*z;ur-ON|iWLWqv1ofX;}NpCFHoC1 z1gJ&o;qt(Ci0wzf>d@|@9LT&UImFyHbhX+cs0XT4)mO(L_27m|)xmBx=vx>rlc;Ac z-#kTrD1JXpAjFoTt9%Kk_Sd0x0Rhi-ZMPm@O(tTn(M=#~MMcD$muw!Ds7|ITG+asw z$hp0`*Q|@%_17TLr$rf3R=L1bb_#CP!^trVe6~V^*%%VS<7QymbhHemj{Lsb9WDv~$V+Dtdz@VH)Z)*OVLIE2=IO0(xAU|!_Ahz4GS zh^xwzx&fkgY}u~oxh#feU$K$@wb`p2nucNS+%y}4!152H2P-p`=?KQ{?(m3+W9ZaAKUjo f`RK!Q+RMK@`|V$^|Ma{%pDy26>3;q82Y3GgnFM?+ literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..4edae3bbb949a30b93972ada6e56c677b4f07a06 GIT binary patch literal 2813 zcmcgu&5ImG6dw_yiADrLBnUPg1VwAQs;fVyi;N-J*|-Z%Ts9-w1rJtN)yy=R>FRX% z?#u=c61?P)i%0S1QHUo`5k&t2@$N+8_HIUT3ql?V{0m?j`eos`2?3uQVFxZYRC1 za;y6u6MEd_Qpc(}9cO@UG%j79W?bA-r4_3|lD6&NAAV;1r6~giV^wl%Iv%A3o3`zlUIt?`?by}~Qr>FYSBybxtGi*X=v-Mr z6C;7KYlTsh1fCb*w=EaD*ulO-TtotfJw`&S`q^MDmwmR`xmMYNueLob%ZxeBWHM<^ zXjA6{heT22VApY71PD~@r6r%Dw79s?&{2iRldMd1Y8j0@);nd}22bZ(7-zNGw5Y-a z0duB2b4U}LEzN*Z)VORXAI*$Q;i!=stF$ZtOKL1csoSmLN2(o(v+-(y>hMyvZ9^o4TZrPG>oQE3 zPu{{Xz;kF9s402Lm%$O>doE^}G9MoTYnk--PJ~Lq`Z^zTIJjiY2g=FP!OU8>%huDP zT$xog|_$e1X7%jmbDtMBxvlbRzQV}5tX4r zE$I;yk=Q(Z8BveWFoqZ&*j>>hop-f_n1i?Gv>B)eSGmcrwoR(ZEko7O&U`X-G5j22 zo|Sz21o?sZgEWB@1RGLxZf zEh&I=dsVHup>9{BQDV)Kl5sKLf-vk<(ypeHBM$g5_HF|3`#3f(U!JXco+ z5aAQE!a2_Qg6}@wbrO06lR%+dTLXQ39o1v5_97qZY5w}nfdN7g#YJ z5i8?4hl^C@MceM@dTjA58zo|vUCwSQtNW==NUPM=LHRj0Xj0|L5(k#8)Gk>6qP-It zce-l$zaNrg8iaWnaQs9JDZ4#G{$ptPS*>?Mgr5QjeEQ4k~I zoAl&9J<7j|4a)y zOn1F=rPsPI{@mZc{PgRe+_QiF^30FlH=?h<+W+m_2fy4Oy!`QJum14i^Pm27_SfOn c3ok%3yZZ3_H_lyFng(@!^?K*Q)sOD}1z_EL2LJ#7 literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/brown.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa86d593171f53240948a6480454072296340ce GIT binary patch literal 2814 zcmcguO=u)V6rM#~G+|*u58}n97r|Yv>8k#nZgvdWOx6T;Vn{|dIV@ORRWs9MrmMHR zlbPh=q9E)+@aiInxM%O;VHJ;pc=G1SyB@rF5aO%pp3cNgHevl~=)Zbjy}$b2tGd6w z_SU7jm*;A=+NIT%)&{&UtNXc&@OLkh3wla=kPR-1o8-4|*PK7FZHo4Xrzw(_m^ zt$@j4opKq9`goWCx>mcsFit4j5xEwMUKBU=-@bmNYY}hix1Ba_CrhFqtsJCc^I)yR z4tAK&^@TUJ>*D|v3`I`0@o*4l!MLeU^ak*)h7DbtK=PfYzNidpTkUmiNv1+`>liVN zP0jP`#I)4{|zXNDMvp@{Pgu%yC5mfGzKexlmputI0~@*a3p#&#k)>+C1O z*btfAO_^BU1B+Ltj%E3VI7-bqrUSg1ob+Wbv%Wkf36=O*D)Oj%ia{kg1{LGz6sVF^ z&?Hz&1e8(4igR4~4S5qhD;FhB5V7D0bObnMn)U%Xt zpCLaIzY|B0VpG=?UxJDKO=w-rjMUb_uaKxRJY#*1XPNpg}Scx*= z+HpSiYYY=IZq6{c2LSTxWg6rjQbix9kFO`MbQC~o^p1|4ymdS2DqN!NyL59z) z3ga~AGrIR=*NJBnOk9DwzU3lE05?O+@sQi_S%@uD2;xmcf82E|Aa-C{(;9jj*UPlB zK8=j9;m!~wMSGnzdoK669QLDY9cL>yI~ z)bSCuy1;1Hby$}wMk{UdpEi5Np-CEM&P~%HIE<;!>J$h+)j3kcP`4?Z5?j} zYqho5X?(=~JUm=@=GA-m^`F1E_~W_}(9PzG*!8 d_`?q_)NXx0|L7-@|DaB&tIKPxFK@j2{$FT~fH?pF literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/cyan.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..68c94b3f8d6c5e65ba6b366aa95d69c48bdd3483 GIT binary patch literal 2816 zcmcIm&5ImG6rUgjjT;dJkz8y#h>F&9ReyJraY=R(cfg6u?npL}gVj~lGtJI)b-H_Y zW`hUu79Dpoi#H@!(N$eKph5J8O2cOEeArRrRa)@vHYVEnxJYW7}pTg^zZ2e}@XgvFZy3aH|`~0Ow` z-wBxoXii5Npc{=#tJ93K9Z_nL=qG7Q|NYzVbS>d6{f5)U-E2(^lJz^e*t&DQ z$L{Q~fa|MoX_uxU2pEZyYSYm$Ey8I_pUDm3TMZk!HiMKqE&Z}msBL#Qv^ALv&23`D zFg7(WXcE`9UHqnIViOzKF^GwX8)7>oo>pBtXv=vVZnm#gy5O&+56UtN4P!EyG$&S5 z=6!<%L119hFiivqRP3cCouah3xRB5m1J zFg8UY$2k*McR}ODg<(axDGsPP#d3hxi?e|&WigP)kWfz_qM}UVV-%{HLr^hIj)AI~ z8k&V`xuB)Ydr}S;v9qzTO*2W;)Ly%hq+Cvl*OlYd0@0?WXz41D5cZLUd!`v;5<27! z3?Fz7?LugBTGC~30QjDXLu`fQFj(>=-a8S>Ss2TFL}BBS5$y{jOZziz-EP=Pi;|{H zblNQ)Ol>9!5535t%oh~-zROTVZHgk_wGn2*Qn%?7bFscH*;oaYT0hS(E*Z$EcOxXG z%bDwN;9m}s-43@Mwtz*KY!u2;j!5gU9uD(7M+0|8_`B5LQbLdNBU=HhZ67(Ov8 zjN^T{Ae!nIj9r6LyBlbXVj{ftAsm z!a*wXqNT^V9BDMmh6$Txm$94j>U^pbQY)o)P=1ajjf*^4ih*S;0=$e1*eTcIEh0j?I#p_P6Fmeo`Y!MMu<2n zJ*g8QYQ?7IxUR!usv=rRlmE5Ys~DQmu+%p#hM*Z!pLG`qKXo4|QpnpJy2LZRPq(4N zbUN+JJ^vp2YkzY;;s>Ancz<(cW&iI7<1@bu fu3UHy`q^7wu6%R<&tH40N9|m_-u~*!`yc%S-Ccn> literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/gray.png new file mode 100644 index 0000000000000000000000000000000000000000..9e70174530120e07927955a6ea67a495382c4d55 GIT binary patch literal 2815 zcmcIm&1)n@6dze!H4+hIK}4|aMOe|AuIkU}X2%dSSrc$#NM=cL+v=*CnId#~zfb>)NE znb&42mCEe$QezF?FRT0coA7+&uTu)I7m}r|tWtUL6?H#T`SRq|N@ZpzYHjA5%?|@6 z`&G(iD5}GL0_aNR?%Xh;Y+K}7C^}JG*Z=t8p{_-|u5UO^+)NfkH(EMK#rnZYiydq; zpX+n)X?KSKDCmovYQugn&VpfGAL$L?TMZk!HiG2ab$wnL)Ha)|+Ja1l=2kIc7@L~s zSBY!eE`C=tv55`r7{o-x4X_;$Pb)4RtfjmitTpZxw&1U>ck?_63}Y}DR0md7rX7R$ zzHeaDFiivql!mT3l<1P*xz!v`Ki zn~<8E=5!kD1HNTqzyywW4lH@p-oFycSx)YUI?B}uY)??z zCQ65AqtLT`s13Gby~;MB7Jc1SL*;(^{2R95l8?&9xX0k;Od$%4~vs5~_#8 zeaj}67XpW8b{Aw%rcKF#b4%CMY6qYmT&1eM>Nu?N7xvJmg6C}=Ccr6rVzxNg#M`O7UXtdT9X?3FRmA~vM!A~ z0yZH-e}Z5z32U}PkYo7-3Cs3SjdB}##4?%baO`;(26JIUc*?;r8Sja7DzOrpQrJjE zn$`7oD*GBul3v6{)n)9(yx5=0g4A-Uowc7!N#i1orgC7~O6h|3Kia!GA!t_^Ov6vkB^T}Z{4~z{QZk(zxw9nhj`BnB>%RsA*7O~w#2Src$#NJcifSzT3~X)@E*+ug}b zf(KDhRuBYFE`o?x(Lcb0u781d@#M{mhsB!^U-k5KCT_9`>&L)!S6BV&y;r~by;pU6 zeeLyYb5GA{ns#k!kq zz7a4vY)~#k(HIX?Kx^9k!Z@XDR}^|EcH*RM{Qlkdh92{_antSMZn`A;@ycN)HV@Z& z>~NR)+*o*3pC1QcU?>WzkB5UK55{eyv>QNMb(@A>LWQY zc1+^?zKJc*pZEOomz{8Y2UVU5m<<$Z{#THC4Uymyca zb3^2EFJoePA3R>429_5a;+UEXOb2*9Iql0r=6!hv3H9&^DvCHd!=V~E0Ttu;45%8Z zp=q#`30lakC*@$Oo%LyKxRd*6Bc^n;_3*{_`WHzL*aq*Du2s2G~N^jk6u$trrO_*5i zv<(Qg5yw36a7ZFg*oZqmLB4Pt)CyG#N48Ha5>nEd&hJRJr$nXZPx6aP1~%&52!t4%ZyQ8KmmW)?$=)4{A&6%_}Ik!X1^Cqy=H3S|NUBB6S? z+_xQKH$&j?*zb}Y$gC?laBdsA+U)?$L#R~cSK9!mW#^WX>R@lu*|aeHOroCE`1U#D z$HQ+WF;Hw7y3$Kf`rm}o1p#=jYr9qddOQ|`txgQA<&!|X*^%v&BdU_A3=LM|95i=O z)tXIlt7;8my-do0vdI#dQm5cX)g7O*!55=)Vs_LQK-L3PJAvggDn>LDi#x#ZxmjVJ z6?{(j9~?SqIs_9>pvbp95M&4nhAH{hh10i&ew_ zeUnUeL70>Q^Y0a6^4*y*c|+|@dGH3O)q;y^5KiI%O8Ys*o)e#WVbev__d-Nmm7dh~ z5w#=Bc0JE!5mky-*5p4e_DVw~4Kw$qX%}3^RI|PX!bg3N6ba;Q2Dik!@7x=~4U?>P z7JIFa*`G&83zwgJ_qOrNS66=Jc*WP~bFYDod7ytkO literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/inactive.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/inactive.png new file mode 100644 index 0000000000000000000000000000000000000000..cc62301e09821d2b2c86fcc6167bc6670ab0cff5 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJtM=93Yk-Ziu^rY978Ppm!90n$zaIC;<#N=faz=el6!n}avwZxZcNTUdq!V^w};J* zd2!>#0~rZ>l#+~!{r~azgqQn=zCHOLENEgN1yXaYe6yX$*Kf@)R_#3sG@8NF)z4*} HQ$iB}cyLI$ literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..6fab3bdc6eded8b8e861b6a8c3a882196bd538e6 GIT binary patch literal 2813 zcmcImPirJa6dw^5H?p$eMFg?wMN!t8uIj(j#f~9nvS!4IAsN{OFIHDoCrxI$db>NB zNlxNHSkN!9EFN6&=+(m>#804KK>P@bUPQ$8)l5$(aVMLwx()rW>R0d2uikt0?yRr9 zdu8F}g+`-srMueMfcI5>KX(b9um1j!!RvCix?MCH&%dbeXBv0!z0_zd+)nyiR3(um|vlD5rX9(-pSiD;X*ydLgl%W^kaJ<8?g(ORD$ z?eS2Ui*Fk@#uNk$Wyy^3aF7;s+%_k2DSYc;%QPmCa<6SJX@$mCZ{1i{xitJHMjT_? z2*M`uUDwBN88)`Dg*}Vdi1-w{lmtd~nV>BfG2Q6gtaQO&+uSY7j9S)cG-{5Vrpk9L z5{99LZOgV1AW(6bmTZjD;@V6?M;1I!vNBPrp(V0N?U!v6ESbn8nWe%r?U&P1|_mR+0)eD&EwNR|{l^m9lN>Kti~M9Nf2UiV5||bqpVP z3hhB?3Rbd{;1KYA8&m91$2|pBB8d;rg$hn%l@A$gTry-k(#q1EiMC#kcGIF{DVN<& z+XPdaNg}9+Bj5F-00prFkH~dV#N!x6gn5#CE!!6MY<)-ZeH~PK{WQOX;vl2m4eCd} z^n@29j2TBRb|ch^1xFF{NGup5g8MURALI$7I2)Xls;v?rF_tag;UYqg2qbC=m!ObD z`r(PtafuT|z~QmpWi?QFPYK}MF%7-j6vTt6Oy^hIB-P-S4%NZ_bTF_nTo%#KYJU5i z`Qzyi(*!66YIMBNiT+I}U0{Ikd5%|&uP0+U*y<#}S}`>Q+@GwN%xs^Y(UnYRC|yko zh`Gb6)@;h#)z=^~CP_&dpSr+xbV^}X!^xZtz8IBLv7=oHWIZNor?5iB<%s2SX$KfS zH!G~Oj4#;1<4q@lOEB>zibKaoo^&ya94|nAE94P&Y$-`FbNx}%9ZFnkJF^^m64NVM z`7TR$BpgDP`Q*;Tz9;Q~+bHxx9|fMw#|ufTl1WmTM(YIGhC$yGCvVm z8Os?Qq%tqsW}K^`!Ln?S@JV)A2dSver#c~xQW?kP=SD*dy!5D;-m_lhkr`QV;ayU6W#B>}J zPp2pILd2Zdc0Awrc+7M}Yia7g7JD5-6B%A1*%o+9!9+pYC7!@%zTN%Rm49;FUi=3%=a`wY%^eAy?mf{qy^m dlNL0r_x^an{b=+0UEQE|SJpb;yz}v={{Z70e!>6% literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_gray.png new file mode 100644 index 0000000000000000000000000000000000000000..77ab859cb88ea1c221c07e0a840c31c0bef2817c GIT binary patch literal 2813 zcmcgu&u`pB6gEOC5LAK00mKE%70?Q1J>#Eit4j#kltf}fly24J*73}E*UGNPwVmuH zTqxJD35l;)KLfnwJPtS8*D7D|)iU~JnT4h~8jTtwyCL(Q zNrE6Sv1M8o0t71d(~^!+T3ni0Xp4g7NmeE@)s;mW$=$MLK%~6Z-Oq%% zDGIrpGqJJ<9xu%TE6PoAM9n#-1H7J`^<^oGzC4A5diWR>WfGs_P>mdeig9uZRE^Zo zEL_e7EoI)7axl}*#w<47A`MHwd^1V892Hm8!mA0QO-s=-l#mc^A{%!tE5syp$y*p2 zcna-+G&wElJU9S+*TR4aEqn|tc@poR3FRz|Wj>^^amkSOgqfwiiMLKCTuY0RrcA80 zTLy&MND>~#E^&p!1d4=!SbfKV7AFWtg1C-jdlqTV=C>u=RiaY!r}@Pt0~_^jgmGZ` zzAYH?smqZUI{}KCk%a=mDfTdPW1G*ceV8YZ;&d=?RYk>BRHEtGj7P}kzCcax5EPI| zJzO5x4zc|RI6U&ZEC(|0NDiFahOTxy1oIFoRr%F2NY%Neq&nE0cKQ~EpGnlS8s9!+ z{Al<_ngGR?p)0+F6aUwtbU^@~>)LMBzmbf^V5^+~YsEAWZ+>L^_=u`xDnrB7qyWwB zSGDH4xLvgdi9Sinkh19#m{O+zN~hh)NgI4FDyQ>DeF0=WMzvE|A>(pHbFtI|hR@6j z^R(a#y7&0diSH0hJb~iC_7KPvqsVrBs~Nwt8SQ-g34hfvzjDE6EL%!_;%(ZGukoEDIt z)C~}|W6O3u&t)-HidNR-lNNiWp$QFh_oi7FT*g$hz6HWZeUB6=?b1+x&$6d3d<^^y_!-8V|p^@biN^5ATl-fBpU=|Ce$6;LR(#{^Prs@8M71`1-e7 bns#vSg>Qa(x$}&=psuZ~x4(Vw*2jMVts{OC literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/lime.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/lime.png new file mode 100644 index 0000000000000000000000000000000000000000..a6dbb46eac44898ad1d5c019b8a4edf9d38d4220 GIT binary patch literal 2814 zcmcIm&2QX96kmi?mCz!jN(c}VmMajb%zDP3YpY8XvMGsRLzFCPa$`I*-nFvpacw8N z2^=cKr9!=MM7;r*9=IV691s@{oZt=z_y>^S1gaF??0TIIO`3>OOa7YooA>dX_ukB{ zwbeH-&OJX@tJN;9EVtI-{j|EzpM&R%e;!bHJ&`VN<+a+Am(=}O?bAEY)@pM%;?8EV z*?v1)O>(015`8pxS8APx4^Y)W>=Q_*TP)u8kqZc2i$a2DQ!hnzkr2p}BR8 z7{;dN`E}yjwu@iWOl)EUI|eZkaRY1z#M8=42WuIRg7wz5(iZ$R^)8IRX`<_ynku zRM0e7%mgiD){(M5&7HNWZ<43517pz#zF^S({zzfY#aHUVdVRf9Wm;Jju}nowWfPTI;zzO zOw4VLDMJ=>UF12okNgG~2s7WI%(oj+WKFfblf_Wtv_Gp=dBs6vBpR;8c!(_S3Dn>= z0oOwHaJX;T#PUMm@X+p}?8~ezIdBg8)oKTz9$clWzM48I2RBu!_ID`Sa?0_wcqICptr%F#CyuzYlC7f>)yY(a2Fq~{ zIk#8#nhkNI{OZTrxF`e4CLu7Dor3G-aD2=HpN-0i+F?%sSr5qC2`raUF{GJT=mNv1 zR)ukr^EuspuG7!8W&kSlLNC>Di^f>(cY;UceZYL zf3ZB`MKaU@VbTVSe|Lza#ip!cTRM6baOA2B*aL|9+7$cQzz7wrPbD#Z@l;6KZzfK@&Et; literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/magenta.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/magenta.png new file mode 100644 index 0000000000000000000000000000000000000000..08921b6375cb8f936c6c629c88cec41a97cc6d29 GIT binary patch literal 2813 zcmcIm&2QX96kmi?(V(JATo9L9t`H!Ywa1_9QI{xWQxe3cQL-q>jq%KQ*UGNPv7PKD zr>Z9^!9P$wE|EBL;J^hW#DBnnD}O^lToK{TuGiVnO%oMr$zLsyHYw*1F=P8BP^>lSNuhm|DRoySt9)0;*t+ucqcXo=M_D6)t zL7j3Liu!1f0=ibavp7mA+Y^Nrif)`V^~XQ_q-!y6>f3JHY^Tej7q1>?V(WOl!;be@ z!1cxVv^ygL0tTX>+Gx;Eax!Y_W4Q#r)v%#!V@R>r)R&Y(ZKu7VEz3-3Ufo2@G%d{! z>ezD}&wN+2Ov^M(*T5FS9x)w)eXYE7(3bItY_{%}y5O&=_lhDVhA|ut>qEOPv#x=I zATUhJuq*@!lpiGp9ib$@J(bWBIm_a-h-IQFi8Pc4MNBfJ4ngDXsbP7sDbA?5!g7FDi_@MgWZsh(kWfvZqoRnT3lyrEb5JpgFMz6<3YwDT zOwdAR9Vz?M*x8ucrdhadX>V=E375nCZRL2mK(uHfnz{-kWHyj(b}WmSn7H^I6F$rd zv<;!jX+dYf0pL59Nlcg6&N;B;addPklrs{^Y(Qb-;sNanBTc$vZS6K$OY(vyOsut< zI+$9IV@?9!$1W2-5+3%DA38n?18yUWIi`qg&*F|dUEh-IKn0arKglmH8OW%1gIJ*x zdfcPP37Csq&oNQpF@YM)4Q$KjzUzyrw0l_$DNg&dQk7L4Bu1j)*^GzC=02?E4n_eE z)x+h1?O@vvfx|Ps%d#)Cw&cLMt!rwx35W+%smiaWj?2Lv6{`J%$)InUa2Z%V%lX|) z=Fg@-PGX?g(lr$?WUPM+N*5U5xvmYAjmJ0Qk?8NVVqh(w7~;*&?4F-dl}u$QS&egu zxudeyY>EBys~>CQq$HG0Twp3X1=q{rc+Li2jmnAGVNU>APl?(IESFI+q?uUi0>hVP zg>jMbIX!&3>DYI$i9La$!1judjf*UviGf)yl?mGasPEEehX8NY-5Hw@zv+4rjr|Kg`0(qN3m-t=h`%j_6 zwANZnoyONB zN${|Ekp=hSQM`HgptzMARjOx$D>){ln%s`}OY_|) z6D9|B%4I0(qd^MjTJ84ID5Y#)6j~^{anjU(`|4|5i+NMO>$XulT@}4}{Wudl$D18? zyw3uzFTJVV9uW{Q5CzpngMN~eQB$ADCGf3=ODOyru_GO$OGL$I%vmk!!89+B$SUiy%x~{5paU zG=;VyG&wEkJU9S+$3g^PR^t>{@;ExW5Xu>eWHz9%aq)n5g_$PZiMDo|Y$SO>6DBrV zO&v_F$1x{}iNNzvXdrG=gS(DnP-cfKK!=eZ$bv-K^>4pdO7_0#;~l7WnBH;Biv zPpOR!j2vMEp2H350tY@qf#Y!|xZ9XXdnbz_#c6+Dsz| z50?kFgKa+q4o~#1%D&9nk^|?quBqK7ARbJmD!-aKE(dp2sP+%0gT95}GO>D=^LrP} zpG?1-#6Yp7YbsvIME?$yE-=7zUE3|kx8jlL@3vxKEuR|V&Cl$eo>7%dWhhyXbBMX4 zvexW~d*xR@)+R|wD4V*#RCEfim&5TH8+yBeY%L@EQRNk!=Zq{h8~Jnr;*95X+wB(36;6(#m=? z=?XZ6O#R87i6SO&;70}zBWxfKLb~Bc;E@+ak>`cfaUg0Q-G?&^!hh@xlgXjT<^n6F z8HIyXWO-AMGC9y_n)YKh$u9FS;pO>MC8SnJ?WFviOBxqhJQoA=S}GH?e^K9s5qG(2 z_`h$GsTzc788H7|A*TPWDU)~9-b@Z&a%L^KWDLSdOrW%1Q0zGlm>2r4K?5%|u&dIO zx`9FM$g*8HI#@(iL@R0XpB8%+LlYY2`li_sG-K+s>H^`X>LW!0d7D9(h;OaD03D{Y z(OT{_9N`}oa!Z|3gG@&^~^ zF3lN+adBy}vkLE*^!?lgc)s@6A%oZR+2TfF7%#l6?`MoJzk1a$=I$iD^>V%Y5#?&o zU_wQ*F&bomHjJy+Mj7MVvNR*PnWSy&k9+qmGZAg;mfywQY+i09i~G4;+h6YS{cRo! z>)N~K)e!{+16eY2H0Y-V9ks2oUJBoO*tX0uq}*;>*R?@&y}M%0t6Z8v10#;HV>ZJE z2|O>r@0bpDu#J72IEVxkdz3WI>axIEE@Hacxl!4IzqYkimKn9};c(a(x($_Y+9V7^ z8#}h+AV8pEFD=;!rN!l`hK?+Fo@8aBQd4VWk=iNS7I-=dVUX2o)1smY2(w2lvq=N% zkj6m4Yh1RI_s7Nsw`E@rWLg%0B{ddU>UL}RiE0Of8eNnNyWmk3+llC+x0gwKRTgR| z=W<~eEMA^ER+Ovqh?;Xu2Y5X>+ft<}w$v#k)Z$}Qlu3MwK`l83m80YosFu{wjLzqh zl`8Kk)t~0h%G5X0Aq~g8aw|!N8WwNqz^e(e!%Eq*QQ`muR-eq2Lj)B{c3zA8Oi>7Cjr)qi6goHk7ffXt)hb))ZH-X_ZtHM6b z`GV~}-gVOS2qu9o-x*3VDQGM@rJ1hW@DQE+rmy>Kb|y*DG527E3oJ zY(lp6a7z4nK01IC zrn}U+-fMlv|2{mt_U!8icdcK(zVOq7gZm#oe0X^8cl*~-{NT+WuKf7@ckh{B;LqRq d=C|91vGK`^+m~MXGl1#F(!z4*+xKsO`VV}*fv*4n literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/purple.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..5e504f909e8122586346c69f96abc2a4ba442afe GIT binary patch literal 2815 zcmcguJ!~9B6kdcBfr+JvNGL*)ST+KIU~Xsj_jZ-TGCl`e;*4cqh%FjsXXfr!zT4UC zu6<{VB8q5Iq@hHSC@ARYprJq%P(wjUMU6nBMKW*h_SWabj;-)>((TU9eDi+3dGF1; zx4!ny{M?Iknx@UKt~58`eM$YFxd6|X{ye1cdNy6z&Nc11%j*A>_UVHwnl^VkZf_M^ zt#?Bv2Q|uNBx<8U3TREczA#ED+YyBxiEf-UjNiZc*3e_#FmAam+)9^3FJ3vw#OA?T zn;q=1fEx>M>DNag2pEWh>Z3tF$-_~@7|RV|tfoyvA47_rhOwv=>RYXKeMx3Q_i7k1 zj4j;{YQ%FK55K8f*uo}uO=2P9h1dy+ua`dqv}L>#ZZvO{y5Or}^ok-4O>;OL)`oUX zW?hp6L11Fbv@8S&ljU{Im+VtEfNDt$W zVQz?A?q*CZ?}5f^Q^WFNLmW|aj_m-iHm5yV$h;>{A)#76Mnw^KPEn{9qG6~&Lb#4>+_tO`lh7q^ zU>M*Dv<0EbX+dYf0pQyfR#Ep5Sn{~De5jFvTH$Jv7c^mF zwb?Mh)LI<#(D4GseV-tU5CMid1l1kSMOJ`?%L0rsqtpFO$#zvxsr{4u;*x=k>NLVm zU~wT_ihRZ#Udu_T@X*MN6Y>2jtn%o%AjCZZ>dR*Jd zZXymHCG+H{ZTlt1aJ&d)vi! z=aYb|QJo1D%KBuK0=ibadTo+2ep?nsDEo2JGXMDTC)0>U%e+N9xRb8RLA-vD$(sk8 zJ$`VT`@+2Tp>cH*fPj%Km@yd*lRTKT%&FV}zV)zW8dFGdyJfCug~oPg%UD&JG~7By z9An$?{5o+P4Hv&}*x1GvrWUagaRb~4h-Z|S3EDCd1>N?IQWyNS%t2A4fn|-yCA;uT8T~ak|rR` zny}O&b*x>Q0tK&d>25ZhDi_?6LphR3kpq@gSYWBsso*Dy9gQk3JKNpF)E5UIz^$LIR=%J_!Ov~ zsi0}Fnn_lutf$m)9y?oe+YFo3ZR4F=aU#?>e^)zRE|6_j$d;)C3E?JkaL={_Oae;Y z!|;J;&<=#AUmwS zxZG&BOfa<`$0DF%BXoS>BR}+ALC?l;Swug} z`JFT7kETCMVxSnP(eV;Y_1}cj1qQg3I7KTH3%jUNRjWjh{^^=p+i07Hhmsq$Ci?KbJw3V-3dq|u$_4hJ&Wlj zt$e_ezJx=_GN0WU98zp^-$5d>BScA~iI^=pa=0fUqC?hf%9ETqu^>EWXShoCWVR4k zDa#lfq%zA}W|XOs!P0aX^J#Wjdx!%;JR@SkzLPVEm8z&WyP8 zRl_Hf|(e5V`KjkV4857$4x_Yd=Iem?*J literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/white.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/white.png new file mode 100644 index 0000000000000000000000000000000000000000..278103463a6b71390487d9daf4ab109c637fe391 GIT binary patch literal 2812 zcmcguO>f*p7+!>^Xiy|1E~pnQR|pWydd8n?tJ^4KQxd5gqGVB%8{?Vru9aPnYdhIZ zE>zqq!5^r&_0EAShpIQYRQ&_+7kc2p0Z@2n?R7S7(nJ)ncKtE)%=wOt>1CFxSOtsLA-X9iS46}9y{7& zKG&CSYBweU2pEZiYLn40$%9E-pUMs3T@4$$HiZ;>ZGBlO)ONa?+KSAC<~A{67@L~s zH;HT8F8)L_v55`r7{o-x4X_;$Ppd8+v}HUBwmP>eUGUY`2St$vhA|$Gn`5gfv%W!m z-#4&nm?i=Q$`6x*PEe9xpGoM5oMmxZ#4^#8L>kKdqOF6ar3<697MtW%m>^)rgr){* zV&&2l$XSg`_p{+tIcJ6#ijhc)9I&LuLX^7Q8h)nO(Wpk}#p(fARQYx$I`18(!q^hI z+|QU;Jphf@XNKj)mN*H`C6)ucUYrhOA@hMeCkXZQsZbPgbdEwba|$XZ@i|a6Q$y2W zB@?ueSx?I0j60h%+cc9jP3^-wal+*||42DrEf5`Ah_pPO|D^jWTWqxtVKt{bALFh2k zbv=eGQ-sL2Y>a$Uc*u8%%S}qS&&-*$&$Ad(oDS!uDyuk1j6}<|7!Q%fJ%L)>CdenD zx;fmpY+`vK#PCG#iX6(UD>=m6(lxc)0f+}vsmiamPO8BjMb+VcIp~=fE`z9hHNSho z{K@neNem$dXB1z8ss3#!U0{IgIF?h5Z^jcb-08#+wY)UMouAn~J) zRjt_;cdNHytWA?LpsaL(DRv63SHtlc8+^G?mSV>P0l|6+YfD%zqhd@mvD}9UUziof zdB*4T;N_+h&nB3-0!6;%B1Zt5Ld)@x+wxh6fntJqGuK}<-3o{unAR+Z{)y>TSlNIk zeF2A%p}&GNb`&w}Lwec5N7T0kq7J6W7A;J;B`A-8r7!NonFZlLc81C1KxA{oN@+&n zAQf5O)}u_0G@7Qvm`$_GI7oPPKGg}S6;eAXKj#LGi!7ewz`T~)1npnccOm00R}KI7 zO)^x2P?iDX`3g~fcgjfKQhPH!c!RTQ0l6dx;Uo^Av|mu{Iq{hrdJd4;4H0ovdQu0t zZAGT#xURz@I66ve& U@K4tssQz?)b))nBr(b^kH!CcJfdBvi literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/yellow.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..0265695f346d62cb23dbded856bc7ec72e47dab6 GIT binary patch literal 2813 zcmcImO>f*p7~Tr0qCrKKxF9ZAt`H!Y_00HdZFPy#Y)Tf`5G9L}oM1d2?^@aQIJT4B z<;dvtD+yTpJZbDWTVSZ_PH18 z%O7ZW#y$ubih^n5;ULNVaZ{hj_2F9$8@e`u6#GqmMJd#FJDb|7%!KCDG2$3g&GqWU zu`CC_uTe~~fo+3OL>wPmK5@0_rGvICjQp+Ey{RtvYwG=?NPWW?jYjp6S(jPQAfD$L zm>QHKK%o3MDcBe#`R$p6mdJS)r$sCiO-W>dJS>_zSX#O;Oe?WTJ`EED%owxOAa$%< zngByy;nKrwFi{?ILkz@FBt;HbQeh!VolXT`D0Vok(0Q?T1QtzwTZqoP$Eh&3L@p0A zF4m4f&yHKB?lSRZur!3Lpz8l z!kBm{@GJ{8>_&v#0231vj6GgS`!tIo#o1t9sQX4W^w0Ft; z+4N^g3?ZhvrugDd^lwAy0s|b|Htp&7W;_;y-Bt`y%S%I?`I)`*GpdrQ4E5LJ95{D8 ztu@=?VEQ$PwMkO?jF&EO#ZD3G)8Tl*245|drPxtlK(L;{+7gz_s2H(Ktn?tlmu7`= zk?}b@dba7rwFoATK#^wxBZY-gVA?Kn8Xga@NrfQp%=M>DH+^FH)STtee=&U;R^Dex zPrxB$=+EH{CyfAjiwMUKBEsT`1=K=T1a44DY%6Fia%N#cc)`wanH-61j#w$n7#yS` z%bR+X$)U#5bP)4Nb{R)WI6a@LgwzVDot2*pgBFS`p5ws0mdXU}f7Ev=pH7w+ zyh(;?5Xv%OJXs;i|5h2vdunec2d}@V7LY4)5KdwrO8X_nJ|rG@0@p^&bAZ;iN>65c zh?x;JZO4Hl1d4rWjeOo>uQ)Ub!(87q8-iv`eO6r{{8W9UNFZ-B=n`9x@BR!OCT+J? zx{Yu6zdM^*?^Q|M5=u^z&bS{L1})@9%b&AJAJLz5VsW8*u{~)*l|d V`g_p6R#y#bdu^lj)7>w={1;J;eF*>n literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/side.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/side.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2d7df46fb24da6fd9df0eecb1507ab0c7beb10 GIT binary patch literal 765 zcmV004R= z004l4008;_004mL004C`008P>0026e000+nl3&F}00009a7bBm000ic000ic0Tn1p zfB*mh8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMGBNQWX_Wu~0$xc(K~y+TT~k?0 zYGD*Tf97INX&ujTNXZ7RoYGRuw24ZguplUW5JVIaAAK{V*YY6f_mzNJzL%F)pgK0ZFsXf!aLPLW6? z5RFC=i9`^O$FaM+D>`2`8;{3mHk+8uX1Kq~_#)=vjb(7Mj{11W8=MxTibTWcb!012(oSkc<{6@f|;u-}3N8lZ(^W(AGZ7`e6czAe_ z)v*YJD6}m*mZ9q!Y&IJnA0NNh$Ssgj62qJ4{~#8NiN3S5Bgl*+BTrm6n^mjT?*e3- vD2yVkZn0QIs8g(SZurfY$&6)ADwV=tu5P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00K!#L_t(IPhC^ZN^)TkK6jv%zkvwdgrGtq zA(kPEf2H|@`9mZWv@mcZq@;+8NO2=5xJVa)u2rf{x$+9Sm*?vlIU?VI;hmW?^UTaM z@2lM1-QoWJ9>ro2xm*snx3{40;o$+LQb~N**Vo%KnM@*`P9u}ah)*e(%lQ8O#(KTR zYPFK{_xD%M&(BZ%{QO`(pX2@g9i!0*lgR|b;Sg_cZ^-BKP+0Nf;{(}jRw~dg6bd4& zLYoy?IUbKA6bd064x``iBauizVVeYCfWcsZ(P)IxWP;gj-U@v>oel>F2iV)&gU{!~ z%gYO5u^5!c$43Dm2MpZb-xr~-(P*~1Ua#NUe!m~>b{mmMWCQT^^@W?88<_qoGmt?R zi)EW&wOZv=?O-s7Mx(I-;M~jQQsyN96OWFLV6)laa=GAeI7Fvk9p&`&6wPK+IuQ;Q zi-oM@@bFM7P?-GpDU{>m<8227AP3cIb;AJ@xgxG)cLY{e0SLxq6@VSIS}oa#Lh`25 zDN?DFw8$=YN3h%Na5|mh<9}|!?RMko=?Q0NXPbM#5x7Q`Y055%)YTCP;PrZi#6Tbb zg^AR(m z5sgN1d3h=OWqar6=fXHowtaGPB04#!R4SVhcn=1H0Xm%ydc7XH-7a2VUxnr8=Vxh^ zgi%-Rdc7_j@IonkC|6fkQkjp0T<`}kiTZG8vl>r!z}YFmU=aTR2^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;5!Jyj5{V~zXb|Pl(rIsj|=o#o)<`~!c z0SgpuPZ!6KinzCPy7LYh2(Sdp{r`VbGku!Gp~Y%nw?DPH21X8zrGgjY8}0>!emix_-hWZ* zG6vmE1%I}9ZgF8?TF3I{wBiHPuU%zs`1VZzLSV~!8CY!A#H`PFu9R^5c-X%pph@o= zOgq!9PkCKdiAv+Tpv2v2{&^eNivj^&)6en8tIuVzITCx|oXY_b>)NK~hTz<{-{zJ7 zU;1DHli%L?3!cxG40SLUXaKqb=pTtUE-Tbe%WhEnnByLqIV*+x!rW~WDva}IgCs#d zYhd{LjtxYCl{+}x^YmNqxv9YrB)8z+-5nekZf2`~tO|-Oiq*lfVNsFQ4(_T#c{qj(z#0oiX3No^iSST3e>~_1bULlMa6VezxsF s%r13K?><(hDcckrGP#Ebwd~AibGP@Rc2Z&+c|gUir>mdKI;Vst0O0*)#{d8T literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json b/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json new file mode 100644 index 000000000..e8380dc4d --- /dev/null +++ b/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json @@ -0,0 +1,32 @@ +{ + "display": { + "icon": { + "id": "refinedstorage:crafter" + }, + "title": { + "translate": "advancements.refinedstorage.autocrafting" + }, + "description": { + "translate": "advancements.refinedstorage.autocrafting.description" + } + }, + "parent": "refinedstorage:root", + "criteria": { + "crafter_in_inventory": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": "#refinedstorage:pattern_grids" + }, + { + "items": "#refinedstorage:crafters" + }, + { + "items": "refinedstorage:pattern" + } + ] + } + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json b/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json new file mode 100644 index 000000000..28a5ec9fc --- /dev/null +++ b/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json @@ -0,0 +1,28 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "ECE", + "AMA", + "EDE" + ], + "key": { + "E": { + "item": "refinedstorage:quartz_enriched_iron" + }, + "C": { + "item": "refinedstorage:construction_core" + }, + "A": { + "item": "refinedstorage:advanced_processor" + }, + "M": { + "item": "refinedstorage:machine_casing" + }, + "D": { + "item": "refinedstorage:destruction_core" + } + }, + "result": { + "id": "refinedstorage:crafter" + } +} \ No newline at end of file diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index 62e4b49af..840b75de9 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -127,6 +127,7 @@ private void setRenderLayers() { setCutout(Blocks.INSTANCE.getSecurityManager()); setCutout(Blocks.INSTANCE.getRelay()); setCutout(Blocks.INSTANCE.getDiskInterface()); + setCutout(Blocks.INSTANCE.getCrafter()); } private void setCutout(final BlockColorMap blockMap) { @@ -154,9 +155,8 @@ private void registerEmissiveModels() { Blocks.INSTANCE.getSecurityManager().forEach( (color, id, block) -> registerEmissiveSecurityManagerModels(color, id) ); - Blocks.INSTANCE.getRelay().forEach( - (color, id, block) -> registerEmissiveRelayModels(color, id) - ); + Blocks.INSTANCE.getRelay().forEach((color, id, block) -> registerEmissiveRelayModels(color, id)); + Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> registerEmissiveCrafterModels(color, id)); } private void registerColoredEmissiveModels(final BlockColorMap blockMap, @@ -234,6 +234,19 @@ private void registerEmissiveRelayModels(final DyeColor color, final ResourceLoc ); } + private void registerEmissiveCrafterModels(final DyeColor color, final ResourceLocation id) { + EmissiveModelRegistry.INSTANCE.register( + createIdentifier(BLOCK_PREFIX + "/crafter/" + color.getName()), + createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/side/" + color.getName()), + createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/top/" + color.getName()) + ); + EmissiveModelRegistry.INSTANCE.register( + createIdentifier(ITEM_PREFIX + "/" + id.getPath()), + createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/side/" + color.getName()), + createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/top/" + color.getName()) + ); + } + private void registerPacketHandlers() { ClientPlayNetworking.registerGlobalReceiver( StorageInfoResponsePacket.PACKET_TYPE, diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java index d9edce291..a0e9899a3 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java @@ -118,6 +118,11 @@ public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage.co @ConfigEntry.Gui.CollapsibleObject private RelayEntryImpl relay = new RelayEntryImpl(); + @ConfigEntry.Gui.CollapsibleObject + private SimpleEnergyUsageEntryImpl crafter = new SimpleEnergyUsageEntryImpl( + DefaultEnergyUsage.CRAFTER + ); + public static ConfigImpl get() { return AutoConfig.getConfigHolder(ConfigImpl.class).getConfig(); } @@ -278,6 +283,11 @@ public RelayEntry getRelay() { return relay; } + @Override + public SimpleEnergyUsageEntry getCrafter() { + return crafter; + } + private static class GridEntryImpl implements GridEntry { private boolean largeFont = false; diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index 5c39a51ba..29a8fb990 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -649,6 +649,7 @@ private void registerCapabilities() { registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getSecurityManager()); registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getStorageMonitor()); registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getWirelessTransmitter()); + registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getCrafter()); registerItemStorage( AbstractDiskDriveBlockEntity.class::isInstance, AbstractDiskDriveBlockEntity.class::cast, diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java index 4580cdff5..4228d679c 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java @@ -51,6 +51,7 @@ public class ConfigImpl implements Config { private final SimpleEnergyUsageEntry fallbackSecurityCard; private final SimpleEnergyUsageEntry securityManager; private final RelayEntry relay; + private final SimpleEnergyUsageEntry crafter; public ConfigImpl() { screenSize = builder @@ -95,6 +96,7 @@ public ConfigImpl() { ); securityManager = new SimpleEnergyUsageEntryImpl("securityManager", DefaultEnergyUsage.SECURITY_MANAGER); relay = new RelayEntryImpl(); + crafter = new SimpleEnergyUsageEntryImpl("crafter", DefaultEnergyUsage.CRAFTER); spec = builder.build(); } @@ -260,6 +262,11 @@ public RelayEntry getRelay() { return relay; } + @Override + public SimpleEnergyUsageEntry getCrafter() { + return crafter; + } + private static String translationKey(final String value) { return createTranslationKey("text.autoconfig", "option." + value); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 779935f9d..6ab1b1801 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -423,6 +423,7 @@ private void registerCapabilities(final RegisterCapabilitiesEvent event) { registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getSecurityManager()); registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getStorageMonitor()); registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getWirelessTransmitter()); + registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getCrafter()); event.registerBlockEntity( Capabilities.ItemHandler.BLOCK, BlockEntities.INSTANCE.getDiskDrive(), diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java index 8d2345d8c..9149cea2f 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java @@ -58,6 +58,7 @@ protected void registerModels() { registerSecurityManagers(); registerRelays(); registerDiskInterfaces(); + registerCrafters(); } private void registerCables() { @@ -292,4 +293,43 @@ private void registerDiskInterfaces() { ) { }).end()); } + + private void registerCrafters() { + final ResourceLocation side = createIdentifier("block/crafter/side"); + final ResourceLocation top = createIdentifier("block/crafter/top"); + Blocks.INSTANCE.getCrafter().forEach((color, id, crafter) -> { + final ResourceLocation cutoutSide = createIdentifier("block/crafter/cutouts/side/" + color.getName()); + final ResourceLocation cutoutTop = createIdentifier("block/crafter/cutouts/top/" + color.getName()); + withExistingParent("block/crafter/" + color.getName(), EMISSIVE_CUTOUT) + .texture(PARTICLE_TEXTURE, side) + .texture(NORTH, side) + .texture(EAST, side) + .texture(SOUTH, side) + .texture(WEST, side) + .texture(UP, top) + .texture(DOWN, BOTTOM_TEXTURE) + .texture(CUTOUT_NORTH, cutoutSide) + .texture(CUTOUT_EAST, cutoutSide) + .texture(CUTOUT_SOUTH, cutoutSide) + .texture(CUTOUT_WEST, cutoutSide) + .texture(CUTOUT_UP, cutoutTop) + .texture(CUTOUT_DOWN, BOTTOM_TEXTURE); + }); + final ResourceLocation cutoutSide = createIdentifier("block/crafter/cutouts/side/inactive"); + final ResourceLocation cutoutTop = createIdentifier("block/crafter/cutouts/top/inactive"); + withExistingParent("block/crafter/inactive", CUTOUT) + .texture(PARTICLE_TEXTURE, side) + .texture(NORTH, side) + .texture(EAST, side) + .texture(SOUTH, side) + .texture(WEST, side) + .texture(UP, top) + .texture(DOWN, BOTTOM_TEXTURE) + .texture(CUTOUT_NORTH, cutoutSide) + .texture(CUTOUT_EAST, cutoutSide) + .texture(CUTOUT_SOUTH, cutoutSide) + .texture(CUTOUT_WEST, cutoutSide) + .texture(CUTOUT_UP, cutoutTop) + .texture(CUTOUT_DOWN, BOTTOM_TEXTURE); + } } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java index 247d90ccc..b65ef7032 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java @@ -58,6 +58,7 @@ protected void registerStatesAndModels() { registerSecurityManagers(); registerRelays(); registerDiskInterfaces(); + registerCrafters(); } private void registerCables() { @@ -286,12 +287,7 @@ private void registerRelays() { model.modelFile(inactive); } final Direction direction = blockState.getValue(DefaultDirectionType.FACE_PLAYER.getProperty()); - final BiDirection biDirection; - if (direction.getAxis().isHorizontal()) { - biDirection = BiDirection.forHorizontal(direction); - } else { - biDirection = direction == Direction.UP ? BiDirection.UP_NORTH : BiDirection.DOWN_NORTH; - } + final BiDirection biDirection = BiDirection.forDirection(direction); addRotationFrontFacingNorth(model, biDirection); return model.build(); }); @@ -310,6 +306,25 @@ private void registerDiskInterfaces() { }); } + private void registerCrafters() { + final ModelFile inactive = modelFile(createIdentifier(BLOCK_PREFIX + "/crafter/inactive")); + Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> { + final ModelFile active = modelFile(createIdentifier(BLOCK_PREFIX + "/crafter/" + color.getName())); + final var builder = getVariantBuilder(block.get()); + builder.forAllStates(blockState -> { + final ConfiguredModel.Builder model = ConfiguredModel.builder(); + if (Boolean.TRUE.equals(blockState.getValue(AbstractActiveColoredDirectionalBlock.ACTIVE))) { + model.modelFile(active); + } else { + model.modelFile(inactive); + } + final Direction direction = blockState.getValue(DefaultDirectionType.FACE_PLAYER.getProperty()); + addCrafterRotation(model, direction); + return model.build(); + }); + }); + } + private void configureActiveColoredDirectionalBlock(final DyeColor color, final Supplier block, final String name) { @@ -323,7 +338,8 @@ private void configureActiveColoredDirectionalBlock(final DyeColor color, } else { model.modelFile(inactive); } - addRotationFrontFacingNorth(model, blockState.getValue(BiDirectionType.INSTANCE.getProperty())); + final BiDirection direction = blockState.getValue(BiDirectionType.INSTANCE.getProperty()); + addRotationFrontFacingNorth(model, direction); return model.build(); }); } @@ -352,6 +368,15 @@ private void addRotationFrontFacingNorth(final ConfiguredModel.Builder model, } } + private void addCrafterRotation(final ConfiguredModel.Builder model, final Direction direction) { + if (direction.getAxis().isHorizontal()) { + model.rotationX(90); + } else if (direction == Direction.DOWN) { + model.rotationX(180); + } + model.rotationY(direction.getAxis().isVertical() ? 0 : (((int) direction.toYRot()) + 180) % 360); + } + private ModelFile modelFile(final ResourceLocation location) { return new ModelFile.ExistingModelFile(location, existingFileHelper); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java index 1b34f7ac6..b6a8ab5a8 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java @@ -51,6 +51,7 @@ protected void registerModels() { registerSecurityManagers(); registerRelays(); registerDiskInterfaces(); + registerCrafters(); } private void registerCables() { @@ -218,6 +219,14 @@ private void registerDiskInterfaces() { }).end()); } + private void registerCrafters() { + final var blocks = Blocks.INSTANCE.getCrafter(); + blocks.forEach((color, id, block) -> withExistingParent( + id.getPath(), + createIdentifier("block/crafter/" + color.getName()) + )); + } + private ModelFile modelFile(final ResourceLocation location) { return new ModelFile.ExistingModelFile(location, existingFileHelper); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java index ebff81162..ef6ecb06b 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java @@ -41,6 +41,7 @@ protected void generate() { Blocks.INSTANCE.getSecurityManager().forEach((color, id, block) -> drop(block.get())); Blocks.INSTANCE.getRelay().forEach((color, id, block) -> drop(block.get())); Blocks.INSTANCE.getDiskInterface().forEach((color, id, block) -> drop(block.get())); + Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> drop(block.get())); } private void drop(final Block block) { @@ -71,6 +72,7 @@ protected Iterable getKnownBlocks() { blocks.addAll(Blocks.INSTANCE.getSecurityManager().values()); blocks.addAll(Blocks.INSTANCE.getRelay().values()); blocks.addAll(Blocks.INSTANCE.getDiskInterface().values()); + blocks.addAll(Blocks.INSTANCE.getCrafter().values()); return blocks; } } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java index 83755c5f3..4429b8bcb 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java @@ -77,6 +77,9 @@ protected void buildRecipes(final RecipeOutput output) { Blocks.INSTANCE.getDiskInterface().forEach((color, id, block) -> recipe(Tags.DISK_INTERFACES, block.get().asItem(), color) .save(output, recipeId(color, "disk_interface"))); + Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> + recipe(Tags.CRAFTERS, block.get().asItem(), color) + .save(output, recipeId(color, "crafter"))); } private ResourceLocation recipeId(final DyeColor color, final String suffix) { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java index fa228fc71..21a10d74f 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java @@ -23,6 +23,7 @@ import static com.refinedmods.refinedstorage.common.content.Tags.CABLES; import static com.refinedmods.refinedstorage.common.content.Tags.CONSTRUCTORS; import static com.refinedmods.refinedstorage.common.content.Tags.CONTROLLERS; +import static com.refinedmods.refinedstorage.common.content.Tags.CRAFTERS; import static com.refinedmods.refinedstorage.common.content.Tags.CRAFTING_GRIDS; import static com.refinedmods.refinedstorage.common.content.Tags.CREATIVE_CONTROLLERS; import static com.refinedmods.refinedstorage.common.content.Tags.DESTRUCTORS; @@ -130,6 +131,10 @@ protected void addTags(final HolderLookup.Provider provider) { Blocks.INSTANCE.getDiskInterface().values().stream() .map(block -> (Supplier) block::asItem) .toList()); + addAllToTag(CRAFTERS, + Blocks.INSTANCE.getCrafter().values().stream() + .map(block -> (Supplier) block::asItem) + .toList()); } private void addAllToTag(final TagKey t, final Collection> items) { From 845229387866380205dd7e267202accb5407b415 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 25 Aug 2024 12:53:53 +0200 Subject: [PATCH 18/83] feat: use marquee everywhere --- CHANGELOG.md | 1 + .../ProcessingPatternGridRenderer.java | 1 - .../grid/screen/AbstractGridScreen.java | 21 +------------- .../common/support/AbstractBaseScreen.java | 29 +++++++++++++++++-- .../stretching/AbstractStretchingScreen.java | 7 +++++ .../common/support/widget/TextMarquee.java | 4 +++ 6 files changed, 40 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f57381a4..c94397713 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Optimized memory usage and startup time of cable models. After updating, cables will appear disconnected, but this is only visual. Cause a block update to fix this. - Optimized performance of searching in the Grid. +- Custom titles that overflow will now have a marquee effect instead, for every GUI. ### Fixed diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java index 25ffd1fdf..077717777 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java @@ -272,7 +272,6 @@ public void renderLabels(final GuiGraphics graphics, final Font font, final int final int yy = y - topPos - 1 + INSET_PADDING; graphics.drawString(font, INPUTS, xx, yy, 4210752, false); graphics.drawString(font, OUTPUTS, xx + 56, yy, 4210752, false); - } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 503a2926b..6e4f17e6a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -66,7 +66,6 @@ public abstract class AbstractGridScreen ex @Nullable GridSearchBoxWidget searchField; - private final TextMarquee titleMarquee; private int totalRows; private int currentGridSlotIndex; @@ -74,9 +73,8 @@ protected AbstractGridScreen(final T menu, final Inventory playerInventory, final Component text, final int bottomHeight) { - super(menu, playerInventory, text); + super(menu, playerInventory, new TextMarquee(text, 70)); this.bottomHeight = bottomHeight; - this.titleMarquee = new TextMarquee(text, 70); } @Override @@ -161,23 +159,6 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int graphics.blitSprite(Sprites.SEARCH, leftPos + 79, topPos + 5, SEARCH_SIZE, SEARCH_SIZE); } - @Override - protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { - graphics.pose().popPose(); - final boolean hoveringOverTitle = isHovering( - 7, - 7, - titleMarquee.getEffectiveWidth(font), - font.lineHeight, - mouseX, - mouseY - ); - titleMarquee.render(graphics, leftPos + 7, topPos + 7, font, hoveringOverTitle); - graphics.pose().pushPose(); - graphics.pose().translate(leftPos, topPos, 0.0F); - graphics.drawString(font, playerInventoryTitle, inventoryLabelX, inventoryLabelY, 4210752, false); - } - @Override protected void renderStretchingBackground(final GuiGraphics graphics, final int x, final int y, final int rows) { for (int row = 0; row < rows; ++row) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java index 743bfa0b0..c31c71ef5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java @@ -13,6 +13,7 @@ import com.refinedmods.refinedstorage.common.support.tooltip.MouseClientTooltipComponent; import com.refinedmods.refinedstorage.common.support.tooltip.SmallTextClientTooltipComponent; import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget; +import com.refinedmods.refinedstorage.common.support.widget.TextMarquee; import com.refinedmods.refinedstorage.common.upgrade.UpgradeItemClientTooltipComponent; import com.refinedmods.refinedstorage.common.upgrade.UpgradeSlot; @@ -53,17 +54,24 @@ public abstract class AbstractBaseScreen extend private final Inventory playerInventory; private final List exclusionZones = new ArrayList<>(); + private final TextMarquee titleMarquee; + private int sideButtonY; @Nullable private List deferredTooltip; - protected AbstractBaseScreen(final T menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text); + protected AbstractBaseScreen(final T menu, final Inventory playerInventory, final Component title) { + this(menu, playerInventory, new TextMarquee(title, 162)); + } + + protected AbstractBaseScreen(final T menu, final Inventory playerInventory, final TextMarquee title) { + super(menu, playerInventory, title.getText()); this.playerInventory = playerInventory; this.titleLabelX = 7; this.titleLabelY = 7; this.inventoryLabelX = 7; + this.titleMarquee = title; } protected int getSideButtonY() { @@ -93,6 +101,23 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int renderResourceSlots(graphics); } + @Override + protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { + graphics.pose().popPose(); + final boolean hoveringOverTitle = isHovering( + 7, + 7, + titleMarquee.getEffectiveWidth(font), + font.lineHeight, + mouseX, + mouseY + ); + titleMarquee.render(graphics, leftPos + titleLabelX, topPos + titleLabelY, font, hoveringOverTitle); + graphics.pose().pushPose(); + graphics.pose().translate(leftPos, topPos, 0.0F); + graphics.drawString(font, playerInventoryTitle, inventoryLabelX, inventoryLabelY, 4210752, false); + } + @Override public void render(final GuiGraphics graphics, final int mouseX, final int mouseY, final float delta) { super.render(graphics, mouseX, mouseY, delta); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java index ecf213992..bf9cb030d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu; import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage.common.support.widget.ScrollbarWidget; +import com.refinedmods.refinedstorage.common.support.widget.TextMarquee; import javax.annotation.Nullable; @@ -25,6 +26,12 @@ public abstract class AbstractStretchingScreen Date: Sun, 25 Aug 2024 14:07:28 +0200 Subject: [PATCH 19/83] feat: crafter screen --- .../common/AbstractClientModInitializer.java | 2 + .../common/AbstractModInitializer.java | 8 ++ .../autocrafting/CrafterBlockEntity.java | 97 +++++++++++++++++- .../autocrafting/CrafterContainerMenu.java | 86 ++++++++++++++++ .../common/autocrafting/CrafterScreen.java | 52 ++++++++++ .../autocrafting/PatternGridBlockEntity.java | 2 +- .../common/autocrafting/PatternRendering.java | 3 + .../common/autocrafting/PatternSlot.java | 12 +++ .../AbstractConstructorBlockEntity.java | 2 +- .../AbstractDestructorBlockEntity.java | 2 +- .../refinedstorage/common/content/Menus.java | 11 ++ .../controller/ControllerBlockEntity.java | 2 +- .../common/detector/DetectorBlockEntity.java | 2 +- .../exporter/AbstractExporterBlockEntity.java | 2 +- .../common/grid/CraftingGridBlockEntity.java | 2 +- .../common/grid/GridBlockEntity.java | 2 +- .../common/iface/InterfaceBlockEntity.java | 2 +- .../importer/AbstractImporterBlockEntity.java | 2 +- .../NetworkTransmitterBlockEntity.java | 2 +- .../common/networking/RelayBlockEntity.java | 2 +- .../WirelessTransmitterBlockEntity.java | 2 +- .../security/SecurityManagerBlockEntity.java | 2 +- .../AbstractDiskDriveBlockEntity.java | 2 +- .../AbstractDiskInterfaceBlockEntity.java | 2 +- .../AbstractExternalStorageBlockEntity.java | 2 +- .../FluidStorageBlockBlockEntity.java | 2 +- .../ItemStorageBlockBlockEntity.java | 2 +- .../StorageMonitorBlockEntity.java | 2 +- .../common/support/AbstractBaseScreen.java | 7 +- ...ctBaseNetworkNodeContainerBlockEntity.java | 2 +- .../common/upgrade/UpgradeDestinations.java | 3 +- .../assets/refinedstorage/lang/en_us.json | 3 +- .../refinedstorage/textures/gui/crafter.png | Bin 1989 -> 0 bytes 33 files changed, 299 insertions(+), 27 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java delete mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafter.png diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java index d673c87fd..f755f081f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterScreen; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridScreen; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorScreen; import com.refinedmods.refinedstorage.common.constructordestructor.DestructorScreen; @@ -79,6 +80,7 @@ protected static void registerScreens(final ScreenRegistration registration) { registration.register(Menus.INSTANCE.getSecurityManager(), SecurityManagerScreen::new); registration.register(Menus.INSTANCE.getRelay(), RelayScreen::new); registration.register(Menus.INSTANCE.getDiskInterface(), DiskInterfaceScreen::new); + registration.register(Menus.INSTANCE.getCrafter(), CrafterScreen::new); } protected static void registerAlternativeGridHints() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index efad1019f..e2e420b28 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -12,6 +12,7 @@ import com.refinedmods.refinedstorage.common.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; import com.refinedmods.refinedstorage.common.autocrafting.CraftingPatternState; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; @@ -515,6 +516,9 @@ protected final void registerUpgradeMappings() { RefinedStorageApi.INSTANCE.getUpgradeRegistry().forDestination(UpgradeDestinations.DISK_INTERFACE) .add(Items.INSTANCE.getSpeedUpgrade(), 4) .add(Items.INSTANCE.getStackUpgrade()); + + RefinedStorageApi.INSTANCE.getUpgradeRegistry().forDestination(UpgradeDestinations.CRAFTER) + .add(Items.INSTANCE.getSpeedUpgrade(), 4); } protected final void registerBlockEntities( @@ -767,6 +771,10 @@ protected final void registerMenus(final RegistryCallback> callback, ContentIds.DISK_INTERFACE, () -> extendedMenuTypeFactory.create(DiskInterfaceContainerMenu::new, ResourceContainerData.STREAM_CODEC) )); + Menus.INSTANCE.setCrafter(callback.register( + ContentIds.CRAFTER, + () -> menuTypeFactory.create(CrafterContainerMenu::new) + )); } protected final void registerLootFunctions(final RegistryCallback> callback) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index b78177a85..1fd579ab8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -3,14 +3,46 @@ import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.autocrafting.PatternProviderItem; import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.ContentNames; +import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; +import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; +import com.refinedmods.refinedstorage.common.support.FilteredContainer; import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; +import com.refinedmods.refinedstorage.common.util.ContainerUtil; + +import javax.annotation.Nullable; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; -public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity { +public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity + implements MenuProvider, BlockEntityWithDrops { + static final int PATTERNS = 9; + + private static final String TAG_UPGRADES = "upgr"; + private static final String TAG_PATTERNS = "patterns"; + + private final FilteredContainer patternContainer = new FilteredContainer( + PATTERNS, + stack -> level != null && isValidPattern(stack, level) + ); + private final UpgradeContainer upgradeContainer; + public CrafterBlockEntity(final BlockPos pos, final BlockState state) { super( BlockEntities.INSTANCE.getCrafter(), @@ -18,6 +50,11 @@ public CrafterBlockEntity(final BlockPos pos, final BlockState state) { state, new SimpleNetworkNode(Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage()) ); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CRAFTER, upgradeEnergyUsage -> { + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + setChanged(); + }); } @Override @@ -26,4 +63,62 @@ protected InWorldNetworkNodeContainer createMainContainer(final SimpleNetworkNod .connectionStrategy(new CrafterConnectionStrategy(this::getBlockState, getBlockPos())) .build(); } + + FilteredContainer getPatternContainer() { + return patternContainer; + } + + UpgradeContainer getUpgradeContainer() { + return upgradeContainer; + } + + @Override + public Component getDisplayName() { + return overrideName(ContentNames.CRAFTER); + } + + @Nullable + @Override + public AbstractContainerMenu createMenu(final int syncId, final Inventory inventory, final Player player) { + return new CrafterContainerMenu(syncId, inventory, this); + } + + @Override + public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + super.saveAdditional(tag, provider); + tag.put(TAG_PATTERNS, ContainerUtil.write(patternContainer, provider)); + tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); + } + + @Override + public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { + if (tag.contains(TAG_PATTERNS)) { + ContainerUtil.read(tag.getCompound(TAG_PATTERNS), patternContainer, provider); + } + if (tag.contains(TAG_UPGRADES)) { + ContainerUtil.read(tag.getCompound(TAG_UPGRADES), upgradeContainer, provider); + } + super.loadAdditional(tag, provider); + } + + @Override + public NonNullList getDrops() { + final NonNullList drops = NonNullList.create(); + drops.addAll(upgradeContainer.getDrops()); + for (int i = 0; i < patternContainer.getContainerSize(); ++i) { + drops.add(patternContainer.getItem(i)); + } + return drops; + } + + @Override + protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, + final BlockState newBlockState) { + return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); + } + + static boolean isValidPattern(final ItemStack stack, final Level level) { + return stack.getItem() instanceof PatternProviderItem patternProviderItem + && patternProviderItem.getPattern(stack, level).isPresent(); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java new file mode 100644 index 000000000..f45a319b8 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -0,0 +1,86 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.content.Menus; +import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu; +import com.refinedmods.refinedstorage.common.support.FilteredContainer; +import com.refinedmods.refinedstorage.common.support.RedstoneMode; +import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; +import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage.common.support.containermenu.ServerProperty; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeSlot; + +import javax.annotation.Nullable; + +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.PATTERNS; +import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.isValidPattern; + +public class CrafterContainerMenu extends AbstractBaseContainerMenu { + private static final int PATTERN_SLOT_X = 8; + private static final int PATTERN_SLOT_Y = 20; + + @Nullable + private CrafterBlockEntity crafter; + + public CrafterContainerMenu(final int syncId, final Inventory playerInventory) { + super(Menus.INSTANCE.getCrafter(), syncId); + registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); + addSlots( + new FilteredContainer(PATTERNS, stack -> isValidPattern(stack, playerInventory.player.level())), + new UpgradeContainer(UpgradeDestinations.CRAFTER, null), + playerInventory.player + ); + } + + public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterBlockEntity crafter) { + super(Menus.INSTANCE.getCrafter(), syncId); + this.crafter = crafter; + registerProperty(new ServerProperty<>( + PropertyTypes.REDSTONE_MODE, + crafter::getRedstoneMode, + crafter::setRedstoneMode + )); + addSlots( + crafter.getPatternContainer(), + crafter.getUpgradeContainer(), + playerInventory.player + ); + } + + private void addSlots(final FilteredContainer patternContainer, + final UpgradeContainer upgradeContainer, + final Player player) { + for (int i = 0; i < patternContainer.getContainerSize(); ++i) { + addSlot(createPatternSlot(patternContainer, i, player.level())); + } + for (int i = 0; i < upgradeContainer.getContainerSize(); ++i) { + addSlot(new UpgradeSlot(upgradeContainer, i, 187, 6 + (i * 18))); + } + addPlayerInventory(player.getInventory(), 8, 55); + transferManager.addBiTransfer(player.getInventory(), upgradeContainer); + transferManager.addBiTransfer(player.getInventory(), patternContainer); + } + + private Slot createPatternSlot(final FilteredContainer patternContainer, + final int i, + final Level level) { + final int x = PATTERN_SLOT_X + (18 * i); + return new PatternSlot(patternContainer, i, x, PATTERN_SLOT_Y, level); + } + + public boolean containsPattern(final ItemStack stack) { + for (final Slot slot : slots) { + if (slot instanceof PatternSlot patternSlot && patternSlot.getItem() == stack) { + return true; + } + } + return false; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java new file mode 100644 index 000000000..981181259 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -0,0 +1,52 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; +import com.refinedmods.refinedstorage.common.support.AbstractFilterScreen; +import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage.common.support.widget.RedstoneModeSideButtonWidget; + +import java.util.List; + +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationAsHeading; + +public class CrafterScreen extends AbstractBaseScreen { + private static final ClientTooltipComponent EMPTY_PATTERN_SLOT = ClientTooltipComponent.create( + createTranslationAsHeading("gui", "crafter.empty_pattern_slot").getVisualOrderText() + ); + + public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInventory, final Component title) { + super(menu, playerInventory, title); + this.inventoryLabelY = 42; + this.imageWidth = 210; + this.imageHeight = 137; + } + + @Override + protected void init() { + super.init(); + addSideButton(new RedstoneModeSideButtonWidget(getMenu().getProperty(PropertyTypes.REDSTONE_MODE))); + } + + @Override + protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { + if (hoveredSlot instanceof PatternSlot patternSlot + && !patternSlot.hasItem() + && getMenu().getCarried().isEmpty()) { + Platform.INSTANCE.renderTooltip(graphics, List.of(EMPTY_PATTERN_SLOT), x, y); + return; + } + super.renderTooltip(graphics, x, y); + } + + @Override + protected ResourceLocation getTexture() { + return AbstractFilterScreen.TEXTURE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java index 1368ef0ee..584ff3ea1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java @@ -215,7 +215,7 @@ void setPatternType(final PatternType patternType) { @Override public Component getDisplayName() { - return getName(ContentNames.PATTERN_GRID); + return overrideName(ContentNames.PATTERN_GRID); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java index 8f4ccc83e..0b42e8f79 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java @@ -28,6 +28,9 @@ public static boolean canDisplayOutput(final ItemStack stack) { return patternGridScreen.getMenu().getPatternOutputSlot() != null && patternGridScreen.getMenu().getPatternOutputSlot().getItem() == stack; } + if (screen instanceof CrafterScreen crafterScreen) { + return crafterScreen.getMenu().containsPattern(stack); + } return false; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java new file mode 100644 index 000000000..800104eed --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.support.containermenu.ValidatedSlot; + +import net.minecraft.world.Container; +import net.minecraft.world.level.Level; + +class PatternSlot extends ValidatedSlot { + PatternSlot(final Container container, final int index, final int x, final int y, final Level level) { + super(container, index, x, y, stack -> CrafterBlockEntity.isValidPattern(stack, level)); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java index 72c0c5889..fcc374be0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java @@ -188,7 +188,7 @@ void setDropItems(final boolean dropItems) { @Override public Component getDisplayName() { - return getName(ContentNames.CONSTRUCTOR); + return overrideName(ContentNames.CONSTRUCTOR); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java index 4d39c47ea..35f13e2cf 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java @@ -160,7 +160,7 @@ public StreamEncoder getMenuCode @Override public Component getDisplayName() { - return getName(ContentNames.DESTRUCTOR); + return overrideName(ContentNames.DESTRUCTOR); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java index 328a7615c..eba2dc15d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.content; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorContainerMenu; import com.refinedmods.refinedstorage.common.constructordestructor.DestructorContainerMenu; @@ -89,6 +90,8 @@ public final class Menus { private Supplier> relay; @Nullable private Supplier> diskInterface; + @Nullable + private Supplier> crafter; private Menus() { } @@ -302,4 +305,12 @@ public MenuType getDiskInterface() { public void setDiskInterface(final Supplier> diskInterface) { this.diskInterface = diskInterface; } + + public MenuType getCrafter() { + return requireNonNull(crafter).get(); + } + + public void setCrafter(final Supplier> crafter) { + this.crafter = crafter; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java index 244b2b69f..bfa894b20 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java @@ -99,7 +99,7 @@ public Component getDisplayName() { final MutableComponent defaultName = type == ControllerType.CREATIVE ? ContentNames.CREATIVE_CONTROLLER : ContentNames.CONTROLLER; - return getName(defaultName); + return overrideName(defaultName); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java index d1a015d74..ffc9e8b8b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java @@ -151,7 +151,7 @@ public StreamEncoder getMenuCodec() { @Override public Component getDisplayName() { - return getName(ContentNames.DETECTOR); + return overrideName(ContentNames.DETECTOR); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java index 8c965fd1b..7dee5fa5a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java @@ -177,7 +177,7 @@ public final NonNullList getDrops() { @Override public Component getDisplayName() { - return getName(ContentNames.EXPORTER); + return overrideName(ContentNames.EXPORTER); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java index ebea38353..2ec992a19 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java @@ -75,7 +75,7 @@ public StreamEncoder getMenuCodec() { @Override public Component getDisplayName() { - return getName(ContentNames.CRAFTING_GRID); + return overrideName(ContentNames.CRAFTING_GRID); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java index 32d2039b2..492b7acaf 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java @@ -32,7 +32,7 @@ public StreamEncoder getMenuCodec() { @Override public Component getDisplayName() { - return getName(ContentNames.GRID); + return overrideName(ContentNames.GRID); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java index e8819a5a5..3f6d77d5e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java @@ -173,7 +173,7 @@ public StreamEncoder getMenuCodec() { @Override public Component getDisplayName() { - return getName(ContentNames.INTERFACE); + return overrideName(ContentNames.INTERFACE); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java index 6810e8538..d1189d824 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java @@ -177,7 +177,7 @@ public StreamEncoder getMenuCode @Override public Component getDisplayName() { - return getName(ContentNames.IMPORTER); + return overrideName(ContentNames.IMPORTER); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java index 94aa9c36e..91e2ec676 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java @@ -208,7 +208,7 @@ public StreamEncoder getMenuCod @Override public Component getDisplayName() { - return getName(ContentNames.NETWORK_TRANSMITTER); + return overrideName(ContentNames.NETWORK_TRANSMITTER); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java index 8abe94277..4d3765131 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java @@ -203,7 +203,7 @@ public StreamEncoder getMenuCode @Override public Component getDisplayName() { - return getName(ContentNames.RELAY); + return overrideName(ContentNames.RELAY); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index e8cbe5521..7377e4b9a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -85,7 +85,7 @@ public boolean addUpgradeItem(final Item upgradeItem) { @Override public Component getDisplayName() { - return getName(ContentNames.WIRELESS_TRANSMITTER); + return overrideName(ContentNames.WIRELESS_TRANSMITTER); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java index 4e159a466..e65782cee 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java @@ -163,7 +163,7 @@ static boolean isValidFallbackSecurityCard(final ItemStack stack) { @Override public Component getDisplayName() { - return getName(ContentNames.SECURITY_MANAGER); + return overrideName(ContentNames.SECURITY_MANAGER); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java index 1f90f44fa..7c26333ca 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java @@ -64,7 +64,7 @@ public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provide @Override public Component getDisplayName() { - return getName(ContentNames.DISK_DRIVE); + return overrideName(ContentNames.DISK_DRIVE); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 62eb90427..9786157ac 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -120,7 +120,7 @@ public boolean addUpgradeItem(final Item upgradeItem) { @Override public Component getDisplayName() { - return getName(ContentNames.DISK_INTERFACE); + return overrideName(ContentNames.DISK_INTERFACE); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java index 91305e649..b1a228edf 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java @@ -157,7 +157,7 @@ public StreamEncoder getMenuCode @Override public Component getDisplayName() { - return getName(ContentNames.EXTERNAL_STORAGE); + return overrideName(ContentNames.EXTERNAL_STORAGE); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java index 33034dbf4..183854b76 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java @@ -55,7 +55,7 @@ protected SerializableStorage createStorage(final Runnable listener) { @Override public Component getDisplayName() { - return getName(displayName); + return overrideName(displayName); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java index 8f6147b83..2cf52d062 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java @@ -51,7 +51,7 @@ protected SerializableStorage createStorage(final Runnable listener) { @Override public Component getDisplayName() { - return getName(displayName); + return overrideName(displayName); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index 0fc90d92d..d4ce51073 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -295,7 +295,7 @@ public StreamEncoder getMenuCode @Override public Component getDisplayName() { - return getName(ContentNames.STORAGE_MONITOR); + return overrideName(ContentNames.STORAGE_MONITOR); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java index c31c71ef5..49a79417b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java @@ -51,6 +51,9 @@ public abstract class AbstractBaseScreen extend private static final ClientTooltipComponent EMPTY_FILTER = ClientTooltipComponent.create( createTranslationAsHeading("gui", "filter_slot.empty_filter").getVisualOrderText() ); + private static final ClientTooltipComponent EMPTY_UPGRADE_SLOT = ClientTooltipComponent.create( + createTranslationAsHeading("gui", "empty_upgrade_slot").getVisualOrderText() + ); private final Inventory playerInventory; private final List exclusionZones = new ArrayList<>(); @@ -178,9 +181,7 @@ private List getUpgradeTooltip(final ItemStack carried, return Collections.emptyList(); } final List lines = new ArrayList<>(); - lines.add(ClientTooltipComponent.create( - createTranslationAsHeading("gui", "upgrade_slot").getVisualOrderText() - )); + lines.add(EMPTY_UPGRADE_SLOT); for (final UpgradeMapping upgrade : upgradeSlot.getAllowedUpgrades()) { lines.add(new UpgradeItemClientTooltipComponent(upgrade)); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java index 7266dae54..073611f99 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java @@ -242,7 +242,7 @@ protected void collectImplicitComponents(final DataComponentMap.Builder componen components.set(DataComponents.CUSTOM_NAME, name); } - protected final Component getName(final Component defaultName) { + protected final Component overrideName(final Component defaultName) { return name == null ? defaultName : name; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java index 8f8893a31..9e8514901 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java @@ -20,7 +20,8 @@ public enum UpgradeDestinations implements UpgradeDestination { )), DISK_INTERFACE(ContentNames.DISK_INTERFACE, () -> new ItemStack( Items.INSTANCE.getDiskInterfaces().getFirst().get() - )); + )), + CRAFTER(ContentNames.CRAFTER, () -> new ItemStack(Items.INSTANCE.getCrafters().getFirst().get())); private final Component name; private final Supplier stackFactory; diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 510c3b8ea..54463e26c 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -144,7 +144,7 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", @@ -182,6 +182,7 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.crafter.empty_pattern_slot": "Empty pattern slot", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafter.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafter.png deleted file mode 100644 index 1490acd108bc93408200103f3bd6e37b4c2bcc94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1989 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;5!Jyj5{V~zXb|Pl(rIsj|=o#o)<`~!c z0SgpuPZ!6KinzCPy7LYh2(Sdp{r`VbGku!Gp~Y%nw?DPH21X8zrGgjY8}0>!emix_-hWZ* zG6vmE1%I}9ZgF8?TF3I{wBiHPuU%zs`1VZzLSV~!8CY!A#H`PFu9R^5c-X%pph@o= zOgq!9PkCKdiAv+Tpv2v2{&^eNivj^&)6en8tIuVzITCx|oXY_b>)NK~hTz<{-{zJ7 zU;1DHli%L?3!cxG40SLUXaKqb=pTtUE-Tbe%WhEnnByLqIV*+x!rW~WDva}IgCs#d zYhd{LjtxYCl{+}x^YmNqxv9YrB)8z+-5nekZf2`~tO|-Oiq*lfVNsFQ4(_T#c{qj(z#0oiX3No^iSST3e>~_1bULlMa6VezxsF s%r13K?><(hDcckrGP#Ebwd~AibGP@Rc2Z&+c|gUir>mdKI;Vst0O0*)#{d8T From 8fb64b862c53611a37234a5ced12f5c2f6c5c566 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 25 Aug 2024 14:18:59 +0200 Subject: [PATCH 20/83] fix: upgrade destinations not being shown on upgrades --- CHANGELOG.md | 1 + .../api/upgrade/AbstractUpgradeItem.java | 17 ++++++++--- .../common/AbstractClientModInitializer.java | 27 +++++++++++++++++ .../common/upgrade/FortuneUpgradeItem.java | 11 +------ .../common/upgrade/RangeUpgradeItem.java | 12 +------- .../common/upgrade/RegulatorUpgradeItem.java | 10 +++++-- .../common/upgrade/SimpleUpgradeItem.java | 12 +------- .../fabric/ClientModInitializerImpl.java | 27 ++++++----------- .../neoforge/ClientModInitializer.java | 29 ++++++------------- 9 files changed, 69 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c94397713..a7f0acf55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Fixed mouse keybindings not working on NeoForge. +- Fixed upgrade destinations not being shown on upgrades. ## [2.0.0-milestone.4.7] - 2024-08-11 diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/upgrade/AbstractUpgradeItem.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/upgrade/AbstractUpgradeItem.java index 4bb7c9740..19cf6bc8a 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/upgrade/AbstractUpgradeItem.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/upgrade/AbstractUpgradeItem.java @@ -3,6 +3,7 @@ import java.util.Optional; import java.util.Set; +import net.minecraft.network.chat.Component; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -11,22 +12,30 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.2.2") public abstract class AbstractUpgradeItem extends Item implements UpgradeItem { private final UpgradeRegistry registry; + private final Component helpText; - protected AbstractUpgradeItem(final Properties properties, final UpgradeRegistry registry) { + protected AbstractUpgradeItem(final Properties properties, + final UpgradeRegistry registry, + final Component helpText) { super(properties); this.registry = registry; + this.helpText = helpText; } @Override public Optional getTooltipImage(final ItemStack stack) { - final Set destinations = registry.getByUpgradeItem(this); + final Set destinations = getDestinations(); if (destinations.isEmpty()) { return Optional.empty(); } - return Optional.of(new UpgradeDestinationTooltipComponent(destinations)); + return Optional.of(new UpgradeDestinationTooltipComponent(destinations, helpText)); } - public record UpgradeDestinationTooltipComponent(Set destinations) + protected final Set getDestinations() { + return registry.getByUpgradeItem(this); + } + + public record UpgradeDestinationTooltipComponent(Set destinations, Component helpText) implements TooltipComponent { } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java index f755f081f..c1cc720b8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java @@ -1,6 +1,8 @@ package com.refinedmods.refinedstorage.common; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; import com.refinedmods.refinedstorage.common.autocrafting.CrafterScreen; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridScreen; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorScreen; @@ -37,12 +39,22 @@ import com.refinedmods.refinedstorage.common.support.resource.FluidResourceRendering; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import com.refinedmods.refinedstorage.common.support.resource.ItemResourceRendering; +import com.refinedmods.refinedstorage.common.support.tooltip.CompositeClientTooltipComponent; +import com.refinedmods.refinedstorage.common.support.tooltip.HelpClientTooltipComponent; +import com.refinedmods.refinedstorage.common.support.tooltip.ResourceClientTooltipComponent; import com.refinedmods.refinedstorage.common.upgrade.RegulatorUpgradeScreen; +import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinationClientTooltipComponent; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import javax.annotation.Nullable; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.MenuAccess; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; @@ -135,6 +147,21 @@ protected static void registerDiskModels() { } } + protected static CompositeClientTooltipComponent createRegulatorUpgradeClientTooltipComponent( + final Set destinations, + @Nullable final ResourceAmount configuredResource, + final Component help + ) { + final List components = new ArrayList<>(); + if (configuredResource != null) { + components.add(new ResourceClientTooltipComponent(configuredResource)); + } else { + components.add(new UpgradeDestinationClientTooltipComponent(destinations)); + } + components.add(HelpClientTooltipComponent.create(help)); + return new CompositeClientTooltipComponent(components); + } + @FunctionalInterface public interface ScreenRegistration { > void register(MenuType type, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/FortuneUpgradeItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/FortuneUpgradeItem.java index d90e709c6..9018d563c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/FortuneUpgradeItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/FortuneUpgradeItem.java @@ -1,14 +1,10 @@ package com.refinedmods.refinedstorage.common.upgrade; import com.refinedmods.refinedstorage.common.Platform; -import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; -import java.util.Optional; - import net.minecraft.network.chat.Component; -import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -21,7 +17,7 @@ public class FortuneUpgradeItem extends AbstractUpgradeItem { private final Component name; public FortuneUpgradeItem(final UpgradeRegistry registry, final int fortuneLevel) { - super(new Item.Properties(), registry); + super(new Item.Properties(), registry, HELP); this.fortuneLevel = fortuneLevel; this.name = createTranslation("item", "fortune_upgrade." + fortuneLevel); } @@ -45,9 +41,4 @@ public boolean isFoil(final ItemStack stack) { public Component getName(final ItemStack stack) { return name; } - - @Override - public Optional getTooltipImage(final ItemStack stack) { - return Optional.of(new HelpTooltipComponent(HELP)); - } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RangeUpgradeItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RangeUpgradeItem.java index f58a0e5a7..834d1aee5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RangeUpgradeItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RangeUpgradeItem.java @@ -1,16 +1,11 @@ package com.refinedmods.refinedstorage.common.upgrade; import com.refinedmods.refinedstorage.common.Platform; -import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; -import java.util.Optional; - import net.minecraft.network.chat.Component; -import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; @@ -21,7 +16,7 @@ public class RangeUpgradeItem extends AbstractUpgradeItem { private final boolean creative; public RangeUpgradeItem(final UpgradeRegistry registry, final boolean creative) { - super(new Item.Properties(), registry); + super(new Item.Properties(), registry, creative ? CREATIVE_HELP : HELP); this.creative = creative; } @@ -32,9 +27,4 @@ public long getEnergyUsage() { } return Platform.INSTANCE.getConfig().getUpgrade().getRangeUpgradeEnergyUsage(); } - - @Override - public Optional getTooltipImage(final ItemStack stack) { - return Optional.of(new HelpTooltipComponent(creative ? CREATIVE_HELP : HELP)); - } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java index 64987928b..029860f71 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java @@ -8,6 +8,7 @@ import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReference; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; +import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.content.DataComponents; @@ -18,6 +19,7 @@ import java.util.Optional; import java.util.OptionalLong; +import java.util.Set; import java.util.function.Consumer; import javax.annotation.Nullable; @@ -41,7 +43,7 @@ public class RegulatorUpgradeItem extends AbstractUpgradeItem { private static final Component HELP = createTranslation("item", "regulator_upgrade.help"); public RegulatorUpgradeItem(final UpgradeRegistry registry) { - super(new Item.Properties(), registry); + super(new Item.Properties(), registry, HELP); } @Override @@ -80,7 +82,7 @@ private ResourceContainer createResourceFilterContainer(final ItemStack stack, @Override public Optional getTooltipImage(final ItemStack stack) { - return Optional.of(new RegulatorTooltipComponent(HELP, getConfiguredResource(stack))); + return Optional.of(new RegulatorTooltipComponent(getDestinations(), HELP, getConfiguredResource(stack))); } private void setAmount(final ItemStack stack, final double amount) { @@ -127,7 +129,9 @@ public OptionalLong getDesiredAmount(final ItemStack stack, final ResourceKey re }).orElse(OptionalLong.empty()); } - public record RegulatorTooltipComponent(Component helpText, @Nullable ResourceAmount configuredResource) + public record RegulatorTooltipComponent(Set destinations, + Component helpText, + @Nullable ResourceAmount configuredResource) implements TooltipComponent { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/SimpleUpgradeItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/SimpleUpgradeItem.java index 69c47d873..e2f1b65ed 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/SimpleUpgradeItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/SimpleUpgradeItem.java @@ -2,15 +2,12 @@ import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; -import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; -import java.util.Optional; import java.util.function.LongSupplier; import net.minecraft.network.chat.Component; -import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -19,16 +16,14 @@ public final class SimpleUpgradeItem extends AbstractUpgradeItem { private final LongSupplier energyUsageResolver; private final boolean foil; - private final Component helpText; private SimpleUpgradeItem(final UpgradeRegistry registry, final LongSupplier energyUsageResolver, final boolean foil, final Component helpText) { - super(new Item.Properties(), registry); + super(new Item.Properties(), registry, helpText); this.energyUsageResolver = energyUsageResolver; this.foil = foil; - this.helpText = helpText; } @Override @@ -41,11 +36,6 @@ public boolean isFoil(final ItemStack stack) { return foil; } - @Override - public Optional getTooltipImage(final ItemStack stack) { - return Optional.of(new HelpTooltipComponent(helpText)); - } - public static SimpleUpgradeItem speedUpgrade() { return new SimpleUpgradeItem( RefinedStorageApi.INSTANCE.getUpgradeRegistry(), diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index 840b75de9..9dbd5ffb0 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.fabric; -import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.AbstractClientModInitializer; import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; @@ -32,7 +31,6 @@ import com.refinedmods.refinedstorage.common.support.packet.s2c.WirelessTransmitterDataPacket; import com.refinedmods.refinedstorage.common.support.tooltip.CompositeClientTooltipComponent; import com.refinedmods.refinedstorage.common.support.tooltip.HelpClientTooltipComponent; -import com.refinedmods.refinedstorage.common.support.tooltip.ResourceClientTooltipComponent; import com.refinedmods.refinedstorage.common.upgrade.RegulatorUpgradeItem; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinationClientTooltipComponent; import com.refinedmods.refinedstorage.common.util.IdentifierUtil; @@ -63,7 +61,6 @@ import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.MenuAccess; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.item.ItemProperties; @@ -421,7 +418,10 @@ private void registerCustomPatternModel(final ModelLoadingPlugin.Context pluginC private void registerCustomTooltips() { TooltipComponentCallback.EVENT.register(data -> { if (data instanceof AbstractUpgradeItem.UpgradeDestinationTooltipComponent component) { - return new UpgradeDestinationClientTooltipComponent(component.destinations()); + return new CompositeClientTooltipComponent(List.of( + new UpgradeDestinationClientTooltipComponent(component.destinations()), + HelpClientTooltipComponent.create(component.helpText()) + )); } return null; }); @@ -433,10 +433,11 @@ private void registerCustomTooltips() { }); TooltipComponentCallback.EVENT.register(data -> { if (data instanceof RegulatorUpgradeItem.RegulatorTooltipComponent component) { - final ClientTooltipComponent help = HelpClientTooltipComponent.create(component.helpText()); - return component.configuredResource() == null - ? help - : createRegulatorUpgradeClientTooltipComponent(component.configuredResource(), help); + return createRegulatorUpgradeClientTooltipComponent( + component.destinations(), + component.configuredResource(), + component.helpText() + ); } return null; }); @@ -451,16 +452,6 @@ private void registerCustomTooltips() { }); } - private CompositeClientTooltipComponent createRegulatorUpgradeClientTooltipComponent( - final ResourceAmount configuredResource, - final ClientTooltipComponent help - ) { - return new CompositeClientTooltipComponent(List.of( - new ResourceClientTooltipComponent(configuredResource), - help - )); - } - private void registerKeyBindings() { KeyMappings.INSTANCE.setFocusSearchBar(KeyBindingHelper.registerKeyBinding(new KeyMapping( ContentNames.FOCUS_SEARCH_BAR_TRANSLATION_KEY, diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java index 2a0effae4..786ca5497 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ClientModInitializer.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.neoforge; -import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.AbstractClientModInitializer; import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; @@ -20,7 +19,6 @@ import com.refinedmods.refinedstorage.common.support.network.item.NetworkItemPropertyFunction; import com.refinedmods.refinedstorage.common.support.tooltip.CompositeClientTooltipComponent; import com.refinedmods.refinedstorage.common.support.tooltip.HelpClientTooltipComponent; -import com.refinedmods.refinedstorage.common.support.tooltip.ResourceClientTooltipComponent; import com.refinedmods.refinedstorage.common.upgrade.RegulatorUpgradeItem; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinationClientTooltipComponent; import com.refinedmods.refinedstorage.neoforge.autocrafting.PatternGeometryLoader; @@ -38,7 +36,6 @@ import net.minecraft.client.KeyMapping; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.MenuAccess; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.item.ItemProperties; @@ -214,7 +211,10 @@ public BlockEntityWithoutLevelRenderer getCustomRenderer() { public static void onRegisterTooltipFactories(final RegisterClientTooltipComponentFactoriesEvent e) { e.register( AbstractUpgradeItem.UpgradeDestinationTooltipComponent.class, - component -> new UpgradeDestinationClientTooltipComponent(component.destinations()) + component -> new CompositeClientTooltipComponent(List.of( + new UpgradeDestinationClientTooltipComponent(component.destinations()), + HelpClientTooltipComponent.create(component.helpText()) + )) ); e.register( HelpTooltipComponent.class, @@ -222,12 +222,11 @@ public static void onRegisterTooltipFactories(final RegisterClientTooltipCompone ); e.register( RegulatorUpgradeItem.RegulatorTooltipComponent.class, - component -> { - final ClientTooltipComponent help = HelpClientTooltipComponent.create(component.helpText()); - return component.configuredResource() == null - ? help - : createRegulatorUpgradeClientTooltipComponent(component.configuredResource(), help); - } + component -> createRegulatorUpgradeClientTooltipComponent( + component.destinations(), + component.configuredResource(), + component.helpText() + ) ); e.register(PatternItem.CraftingPatternTooltipComponent.class, PatternTooltipCache::getComponent); e.register(PatternItem.ProcessingPatternTooltipComponent.class, PatternTooltipCache::getComponent); @@ -235,16 +234,6 @@ public static void onRegisterTooltipFactories(final RegisterClientTooltipCompone e.register(PatternItem.SmithingTablePatternTooltipComponent.class, PatternTooltipCache::getComponent); } - private static CompositeClientTooltipComponent createRegulatorUpgradeClientTooltipComponent( - final ResourceAmount configuredResource, - final ClientTooltipComponent help - ) { - return new CompositeClientTooltipComponent(List.of( - new ResourceClientTooltipComponent(configuredResource), - help - )); - } - private static void registerItemProperties() { ItemProperties.register( Items.INSTANCE.getWirelessGrid(), From 1b15d9e6745a14b9345570ae64d36403fc7e6db0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 25 Aug 2024 15:54:56 +0200 Subject: [PATCH 21/83] feat: crafter renaming --- .../autocrafting/CrafterBlockEntity.java | 5 + .../autocrafting/CrafterContainerMenu.java | 74 ++++++++++-- .../common/autocrafting/CrafterScreen.java | 109 +++++++++++++++++- .../PatternGridContainerMenu.java | 5 +- .../common/autocrafting/PatternRendering.java | 17 +-- .../ConstructorScreen.java | 4 +- .../DestructorScreen.java | 6 +- .../common/controller/ControllerScreen.java | 6 +- .../common/detector/DetectorScreen.java | 4 +- .../common/exporter/ExporterScreen.java | 4 +- .../grid/screen/AbstractGridScreen.java | 4 +- .../common/iface/InterfaceScreen.java | 4 +- .../common/importer/ImporterScreen.java | 4 +- .../networking/NetworkTransmitterScreen.java | 4 +- .../common/networking/RelayScreen.java | 4 +- .../WirelessTransmitterContainerMenu.java | 2 +- .../security/AbstractSecurityCardScreen.java | 4 +- .../security/FallbackSecurityCardScreen.java | 4 +- .../common/security/SecurityCardScreen.java | 4 +- .../security/SecurityManagerScreen.java | 4 +- .../storage/diskdrive/DiskDriveScreen.java | 4 +- .../DiskInterfaceContainerMenu.java | 2 +- .../diskinterface/DiskInterfaceScreen.java | 4 +- .../storagemonitor/StorageMonitorScreen.java | 4 +- .../common/support/AbstractBaseScreen.java | 37 ++++-- .../common/support/AbstractFilterScreen.java | 4 +- .../amount/AbstractSingleAmountScreen.java | 2 +- .../AbstractSimpleFilterContainerMenu.java | 2 +- ...ctBaseNetworkNodeContainerBlockEntity.java | 4 + .../common/support/packet/c2s/C2SPackets.java | 4 + .../packet/c2s/CrafterNameChangePacket.java | 33 ++++++ .../packet/s2c/CrafterNameUpdatePacket.java | 34 ++++++ .../common/support/packet/s2c/S2CPackets.java | 4 + .../stretching/AbstractStretchingScreen.java | 8 +- .../support/widget/SearchFieldWidget.java | 4 +- .../common/support/widget/TextMarquee.java | 66 ++++++++++- .../upgrade/RegulatorUpgradeScreen.java | 4 +- .../common/upgrade/UpgradeContainer.java | 4 + .../assets/refinedstorage/lang/en_us.json | 1 + .../gui/sprites/widget/crafter_name.png | Bin 0 -> 159 bytes .../fabric/ClientModInitializerImpl.java | 5 + .../fabric/ModInitializerImpl.java | 14 +++ .../neoforge/ModInitializer.java | 12 ++ 43 files changed, 444 insertions(+), 84 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/CrafterNameChangePacket.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/crafter_name.png diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index 1fd579ab8..193c38726 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -111,6 +111,11 @@ public NonNullList getDrops() { return drops; } + void setCustomName(final String name) { + setName(name.trim().isBlank() ? null : Component.literal(name)); + setChanged(); + } + @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java index f45a319b8..67c143359 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -7,12 +7,17 @@ import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage.common.support.containermenu.ServerProperty; +import com.refinedmods.refinedstorage.common.support.packet.c2s.C2SPackets; +import com.refinedmods.refinedstorage.common.support.packet.s2c.S2CPackets; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.upgrade.UpgradeSlot; import javax.annotation.Nullable; +import com.google.common.util.concurrent.RateLimiter; +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.Slot; @@ -26,37 +31,66 @@ public class CrafterContainerMenu extends AbstractBaseContainerMenu { private static final int PATTERN_SLOT_X = 8; private static final int PATTERN_SLOT_Y = 20; + private final Player player; + private final RateLimiter nameRateLimiter = RateLimiter.create(0.5); + @Nullable private CrafterBlockEntity crafter; + @Nullable + private Listener listener; + private Component name; public CrafterContainerMenu(final int syncId, final Inventory playerInventory) { super(Menus.INSTANCE.getCrafter(), syncId); + this.player = playerInventory.player; registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); addSlots( new FilteredContainer(PATTERNS, stack -> isValidPattern(stack, playerInventory.player.level())), - new UpgradeContainer(UpgradeDestinations.CRAFTER, null), - playerInventory.player + new UpgradeContainer(UpgradeDestinations.CRAFTER) ); + this.name = Component.empty(); } public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterBlockEntity crafter) { super(Menus.INSTANCE.getCrafter(), syncId); this.crafter = crafter; + this.player = playerInventory.player; + this.name = crafter.getDisplayName(); registerProperty(new ServerProperty<>( PropertyTypes.REDSTONE_MODE, crafter::getRedstoneMode, crafter::setRedstoneMode )); - addSlots( - crafter.getPatternContainer(), - crafter.getUpgradeContainer(), - playerInventory.player - ); + addSlots(crafter.getPatternContainer(), crafter.getUpgradeContainer()); + } + + void setListener(@Nullable final Listener listener) { + this.listener = listener; + } + + @Override + public void broadcastChanges() { + super.broadcastChanges(); + if (crafter == null) { + return; + } + if (nameRateLimiter.tryAcquire()) { + detectNameChange(); + } + } + + private void detectNameChange() { + if (crafter == null) { + return; + } + final Component newName = crafter.getDisplayName(); + if (!newName.equals(name)) { + this.name = newName; + S2CPackets.sendCrafterNameUpdate((ServerPlayer) player, newName); + } } - private void addSlots(final FilteredContainer patternContainer, - final UpgradeContainer upgradeContainer, - final Player player) { + private void addSlots(final FilteredContainer patternContainer, final UpgradeContainer upgradeContainer) { for (int i = 0; i < patternContainer.getContainerSize(); ++i) { addSlot(createPatternSlot(patternContainer, i, player.level())); } @@ -83,4 +117,24 @@ public boolean containsPattern(final ItemStack stack) { } return false; } + + public void changeName(final String newName) { + if (crafter != null) { + crafter.setCustomName(newName); + detectNameChange(); + } else { + C2SPackets.sendCrafterNameChange(newName); + } + } + + public void nameChanged(final Component newName) { + if (listener != null) { + listener.nameChanged(newName); + } + } + + @FunctionalInterface + public interface Listener { + void nameChanged(Component name); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java index 981181259..54858c81f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -4,34 +4,141 @@ import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage.common.support.AbstractFilterScreen; import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage.common.support.widget.History; import com.refinedmods.refinedstorage.common.support.widget.RedstoneModeSideButtonWidget; +import com.refinedmods.refinedstorage.common.support.widget.SearchFieldWidget; +import com.refinedmods.refinedstorage.common.support.widget.TextMarquee; +import java.util.ArrayList; import java.util.List; +import javax.annotation.Nullable; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; +import org.lwjgl.glfw.GLFW; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationAsHeading; public class CrafterScreen extends AbstractBaseScreen { private static final ClientTooltipComponent EMPTY_PATTERN_SLOT = ClientTooltipComponent.create( createTranslationAsHeading("gui", "crafter.empty_pattern_slot").getVisualOrderText() ); + private static final Component CLICK_TO_EDIT_NAME = createTranslation("gui", "crafter.click_to_edit_name"); + + private static final ResourceLocation CRAFTER_NAME_BACKGROUND = createIdentifier("widget/crafter_name"); + private static final List CRAFTER_NAME_HISTORY = new ArrayList<>(); + + @Nullable + private EditBox nameField; + private boolean editName; public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInventory, final Component title) { - super(menu, playerInventory, title); + super(menu, playerInventory, new TextMarquee(title, TITLE_MAX_WIDTH)); this.inventoryLabelY = 42; this.imageWidth = 210; this.imageHeight = 137; } + @Override + protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { + super.renderBg(graphics, delta, mouseX, mouseY); + if (editName) { + graphics.blitSprite(CRAFTER_NAME_BACKGROUND, leftPos + 7, topPos + 5, 162, 12); + } + } + + @Override + public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { + if (!editName && isHovering( + titleLabelX, titleLabelY, titleMarquee.getEffectiveWidth(font), font.lineHeight, mouseX, mouseY + )) { + setEditName(true); + return true; + } + return super.mouseClicked(mouseX, mouseY, clickedButton); + } + @Override protected void init() { super.init(); + getMenu().setListener(name -> { + titleMarquee.setText(name); + if (nameField != null) { + nameField.setValue(name.getString()); + } + }); addSideButton(new RedstoneModeSideButtonWidget(getMenu().getProperty(PropertyTypes.REDSTONE_MODE))); + nameField = new SearchFieldWidget( + font, + leftPos + 8 + 1, + topPos + 6 + 1, + 159 - 6, + new History(CRAFTER_NAME_HISTORY) + ); + nameField.setValue(title.getString()); + nameField.setBordered(false); + nameField.setCanLoseFocus(false); + addWidget(nameField); + setEditName(false); + } + + private void setEditName(final boolean editName) { + this.editName = editName; + this.titleMarquee.setTooltip(editName ? null : CLICK_TO_EDIT_NAME); + if (nameField != null) { + nameField.visible = editName; + nameField.setFocused(editName); + nameField.setCanLoseFocus(!editName); + if (editName) { + setFocused(nameField); + } else { + setFocused(null); + } + } + } + + @Override + public void render(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { + super.render(graphics, mouseX, mouseY, partialTicks); + if (nameField != null && editName) { + nameField.render(graphics, mouseX, mouseY, partialTicks); + } + } + + @Override + protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { + if (editName) { + renderPlayerInventoryTitle(graphics); + } else { + super.renderLabels(graphics, mouseX, mouseY); + } + } + + @Override + public boolean charTyped(final char unknown1, final int unknown2) { + return (nameField != null && editName && nameField.charTyped(unknown1, unknown2)) + || super.charTyped(unknown1, unknown2); + } + + @Override + public boolean keyPressed(final int key, final int scanCode, final int modifiers) { + if (nameField != null + && (key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) + && nameField.isFocused()) { + getMenu().changeName(nameField.getValue()); + setEditName(false); + return true; + } + if (nameField != null && editName && nameField.keyPressed(key, scanCode, modifiers)) { + return true; + } + return super.keyPressed(key, scanCode, modifiers); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java index 042f1338f..b9b52dd28 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java @@ -228,9 +228,8 @@ public void set(final ItemStack stack) { transferManager.addTransfer(patternOutput, playerInventory); } - @Nullable - Slot getPatternOutputSlot() { - return patternOutputSlot; + boolean isPatternInOutput(final ItemStack stack) { + return patternOutputSlot != null && patternOutputSlot.getItem() == stack; } private void addCraftingMatrixSlots(final int playerInventoryY) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java index 0b42e8f79..462a4503a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java @@ -23,15 +23,16 @@ public static boolean canDisplayOutput(final ItemStack stack) { if (Screen.hasShiftDown()) { return true; } + return canDisplayOutputInScreen(stack); + } + + private static boolean canDisplayOutputInScreen(final ItemStack stack) { final Screen screen = Minecraft.getInstance().screen; - if (screen instanceof PatternGridScreen patternGridScreen) { - return patternGridScreen.getMenu().getPatternOutputSlot() != null - && patternGridScreen.getMenu().getPatternOutputSlot().getItem() == stack; - } - if (screen instanceof CrafterScreen crafterScreen) { - return crafterScreen.getMenu().containsPattern(stack); - } - return false; + return switch (screen) { + case PatternGridScreen patternGridScreen -> patternGridScreen.getMenu().isPatternInOutput(stack); + case CrafterScreen crafterScreen -> crafterScreen.getMenu().containsPattern(stack); + case null, default -> false; + }; } public static Optional getOutput(final ItemStack stack) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorScreen.java index d1b35c126..3533b4e28 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorScreen.java @@ -11,8 +11,8 @@ public class ConstructorScreen extends AbstractFilterScreen { public ConstructorScreen(final ConstructorContainerMenu menu, final Inventory playerInventory, - final Component text) { - super(menu, playerInventory, text); + final Component title) { + super(menu, playerInventory, title); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorScreen.java index 0aa29c81b..2bfc17469 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorScreen.java @@ -10,8 +10,10 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public class DestructorScreen extends AbstractFilterScreen { - public DestructorScreen(final DestructorContainerMenu menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text); + public DestructorScreen(final DestructorContainerMenu menu, + final Inventory playerInventory, + final Component title) { + super(menu, playerInventory, title); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerScreen.java index 52f22ab2e..b2711aea5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerScreen.java @@ -20,8 +20,10 @@ public class ControllerScreen extends AbstractBaseScreen { - public DetectorScreen(final DetectorContainerMenu menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text, menu.getAmount(), 0); + public DetectorScreen(final DetectorContainerMenu menu, final Inventory playerInventory, final Component title) { + super(menu, playerInventory, title, menu.getAmount(), 0); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterScreen.java index e0f7bb5c3..b223236b4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/ExporterScreen.java @@ -9,8 +9,8 @@ import net.minecraft.world.entity.player.Inventory; public class ExporterScreen extends AbstractFilterScreen { - public ExporterScreen(final ExporterContainerMenu menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text); + public ExporterScreen(final ExporterContainerMenu menu, final Inventory playerInventory, final Component title) { + super(menu, playerInventory, title); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 6e4f17e6a..6d24be377 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -71,9 +71,9 @@ public abstract class AbstractGridScreen ex protected AbstractGridScreen(final T menu, final Inventory playerInventory, - final Component text, + final Component title, final int bottomHeight) { - super(menu, playerInventory, new TextMarquee(text, 70)); + super(menu, playerInventory, new TextMarquee(title, 70)); this.bottomHeight = bottomHeight; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceScreen.java index 0552383c7..a092d9449 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceScreen.java @@ -16,8 +16,8 @@ public class InterfaceScreen extends AbstractBaseScreen public InterfaceScreen(final InterfaceContainerMenu menu, final Inventory playerInventory, - final Component text) { - super(menu, playerInventory, text); + final Component title) { + super(menu, playerInventory, title); this.inventoryLabelY = 88; this.imageWidth = 176; this.imageHeight = 182; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterScreen.java index 039c5ffd0..7aa0f1f85 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/ImporterScreen.java @@ -11,8 +11,8 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public class ImporterScreen extends AbstractFilterScreen { - public ImporterScreen(final ImporterContainerMenu menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text); + public ImporterScreen(final ImporterContainerMenu menu, final Inventory playerInventory, final Component title) { + super(menu, playerInventory, title); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterScreen.java index 84bd79eab..7972996b2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterScreen.java @@ -20,8 +20,8 @@ public class NetworkTransmitterScreen extends AbstractBaseScreen @Nullable private AbstractSideButtonWidget priorityButton; - public RelayScreen(final RelayContainerMenu menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text); + public RelayScreen(final RelayContainerMenu menu, final Inventory playerInventory, final Component title) { + super(menu, playerInventory, title); this.playerInventory = playerInventory; menu.setPassThroughListener(this); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java index b1fab2cb9..0c4b2df3e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterContainerMenu.java @@ -32,7 +32,7 @@ public WirelessTransmitterContainerMenu(final int syncId, final Inventory playerInventory, final WirelessTransmitterData data) { super(Menus.INSTANCE.getWirelessTransmitter(), syncId); - addSlots(playerInventory, new UpgradeContainer(UpgradeDestinations.WIRELESS_TRANSMITTER, null)); + addSlots(playerInventory, new UpgradeContainer(UpgradeDestinations.WIRELESS_TRANSMITTER)); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); this.range = data.range(); this.active = data.active(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/AbstractSecurityCardScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/AbstractSecurityCardScreen.java index 7d4352bab..db1f39502 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/AbstractSecurityCardScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/AbstractSecurityCardScreen.java @@ -32,8 +32,8 @@ public abstract class AbstractSecurityCardScreen permissions = new ArrayList<>(); - protected AbstractSecurityCardScreen(final T menu, final Inventory playerInventory, final Component text) { - super(menu, playerInventory, text); + protected AbstractSecurityCardScreen(final T menu, final Inventory playerInventory, final Component title) { + super(menu, playerInventory, title); this.inventoryLabelY = 97; this.imageWidth = 193; this.imageHeight = 176; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/FallbackSecurityCardScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/FallbackSecurityCardScreen.java index 45cd51f2b..421724411 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/FallbackSecurityCardScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/FallbackSecurityCardScreen.java @@ -6,7 +6,7 @@ public class FallbackSecurityCardScreen extends AbstractSecurityCardScreen { public FallbackSecurityCardScreen(final FallbackSecurityCardContainerMenu menu, final Inventory playerInventory, - final Component text) { - super(menu, playerInventory, text); + final Component title) { + super(menu, playerInventory, title); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityCardScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityCardScreen.java index 6cbb6fef1..748b1c791 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityCardScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityCardScreen.java @@ -10,8 +10,8 @@ public class SecurityCardScreen extends AbstractSecurityCardScreen(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); registerProperty(new ClientProperty<>(PropertyTypes.FUZZY_MODE, false)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceScreen.java index db31dce5b..ff58b9d21 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceScreen.java @@ -24,8 +24,8 @@ public class DiskInterfaceScreen extends AbstractBaseScreen extends AbstractContainerScreen { + protected static final int TITLE_MAX_WIDTH = 162; + private static final SmallTextClientTooltipComponent CLICK_TO_CLEAR = new SmallTextClientTooltipComponent( createTranslationAsHeading("gui", "filter_slot.click_to_clear") ); @@ -55,9 +57,10 @@ public abstract class AbstractBaseScreen extend createTranslationAsHeading("gui", "empty_upgrade_slot").getVisualOrderText() ); + protected final TextMarquee titleMarquee; + private final Inventory playerInventory; private final List exclusionZones = new ArrayList<>(); - private final TextMarquee titleMarquee; private int sideButtonY; @@ -65,7 +68,7 @@ public abstract class AbstractBaseScreen extend private List deferredTooltip; protected AbstractBaseScreen(final T menu, final Inventory playerInventory, final Component title) { - this(menu, playerInventory, new TextMarquee(title, 162)); + this(menu, playerInventory, new TextMarquee(title, TITLE_MAX_WIDTH)); } protected AbstractBaseScreen(final T menu, final Inventory playerInventory, final TextMarquee title) { @@ -107,17 +110,30 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int @Override protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { graphics.pose().popPose(); - final boolean hoveringOverTitle = isHovering( - 7, - 7, + titleMarquee.render( + graphics, + leftPos + titleLabelX, + topPos + titleLabelY, + font, + isHoveringOverTitle(mouseX, mouseY) + ); + graphics.pose().pushPose(); + graphics.pose().translate(leftPos, topPos, 0.0F); + renderPlayerInventoryTitle(graphics); + } + + private boolean isHoveringOverTitle(final int mouseX, final int mouseY) { + return isHovering( + titleLabelX, + titleLabelY, titleMarquee.getEffectiveWidth(font), font.lineHeight, mouseX, mouseY ); - titleMarquee.render(graphics, leftPos + titleLabelX, topPos + titleLabelY, font, hoveringOverTitle); - graphics.pose().pushPose(); - graphics.pose().translate(leftPos, topPos, 0.0F); + } + + protected final void renderPlayerInventoryTitle(final GuiGraphics graphics) { graphics.drawString(font, playerInventoryTitle, inventoryLabelX, inventoryLabelY, 4210752, false); } @@ -151,6 +167,11 @@ public List getExclusionZones() { @Override protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { + final Component titleTooltip = titleMarquee.getTooltip(); + if (titleTooltip != null && isHoveringOverTitle(x, y)) { + graphics.renderTooltip(font, titleTooltip, x, y); + return; + } if (hoveredSlot instanceof UpgradeSlot upgradeSlot) { final List tooltip = getUpgradeTooltip(menu.getCarried(), upgradeSlot); if (!tooltip.isEmpty()) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractFilterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractFilterScreen.java index de82c7433..582c674cd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractFilterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractFilterScreen.java @@ -14,8 +14,8 @@ public abstract class AbstractFilterScreen protected AbstractFilterScreen(final T menu, final Inventory playerInventory, - final Component text) { - super(menu, playerInventory, text); + final Component title) { + super(menu, playerInventory, title); this.inventoryLabelY = 42; this.imageWidth = hasUpgrades() ? 210 : 176; this.imageHeight = 137; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java index f6e776983..24b0c03a4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java @@ -50,6 +50,6 @@ protected ResourceLocation getTexture() { @Override protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { super.renderLabels(graphics, mouseX, mouseY); - graphics.drawString(font, playerInventoryTitle, inventoryLabelX, inventoryLabelY, 4210752, false); + renderPlayerInventoryTitle(graphics); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java index 959409590..efd2ddbe3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/containermenu/AbstractSimpleFilterContainerMenu.java @@ -46,7 +46,7 @@ protected AbstractSimpleFilterContainerMenu(final MenuType type, addSlots( player, ResourceContainerImpl.createForFilter(resourceContainerData), - upgradeDestination == null ? null : new UpgradeContainer(upgradeDestination, null) + upgradeDestination == null ? null : new UpgradeContainer(upgradeDestination) ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java index 073611f99..ad54d207b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java @@ -246,6 +246,10 @@ protected final Component overrideName(final Component defaultName) { return name == null ? defaultName : name; } + protected final void setName(@Nullable final Component name) { + this.name = name; + } + @Override public void setPlacedBy(final UUID playerId) { this.placedByPlayerId = playerId; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java index 85c99f58e..618e09aef 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java @@ -127,4 +127,8 @@ public static void sendPatternGridSmithingTableRecipeTransfer(final List PACKET_TYPE = new Type<>( + createIdentifier("crafter_name_change") + ); + public static final StreamCodec STREAM_CODEC = StreamCodec + .composite( + ByteBufCodecs.STRING_UTF8, CrafterNameChangePacket::name, + CrafterNameChangePacket::new + ); + + public static void handle(final CrafterNameChangePacket packet, final PacketContext ctx) { + if (ctx.getPlayer().containerMenu instanceof CrafterContainerMenu containerMenu) { + containerMenu.changeName(packet.name); + } + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java new file mode 100644 index 000000000..f681a22e9 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java @@ -0,0 +1,34 @@ +package com.refinedmods.refinedstorage.common.support.packet.s2c; + +import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; +import com.refinedmods.refinedstorage.common.support.packet.PacketContext; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public record CrafterNameUpdatePacket(Component name) implements CustomPacketPayload { + public static final Type PACKET_TYPE = new Type<>( + createIdentifier("crafter_name_update") + ); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ComponentSerialization.STREAM_CODEC, CrafterNameUpdatePacket::name, + CrafterNameUpdatePacket::new + ); + + public static void handle(final CrafterNameUpdatePacket packet, final PacketContext ctx) { + if (ctx.getPlayer().containerMenu instanceof CrafterContainerMenu containerMenu) { + containerMenu.nameChanged(packet.name); + } + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java index 1059b66c2..2cc191708 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java @@ -81,4 +81,8 @@ public static void sendPatternGridAllowedAlternativesUpdate(final ServerPlayer p final Set ids) { Platform.INSTANCE.sendPacketToClient(player, new PatternGridAllowedAlternativesUpdatePacket(index, ids)); } + + public static void sendCrafterNameUpdate(final ServerPlayer player, final Component name) { + Platform.INSTANCE.sendPacketToClient(player, new CrafterNameUpdatePacket(name)); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java index bf9cb030d..2d455bc14 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/stretching/AbstractStretchingScreen.java @@ -28,14 +28,14 @@ public abstract class AbstractStretchingScreen maxWidth) { @@ -39,14 +49,45 @@ public void render(final GuiGraphics graphics, final int x, final int y, final F } else { graphics.drawString(font, text, x, y, 4210752, false); } + renderTooltipHighlight(graphics, x, y, font, hovering); + } + + private void renderTooltipHighlight(final GuiGraphics graphics, + final int x, + final int y, + final Font font, + final boolean hovering) { + if (hovering && tooltip != null) { + renderTooltipHighlight(graphics, x, y, font); + } else { + hoveringTicks = 0; + hoveringIn = true; + } + } + + private void renderTooltipHighlight(final GuiGraphics graphics, final int x, final int y, final Font font) { + if (hoveringIn) { + hoveringTicks++; + if (hoveringTicks == MAX_TOOLTIP_HIGHLIGHT_TICKS) { + hoveringIn = false; + } + } else { + hoveringTicks--; + if (hoveringTicks == 0) { + hoveringIn = true; + } + } + final int alpha = (int) (hoveringTicks * (63.0 / MAX_TOOLTIP_HIGHLIGHT_TICKS)); + final int color = (alpha << 24) | 0xFFFFFF; + graphics.fill(x - 1, y - 1, x + getEffectiveWidth(font), y + font.lineHeight, color); } private void updateMarquee(final int overflow) { - ticks++; - if (ticks % state.ticks == 0) { + stateTicks++; + if (stateTicks % state.ticks == 0) { offset = state.updateOffset(offset); state = state.nextState(offset, overflow); - ticks = 0; + stateTicks = 0; } } @@ -54,6 +95,19 @@ public Component getText() { return text; } + public void setText(final Component text) { + this.text = text; + } + + @Nullable + public Component getTooltip() { + return tooltip; + } + + public void setTooltip(@Nullable final Component tooltip) { + this.tooltip = tooltip; + } + enum State { MOVING_LEFT(2), MOVING_RIGHT(2), diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeScreen.java index 0a5af7083..65423648d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeScreen.java @@ -8,7 +8,7 @@ public class RegulatorUpgradeScreen extends AbstractSingleAmountScreen { public RegulatorUpgradeScreen(final RegulatorUpgradeContainerMenu menu, final Inventory playerInventory, - final Component text) { - super(menu, playerInventory, text, menu.getAmount(), 1); + final Component title) { + super(menu, playerInventory, title, menu.getAmount(), 1); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index 410bf51d9..a34fef0e1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -39,6 +39,10 @@ public class UpgradeContainer extends SimpleContainer implements UpgradeState { private final UpgradeContainerListener listener; private final int defaultWorkTickRate; private final ThrottledNetworkNodeTicker ticker; + + public UpgradeContainer(final UpgradeDestination destination) { + this(destination, null, DEFAULT_WORK_TICK_RATE); + } public UpgradeContainer(final UpgradeDestination destination, @Nullable final UpgradeContainerListener listener) { this(destination, listener, DEFAULT_WORK_TICK_RATE); diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 54463e26c..58a33b632 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -183,6 +183,7 @@ "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", "gui.refinedstorage.crafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.crafter.click_to_edit_name": "Click to edit name", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/crafter_name.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/crafter_name.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9740ae2a41db1e211f68953a8d49d4ac06ca5d GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^i-4Gig&9Z+pQ_#lq!^2X+?^QKos)S9a|ZZ?xQ2#?c6WFG|NlQ;YsqhrV1Y+uF#`kNVGw3Kp1&dmC@Amg;uvCa zI(dOvLP~K5DIOaB*gISl>Lh*A^fX>N*O#|{an^LB{Ts5wT>?Y literal 0 HcmV?d00001 diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index 9dbd5ffb0..fe960a80f 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -19,6 +19,7 @@ import com.refinedmods.refinedstorage.common.storagemonitor.StorageMonitorBlockEntityRenderer; import com.refinedmods.refinedstorage.common.support.network.item.NetworkItemPropertyFunction; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridClearPacket; @@ -285,6 +286,10 @@ private void registerPacketHandlers() { PatternGridAllowedAlternativesUpdatePacket.PACKET_TYPE, wrapHandler(PatternGridAllowedAlternativesUpdatePacket::handle) ); + ClientPlayNetworking.registerGlobalReceiver( + CrafterNameUpdatePacket.PACKET_TYPE, + wrapHandler(CrafterNameUpdatePacket::handle) + ); } private static ClientPlayNetworking.PlayPayloadHandler wrapHandler( diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index 29a8fb990..92e3255ca 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -29,6 +29,7 @@ import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.FilterSlotChangePacket; @@ -52,6 +53,7 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridClearPacket; @@ -437,6 +439,10 @@ private void registerServerToClientPackets() { PatternGridAllowedAlternativesUpdatePacket.PACKET_TYPE, PatternGridAllowedAlternativesUpdatePacket.STREAM_CODEC ); + PayloadTypeRegistry.playS2C().register( + CrafterNameUpdatePacket.PACKET_TYPE, + CrafterNameUpdatePacket.STREAM_CODEC + ); } private void registerClientToServerPackets() { @@ -520,6 +526,10 @@ private void registerClientToServerPackets() { PatternGridSmithingTableRecipeTransferPacket.PACKET_TYPE, PatternGridSmithingTableRecipeTransferPacket.STREAM_CODEC ); + PayloadTypeRegistry.playC2S().register( + CrafterNameChangePacket.PACKET_TYPE, + CrafterNameChangePacket.STREAM_CODEC + ); } private void registerPacketHandlers() { @@ -615,6 +625,10 @@ private void registerPacketHandlers() { PatternGridSmithingTableRecipeTransferPacket.PACKET_TYPE, wrapHandler(PatternGridSmithingTableRecipeTransferPacket::handle) ); + ServerPlayNetworking.registerGlobalReceiver( + CrafterNameChangePacket.PACKET_TYPE, + wrapHandler(CrafterNameChangePacket::handle) + ); } private static ServerPlayNetworking.PlayPayloadHandler wrapHandler( diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 6ab1b1801..537ae459f 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -29,6 +29,7 @@ import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.FilterSlotChangePacket; @@ -52,6 +53,7 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridClearPacket; @@ -624,6 +626,11 @@ private static void registerServerToClientPackets(final PayloadRegistrar registr PatternGridAllowedAlternativesUpdatePacket.STREAM_CODEC, wrapHandler(PatternGridAllowedAlternativesUpdatePacket::handle) ); + registrar.playToClient( + CrafterNameUpdatePacket.PACKET_TYPE, + CrafterNameUpdatePacket.STREAM_CODEC, + wrapHandler(CrafterNameUpdatePacket::handle) + ); } private static void registerClientToServerPackets(final PayloadRegistrar registrar) { @@ -742,6 +749,11 @@ private static void registerClientToServerPackets(final PayloadRegistrar registr PatternGridSmithingTableRecipeTransferPacket.STREAM_CODEC, wrapHandler(PatternGridSmithingTableRecipeTransferPacket::handle) ); + registrar.playToServer( + CrafterNameChangePacket.PACKET_TYPE, + CrafterNameChangePacket.STREAM_CODEC, + wrapHandler(CrafterNameChangePacket::handle) + ); } private static IPayloadHandler wrapHandler(final PacketHandler handler) { From 3ec49ba4620838c1ac8f59d566f6fc1c1cf949a5 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 25 Aug 2024 17:25:32 +0200 Subject: [PATCH 22/83] feat: crafter chaining --- .idea/dictionaries/refinedstorage.xml | 2 + .../common/AbstractModInitializer.java | 3 +- .../autocrafting/CrafterBlockEntity.java | 83 +++++++++++++++++-- .../autocrafting/CrafterContainerMenu.java | 12 ++- .../common/autocrafting/CrafterData.java | 10 +++ .../common/autocrafting/CrafterScreen.java | 35 +++++--- .../autocrafting/PatternGridBlockEntity.java | 2 +- .../AbstractConstructorBlockEntity.java | 2 +- .../AbstractDestructorBlockEntity.java | 2 +- .../controller/ControllerBlockEntity.java | 5 +- .../common/detector/DetectorBlockEntity.java | 2 +- .../exporter/AbstractExporterBlockEntity.java | 2 +- .../common/grid/CraftingGridBlockEntity.java | 2 +- .../common/grid/GridBlockEntity.java | 2 +- .../common/iface/InterfaceBlockEntity.java | 2 +- .../importer/AbstractImporterBlockEntity.java | 2 +- .../networking/AbstractCableBlockEntity.java | 7 ++ .../NetworkReceiverBlockEntity.java | 7 ++ .../NetworkTransmitterBlockEntity.java | 2 +- .../common/networking/RelayBlockEntity.java | 2 +- .../WirelessTransmitterBlockEntity.java | 2 +- .../security/SecurityManagerBlockEntity.java | 2 +- .../AbstractDiskDriveBlockEntity.java | 2 +- .../AbstractDiskInterfaceBlockEntity.java | 2 +- .../AbstractExternalStorageBlockEntity.java | 2 +- .../FluidStorageBlockBlockEntity.java | 2 +- .../ItemStorageBlockBlockEntity.java | 2 +- .../StorageMonitorBlockEntity.java | 2 +- .../common/support/AbstractBaseScreen.java | 2 +- ...ctBaseNetworkNodeContainerBlockEntity.java | 32 ++++--- .../common/support/widget/TextMarquee.java | 11 ++- .../assets/refinedstorage/lang/en_us.json | 1 + 32 files changed, 191 insertions(+), 57 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java diff --git a/.idea/dictionaries/refinedstorage.xml b/.idea/dictionaries/refinedstorage.xml index 2a5a0a2eb..3ce828eb4 100644 --- a/.idea/dictionaries/refinedstorage.xml +++ b/.idea/dictionaries/refinedstorage.xml @@ -5,6 +5,8 @@ autocrafting autoselected blocklist + crafter + crafters cullface emissive firstperson diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index e2e420b28..8a59585e3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -13,6 +13,7 @@ import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; +import com.refinedmods.refinedstorage.common.autocrafting.CrafterData; import com.refinedmods.refinedstorage.common.autocrafting.CraftingPatternState; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; @@ -773,7 +774,7 @@ protected final void registerMenus(final RegistryCallback> callback, )); Menus.INSTANCE.setCrafter(callback.register( ContentIds.CRAFTER, - () -> menuTypeFactory.create(CrafterContainerMenu::new) + () -> extendedMenuTypeFactory.create(CrafterContainerMenu::new, CrafterData.STREAM_CODEC) )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index 193c38726..d4cbd7ef4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.BlockEntityWithDrops; import com.refinedmods.refinedstorage.common.support.FilteredContainer; +import com.refinedmods.refinedstorage.common.support.containermenu.ExtendedMenuProvider; import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.upgrade.UpgradeContainer; import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; @@ -18,22 +19,29 @@ import javax.annotation.Nullable; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -import net.minecraft.world.MenuProvider; +import net.minecraft.network.codec.StreamEncoder; +import net.minecraft.world.Nameable; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; +import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; + public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity - implements MenuProvider, BlockEntityWithDrops { + implements ExtendedMenuProvider, BlockEntityWithDrops { static final int PATTERNS = 9; + private static final int MAX_CHAINED_CRAFTERS = 8; private static final String TAG_UPGRADES = "upgr"; private static final String TAG_PATTERNS = "patterns"; @@ -72,9 +80,61 @@ UpgradeContainer getUpgradeContainer() { return upgradeContainer; } + private boolean isChained() { + return getChainingRoot() != this; + } + + private CrafterBlockEntity getChainingRoot() { + return getChainingRoot(0, this); + } + + private CrafterBlockEntity getChainingRoot(final int depth, final CrafterBlockEntity origin) { + final Direction direction = tryExtractDirection(getBlockState()); + if (level == null || direction == null || depth >= MAX_CHAINED_CRAFTERS) { + return origin; + } + final BlockEntity neighbor = getConnectedMachine(); + if (!(neighbor instanceof CrafterBlockEntity neighborCrafter)) { + return this; + } + return neighborCrafter.getChainingRoot(depth + 1, origin); + } + + @Nullable + private BlockEntity getConnectedMachine() { + final Direction direction = tryExtractDirection(getBlockState()); + if (level == null || direction == null) { + return null; + } + final BlockPos neighborPos = getBlockPos().relative(direction); + if (!level.isLoaded(neighborPos)) { + return null; + } + return level.getBlockEntity(neighborPos); + } + @Override - public Component getDisplayName() { - return overrideName(ContentNames.CRAFTER); + public Component getName() { + final CrafterBlockEntity root = getChainingRoot(); + if (root == this) { + return doGetName(); + } + return root.getDisplayName(); + } + + private Component doGetName() { + final Component customName = getCustomName(); + if (customName != null) { + return customName; + } + final BlockEntity connectedMachine = getConnectedMachine(); + // We don't handle crafters here, as crafters are also nameable, and we could have infinite recursion. + if (connectedMachine instanceof Nameable nameable && !(connectedMachine instanceof CrafterBlockEntity)) { + return nameable.getName(); + } else if (connectedMachine != null) { + return connectedMachine.getBlockState().getBlock().getName(); + } + return ContentNames.CRAFTER; } @Nullable @@ -83,6 +143,16 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent return new CrafterContainerMenu(syncId, inventory, this); } + @Override + public CrafterData getMenuData() { + return new CrafterData(isChained()); + } + + @Override + public StreamEncoder getMenuCodec() { + return CrafterData.STREAM_CODEC; + } + @Override public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { super.saveAdditional(tag, provider); @@ -112,7 +182,10 @@ public NonNullList getDrops() { } void setCustomName(final String name) { - setName(name.trim().isBlank() ? null : Component.literal(name)); + if (isChained()) { + return; + } + setCustomName(name.trim().isBlank() ? null : Component.literal(name)); setChanged(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java index 67c143359..c77d3b159 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -32,6 +32,7 @@ public class CrafterContainerMenu extends AbstractBaseContainerMenu { private static final int PATTERN_SLOT_Y = 20; private final Player player; + private final boolean chained; private final RateLimiter nameRateLimiter = RateLimiter.create(0.5); @Nullable @@ -40,7 +41,7 @@ public class CrafterContainerMenu extends AbstractBaseContainerMenu { private Listener listener; private Component name; - public CrafterContainerMenu(final int syncId, final Inventory playerInventory) { + public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterData data) { super(Menus.INSTANCE.getCrafter(), syncId); this.player = playerInventory.player; registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); @@ -49,6 +50,7 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory) { new UpgradeContainer(UpgradeDestinations.CRAFTER) ); this.name = Component.empty(); + this.chained = data.chained(); } public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterBlockEntity crafter) { @@ -56,6 +58,7 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f this.crafter = crafter; this.player = playerInventory.player; this.name = crafter.getDisplayName(); + this.chained = false; registerProperty(new ServerProperty<>( PropertyTypes.REDSTONE_MODE, crafter::getRedstoneMode, @@ -64,6 +67,10 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f addSlots(crafter.getPatternContainer(), crafter.getUpgradeContainer()); } + boolean canChangeName() { + return !chained; + } + void setListener(@Nullable final Listener listener) { this.listener = listener; } @@ -119,6 +126,9 @@ public boolean containsPattern(final ItemStack stack) { } public void changeName(final String newName) { + if (chained) { + return; + } if (crafter != null) { crafter.setCustomName(newName); detectNameChange(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java new file mode 100644 index 000000000..0906ca3fc --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java @@ -0,0 +1,10 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +public record CrafterData(boolean chained) { + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite(ByteBufCodecs.BOOL, CrafterData::chained, CrafterData::new); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java index 54858c81f..d6473a554 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -30,6 +30,9 @@ public class CrafterScreen extends AbstractBaseScreen { createTranslationAsHeading("gui", "crafter.empty_pattern_slot").getVisualOrderText() ); private static final Component CLICK_TO_EDIT_NAME = createTranslation("gui", "crafter.click_to_edit_name"); + private static final Component NAME_CANNOT_BE_CHANGED_BECAUSE_OF_CHAINING = createTranslation( + "gui", "crafter.name_cannot_be_changed_because_of_chaining" + ); private static final ResourceLocation CRAFTER_NAME_BACKGROUND = createIdentifier("widget/crafter_name"); private static final List CRAFTER_NAME_HISTORY = new ArrayList<>(); @@ -55,7 +58,7 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int @Override public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { - if (!editName && isHovering( + if (!editName && getMenu().canChangeName() && isHovering( titleLabelX, titleLabelY, titleMarquee.getEffectiveWidth(font), font.lineHeight, mouseX, mouseY )) { setEditName(true); @@ -90,7 +93,10 @@ protected void init() { private void setEditName(final boolean editName) { this.editName = editName; - this.titleMarquee.setTooltip(editName ? null : CLICK_TO_EDIT_NAME); + final Component helpTooltip = getMenu().canChangeName() + ? CLICK_TO_EDIT_NAME + : NAME_CANNOT_BE_CHANGED_BECAUSE_OF_CHAINING; + this.titleMarquee.setTooltip(editName ? null : helpTooltip); if (nameField != null) { nameField.visible = editName; nameField.setFocused(editName); @@ -117,6 +123,15 @@ protected void renderLabels(final GuiGraphics graphics, final int mouseX, final renderPlayerInventoryTitle(graphics); } else { super.renderLabels(graphics, mouseX, mouseY); + if (getMenu().canChangeName()) { + titleMarquee.renderTooltipHighlight( + graphics, + titleLabelX, + titleLabelY, + font, + isHoveringOverTitle(mouseX, mouseY) + ); + } } } @@ -128,15 +143,13 @@ public boolean charTyped(final char unknown1, final int unknown2) { @Override public boolean keyPressed(final int key, final int scanCode, final int modifiers) { - if (nameField != null - && (key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) - && nameField.isFocused()) { - getMenu().changeName(nameField.getValue()); - setEditName(false); - return true; - } - if (nameField != null && editName && nameField.keyPressed(key, scanCode, modifiers)) { - return true; + if (nameField != null && editName) { + if ((key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) && nameField.isFocused()) { + getMenu().changeName(nameField.getValue()); + setEditName(false); + return true; + } + return nameField.keyPressed(key, scanCode, modifiers); } return super.keyPressed(key, scanCode, modifiers); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java index 584ff3ea1..6176e43b4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridBlockEntity.java @@ -214,7 +214,7 @@ void setPatternType(final PatternType patternType) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.PATTERN_GRID); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java index fcc374be0..4a8272858 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java @@ -187,7 +187,7 @@ void setDropItems(final boolean dropItems) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.CONSTRUCTOR); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java index 35f13e2cf..6a8cb2814 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java @@ -159,7 +159,7 @@ public StreamEncoder getMenuCode } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.DESTRUCTOR); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java index bfa894b20..b0901d985 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/controller/ControllerBlockEntity.java @@ -19,7 +19,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.codec.StreamEncoder; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -95,8 +94,8 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr } @Override - public Component getDisplayName() { - final MutableComponent defaultName = type == ControllerType.CREATIVE + public Component getName() { + final Component defaultName = type == ControllerType.CREATIVE ? ContentNames.CREATIVE_CONTROLLER : ContentNames.CONTROLLER; return overrideName(defaultName); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java index ffc9e8b8b..2ec523324 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java @@ -150,7 +150,7 @@ public StreamEncoder getMenuCodec() { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.DETECTOR); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java index 7dee5fa5a..437f5f4b9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java @@ -176,7 +176,7 @@ public final NonNullList getDrops() { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.EXPORTER); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java index 2ec992a19..6b83eae94 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridBlockEntity.java @@ -74,7 +74,7 @@ public StreamEncoder getMenuCodec() { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.CRAFTING_GRID); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java index 492b7acaf..152477c73 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridBlockEntity.java @@ -31,7 +31,7 @@ public StreamEncoder getMenuCodec() { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.GRID); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java index 3f6d77d5e..3817a7da2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java @@ -172,7 +172,7 @@ public StreamEncoder getMenuCodec() { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.INTERFACE); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java index d1189d824..66962b3d7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java @@ -176,7 +176,7 @@ public StreamEncoder getMenuCode } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.IMPORTER); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java index c9713d97b..b21d0069c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/AbstractCableBlockEntity.java @@ -3,9 +3,11 @@ import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.AbstractCableLikeBlockEntity; import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.state.BlockState; public abstract class AbstractCableBlockEntity extends AbstractCableLikeBlockEntity { @@ -13,4 +15,9 @@ protected AbstractCableBlockEntity(final BlockPos pos, final BlockState state) { super(BlockEntities.INSTANCE.getCable(), pos, state, new SimpleNetworkNode( Platform.INSTANCE.getConfig().getCable().getEnergyUsage())); } + + @Override + public Component getName() { + return overrideName(ContentNames.CABLE); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java index aa2baaacd..aad958734 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkReceiverBlockEntity.java @@ -5,11 +5,13 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; import com.refinedmods.refinedstorage.common.content.BlockEntities; +import com.refinedmods.refinedstorage.common.content.ContentNames; import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import net.minecraft.core.BlockPos; import net.minecraft.core.GlobalPos; +import net.minecraft.network.chat.Component; import net.minecraft.world.level.block.state.BlockState; import static java.util.Objects.requireNonNull; @@ -40,4 +42,9 @@ protected boolean hasRedstoneMode() { private NetworkReceiverKey createKey() { return new NetworkReceiverKey(GlobalPos.of(requireNonNull(level).dimension(), getBlockPos())); } + + @Override + public Component getName() { + return overrideName(ContentNames.NETWORK_RECEIVER); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java index 91e2ec676..c61345e41 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/NetworkTransmitterBlockEntity.java @@ -207,7 +207,7 @@ public StreamEncoder getMenuCod } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.NETWORK_TRANSMITTER); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java index 4d3765131..7285521de 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java @@ -202,7 +202,7 @@ public StreamEncoder getMenuCode } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.RELAY); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 7377e4b9a..8384ebe92 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -84,7 +84,7 @@ public boolean addUpgradeItem(final Item upgradeItem) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.WIRELESS_TRANSMITTER); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java index e65782cee..3eb898c97 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/security/SecurityManagerBlockEntity.java @@ -162,7 +162,7 @@ static boolean isValidFallbackSecurityCard(final ItemStack stack) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.SECURITY_MANAGER); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java index 7c26333ca..a4da33732 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskdrive/AbstractDiskDriveBlockEntity.java @@ -63,7 +63,7 @@ public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provide } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.DISK_DRIVE); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 9786157ac..3329c13b1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -119,7 +119,7 @@ public boolean addUpgradeItem(final Item upgradeItem) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.DISK_INTERFACE); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java index b1a228edf..1a1b0778c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java @@ -156,7 +156,7 @@ public StreamEncoder getMenuCode } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.EXTERNAL_STORAGE); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java index 183854b76..6e66013db 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/FluidStorageBlockBlockEntity.java @@ -54,7 +54,7 @@ protected SerializableStorage createStorage(final Runnable listener) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(displayName); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java index 2cf52d062..8073f8831 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/storageblock/ItemStorageBlockBlockEntity.java @@ -50,7 +50,7 @@ protected SerializableStorage createStorage(final Runnable listener) { } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(displayName); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index d4ce51073..8b8925d9c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -294,7 +294,7 @@ public StreamEncoder getMenuCode } @Override - public Component getDisplayName() { + public Component getName() { return overrideName(ContentNames.STORAGE_MONITOR); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java index 46b8858ae..9b354cc12 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java @@ -122,7 +122,7 @@ protected void renderLabels(final GuiGraphics graphics, final int mouseX, final renderPlayerInventoryTitle(graphics); } - private boolean isHoveringOverTitle(final int mouseX, final int mouseY) { + protected final boolean isHoveringOverTitle(final int mouseX, final int mouseY) { return isHovering( titleLabelX, titleLabelY, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java index ad54d207b..26a995eb1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java @@ -27,6 +27,7 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.Nameable; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; @@ -40,7 +41,7 @@ public abstract class AbstractBaseNetworkNodeContainerBlockEntity extends AbstractNetworkNodeContainerBlockEntity - implements NetworkItemTargetBlockEntity, ConfigurationCardTarget, PlayerAwareBlockEntity { + implements NetworkItemTargetBlockEntity, ConfigurationCardTarget, PlayerAwareBlockEntity, Nameable { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractBaseNetworkNodeContainerBlockEntity.class); private static final String TAG_CUSTOM_NAME = "CustomName"; private static final String TAG_PLACED_BY_PLAYER_ID = "pbpid"; @@ -51,7 +52,7 @@ public abstract class AbstractBaseNetworkNodeContainerBlockEntity Date: Tue, 27 Aug 2024 18:42:18 +0200 Subject: [PATCH 23/83] feat: crafter lock mode --- .../autocrafting/CrafterBlockEntity.java | 44 ++++++++- .../autocrafting/CrafterContainerMenu.java | 8 +- .../autocrafting/CrafterPropertyTypes.java | 16 ++++ .../common/autocrafting/CrafterScreen.java | 22 +++-- .../common/autocrafting/LockMode.java | 21 +++++ .../common/autocrafting/LockModeSettings.java | 35 +++++++ .../LockModeSideButtonWidget.java | 89 ++++++++++++++++++ .../assets/refinedstorage/lang/en_us.json | 7 ++ .../lock_until_all_outputs_are_received.png | Bin 0 -> 201 bytes .../lock_until_connected_machine_is_empty.png | Bin 0 -> 207 bytes .../lock_until_high_redstone_signal.png | Bin 0 -> 265 bytes .../lock_until_low_redstone_signal.png | Bin 0 -> 261 bytes .../lock_until_redstone_pulse_is_received.png | Bin 0 -> 316 bytes .../side_button/crafter_lock_mode/never.png | Bin 0 -> 174 bytes 14 files changed, 231 insertions(+), 11 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockMode.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSettings.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/never.png diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index d4cbd7ef4..14cede386 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -16,6 +16,7 @@ import com.refinedmods.refinedstorage.common.upgrade.UpgradeDestinations; import com.refinedmods.refinedstorage.common.util.ContainerUtil; +import java.util.List; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; @@ -30,6 +31,7 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; @@ -44,12 +46,14 @@ public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEnt private static final int MAX_CHAINED_CRAFTERS = 8; private static final String TAG_UPGRADES = "upgr"; private static final String TAG_PATTERNS = "patterns"; + private static final String TAG_LOCK_MODE = "lm"; private final FilteredContainer patternContainer = new FilteredContainer( PATTERNS, stack -> level != null && isValidPattern(stack, level) ); private final UpgradeContainer upgradeContainer; + private LockMode lockMode = LockMode.NEVER; public CrafterBlockEntity(final BlockPos pos, final BlockState state) { super( @@ -119,7 +123,7 @@ public Component getName() { if (root == this) { return doGetName(); } - return root.getDisplayName(); + return root.getName(); } private Component doGetName() { @@ -160,6 +164,12 @@ public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider pr tag.put(TAG_UPGRADES, ContainerUtil.write(upgradeContainer, provider)); } + @Override + public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { + super.writeConfiguration(tag, provider); + tag.putInt(TAG_LOCK_MODE, LockModeSettings.getLockMode(lockMode)); + } + @Override public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider provider) { if (tag.contains(TAG_PATTERNS)) { @@ -171,6 +181,29 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr super.loadAdditional(tag, provider); } + @Override + public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { + super.readConfiguration(tag, provider); + if (tag.contains(TAG_LOCK_MODE)) { + lockMode = LockModeSettings.getLockMode(tag.getInt(TAG_LOCK_MODE)); + } + } + + @Override + protected boolean hasRedstoneMode() { + return false; + } + + @Override + public List getUpgradeItems() { + return upgradeContainer.getUpgradeItems(); + } + + @Override + public boolean addUpgradeItem(final Item upgradeItem) { + return upgradeContainer.addUpgradeItem(upgradeItem); + } + @Override public NonNullList getDrops() { final NonNullList drops = NonNullList.create(); @@ -189,6 +222,15 @@ void setCustomName(final String name) { setChanged(); } + LockMode getLockMode() { + return lockMode; + } + + void setLockMode(final LockMode lockMode) { + this.lockMode = lockMode; + setChanged(); + } + @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java index c77d3b159..e624c99f7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -44,7 +44,7 @@ public class CrafterContainerMenu extends AbstractBaseContainerMenu { public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterData data) { super(Menus.INSTANCE.getCrafter(), syncId); this.player = playerInventory.player; - registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); + registerProperty(new ClientProperty<>(CrafterPropertyTypes.LOCK_MODE, LockMode.NEVER)); addSlots( new FilteredContainer(PATTERNS, stack -> isValidPattern(stack, playerInventory.player.level())), new UpgradeContainer(UpgradeDestinations.CRAFTER) @@ -60,9 +60,9 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f this.name = crafter.getDisplayName(); this.chained = false; registerProperty(new ServerProperty<>( - PropertyTypes.REDSTONE_MODE, - crafter::getRedstoneMode, - crafter::setRedstoneMode + CrafterPropertyTypes.LOCK_MODE, + crafter::getLockMode, + crafter::setLockMode )); addSlots(crafter.getPatternContainer(), crafter.getUpgradeContainer()); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java new file mode 100644 index 000000000..36ebe7cd2 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.support.containermenu.PropertyType; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +final class CrafterPropertyTypes { + static final PropertyType LOCK_MODE = new PropertyType<>( + createIdentifier("lock_mode"), + LockModeSettings::getLockMode, + LockModeSettings::getLockMode + ); + + private CrafterPropertyTypes() { + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java index d6473a554..e1962eac2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -3,9 +3,7 @@ import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage.common.support.AbstractFilterScreen; -import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage.common.support.widget.History; -import com.refinedmods.refinedstorage.common.support.widget.RedstoneModeSideButtonWidget; import com.refinedmods.refinedstorage.common.support.widget.SearchFieldWidget; import com.refinedmods.refinedstorage.common.support.widget.TextMarquee; @@ -24,6 +22,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationAsHeading; +import static java.util.Objects.requireNonNull; public class CrafterScreen extends AbstractBaseScreen { private static final ClientTooltipComponent EMPTY_PATTERN_SLOT = ClientTooltipComponent.create( @@ -76,7 +75,7 @@ protected void init() { nameField.setValue(name.getString()); } }); - addSideButton(new RedstoneModeSideButtonWidget(getMenu().getProperty(PropertyTypes.REDSTONE_MODE))); + addSideButton(new LockModeSideButtonWidget(getMenu().getProperty(CrafterPropertyTypes.LOCK_MODE))); nameField = new SearchFieldWidget( font, leftPos + 8 + 1, @@ -144,9 +143,7 @@ public boolean charTyped(final char unknown1, final int unknown2) { @Override public boolean keyPressed(final int key, final int scanCode, final int modifiers) { if (nameField != null && editName) { - if ((key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) && nameField.isFocused()) { - getMenu().changeName(nameField.getValue()); - setEditName(false); + if (nameField.isFocused() && saveOrCancel(key)) { return true; } return nameField.keyPressed(key, scanCode, modifiers); @@ -154,6 +151,19 @@ public boolean keyPressed(final int key, final int scanCode, final int modifiers return super.keyPressed(key, scanCode, modifiers); } + private boolean saveOrCancel(final int key) { + if ((key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER)) { + getMenu().changeName(requireNonNull(nameField).getValue()); + setEditName(false); + return true; + } else if (key == GLFW.GLFW_KEY_ESCAPE) { + setEditName(false); + requireNonNull(nameField).setValue(titleMarquee.getText().getString()); + return true; + } + return false; + } + @Override protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { if (hoveredSlot instanceof PatternSlot patternSlot diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockMode.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockMode.java new file mode 100644 index 000000000..85bc748d5 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockMode.java @@ -0,0 +1,21 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +public enum LockMode { + NEVER, + LOCK_UNTIL_REDSTONE_PULSE_RECEIVED, + LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY, + LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED, + LOCK_UNTIL_HIGH_REDSTONE_SIGNAL, + LOCK_UNTIL_LOW_REDSTONE_SIGNAL; + + LockMode toggle() { + return switch (this) { + case NEVER -> LOCK_UNTIL_REDSTONE_PULSE_RECEIVED; + case LOCK_UNTIL_REDSTONE_PULSE_RECEIVED -> LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY; + case LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY -> LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED; + case LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED -> LOCK_UNTIL_HIGH_REDSTONE_SIGNAL; + case LOCK_UNTIL_HIGH_REDSTONE_SIGNAL -> LOCK_UNTIL_LOW_REDSTONE_SIGNAL; + case LOCK_UNTIL_LOW_REDSTONE_SIGNAL -> NEVER; + }; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSettings.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSettings.java new file mode 100644 index 000000000..0b9c8518b --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSettings.java @@ -0,0 +1,35 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +class LockModeSettings { + private static final int NEVER = 0; + private static final int LOCK_UNTIL_REDSTONE_PULSE_RECEIVED = 1; + private static final int LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY = 2; + private static final int LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED = 3; + private static final int LOCK_UNTIL_HIGH_REDSTONE_SIGNAL = 4; + private static final int LOCK_UNTIL_LOW_REDSTONE_SIGNAL = 5; + + private LockModeSettings() { + } + + static LockMode getLockMode(final int lockMode) { + return switch (lockMode) { + case LOCK_UNTIL_REDSTONE_PULSE_RECEIVED -> LockMode.LOCK_UNTIL_REDSTONE_PULSE_RECEIVED; + case LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY -> LockMode.LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY; + case LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED -> LockMode.LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED; + case LOCK_UNTIL_HIGH_REDSTONE_SIGNAL -> LockMode.LOCK_UNTIL_HIGH_REDSTONE_SIGNAL; + case LOCK_UNTIL_LOW_REDSTONE_SIGNAL -> LockMode.LOCK_UNTIL_LOW_REDSTONE_SIGNAL; + default -> LockMode.NEVER; + }; + } + + static int getLockMode(final LockMode lockMode) { + return switch (lockMode) { + case LOCK_UNTIL_REDSTONE_PULSE_RECEIVED -> LOCK_UNTIL_REDSTONE_PULSE_RECEIVED; + case LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY -> LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY; + case LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED -> LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED; + case LOCK_UNTIL_HIGH_REDSTONE_SIGNAL -> LOCK_UNTIL_HIGH_REDSTONE_SIGNAL; + case LOCK_UNTIL_LOW_REDSTONE_SIGNAL -> LOCK_UNTIL_LOW_REDSTONE_SIGNAL; + default -> NEVER; + }; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java new file mode 100644 index 000000000..7d038d4d0 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java @@ -0,0 +1,89 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; +import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceLocation; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + +class LockModeSideButtonWidget extends AbstractSideButtonWidget { + private static final String PREFIX = "crafter.lock_mode"; + + private static final MutableComponent TITLE = createTranslation("gui", PREFIX); + private static final ResourceLocation NEVER = createIdentifier("widget/side_button/crafter_lock_mode/never"); + private static final ResourceLocation LOCK_UNTIL_REDSTONE_PULSE_RECEIVED = createIdentifier( + "widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received" + ); + private static final ResourceLocation LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY = createIdentifier( + "widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty" + ); + private static final ResourceLocation LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED = createIdentifier( + "widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received" + ); + private static final ResourceLocation LOCK_UNTIL_HIGH_REDSTONE_SIGNAL = createIdentifier( + "widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal" + ); + private static final ResourceLocation LOCK_UNTIL_LOW_REDSTONE_SIGNAL = createIdentifier( + "widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal" + ); + + private static final MutableComponent NEVER_TITLE = createTranslation("gui", PREFIX + ".never"); + private static final MutableComponent LOCK_UNTIL_REDSTONE_PULSE_RECEIVED_TITLE = createTranslation( + "gui", PREFIX + ".lock_until_redstone_pulse_received" + ); + private static final MutableComponent LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY_TITLE = createTranslation( + "gui", PREFIX + ".lock_until_connected_machine_is_empty" + ); + private static final MutableComponent LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED_TITLE = createTranslation( + "gui", PREFIX + ".lock_until_all_outputs_are_received" + ); + private static final MutableComponent LOCK_UNTIL_HIGH_REDSTONE_SIGNAL_TITLE = createTranslation( + "gui", PREFIX + ".lock_until_high_redstone_signal" + ); + private static final MutableComponent LOCK_UNTIL_LOW_REDSTONE_SIGNAL_TITLE = createTranslation( + "gui", PREFIX + ".lock_until_low_redstone_signal" + ); + + private final ClientProperty property; + + LockModeSideButtonWidget(final ClientProperty property) { + super(createPressAction(property)); + this.property = property; + } + + private static OnPress createPressAction(final ClientProperty property) { + return btn -> property.setValue(property.getValue().toggle()); + } + + @Override + protected ResourceLocation getSprite() { + return switch (property.getValue()) { + case NEVER -> NEVER; + case LOCK_UNTIL_REDSTONE_PULSE_RECEIVED -> LOCK_UNTIL_REDSTONE_PULSE_RECEIVED; + case LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY -> LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY; + case LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED -> LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED; + case LOCK_UNTIL_HIGH_REDSTONE_SIGNAL -> LOCK_UNTIL_HIGH_REDSTONE_SIGNAL; + case LOCK_UNTIL_LOW_REDSTONE_SIGNAL -> LOCK_UNTIL_LOW_REDSTONE_SIGNAL; + }; + } + + @Override + protected MutableComponent getTitle() { + return TITLE; + } + + @Override + protected MutableComponent getSubText() { + return switch (property.getValue()) { + case NEVER -> NEVER_TITLE; + case LOCK_UNTIL_REDSTONE_PULSE_RECEIVED -> LOCK_UNTIL_REDSTONE_PULSE_RECEIVED_TITLE; + case LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY -> LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY_TITLE; + case LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED -> LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED_TITLE; + case LOCK_UNTIL_HIGH_REDSTONE_SIGNAL -> LOCK_UNTIL_HIGH_REDSTONE_SIGNAL_TITLE; + case LOCK_UNTIL_LOW_REDSTONE_SIGNAL -> LOCK_UNTIL_LOW_REDSTONE_SIGNAL_TITLE; + }; + } +} diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 5e1d9cdcb..15b9527f7 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -185,6 +185,13 @@ "gui.refinedstorage.crafter.empty_pattern_slot": "Empty pattern slot", "gui.refinedstorage.crafter.click_to_edit_name": "Click to edit name", "gui.refinedstorage.crafter.name_cannot_be_changed_because_of_chaining": "The name cannot be changed because this crafter is part of a chain.", + "gui.refinedstorage.crafter.lock_mode": "Lock mode", + "gui.refinedstorage.crafter.lock_mode.never": "Never", + "gui.refinedstorage.crafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.crafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.crafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.crafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.crafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ccac38a31e7f65ce413c05bd65b773c3297b36 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0G|+7D=Vw=@^T=rJHCGzkYX+g@(cd|pW*r`UZ7eA&H|6fVg?4j!ywFf zJby(BP|(WL#W6%9cxsQM5Q72-)4~7tQNo`tEWOqI;GD*z2eApK&iOMMA9CB8E^Xdg oH$iOM)=N$sW=uXBDu?f1tyfu=Bcy85}Sb4q9e0Di|kH~;_u literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..93ed504fd0bc7efb568ac83af6fc285a15846284 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0G|+7D=Vw=@^T=rJHCGzkYX+g@(cd|pW*r`UZ7eA&H|6fVg?4j!ywFf zJby(BP|(5C#W6%9IJf7dAcF!2Gv{CNTsGdON$hWQ+J8=Vj3{pou)G=5W59otdG!i* tsrWad0-FRKR0aJHJ~^hXG(X{v_%{W{gA(kKazL{fJYD@<);T3K0RYf0INSgL literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..089bb95471e681f3015af709b82e9548cbe607ef GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaGs}&V~B-+vc$6o`pk#x1=@-{nH75f=Q9-A z&unYp{b4WL@jv)k*ViXmY>g+6>iy6ClKMgF0L#*iOloRsY-VO=8vND=vKhq1#SibV z|G&WIO#`b}GOK;vpM)QupYu;)XMFnfse!&>Sy|bm@`J6n^(7@FB^TQ4NSnaG(ad`& zyJ6uh7Bl?@lS9m6>lr0wZ%g*aRdp3Gi8Wkjuwr0iV@OZ1`T5c|em&5o44$rjF6*2U FngD2SSd#z% literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..3843bfa59e4fa94c80dfc2255142c61d0f86b0a7 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!C9Uzjv*HQ$r7wT99fhf*9){2ZDdl@=oOCn z(I0MK$81tlD#c0jM%E4xpU|Kh%I>d&6~~5%}s-UoumrGp@ilSQVA>6 z8qabo^nTcJG~2=Lc-gVV)8{G8X<&U|+Q8S)$jBhqs9d$E<@qk4D;Ydp{an^LB{Ts5 Df4E#k literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received.png new file mode 100644 index 0000000000000000000000000000000000000000..661339f9319a6985a0a64093fa3405e30def9ce4 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|y0G|-ozYGi?85sWGVEEt9a39F{KmGsz{|^}$)-y0%Vqmz;z%aSk#YSId zYN?x(snY!V00(1*>E#~f<>l!?hPDQ>Gb%i-^`wD@eTv<43rIlBSEK+1BRyRlLo|Y0PqFhg7;vx#+*!TO>fhgdEsZN#Nq;gW z^#$U7Hf*+YpCqrqxKz@0LUWf Date: Tue, 27 Aug 2024 19:08:17 +0200 Subject: [PATCH 24/83] feat: crafter priority --- .../autocrafting/CrafterBlockEntity.java | 15 ++++++++++ .../autocrafting/CrafterContainerMenu.java | 8 +++-- .../autocrafting/CrafterPropertyTypes.java | 5 ++++ .../common/autocrafting/CrafterScreen.java | 9 ++++++ .../common/networking/RelayScreen.java | 4 +-- .../common/storage/AbstractStorageScreen.java | 3 +- .../widget}/PrioritySideButtonWidget.java | 29 ++++++++++++++----- .../assets/refinedstorage/lang/en_us.json | 3 +- 8 files changed, 63 insertions(+), 13 deletions(-) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/{storage => support/widget}/PrioritySideButtonWidget.java (56%) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index 14cede386..6d9c1765e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -47,6 +47,7 @@ public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEnt private static final String TAG_UPGRADES = "upgr"; private static final String TAG_PATTERNS = "patterns"; private static final String TAG_LOCK_MODE = "lm"; + private static final String TAG_PRIORITY = "pri"; private final FilteredContainer patternContainer = new FilteredContainer( PATTERNS, @@ -54,6 +55,7 @@ public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEnt ); private final UpgradeContainer upgradeContainer; private LockMode lockMode = LockMode.NEVER; + private int priority; public CrafterBlockEntity(final BlockPos pos, final BlockState state) { super( @@ -168,6 +170,7 @@ public void saveAdditional(final CompoundTag tag, final HolderLookup.Provider pr public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provider provider) { super.writeConfiguration(tag, provider); tag.putInt(TAG_LOCK_MODE, LockModeSettings.getLockMode(lockMode)); + tag.putInt(TAG_PRIORITY, priority); } @Override @@ -187,6 +190,9 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider if (tag.contains(TAG_LOCK_MODE)) { lockMode = LockModeSettings.getLockMode(tag.getInt(TAG_LOCK_MODE)); } + if (tag.contains(TAG_PRIORITY)) { + priority = tag.getInt(TAG_PRIORITY); + } } @Override @@ -231,6 +237,15 @@ void setLockMode(final LockMode lockMode) { setChanged(); } + int getPriority() { + return priority; + } + + void setPriority(final int priority) { + this.priority = priority; + setChanged(); + } + @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java index e624c99f7..05e1adfb1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -3,9 +3,7 @@ import com.refinedmods.refinedstorage.common.content.Menus; import com.refinedmods.refinedstorage.common.support.AbstractBaseContainerMenu; import com.refinedmods.refinedstorage.common.support.FilteredContainer; -import com.refinedmods.refinedstorage.common.support.RedstoneMode; import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; -import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage.common.support.containermenu.ServerProperty; import com.refinedmods.refinedstorage.common.support.packet.c2s.C2SPackets; import com.refinedmods.refinedstorage.common.support.packet.s2c.S2CPackets; @@ -45,6 +43,7 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f super(Menus.INSTANCE.getCrafter(), syncId); this.player = playerInventory.player; registerProperty(new ClientProperty<>(CrafterPropertyTypes.LOCK_MODE, LockMode.NEVER)); + registerProperty(new ClientProperty<>(CrafterPropertyTypes.PRIORITY, 0)); addSlots( new FilteredContainer(PATTERNS, stack -> isValidPattern(stack, playerInventory.player.level())), new UpgradeContainer(UpgradeDestinations.CRAFTER) @@ -64,6 +63,11 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f crafter::getLockMode, crafter::setLockMode )); + registerProperty(new ServerProperty<>( + CrafterPropertyTypes.PRIORITY, + crafter::getPriority, + crafter::setPriority + )); addSlots(crafter.getPatternContainer(), crafter.getUpgradeContainer()); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java index 36ebe7cd2..bb60a91e1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting; import com.refinedmods.refinedstorage.common.support.containermenu.PropertyType; +import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; @@ -11,6 +12,10 @@ final class CrafterPropertyTypes { LockModeSettings::getLockMode ); + static final PropertyType PRIORITY = PropertyTypes.createIntegerProperty( + createIdentifier("crafter_priority") + ); + private CrafterPropertyTypes() { } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java index e1962eac2..7a4735a42 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage.common.support.AbstractFilterScreen; import com.refinedmods.refinedstorage.common.support.widget.History; +import com.refinedmods.refinedstorage.common.support.widget.PrioritySideButtonWidget; import com.refinedmods.refinedstorage.common.support.widget.SearchFieldWidget; import com.refinedmods.refinedstorage.common.support.widget.TextMarquee; @@ -36,6 +37,8 @@ public class CrafterScreen extends AbstractBaseScreen { private static final ResourceLocation CRAFTER_NAME_BACKGROUND = createIdentifier("widget/crafter_name"); private static final List CRAFTER_NAME_HISTORY = new ArrayList<>(); + private final Inventory playerInventory; + @Nullable private EditBox nameField; private boolean editName; @@ -45,6 +48,7 @@ public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInve this.inventoryLabelY = 42; this.imageWidth = 210; this.imageHeight = 137; + this.playerInventory = playerInventory; } @Override @@ -76,6 +80,11 @@ protected void init() { } }); addSideButton(new LockModeSideButtonWidget(getMenu().getProperty(CrafterPropertyTypes.LOCK_MODE))); + addSideButton(PrioritySideButtonWidget.forCrafter( + getMenu().getProperty(CrafterPropertyTypes.PRIORITY), + playerInventory, + this + )); nameField = new SearchFieldWidget( font, leftPos + 8 + 1, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java index c27bd88bd..18dc2aa37 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java @@ -2,12 +2,12 @@ import com.refinedmods.refinedstorage.common.storage.AccessModeSideButtonWidget; import com.refinedmods.refinedstorage.common.storage.FilterModeSideButtonWidget; -import com.refinedmods.refinedstorage.common.storage.PrioritySideButtonWidget; import com.refinedmods.refinedstorage.common.storage.StoragePropertyTypes; import com.refinedmods.refinedstorage.common.support.AbstractFilterScreen; import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget; import com.refinedmods.refinedstorage.common.support.widget.FuzzyModeSideButtonWidget; +import com.refinedmods.refinedstorage.common.support.widget.PrioritySideButtonWidget; import javax.annotation.Nullable; @@ -103,7 +103,7 @@ private void addStorageButtons(final boolean visible) { accessModeButton.visible = visible; addSideButton(accessModeButton); - priorityButton = new PrioritySideButtonWidget( + priorityButton = PrioritySideButtonWidget.forStorage( getMenu().getProperty(StoragePropertyTypes.PRIORITY), playerInventory, this diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractStorageScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractStorageScreen.java index 6b5fa984d..f45e3fd1d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractStorageScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/AbstractStorageScreen.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; import com.refinedmods.refinedstorage.common.support.widget.FuzzyModeSideButtonWidget; +import com.refinedmods.refinedstorage.common.support.widget.PrioritySideButtonWidget; import com.refinedmods.refinedstorage.common.support.widget.RedstoneModeSideButtonWidget; import javax.annotation.Nullable; @@ -47,7 +48,7 @@ protected void init() { () -> FuzzyModeSideButtonWidget.Type.STORAGE )); addSideButton(new AccessModeSideButtonWidget(getMenu().getProperty(StoragePropertyTypes.ACCESS_MODE))); - addSideButton(new PrioritySideButtonWidget( + addSideButton(PrioritySideButtonWidget.forStorage( getMenu().getProperty(StoragePropertyTypes.PRIORITY), playerInventory, this diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/PrioritySideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/PrioritySideButtonWidget.java similarity index 56% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/PrioritySideButtonWidget.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/PrioritySideButtonWidget.java index f55e3874e..494b76bef 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/PrioritySideButtonWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/PrioritySideButtonWidget.java @@ -1,8 +1,7 @@ -package com.refinedmods.refinedstorage.common.storage; +package com.refinedmods.refinedstorage.common.support.widget; import com.refinedmods.refinedstorage.common.support.amount.PriorityScreen; import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; -import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; @@ -16,16 +15,32 @@ public class PrioritySideButtonWidget extends AbstractSideButtonWidget { private static final MutableComponent TITLE = createTranslation("gui", "priority"); - private static final Component HELP = createTranslation("gui", "priority.storage_help"); + private static final Component STORAGE_HELP = createTranslation("gui", "priority.storage_help"); + private static final Component CRAFTER_HELP = createTranslation("gui", "priority.crafter_help"); private static final ResourceLocation SPRITE = createIdentifier("widget/side_button/priority"); private final ClientProperty property; + private final Component helpText; - public PrioritySideButtonWidget(final ClientProperty property, - final Inventory playerInventory, - final Screen parent) { + private PrioritySideButtonWidget(final ClientProperty property, + final Inventory playerInventory, + final Screen parent, + final Component helpText) { super(createPressAction(property, playerInventory, parent)); this.property = property; + this.helpText = helpText; + } + + public static PrioritySideButtonWidget forStorage(final ClientProperty property, + final Inventory playerInventory, + final Screen parent) { + return new PrioritySideButtonWidget(property, playerInventory, parent, STORAGE_HELP); + } + + public static PrioritySideButtonWidget forCrafter(final ClientProperty property, + final Inventory playerInventory, + final Screen parent) { + return new PrioritySideButtonWidget(property, playerInventory, parent, CRAFTER_HELP); } private static OnPress createPressAction(final ClientProperty property, @@ -51,6 +66,6 @@ protected MutableComponent getSubText() { @Override protected Component getHelpText() { - return HELP; + return helpText; } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 15b9527f7..f72ec8435 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -117,6 +117,7 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Crafter with the highest priority.", "gui.refinedstorage.configure_amount": "Configure amount", "gui.refinedstorage.configure_amount.reset": "Reset", "gui.refinedstorage.configure_amount.set": "Set", @@ -290,7 +291,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", From a7f7ac788ea08e3aa6627eb09ea8d048cf95b768 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 29 Aug 2024 17:16:11 +0200 Subject: [PATCH 25/83] feat: crafter now indicates whether it is chained If it's the head, part or not chained. Indicating the head is important because you can change the name if head, but not if part. --- .../autocrafting/CrafterBlockEntity.java | 28 ++++++- .../autocrafting/CrafterContainerMenu.java | 21 +++-- .../common/autocrafting/CrafterData.java | 9 ++- .../common/autocrafting/CrafterScreen.java | 80 +++++++++++++------ .../tooltip/HelpClientTooltipComponent.java | 6 +- .../assets/refinedstorage/lang/en_us.json | 6 +- 6 files changed, 114 insertions(+), 36 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index 6d9c1765e..557f17485 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -86,10 +86,32 @@ UpgradeContainer getUpgradeContainer() { return upgradeContainer; } - private boolean isChained() { + private boolean isPartOfChain() { return getChainingRoot() != this; } + // if there is another crafter next to us, that is pointing in our direction, + // and we are not part of a chain, we are the head of the chain + private boolean isHeadOfChain() { + if (level == null || isPartOfChain()) { + return false; + } + for (final Direction direction : Direction.values()) { + final BlockPos pos = getBlockPos().relative(direction); + if (!level.isLoaded(pos)) { + continue; + } + final BlockEntity neighbor = level.getBlockEntity(pos); + if (neighbor instanceof CrafterBlockEntity neighborCrafter) { + final Direction neighborDirection = tryExtractDirection(neighborCrafter.getBlockState()); + if (neighborDirection == direction.getOpposite()) { + return true; + } + } + } + return false; + } + private CrafterBlockEntity getChainingRoot() { return getChainingRoot(0, this); } @@ -151,7 +173,7 @@ public AbstractContainerMenu createMenu(final int syncId, final Inventory invent @Override public CrafterData getMenuData() { - return new CrafterData(isChained()); + return new CrafterData(isPartOfChain(), isHeadOfChain()); } @Override @@ -221,7 +243,7 @@ public NonNullList getDrops() { } void setCustomName(final String name) { - if (isChained()) { + if (isPartOfChain()) { return; } setCustomName(name.trim().isBlank() ? null : Component.literal(name)); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java index 05e1adfb1..0a9e4cee6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -30,7 +30,8 @@ public class CrafterContainerMenu extends AbstractBaseContainerMenu { private static final int PATTERN_SLOT_Y = 20; private final Player player; - private final boolean chained; + private final boolean partOfChain; + private final boolean headOfChain; private final RateLimiter nameRateLimiter = RateLimiter.create(0.5); @Nullable @@ -49,7 +50,8 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f new UpgradeContainer(UpgradeDestinations.CRAFTER) ); this.name = Component.empty(); - this.chained = data.chained(); + this.partOfChain = data.partOfChain(); + this.headOfChain = data.headOfChain(); } public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterBlockEntity crafter) { @@ -57,7 +59,8 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f this.crafter = crafter; this.player = playerInventory.player; this.name = crafter.getDisplayName(); - this.chained = false; + this.partOfChain = false; + this.headOfChain = false; registerProperty(new ServerProperty<>( CrafterPropertyTypes.LOCK_MODE, crafter::getLockMode, @@ -72,7 +75,15 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f } boolean canChangeName() { - return !chained; + return !partOfChain; + } + + boolean isPartOfChain() { + return partOfChain; + } + + boolean isHeadOfChain() { + return headOfChain; } void setListener(@Nullable final Listener listener) { @@ -130,7 +141,7 @@ public boolean containsPattern(final ItemStack stack) { } public void changeName(final String newName) { - if (chained) { + if (partOfChain) { return; } if (crafter != null) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java index 0906ca3fc..b1cbf8cb6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java @@ -4,7 +4,10 @@ import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -public record CrafterData(boolean chained) { - public static final StreamCodec STREAM_CODEC = - StreamCodec.composite(ByteBufCodecs.BOOL, CrafterData::chained, CrafterData::new); +public record CrafterData(boolean partOfChain, boolean headOfChain) { + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL, CrafterData::partOfChain, + ByteBufCodecs.BOOL, CrafterData::headOfChain, + CrafterData::new + ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java index 7a4735a42..690c580a4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; import com.refinedmods.refinedstorage.common.support.AbstractFilterScreen; +import com.refinedmods.refinedstorage.common.support.tooltip.HelpClientTooltipComponent; import com.refinedmods.refinedstorage.common.support.widget.History; import com.refinedmods.refinedstorage.common.support.widget.PrioritySideButtonWidget; import com.refinedmods.refinedstorage.common.support.widget.SearchFieldWidget; @@ -12,9 +13,9 @@ import java.util.List; import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; @@ -26,13 +27,16 @@ import static java.util.Objects.requireNonNull; public class CrafterScreen extends AbstractBaseScreen { - private static final ClientTooltipComponent EMPTY_PATTERN_SLOT = ClientTooltipComponent.create( - createTranslationAsHeading("gui", "crafter.empty_pattern_slot").getVisualOrderText() + private static final Component EMPTY_PATTERN_SLOT = createTranslationAsHeading( + "gui", "crafter.empty_pattern_slot" ); private static final Component CLICK_TO_EDIT_NAME = createTranslation("gui", "crafter.click_to_edit_name"); - private static final Component NAME_CANNOT_BE_CHANGED_BECAUSE_OF_CHAINING = createTranslation( - "gui", "crafter.name_cannot_be_changed_because_of_chaining" - ); + + private static final Component CHAINED = createTranslation("gui", "crafter.chained"); + private static final Component CHAINED_HELP = createTranslation("gui", "crafter.chained.help"); + private static final Component CHAINED_HEAD_HELP = createTranslation("gui", "crafter.chained.head_help"); + private static final Component NOT_CHAINED = createTranslation("gui", "crafter.not_chained"); + private static final Component NOT_CHAINED_HELP = createTranslation("gui", "crafter.not_chained.help"); private static final ResourceLocation CRAFTER_NAME_BACKGROUND = createIdentifier("widget/crafter_name"); private static final List CRAFTER_NAME_HISTORY = new ArrayList<>(); @@ -44,13 +48,29 @@ public class CrafterScreen extends AbstractBaseScreen { private boolean editName; public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInventory, final Component title) { - super(menu, playerInventory, new TextMarquee(title, TITLE_MAX_WIDTH)); + super(menu, playerInventory, new TextMarquee(title, getTitleMaxWidth(menu))); this.inventoryLabelY = 42; this.imageWidth = 210; this.imageHeight = 137; this.playerInventory = playerInventory; } + private static int getTitleMaxWidth(final CrafterContainerMenu menu) { + final Component title = getChainingTitle(menu); + return TITLE_MAX_WIDTH - Minecraft.getInstance().font.width(title) - 10; + } + + private static Component getChainingTitle(final CrafterContainerMenu menu) { + return (menu.isPartOfChain() || menu.isHeadOfChain()) ? CHAINED : NOT_CHAINED; + } + + private Component getChainingTooltip() { + if (!getMenu().isPartOfChain() && !getMenu().isHeadOfChain()) { + return NOT_CHAINED_HELP; + } + return getMenu().isHeadOfChain() ? CHAINED_HEAD_HELP : CHAINED_HELP; + } + @Override protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { super.renderBg(graphics, delta, mouseX, mouseY); @@ -101,10 +121,7 @@ protected void init() { private void setEditName(final boolean editName) { this.editName = editName; - final Component helpTooltip = getMenu().canChangeName() - ? CLICK_TO_EDIT_NAME - : NAME_CANNOT_BE_CHANGED_BECAUSE_OF_CHAINING; - this.titleMarquee.setTooltip(editName ? null : helpTooltip); + this.titleMarquee.setTooltip(getMenu().canChangeName() ? CLICK_TO_EDIT_NAME : null); if (nameField != null) { nameField.visible = editName; nameField.setFocused(editName); @@ -129,18 +146,24 @@ public void render(final GuiGraphics graphics, final int mouseX, final int mouse protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { if (editName) { renderPlayerInventoryTitle(graphics); - } else { - super.renderLabels(graphics, mouseX, mouseY); - if (getMenu().canChangeName()) { - titleMarquee.renderTooltipHighlight( - graphics, - titleLabelX, - titleLabelY, - font, - isHoveringOverTitle(mouseX, mouseY) - ); - } + return; + } + super.renderLabels(graphics, mouseX, mouseY); + if (getMenu().canChangeName()) { + titleMarquee.renderTooltipHighlight( + graphics, + titleLabelX, + titleLabelY, + font, + isHoveringOverTitle(mouseX, mouseY) + ); } + final Component title = getChainingTitle(menu); + graphics.drawString(font, title, getChainingTitleX(title), titleLabelY, 4210752, false); + } + + private int getChainingTitleX(final Component title) { + return imageWidth - 41 - font.width(title); } @Override @@ -178,9 +201,20 @@ protected void renderTooltip(final GuiGraphics graphics, final int x, final int if (hoveredSlot instanceof PatternSlot patternSlot && !patternSlot.hasItem() && getMenu().getCarried().isEmpty()) { - Platform.INSTANCE.renderTooltip(graphics, List.of(EMPTY_PATTERN_SLOT), x, y); + graphics.renderTooltip(font, EMPTY_PATTERN_SLOT, x, y); return; } + final Component chainingTitle = getChainingTitle(getMenu()); + final int chainingTitleX = getChainingTitleX(chainingTitle); + if (isHovering(chainingTitleX, titleLabelY, font.width(chainingTitle), font.lineHeight, x, y)) { + final Component chainingTooltip = getChainingTooltip(); + Platform.INSTANCE.renderTooltip( + graphics, + List.of(HelpClientTooltipComponent.createAlwaysDisplayed(chainingTooltip)), + x, + y + ); + } super.renderTooltip(graphics, x, y); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java index 4fde25b56..8a61efc7d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java @@ -82,9 +82,13 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap public static ClientTooltipComponent create(final Component text) { if (hasShiftDown()) { - return new HelpClientTooltipComponent(text); + return createAlwaysDisplayed(text); } else { return PRESS_SHIFT_FOR_HELP; } } + + public static ClientTooltipComponent createAlwaysDisplayed(final Component text) { + return new HelpClientTooltipComponent(text); + } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index f72ec8435..f4f6620b5 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -185,7 +185,6 @@ "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", "gui.refinedstorage.crafter.empty_pattern_slot": "Empty pattern slot", "gui.refinedstorage.crafter.click_to_edit_name": "Click to edit name", - "gui.refinedstorage.crafter.name_cannot_be_changed_because_of_chaining": "The name cannot be changed because this crafter is part of a chain.", "gui.refinedstorage.crafter.lock_mode": "Lock mode", "gui.refinedstorage.crafter.lock_mode.never": "Never", "gui.refinedstorage.crafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", @@ -193,6 +192,11 @@ "gui.refinedstorage.crafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", "gui.refinedstorage.crafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", "gui.refinedstorage.crafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.crafter.chained": "Chained", + "gui.refinedstorage.crafter.chained.help": "This crafter is part of a chain.", + "gui.refinedstorage.crafter.chained.head_help": "This crafter is the head of the chain.", + "gui.refinedstorage.crafter.not_chained": "Not chained", + "gui.refinedstorage.crafter.not_chained.help": "You can connect multiple crafters together if you have more than 9 patterns to insert into a single target machine.", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", From c8236730ff3d9ed5c41a6c227932c7c4f21e292a Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 29 Aug 2024 17:47:38 +0200 Subject: [PATCH 26/83] feat: use edit button instead of title click --- .../common/autocrafting/CrafterScreen.java | 44 +++++++++++----- .../common/support/AbstractBaseScreen.java | 24 ++------- .../common/support/widget/TextMarquee.java | 51 +------------------ .../assets/refinedstorage/lang/en_us.json | 2 +- 4 files changed, 38 insertions(+), 83 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java index 690c580a4..e87e7a70d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java @@ -15,6 +15,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -30,13 +31,13 @@ public class CrafterScreen extends AbstractBaseScreen { private static final Component EMPTY_PATTERN_SLOT = createTranslationAsHeading( "gui", "crafter.empty_pattern_slot" ); - private static final Component CLICK_TO_EDIT_NAME = createTranslation("gui", "crafter.click_to_edit_name"); private static final Component CHAINED = createTranslation("gui", "crafter.chained"); private static final Component CHAINED_HELP = createTranslation("gui", "crafter.chained.help"); private static final Component CHAINED_HEAD_HELP = createTranslation("gui", "crafter.chained.head_help"); private static final Component NOT_CHAINED = createTranslation("gui", "crafter.not_chained"); private static final Component NOT_CHAINED_HELP = createTranslation("gui", "crafter.not_chained.help"); + private static final Component EDIT = createTranslation("gui", "crafter.edit_name"); private static final ResourceLocation CRAFTER_NAME_BACKGROUND = createIdentifier("widget/crafter_name"); private static final List CRAFTER_NAME_HISTORY = new ArrayList<>(); @@ -45,6 +46,8 @@ public class CrafterScreen extends AbstractBaseScreen { @Nullable private EditBox nameField; + @Nullable + private Button editButton; private boolean editName; public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInventory, final Component title) { @@ -56,8 +59,17 @@ public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInve } private static int getTitleMaxWidth(final CrafterContainerMenu menu) { - final Component title = getChainingTitle(menu); - return TITLE_MAX_WIDTH - Minecraft.getInstance().font.width(title) - 10; + final int chainingTitleWidth = Minecraft.getInstance().font.width(getChainingTitle(menu)); + final int editButtonWidth = getEditButtonWidth(); + return TITLE_MAX_WIDTH - chainingTitleWidth - editButtonWidth - 10; + } + + private int getEditButtonX() { + return leftPos + titleLabelX + titleMarquee.getEffectiveWidth(font) + 2; + } + + private static int getEditButtonWidth() { + return Minecraft.getInstance().font.width(EDIT) + 8; } private static Component getChainingTitle(final CrafterContainerMenu menu) { @@ -98,13 +110,18 @@ protected void init() { if (nameField != null) { nameField.setValue(name.getString()); } + if (editButton != null) { + editButton.setX(getEditButtonX()); + } }); + addSideButton(new LockModeSideButtonWidget(getMenu().getProperty(CrafterPropertyTypes.LOCK_MODE))); addSideButton(PrioritySideButtonWidget.forCrafter( getMenu().getProperty(CrafterPropertyTypes.PRIORITY), playerInventory, this )); + nameField = new SearchFieldWidget( font, leftPos + 8 + 1, @@ -116,12 +133,18 @@ protected void init() { nameField.setBordered(false); nameField.setCanLoseFocus(false); addWidget(nameField); + + editButton = addRenderableWidget(Button.builder(EDIT, button -> setEditName(true)) + .pos(getEditButtonX(), topPos + titleLabelY - 3) + .size(getEditButtonWidth(), 14) + .build()); + editButton.active = getMenu().canChangeName(); + setEditName(false); } private void setEditName(final boolean editName) { this.editName = editName; - this.titleMarquee.setTooltip(getMenu().canChangeName() ? CLICK_TO_EDIT_NAME : null); if (nameField != null) { nameField.visible = editName; nameField.setFocused(editName); @@ -132,6 +155,9 @@ private void setEditName(final boolean editName) { setFocused(null); } } + if (editButton != null) { + editButton.visible = !editName; + } } @Override @@ -149,15 +175,6 @@ protected void renderLabels(final GuiGraphics graphics, final int mouseX, final return; } super.renderLabels(graphics, mouseX, mouseY); - if (getMenu().canChangeName()) { - titleMarquee.renderTooltipHighlight( - graphics, - titleLabelX, - titleLabelY, - font, - isHoveringOverTitle(mouseX, mouseY) - ); - } final Component title = getChainingTitle(menu); graphics.drawString(font, title, getChainingTitleX(title), titleLabelY, 4210752, false); } @@ -214,6 +231,7 @@ && getMenu().getCarried().isEmpty()) { x, y ); + return; } super.renderTooltip(graphics, x, y); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java index 9b354cc12..de2279751 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java @@ -110,20 +110,7 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int @Override protected void renderLabels(final GuiGraphics graphics, final int mouseX, final int mouseY) { graphics.pose().popPose(); - titleMarquee.render( - graphics, - leftPos + titleLabelX, - topPos + titleLabelY, - font, - isHoveringOverTitle(mouseX, mouseY) - ); - graphics.pose().pushPose(); - graphics.pose().translate(leftPos, topPos, 0.0F); - renderPlayerInventoryTitle(graphics); - } - - protected final boolean isHoveringOverTitle(final int mouseX, final int mouseY) { - return isHovering( + final boolean hoveringOverTitle = isHovering( titleLabelX, titleLabelY, titleMarquee.getEffectiveWidth(font), @@ -131,6 +118,10 @@ protected final boolean isHoveringOverTitle(final int mouseX, final int mouseY) mouseX, mouseY ); + titleMarquee.render(graphics, leftPos + titleLabelX, topPos + titleLabelY, font, hoveringOverTitle); + graphics.pose().pushPose(); + graphics.pose().translate(leftPos, topPos, 0.0F); + renderPlayerInventoryTitle(graphics); } protected final void renderPlayerInventoryTitle(final GuiGraphics graphics) { @@ -167,11 +158,6 @@ public List getExclusionZones() { @Override protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { - final Component titleTooltip = titleMarquee.getTooltip(); - if (titleTooltip != null && isHoveringOverTitle(x, y)) { - graphics.renderTooltip(font, titleTooltip, x, y); - return; - } if (hoveredSlot instanceof UpgradeSlot upgradeSlot) { final List tooltip = getUpgradeTooltip(menu.getCarried(), upgradeSlot); if (!tooltip.isEmpty()) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java index 70f53f840..dcf34b4b6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java @@ -1,27 +1,17 @@ package com.refinedmods.refinedstorage.common.support.widget; -import javax.annotation.Nullable; - import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; public class TextMarquee { - private static final int MAX_TOOLTIP_HIGHLIGHT_TICKS = 20; - - private Component text; - @Nullable - private Component tooltip; - private final int maxWidth; + private Component text; private int offset; private int stateTicks; private State state = State.MOVING_LEFT; - private int hoveringTicks; - private boolean hoveringIn; - public TextMarquee(final Component text, final int maxWidth) { this.text = text; this.maxWidth = maxWidth; @@ -51,36 +41,6 @@ public void render(final GuiGraphics graphics, final int x, final int y, final F } } - public void renderTooltipHighlight(final GuiGraphics graphics, - final int x, - final int y, - final Font font, - final boolean hovering) { - if (hovering && tooltip != null) { - renderTooltipHighlight(graphics, x, y, font); - } else { - hoveringTicks = 0; - hoveringIn = true; - } - } - - private void renderTooltipHighlight(final GuiGraphics graphics, final int x, final int y, final Font font) { - if (hoveringIn) { - hoveringTicks++; - if (hoveringTicks == MAX_TOOLTIP_HIGHLIGHT_TICKS) { - hoveringIn = false; - } - } else { - hoveringTicks--; - if (hoveringTicks == 0) { - hoveringIn = true; - } - } - final int alpha = (int) (hoveringTicks * (63.0 / MAX_TOOLTIP_HIGHLIGHT_TICKS)); - final int color = (alpha << 24) | 0xFFFFFF; - graphics.fill(x - 1, y - 1, x + getEffectiveWidth(font), y + font.lineHeight, color); - } - private void updateMarquee(final int overflow) { stateTicks++; if (stateTicks % state.ticks == 0) { @@ -98,15 +58,6 @@ public void setText(final Component text) { this.text = text; } - @Nullable - public Component getTooltip() { - return tooltip; - } - - public void setTooltip(@Nullable final Component tooltip) { - this.tooltip = tooltip; - } - enum State { MOVING_LEFT(2), MOVING_RIGHT(2), diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index f4f6620b5..4a2418c59 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -184,7 +184,6 @@ "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", "gui.refinedstorage.crafter.empty_pattern_slot": "Empty pattern slot", - "gui.refinedstorage.crafter.click_to_edit_name": "Click to edit name", "gui.refinedstorage.crafter.lock_mode": "Lock mode", "gui.refinedstorage.crafter.lock_mode.never": "Never", "gui.refinedstorage.crafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", @@ -192,6 +191,7 @@ "gui.refinedstorage.crafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", "gui.refinedstorage.crafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", "gui.refinedstorage.crafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.crafter.edit_name": "Edit", "gui.refinedstorage.crafter.chained": "Chained", "gui.refinedstorage.crafter.chained.help": "This crafter is part of a chain.", "gui.refinedstorage.crafter.chained.head_help": "This crafter is the head of the chain.", From 30f25c68f82d967217f493a35dab804ea37c021d Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 29 Aug 2024 17:58:43 +0200 Subject: [PATCH 27/83] docs: update changelog --- CHANGELOG.md | 13 +++++++++++++ .../common/upgrade/UpgradeContainer.java | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7f0acf55..c5d204cb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,24 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added + +- Crafter + ### Changed - Optimized memory usage and startup time of cable models. After updating, cables will appear disconnected, but this is only visual. Cause a block update to fix this. - Optimized performance of searching in the Grid. - Custom titles that overflow will now have a marquee effect instead, for every GUI. +- You can now define a priority in the Crafter. +- You can now change the name of a Crafter in the GUI. +- Changed "Crafter mode" to "Locking mode" with following options: + - Never + - Lock until redstone pulse is received + - Lock until connected machine is empty (new, facilitates easier "blocking mode" without redstone) + - Lock until all outputs are received (new, facilitates easier "blocking mode" without redstone) + - Lock until low redstone signal + - Lock until high redstone signal ### Fixed diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index a34fef0e1..24c8c6d68 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -41,7 +41,7 @@ public class UpgradeContainer extends SimpleContainer implements UpgradeState { private final ThrottledNetworkNodeTicker ticker; public UpgradeContainer(final UpgradeDestination destination) { - this(destination, null, DEFAULT_WORK_TICK_RATE); + this(destination, null); } public UpgradeContainer(final UpgradeDestination destination, @Nullable final UpgradeContainerListener listener) { From c561c66afe0437eb397095fabd8e4b803af9c4a0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 29 Aug 2024 18:36:09 +0200 Subject: [PATCH 28/83] feat: pattern registration --- .github/CONTRIBUTING.md | 33 +++--- .../build.gradle.kts | 31 +++++ .../api/autocrafting/Pattern.java | 12 ++ .../api/autocrafting/PatternRepository.java | 16 +++ .../autocrafting/PatternRepositoryImpl.java | 34 ++++++ .../api/autocrafting/package-info.java | 7 ++ .../api/autocrafting/FakeResources.java | 9 ++ .../PatternRepositoryImplTest.java | 95 +++++++++++++++ .../api/autocrafting/SimplePattern.java | 18 +++ .../api/autocrafting/package-info.java | 7 ++ refinedstorage-common-api/build.gradle.kts | 1 + .../common/api/RefinedStorageApi.java | 2 +- .../common/api/RefinedStorageApiProxy.java | 2 +- .../common/api/autocrafting/Pattern.java | 7 -- .../api/autocrafting/PatternProviderItem.java | 2 + .../common/AbstractModInitializer.java | 7 ++ .../common/RefinedStorageApiImpl.java | 2 +- .../autocrafting/CrafterBlockEntity.java | 39 ++++-- .../autocrafting/CrafterContainerMenu.java | 5 +- .../common/autocrafting/CraftingPattern.java | 8 +- .../common/autocrafting/PatternInventory.java | 50 ++++++++ .../common/autocrafting/PatternItem.java | 2 +- .../autocrafting/ProcessingPattern.java | 9 +- .../autocrafting/SmithingTablePattern.java | 9 +- .../autocrafting/StonecutterPattern.java | 9 +- refinedstorage-fabric/build.gradle.kts | 1 + refinedstorage-neoforge/build.gradle.kts | 1 + refinedstorage-network-api/build.gradle.kts | 1 + .../AutocraftingNetworkComponent.java | 10 ++ .../network/autocrafting/PatternProvider.java | 13 ++ .../network/autocrafting/package-info.java | 7 ++ .../api/network/storage/StorageProvider.java | 1 + .../network/test/AddNetworkNode.java | 2 + .../InjectNetworkAutocraftingComponent.java | 12 ++ .../network/test/NetworkTest.java | 3 + .../network/test/NetworkTestExtension.java | 45 +++++-- .../network/test/NetworkTestFixtures.java | 7 ++ .../PatternProviderNetworkNodeFactory.java | 16 +++ .../network/test/NetworkNodeFactoryTest.java | 3 + .../test/NetworkTestExtensionTest.java | 11 ++ .../AutocraftingNetworkComponentImpl.java | 47 ++++++++ .../impl/autocrafting/package-info.java | 7 ++ .../PatternProviderNetworkNode.java | 57 +++++++++ .../node/patternprovider/package-info.java | 7 ++ .../AutocraftingNetworkComponentImplTest.java | 76 ++++++++++++ .../impl/autocrafting/SimplePattern.java | 19 +++ .../PatternProviderNetworkNodeTest.java | 111 ++++++++++++++++++ settings.gradle.kts | 1 + 48 files changed, 820 insertions(+), 54 deletions(-) create mode 100644 refinedstorage-autocrafting-api/build.gradle.kts create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java create mode 100644 refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java create mode 100644 refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java create mode 100644 refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java create mode 100644 refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java delete mode 100644 refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/Pattern.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java create mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java create mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java create mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/package-info.java create mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/InjectNetworkAutocraftingComponent.java create mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/nodefactory/PatternProviderNetworkNodeFactory.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/package-info.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/package-info.java create mode 100644 refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java create mode 100644 refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java create mode 100644 refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 16ae93331..23708d507 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -265,19 +265,20 @@ Refined Storage is split up into various modules. Most modules aren't dependent the `refinedstorage-common`, `refinedstorage-neoforge` and `refinedstorage-fabric` modules have dependencies on Minecraft. -| Name | Use in addons | Description | -|-------------------------------|---------------|----------------------------------------------------------------------------------------------------------| -| `refinedstorage-core-api` | ✔️ | Contains some utility classes and enums. | -| `refinedstorage-grid-api` | ✔️ | Contains Grid related functionality. | -| `refinedstorage-network-api` | ✔️ | Contains storage network related functionality. | -| `refinedstorage-network` | ❌ | Contains implementations of `refinedstorage-network-api`. | -| `refinedstorage-network-test` | ✔️ | JUnit extension which helps with setting up a network and a network node for testing. | -| `refinedstorage-query-parser` | ✔️ | A query parser, contains a lexer and parser. Only used for Grid query parsing. | -| `refinedstorage-resource-api` | ✔️ | Contains API for handling resources. | -| `refinedstorage-storage-api` | ✔️ | Contains storage related functionality. | -| `refinedstorage-common-api` | ✔️ | Implements the various Refined Storage API modules for use in Minecraft. | -| `refinedstorage-common` | ❌ | Common mod code. Most gameplay code is in here. | -| `refinedstorage-fabric-api` | ✔️ | Additional API for the Fabric platform. | -| `refinedstorage-fabric` | ❌ | The platform module for Fabric. This module contains Fabric specific code. | -| `refinedstorage-neoforge-api` | ✔️ | Additional API for the NeoForge platform. | -| `refinedstorage-neoforge` | ❌ | The platform module for NeoForge. This module contains NeoForge specific code and the integration tests. | +| Name | Use in addons | Description | +|-----------------------------------|---------------|----------------------------------------------------------------------------------------------------------| +| `refinedstorage-core-api` | ✔️ | Contains some utility classes and enums. | +| `refinedstorage-grid-api` | ✔️ | Contains Grid related functionality. | +| `refinedstorage-autocrafting-api` | ✔️ | Contains autocrafting related functionality. | +| `refinedstorage-network-api` | ✔️ | Contains storage network related functionality. | +| `refinedstorage-network` | ❌ | Contains implementations of `refinedstorage-network-api`. | +| `refinedstorage-network-test` | ✔️ | JUnit extension which helps with setting up a network and a network node for testing. | +| `refinedstorage-query-parser` | ✔️ | A query parser, contains a lexer and parser. Only used for Grid query parsing. | +| `refinedstorage-resource-api` | ✔️ | Contains API for handling resources. | +| `refinedstorage-storage-api` | ✔️ | Contains storage related functionality. | +| `refinedstorage-common-api` | ✔️ | Implements the various Refined Storage API modules for use in Minecraft. | +| `refinedstorage-common` | ❌ | Common mod code. Most gameplay code is in here. | +| `refinedstorage-fabric-api` | ✔️ | Additional API for the Fabric platform. | +| `refinedstorage-fabric` | ❌ | The platform module for Fabric. This module contains Fabric specific code. | +| `refinedstorage-neoforge-api` | ✔️ | Additional API for the NeoForge platform. | +| `refinedstorage-neoforge` | ❌ | The platform module for NeoForge. This module contains NeoForge specific code and the integration tests. | diff --git a/refinedstorage-autocrafting-api/build.gradle.kts b/refinedstorage-autocrafting-api/build.gradle.kts new file mode 100644 index 000000000..959cd6fcd --- /dev/null +++ b/refinedstorage-autocrafting-api/build.gradle.kts @@ -0,0 +1,31 @@ +plugins { + id("refinedarchitect.base") +} + +refinedarchitect { + testing() + mutationTesting() + javadoc() + publishing { + maven = true + } +} + +base { + archivesName.set("refinedstorage-autocrafting-api") +} + +dependencies { + api(libs.apiguardian) + api(project(":refinedstorage-resource-api")) + api(project(":refinedstorage-core-api")) + api(project(":refinedstorage-storage-api")) + api(project(":refinedstorage-query-parser")) + implementation(libs.slf4j.api) + testImplementation(libs.junit.api) + testImplementation(libs.junit.params) + testImplementation(libs.assertj) + testImplementation(libs.mockito) + testRuntimeOnly(libs.junit.engine) + testRuntimeOnly(libs.slf4j.impl) +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java new file mode 100644 index 000000000..b82c4ac72 --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Set; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.6") +public interface Pattern { + Set getOutputs(); +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java new file mode 100644 index 000000000..01433fc7f --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Set; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") +public interface PatternRepository { + void add(Pattern pattern); + + void remove(Pattern pattern); + + Set getOutputs(); +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java new file mode 100644 index 000000000..9104779de --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java @@ -0,0 +1,34 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.HashSet; +import java.util.Set; + +public class PatternRepositoryImpl implements PatternRepository { + private final Set patterns = new HashSet<>(); + private final Set outputs = new HashSet<>(); + + @Override + public void add(final Pattern pattern) { + patterns.add(pattern); + outputs.addAll(pattern.getOutputs()); + } + + @Override + public void remove(final Pattern pattern) { + patterns.remove(pattern); + for (final ResourceKey output : pattern.getOutputs()) { + final boolean noOtherPatternHasThisOutput = patterns.stream() + .noneMatch(otherPattern -> otherPattern.getOutputs().contains(output)); + if (noOtherPatternHasThisOutput) { + outputs.remove(output); + } + } + } + + @Override + public Set getOutputs() { + return outputs; + } +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java new file mode 100644 index 000000000..1a9026f18 --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java new file mode 100644 index 000000000..e7a9b3a4c --- /dev/null +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java @@ -0,0 +1,9 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +public enum FakeResources implements ResourceKey { + A, + B, + C +} diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java new file mode 100644 index 000000000..94f3e5a1f --- /dev/null +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java @@ -0,0 +1,95 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class PatternRepositoryImplTest { + private PatternRepositoryImpl sut; + + @BeforeEach + void setUp() { + sut = new PatternRepositoryImpl(); + } + + @Test + void testDefaultState() { + // Assert + assertThat(sut.getOutputs()).isEmpty(); + } + + @Test + void shouldAddPattern() { + // Act + sut.add(new SimplePattern(FakeResources.A)); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.A); + } + + @Test + void shouldAddMultiplePatterns() { + // Act + sut.add(new SimplePattern(FakeResources.A)); + sut.add(new SimplePattern(FakeResources.B)); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( + FakeResources.A, + FakeResources.B + ); + } + + @Test + void shouldRemovePattern() { + // Arrange + final SimplePattern a = new SimplePattern(FakeResources.A); + final SimplePattern b = new SimplePattern(FakeResources.B); + + sut.add(a); + sut.add(b); + + // Act + sut.remove(a); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.B); + } + + @Test + void shouldRemoveMultiplePatterns() { + // Arrange + final SimplePattern a = new SimplePattern(FakeResources.A); + final SimplePattern b = new SimplePattern(FakeResources.B); + + sut.add(a); + sut.add(b); + + // Act + sut.remove(a); + sut.remove(b); + + // Assert + assertThat(sut.getOutputs()).isEmpty(); + } + + @Test + void shouldRemovePatternButNotRemoveOutputIfAnotherPatternStillHasThatOutput() { + // Arrange + final SimplePattern a = new SimplePattern(FakeResources.A); + final SimplePattern b = new SimplePattern(FakeResources.B, FakeResources.A); + + sut.add(a); + sut.add(b); + + // Act + sut.remove(a); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( + FakeResources.A, + FakeResources.B + ); + } +} \ No newline at end of file diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java new file mode 100644 index 000000000..345dae527 --- /dev/null +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java @@ -0,0 +1,18 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Set; + +public class SimplePattern implements Pattern { + private final Set outputs; + + public SimplePattern(final ResourceKey... outputs) { + this.outputs = Set.of(outputs); + } + + @Override + public Set getOutputs() { + return outputs; + } +} diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java new file mode 100644 index 000000000..1a9026f18 --- /dev/null +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-common-api/build.gradle.kts b/refinedstorage-common-api/build.gradle.kts index a0ab6c7e1..35bbe7b06 100644 --- a/refinedstorage-common-api/build.gradle.kts +++ b/refinedstorage-common-api/build.gradle.kts @@ -21,4 +21,5 @@ dependencies { api(project(":refinedstorage-resource-api")) api(project(":refinedstorage-network-api")) api(project(":refinedstorage-grid-api")) + api(project(":refinedstorage-autocrafting-api")) } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index 1894a2642..a96e5fb72 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.api; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.NetworkComponent; @@ -7,7 +8,6 @@ import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.exporter.ExporterTransferStrategyFactory; diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java index 0d8e2e3d5..24c147598 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.api; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.NetworkComponent; @@ -7,7 +8,6 @@ import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.exporter.ExporterTransferStrategyFactory; diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/Pattern.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/Pattern.java deleted file mode 100644 index 0bcbc0f31..000000000 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/Pattern.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.refinedmods.refinedstorage.common.api.autocrafting; - -import org.apiguardian.api.API; - -@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.6") -public interface Pattern { -} diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/PatternProviderItem.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/PatternProviderItem.java index 3a5796e15..641fb5db2 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/PatternProviderItem.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/autocrafting/PatternProviderItem.java @@ -1,5 +1,7 @@ package com.refinedmods.refinedstorage.common.api.autocrafting; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; + import java.util.Optional; import java.util.UUID; import javax.annotation.Nullable; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index 8a59585e3..75373db79 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -1,6 +1,9 @@ package com.refinedmods.refinedstorage.common; +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage.api.network.impl.autocrafting.AutocraftingNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.energy.EnergyNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.node.GraphNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.security.SecurityNetworkComponentImpl; @@ -264,6 +267,10 @@ private void registerNetworkComponents() { SecurityNetworkComponent.class, network -> new SecurityNetworkComponentImpl(RefinedStorageApi.INSTANCE.createDefaultSecurityPolicy()) ); + RefinedStorageApi.INSTANCE.getNetworkComponentMapFactory().addFactory( + AutocraftingNetworkComponent.class, + network -> new AutocraftingNetworkComponentImpl(new PatternRepositoryImpl()) + ); } private void registerWirelessTransmitterRangeModifiers() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 6b75e9080..41ccefd5e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.NetworkBuilder; @@ -11,7 +12,6 @@ import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.common.api.autocrafting.PatternProviderItem; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategyFactory; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index 557f17485..533cccb20 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.autocrafting.PatternProviderItem; @@ -39,8 +40,8 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; -public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, BlockEntityWithDrops { +public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity + implements ExtendedMenuProvider, BlockEntityWithDrops, PatternInventory.Listener { static final int PATTERNS = 9; private static final int MAX_CHAINED_CRAFTERS = 8; @@ -49,10 +50,7 @@ public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEnt private static final String TAG_LOCK_MODE = "lm"; private static final String TAG_PRIORITY = "pri"; - private final FilteredContainer patternContainer = new FilteredContainer( - PATTERNS, - stack -> level != null && isValidPattern(stack, level) - ); + private final PatternInventory patternContainer = new PatternInventory(this::getLevel); private final UpgradeContainer upgradeContainer; private LockMode lockMode = LockMode.NEVER; private int priority; @@ -62,17 +60,19 @@ public CrafterBlockEntity(final BlockPos pos, final BlockState state) { BlockEntities.INSTANCE.getCrafter(), pos, state, - new SimpleNetworkNode(Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage()) + new PatternProviderNetworkNode(Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage(), PATTERNS) ); this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CRAFTER, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); }); + patternContainer.addListener(container -> setChanged()); + patternContainer.setListener(this); } @Override - protected InWorldNetworkNodeContainer createMainContainer(final SimpleNetworkNode networkNode) { + protected InWorldNetworkNodeContainer createMainContainer(final PatternProviderNetworkNode networkNode) { return RefinedStorageApi.INSTANCE.createNetworkNodeContainer(this, networkNode) .connectionStrategy(new CrafterConnectionStrategy(this::getBlockState, getBlockPos())) .build(); @@ -268,6 +268,27 @@ void setPriority(final int priority) { setChanged(); } + @Override + public void setLevel(final Level level) { + super.setLevel(level); + if (level.isClientSide()) { + return; + } + for (int i = 0; i < patternContainer.getContainerSize(); ++i) { + patternChanged(i); + } + } + + @Override + public void patternChanged(final int slot) { + if (level == null) { + return; + } + final Pattern pattern = RefinedStorageApi.INSTANCE.getPattern(patternContainer.getItem(slot), level) + .orElse(null); + mainNetworkNode.setPattern(slot, pattern); + } + @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java index 0a9e4cee6..32cf774c0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java @@ -22,9 +22,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.PATTERNS; -import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.isValidPattern; - public class CrafterContainerMenu extends AbstractBaseContainerMenu { private static final int PATTERN_SLOT_X = 8; private static final int PATTERN_SLOT_Y = 20; @@ -46,7 +43,7 @@ public CrafterContainerMenu(final int syncId, final Inventory playerInventory, f registerProperty(new ClientProperty<>(CrafterPropertyTypes.LOCK_MODE, LockMode.NEVER)); registerProperty(new ClientProperty<>(CrafterPropertyTypes.PRIORITY, 0)); addSlots( - new FilteredContainer(PATTERNS, stack -> isValidPattern(stack, playerInventory.player.level())), + new PatternInventory(playerInventory.player::level), new UpgradeContainer(UpgradeDestinations.CRAFTER) ); this.name = Component.empty(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java index ea44243cd..c05d5a76c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java @@ -1,11 +1,17 @@ package com.refinedmods.refinedstorage.common.autocrafting; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import java.util.List; +import java.util.Set; record CraftingPattern(List> inputs, ResourceAmount output, List byproducts) implements Pattern { + @Override + public Set getOutputs() { + return Set.of(output.resource()); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java new file mode 100644 index 000000000..d18aa5603 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java @@ -0,0 +1,50 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import com.refinedmods.refinedstorage.api.core.NullableType; +import com.refinedmods.refinedstorage.common.support.FilteredContainer; + +import java.util.Optional; +import java.util.function.Supplier; +import javax.annotation.Nullable; + +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; + +import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.PATTERNS; +import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.isValidPattern; + +class PatternInventory extends FilteredContainer { + @Nullable + private Listener listener; + + PatternInventory(final Supplier<@NullableType Level> levelSupplier) { + super(PATTERNS, + stack -> Optional.ofNullable(levelSupplier.get()).map(level -> isValidPattern(stack, level)).orElse(false)); + } + + void setListener(@Nullable final Listener listener) { + this.listener = listener; + } + + @Override + public ItemStack removeItem(final int slot, final int amount) { + // Forge InvWrapper calls this instead of setItem. + final ItemStack result = super.removeItem(slot, amount); + if (listener != null) { + listener.patternChanged(slot); + } + return result; + } + + @Override + public void setItem(final int slot, final ItemStack stack) { + super.setItem(slot, stack); + if (listener != null) { + listener.patternChanged(slot); + } + } + + interface Listener { + void patternChanged(int slot); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java index dbb5295d8..28fe9d79e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.common.autocrafting; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.common.api.autocrafting.PatternProviderItem; import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java index b57eee859..bb62e136e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java @@ -1,9 +1,16 @@ package com.refinedmods.refinedstorage.common.autocrafting; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; record ProcessingPattern(List inputs, List outputs) implements Pattern { + @Override + public Set getOutputs() { + return outputs.stream().map(ResourceAmount::resource).collect(Collectors.toSet()); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java index 97a1c4520..4511879f4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java @@ -1,8 +1,15 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; +import java.util.Set; + record SmithingTablePattern(ItemResource template, ItemResource base, ItemResource addition, ItemResource output) implements Pattern { + @Override + public Set getOutputs() { + return Set.of(output); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java index e325ac647..4b4333177 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java @@ -1,7 +1,14 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.common.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; +import java.util.Set; + record StonecutterPattern(ItemResource input, ItemResource output) implements Pattern { + @Override + public Set getOutputs() { + return Set.of(output); + } } diff --git a/refinedstorage-fabric/build.gradle.kts b/refinedstorage-fabric/build.gradle.kts index c730faadc..f1cae6473 100644 --- a/refinedstorage-fabric/build.gradle.kts +++ b/refinedstorage-fabric/build.gradle.kts @@ -25,6 +25,7 @@ refinedarchitect { addProject(project(":refinedstorage-network-api")) addProject(project(":refinedstorage-network")) addProject(project(":refinedstorage-grid-api")) + addProject(project(":refinedstorage-autocrafting-api")) addProject(project(":refinedstorage-query-parser")) publishing { maven = true diff --git a/refinedstorage-neoforge/build.gradle.kts b/refinedstorage-neoforge/build.gradle.kts index d8bfbe328..ebb56d715 100644 --- a/refinedstorage-neoforge/build.gradle.kts +++ b/refinedstorage-neoforge/build.gradle.kts @@ -16,6 +16,7 @@ refinedarchitect { compileWithProject(project(":refinedstorage-network-api")) compileWithProject(project(":refinedstorage-network")) compileWithProject(project(":refinedstorage-grid-api")) + compileWithProject(project(":refinedstorage-autocrafting-api")) compileWithProject(project(":refinedstorage-query-parser")) publishing { maven = true diff --git a/refinedstorage-network-api/build.gradle.kts b/refinedstorage-network-api/build.gradle.kts index 8da8c8ed1..3cb28e7ef 100644 --- a/refinedstorage-network-api/build.gradle.kts +++ b/refinedstorage-network-api/build.gradle.kts @@ -19,4 +19,5 @@ dependencies { api(project(":refinedstorage-resource-api")) api(project(":refinedstorage-storage-api")) api(project(":refinedstorage-grid-api")) + api(project(":refinedstorage-autocrafting-api")) } diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java new file mode 100644 index 000000000..392287596 --- /dev/null +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java @@ -0,0 +1,10 @@ +package com.refinedmods.refinedstorage.api.network.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; +import com.refinedmods.refinedstorage.api.network.NetworkComponent; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") +public interface AutocraftingNetworkComponent extends NetworkComponent, PatternRepository { +} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java new file mode 100644 index 000000000..0b229b584 --- /dev/null +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java @@ -0,0 +1,13 @@ +package com.refinedmods.refinedstorage.api.network.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; + +import java.util.Set; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") +@FunctionalInterface +public interface PatternProvider { + Set getPatterns(); +} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/package-info.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/package-info.java new file mode 100644 index 000000000..13a776e5e --- /dev/null +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.api.network.autocrafting; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/storage/StorageProvider.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/storage/StorageProvider.java index b1437aa19..be814ff1c 100644 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/storage/StorageProvider.java +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/storage/StorageProvider.java @@ -16,6 +16,7 @@ * a provided {@link Storage}. */ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") +@FunctionalInterface public interface StorageProvider { /** * This method is called when a {@link com.refinedmods.refinedstorage.api.network.node.NetworkNode} is added or diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/AddNetworkNode.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/AddNetworkNode.java index 1fbdb0d6c..1723b0ffe 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/AddNetworkNode.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/AddNetworkNode.java @@ -17,6 +17,8 @@ @interface Property { String key(); + int intValue() default -1; + long longValue() default -1; boolean boolValue() default false; diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/InjectNetworkAutocraftingComponent.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/InjectNetworkAutocraftingComponent.java new file mode 100644 index 000000000..7912c1b51 --- /dev/null +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/InjectNetworkAutocraftingComponent.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage.network.test; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface InjectNetworkAutocraftingComponent { + String networkId() default "default"; +} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTest.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTest.java index bf3070406..471d6c1e4 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTest.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTest.java @@ -8,6 +8,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.grid.GridNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.iface.InterfaceNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.importer.ImporterNetworkNode; +import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayInputNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayOutputNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.storage.StorageNetworkNode; @@ -19,6 +20,7 @@ import com.refinedmods.refinedstorage.network.test.nodefactory.GridNetworkNodeFactory; import com.refinedmods.refinedstorage.network.test.nodefactory.ImporterNetworkNodeFactory; import com.refinedmods.refinedstorage.network.test.nodefactory.InterfaceNetworkNodeFactory; +import com.refinedmods.refinedstorage.network.test.nodefactory.PatternProviderNetworkNodeFactory; import com.refinedmods.refinedstorage.network.test.nodefactory.RelayInputNetworkNodeFactory; import com.refinedmods.refinedstorage.network.test.nodefactory.RelayOutputNetworkNodeFactory; import com.refinedmods.refinedstorage.network.test.nodefactory.SimpleNetworkNodeFactory; @@ -47,5 +49,6 @@ @RegisterNetworkNode(value = RelayInputNetworkNodeFactory.class, clazz = RelayInputNetworkNode.class) @RegisterNetworkNode(value = RelayOutputNetworkNodeFactory.class, clazz = RelayOutputNetworkNode.class) @RegisterNetworkNode(value = StorageTransferNetworkNodeFactory.class, clazz = StorageTransferNetworkNode.class) +@RegisterNetworkNode(value = PatternProviderNetworkNodeFactory.class, clazz = PatternProviderNetworkNode.class) public @interface NetworkTest { } diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java index 4821e31db..916b06bc0 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyStorage; import com.refinedmods.refinedstorage.api.network.impl.NetworkImpl; @@ -20,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import javax.annotation.Nullable; import org.junit.jupiter.api.extension.BeforeEachCallback; @@ -29,6 +31,14 @@ import org.junit.jupiter.api.extension.ParameterResolver; public class NetworkTestExtension implements BeforeEachCallback, ParameterResolver { + private static final Set> SUPPORTED_ANNOTATIONS = Set.of( + InjectNetworkStorageComponent.class, + InjectNetworkEnergyComponent.class, + InjectNetworkSecurityComponent.class, + InjectNetworkAutocraftingComponent.class, + InjectNetwork.class + ); + private final Map networkMap = new HashMap<>(); private final Map, NetworkNodeFactory> networkNodeFactories = new HashMap<>(); @@ -149,9 +159,7 @@ private void addNetworkNode(final Object testInstance, final Field field) { if (annotation != null) { final Class type = field.getType(); final Map properties = getProperties(annotation.properties()); - final NetworkNode resolvedNode = networkNodeFactories.get(type).create( - properties - ); + final NetworkNode resolvedNode = networkNodeFactories.get(type).create(properties); final Network network = networkMap.get(annotation.networkId()); registerNetworkNode(testInstance, field, resolvedNode, network); } @@ -160,13 +168,21 @@ private void addNetworkNode(final Object testInstance, final Field field) { private Map getProperties(final AddNetworkNode.Property[] properties) { final Map result = new HashMap<>(); for (final AddNetworkNode.Property property : properties) { - result.put(property.key(), property.longValue() == -1 - ? property.boolValue() - : property.longValue()); + result.put(property.key(), getPropertyValue(property)); } return result; } + private Object getPropertyValue(final AddNetworkNode.Property property) { + if (property.intValue() != -1) { + return property.intValue(); + } + if (property.longValue() != -1) { + return property.longValue(); + } + return property.boolValue(); + } + private void registerNetworkNode(final Object testInstance, final Field field, final NetworkNode networkNode, @@ -190,10 +206,12 @@ private void setField(final Object instance, final Field field, final Object val @Override public boolean supportsParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException { - return parameterContext.isAnnotated(InjectNetworkStorageComponent.class) - || parameterContext.isAnnotated(InjectNetworkEnergyComponent.class) - || parameterContext.isAnnotated(InjectNetworkSecurityComponent.class) - || parameterContext.isAnnotated(InjectNetwork.class); + for (final var supportedAnnotation : SUPPORTED_ANNOTATIONS) { + if (parameterContext.isAnnotated(supportedAnnotation)) { + return true; + } + } + return false; } @Override @@ -208,6 +226,9 @@ public Object resolveParameter(final ParameterContext parameterContext, .or(() -> parameterContext .findAnnotation(InjectNetworkSecurityComponent.class) .map(annotation -> (Object) getNetworkSecurity(annotation.networkId()))) + .or(() -> parameterContext + .findAnnotation(InjectNetworkAutocraftingComponent.class) + .map(annotation -> (Object) getNetworkAutocrafting(annotation.networkId()))) .or(() -> parameterContext .findAnnotation(InjectNetwork.class) .map(annotation -> networkMap.get(annotation.value()))) @@ -225,4 +246,8 @@ private EnergyNetworkComponent getNetworkEnergy(final String networkId) { private SecurityNetworkComponent getNetworkSecurity(final String networkId) { return networkMap.get(networkId).getComponent(SecurityNetworkComponent.class); } + + private AutocraftingNetworkComponent getNetworkAutocrafting(final String networkId) { + return networkMap.get(networkId).getComponent(AutocraftingNetworkComponent.class); + } } diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java index 37328b2c8..2ad303b6c 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java @@ -1,9 +1,12 @@ package com.refinedmods.refinedstorage.network.test; +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; import com.refinedmods.refinedstorage.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.NetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage.api.network.impl.autocrafting.AutocraftingNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.energy.EnergyNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.node.GraphNetworkComponentImpl; import com.refinedmods.refinedstorage.api.network.impl.security.SecurityNetworkComponentImpl; @@ -36,6 +39,10 @@ public final class NetworkTestFixtures { SecurityNetworkComponent.class, network -> new SecurityNetworkComponentImpl(SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)) ); + NETWORK_COMPONENT_MAP_FACTORY.addFactory( + AutocraftingNetworkComponent.class, + network -> new AutocraftingNetworkComponentImpl(new PatternRepositoryImpl()) + ); } private NetworkTestFixtures() { diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/nodefactory/PatternProviderNetworkNodeFactory.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/nodefactory/PatternProviderNetworkNodeFactory.java new file mode 100644 index 000000000..042638d62 --- /dev/null +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/nodefactory/PatternProviderNetworkNodeFactory.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.network.test.nodefactory; + +import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; +import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; + +import java.util.Map; + +public class PatternProviderNetworkNodeFactory extends AbstractNetworkNodeFactory { + public static final String PROPERTY_SIZE = "size"; + + @Override + protected AbstractNetworkNode innerCreate(final Map properties) { + final int size = (int) properties.getOrDefault(PROPERTY_SIZE, 9); + return new PatternProviderNetworkNode(getEnergyUsage(properties), size); + } +} diff --git a/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkNodeFactoryTest.java b/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkNodeFactoryTest.java index 55612ee4d..cb72b74cc 100644 --- a/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkNodeFactoryTest.java +++ b/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkNodeFactoryTest.java @@ -8,6 +8,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.grid.GridNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.iface.InterfaceNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.importer.ImporterNetworkNode; +import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayInputNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayOutputNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.storage.StorageNetworkNode; @@ -44,6 +45,8 @@ class NetworkNodeFactoryTest { RelayOutputNetworkNode relayOutput; @AddNetworkNode StorageTransferNetworkNode storageTransfer; + @AddNetworkNode + PatternProviderNetworkNode patternProvider; @Test void testInitialization() { diff --git a/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtensionTest.java b/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtensionTest.java index e28daaa0e..decfcdf32 100644 --- a/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtensionTest.java +++ b/refinedstorage-network-test/src/test/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtensionTest.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.network.test; import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.storage.StorageNetworkNode; @@ -157,6 +158,16 @@ void shouldInjectNetworkSecurityComponent( assertThat(networkSecurityB).isSameAs(b.getComponent(SecurityNetworkComponent.class)); } + @Test + void shouldInjectNetworkAutocraftingComponent( + @InjectNetworkAutocraftingComponent(networkId = "a") final AutocraftingNetworkComponent networkAutocraftingA, + @InjectNetworkAutocraftingComponent(networkId = "b") final AutocraftingNetworkComponent networkAutocraftingB + ) { + // Assert + assertThat(networkAutocraftingA).isSameAs(a.getComponent(AutocraftingNetworkComponent.class)); + assertThat(networkAutocraftingB).isSameAs(b.getComponent(AutocraftingNetworkComponent.class)); + } + @Test void shouldInjectNetworkThroughParameter( @InjectNetwork("a") final Network injectedA, diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java new file mode 100644 index 000000000..6d3db761e --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java @@ -0,0 +1,47 @@ +package com.refinedmods.refinedstorage.api.network.impl.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; +import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Set; + +public class AutocraftingNetworkComponentImpl implements AutocraftingNetworkComponent { + private final PatternRepository patternRepository; + + public AutocraftingNetworkComponentImpl(final PatternRepository patternRepository) { + this.patternRepository = patternRepository; + } + + @Override + public void onContainerAdded(final NetworkNodeContainer container) { + if (container.getNode() instanceof PatternProvider provider) { + provider.getPatterns().forEach(patternRepository::add); + } + } + + @Override + public void onContainerRemoved(final NetworkNodeContainer container) { + if (container.getNode() instanceof PatternProvider provider) { + provider.getPatterns().forEach(patternRepository::remove); + } + } + + @Override + public void add(final Pattern pattern) { + patternRepository.add(pattern); + } + + @Override + public void remove(final Pattern pattern) { + patternRepository.remove(pattern); + } + + @Override + public Set getOutputs() { + return patternRepository.getOutputs(); + } +} diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/package-info.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/package-info.java new file mode 100644 index 000000000..62db52cda --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.api.network.impl.autocrafting; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java new file mode 100644 index 000000000..7a74782a1 --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java @@ -0,0 +1,57 @@ +package com.refinedmods.refinedstorage.api.network.impl.node.patternprovider; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; +import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + +public class PatternProviderNetworkNode extends SimpleNetworkNode implements PatternProvider { + private final Pattern[] patterns; + + public PatternProviderNetworkNode(final long energyUsage, final int patterns) { + super(energyUsage); + this.patterns = new Pattern[patterns]; + } + + public void setPattern(final int index, @Nullable final Pattern pattern) { + final Pattern oldPattern = patterns[index]; + if (oldPattern != null && network != null) { + network.getComponent(AutocraftingNetworkComponent.class).remove(oldPattern); + } + patterns[index] = pattern; + if (pattern != null && network != null) { + network.getComponent(AutocraftingNetworkComponent.class).add(pattern); + } + } + + @Override + protected void onActiveChanged(final boolean newActive) { + super.onActiveChanged(newActive); + if (!newActive && network != null) { + final AutocraftingNetworkComponent component = network.getComponent(AutocraftingNetworkComponent.class); + for (final Pattern pattern : patterns) { + if (pattern != null) { + component.remove(pattern); + } + } + } else if (newActive && network != null) { + final AutocraftingNetworkComponent component = network.getComponent(AutocraftingNetworkComponent.class); + for (final Pattern pattern : patterns) { + if (pattern != null) { + component.add(pattern); + } + } + } + } + + @Override + public Set getPatterns() { + return Arrays.stream(patterns).filter(Objects::nonNull).collect(Collectors.toSet()); + } +} diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/package-info.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/package-info.java new file mode 100644 index 000000000..74c61e624 --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.api.network.impl.node.patternprovider; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java new file mode 100644 index 000000000..d63b45027 --- /dev/null +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java @@ -0,0 +1,76 @@ +package com.refinedmods.refinedstorage.api.network.impl.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; +import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; +import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; +import com.refinedmods.refinedstorage.network.test.fake.FakeResources; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class AutocraftingNetworkComponentImplTest { + private AutocraftingNetworkComponentImpl sut; + + @BeforeEach + void setUp() { + sut = new AutocraftingNetworkComponentImpl(new PatternRepositoryImpl()); + } + + @Test + void shouldAddPatternsFromPatternProvider() { + // Arrange + final PatternProviderNetworkNode provider = new PatternProviderNetworkNode(0, 5); + provider.setPattern(1, new SimplePattern(FakeResources.A)); + + final NetworkNodeContainer container = () -> provider; + + // Act + sut.onContainerAdded(container); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.A); + } + + @Test + void shouldRemovePatternsFromPatternProvider() { + // Arrange + final PatternProviderNetworkNode provider = new PatternProviderNetworkNode(0, 5); + provider.setPattern(1, new SimplePattern(FakeResources.A)); + + final NetworkNodeContainer container = () -> provider; + sut.onContainerAdded(container); + + // Act + sut.onContainerRemoved(container); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().isEmpty(); + } + + @Test + void shouldAddPatternManually() { + // Arrange + final SimplePattern pattern = new SimplePattern(FakeResources.A); + + // Act + sut.add(pattern); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.A); + } + + @Test + void shouldRemovePatternManually() { + // Arrange + final SimplePattern pattern = new SimplePattern(FakeResources.A); + sut.add(pattern); + + // Act + sut.remove(pattern); + + // Assert + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().isEmpty(); + } +} \ No newline at end of file diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java new file mode 100644 index 000000000..7e2b26d57 --- /dev/null +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java @@ -0,0 +1,19 @@ +package com.refinedmods.refinedstorage.api.network.impl.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Set; + +public class SimplePattern implements Pattern { + private final Set outputs; + + public SimplePattern(final ResourceKey... outputs) { + this.outputs = Set.of(outputs); + } + + @Override + public Set getOutputs() { + return outputs; + } +} diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java new file mode 100644 index 000000000..e585c4a0a --- /dev/null +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java @@ -0,0 +1,111 @@ +package com.refinedmods.refinedstorage.api.network.impl.node.patternprovider; + +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.impl.autocrafting.SimplePattern; +import com.refinedmods.refinedstorage.network.test.AddNetworkNode; +import com.refinedmods.refinedstorage.network.test.InjectNetworkAutocraftingComponent; +import com.refinedmods.refinedstorage.network.test.NetworkTest; +import com.refinedmods.refinedstorage.network.test.SetupNetwork; +import com.refinedmods.refinedstorage.network.test.fake.FakeResources; +import com.refinedmods.refinedstorage.network.test.nodefactory.PatternProviderNetworkNodeFactory; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +@NetworkTest +@SetupNetwork +class PatternProviderNetworkNodeTest { + @AddNetworkNode(properties = { + @AddNetworkNode.Property(key = PatternProviderNetworkNodeFactory.PROPERTY_SIZE, intValue = 3) + }) + private PatternProviderNetworkNode sut; + + @Test + void testDefaultState( + @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting + ) { + // Assert + assertThat(sut.getPatterns()).isEmpty(); + assertThat(autocrafting.getOutputs()).isEmpty(); + } + + @Test + void shouldSetPatternAndNotifyNetwork( + @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting + ) { + // Act + final SimplePattern pattern = new SimplePattern(FakeResources.A); + sut.setPattern(0, pattern); + + // Assert + assertThat(sut.getPatterns()).containsExactly(pattern); + assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); + } + + @Test + void shouldRemovePatternAndNotifyNetwork( + @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting + ) { + // Arrange + final SimplePattern pattern = new SimplePattern(FakeResources.A); + sut.setPattern(0, pattern); + + // Act + sut.setPattern(0, null); + + // Assert + assertThat(sut.getPatterns()).isEmpty(); + assertThat(autocrafting.getOutputs()).isEmpty(); + } + + @Test + void shouldReplacePatternAndNotifyNetwork( + @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting + ) { + // Arrange + final SimplePattern pattern = new SimplePattern(FakeResources.A); + sut.setPattern(0, pattern); + + // Act + final SimplePattern replacedPattern = new SimplePattern(FakeResources.B); + sut.setPattern(0, replacedPattern); + + // Assert + assertThat(sut.getPatterns()).containsExactly(replacedPattern); + assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.B); + } + + @Test + void shouldRemovePatternsFromNetworkWhenInactive( + @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting + ) { + // Arrange + final SimplePattern pattern = new SimplePattern(FakeResources.A); + sut.setPattern(0, pattern); + + // Act + sut.setActive(false); + + // Assert + assertThat(sut.getPatterns()).containsExactly(pattern); + assertThat(autocrafting.getOutputs()).isEmpty(); + } + + @Test + void shouldAddPatternsFromNetworkWhenActive( + @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting + ) { + // Arrange + final SimplePattern pattern = new SimplePattern(FakeResources.A); + sut.setPattern(0, pattern); + sut.setActive(false); + + // Act + sut.setActive(true); + + // Assert + assertThat(sut.getPatterns()).containsExactly(pattern); + assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index fb2b9aa5f..c3279b9d2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -48,6 +48,7 @@ include("refinedstorage-resource-api") include("refinedstorage-storage-api") include("refinedstorage-query-parser") include("refinedstorage-grid-api") +include("refinedstorage-autocrafting-api") include("refinedstorage-network-api") include("refinedstorage-network") include("refinedstorage-common-api") From faa559617fc73f1861f35aea236369984a731ccc Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 30 Aug 2024 19:24:29 +0200 Subject: [PATCH 29/83] feat: the grid now knows what is craftable --- .idea/dictionaries/refinedstorage.xml | 1 + config/checkstyle/checkstyle.xml | 2 +- .../PatternRepositoryImplTest.java | 2 +- .../refinedstorage/common/api/grid/Grid.java | 4 + .../view/AbstractPlatformGridResource.java | 11 ++- .../api/support/resource/ResourceType.java | 2 +- .../common/grid/AbstractGridBlockEntity.java | 15 +++ .../grid/AbstractGridContainerMenu.java | 1 + .../refinedstorage/common/grid/GridData.java | 9 +- .../common/grid/WirelessGrid.java | 7 ++ .../grid/screen/AbstractGridScreen.java | 40 +++++--- .../AbstractFluidGridResourceFactory.java | 5 +- .../view/AbstractItemGridResourceFactory.java | 5 +- .../view/CompositeGridResourceFactory.java | 4 +- .../common/grid/view/FluidGridResource.java | 5 +- .../common/grid/view/ItemGridResource.java | 5 +- .../storage/portablegrid/PortableGrid.java | 7 ++ .../common/support/ResourceSlotRendering.java | 4 +- .../support/resource/FluidResourceType.java | 4 +- .../support/resource/ItemResourceType.java | 4 +- .../assets/refinedstorage/lang/en_us.json | 1 + .../api/grid/view/GridResource.java | 2 + .../api/grid/view/GridResourceFactory.java | 5 +- .../api/grid/view/GridViewBuilder.java | 8 ++ .../api/grid/view/GridViewBuilderImpl.java | 10 ++ .../api/grid/view/GridViewImpl.java | 52 ++++++---- .../grid/query/GridQueryParserImplTest.java | 9 +- .../api/grid/view/GridResourceImpl.java | 16 +++ .../api/grid/view/GridViewImplTest.java | 99 ++++++++++++++++++- .../AutocraftingNetworkComponentImplTest.java | 2 +- .../PatternProviderNetworkNodeTest.java | 2 +- 31 files changed, 286 insertions(+), 57 deletions(-) diff --git a/.idea/dictionaries/refinedstorage.xml b/.idea/dictionaries/refinedstorage.xml index 3ce828eb4..74576b5dd 100644 --- a/.idea/dictionaries/refinedstorage.xml +++ b/.idea/dictionaries/refinedstorage.xml @@ -5,6 +5,7 @@ autocrafting autoselected blocklist + craftable crafter crafters cullface diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml index 17c992bd4..5f3d43e3b 100644 --- a/config/checkstyle/checkstyle.xml +++ b/config/checkstyle/checkstyle.xml @@ -22,7 +22,7 @@ - + diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java index 94f3e5a1f..e357b796f 100644 --- a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java @@ -92,4 +92,4 @@ void shouldRemovePatternButNotRemoveOutputIfAnotherPatternStillHasThatOutput() { FakeResources.B ); } -} \ No newline at end of file +} diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java index 92e194e46..a493a55c0 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java @@ -5,9 +5,11 @@ import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.TrackedResourceAmount; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; import java.util.List; +import java.util.Set; import net.minecraft.server.level.ServerPlayer; import org.apiguardian.api.API; @@ -24,5 +26,7 @@ public interface Grid { List getResources(Class actorType); + Set getCraftableResources(); + GridOperations createOperations(ResourceType resourceType, ServerPlayer player); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java index 01ebaa119..ff6451526 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java @@ -18,14 +18,17 @@ public abstract class AbstractPlatformGridResource> attributes; + private final boolean craftable; private boolean zeroed; protected AbstractPlatformGridResource(final T resource, final String name, - final Map> attributes) { + final Map> attributes, + final boolean craftable) { this.resource = resource; this.name = name; this.attributes = attributes; + this.craftable = craftable; } @Override @@ -58,6 +61,11 @@ public void setZeroed(final boolean zeroed) { this.zeroed = zeroed; } + @Override + public boolean isCraftable() { + return craftable; + } + @Nullable @Override public PlatformResourceKey getResourceForRecipeMods() { @@ -70,6 +78,7 @@ public String toString() { + "resource=" + resource + ", name='" + name + '\'' + ", attributes=" + attributes + + ", craftable=" + craftable + ", zeroed=" + zeroed + '}'; } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java index 4f02ddefa..d31f1e176 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java @@ -29,7 +29,7 @@ public interface ResourceType { double getDisplayAmount(long amount); - Optional toGridResource(ResourceKey resource); + Optional toGridResource(ResourceKey resource, boolean craftable); long getInterfaceExportLimit(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index 4de556a45..c29cc6df3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcher; import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.node.container.NetworkNodeContainerPriorities; import com.refinedmods.refinedstorage.api.network.impl.node.grid.GridNetworkNode; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; @@ -15,12 +16,15 @@ import com.refinedmods.refinedstorage.common.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; import com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock; import com.refinedmods.refinedstorage.common.support.network.AbstractBaseNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerPlayer; @@ -53,6 +57,17 @@ public List getResources(final Class act .getResources(actorType); } + @Override + public Set getCraftableResources() { + return requireNonNull(mainNetworkNode.getNetwork()) + .getComponent(AutocraftingNetworkComponent.class) + .getOutputs() + .stream() + .filter(PlatformResourceKey.class::isInstance) + .map(PlatformResourceKey.class::cast) + .collect(Collectors.toSet()); + } + @Override public GridOperations createOperations(final ResourceType resourceType, final ServerPlayer player) { final Network network = requireNonNull(mainNetworkNode.getNetwork()); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 45fdf9efa..544c62915 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -106,6 +106,7 @@ protected AbstractGridContainerMenu( resource.resourceAmount().amount(), resource.trackedResource().orElse(null) )); + gridData.craftableResources().forEach(viewBuilder::withCraftableResource); this.view = viewBuilder.build(); this.view.setSortingDirection(Platform.INSTANCE.getConfig().getGrid().getSortingDirection()); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java index a5b8b63aa..b6b086048 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java @@ -5,18 +5,21 @@ import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage.common.api.grid.Grid; import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.storage.StorageCodecs; import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Set; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -public record GridData(boolean active, List resources) { +public record GridData(boolean active, List resources, Set craftableResources) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.BOOL, GridData::active, ByteBufCodecs.collection(ArrayList::new, StreamCodec.composite( @@ -24,13 +27,15 @@ public record GridData(boolean active, List resources) { StorageCodecs.TRACKED_RESOURCE_OPTIONAL_STREAM_CODEC, GridResource::trackedResource, GridResource::new )), GridData::resources, + ByteBufCodecs.collection(HashSet::new, ResourceCodecs.STREAM_CODEC), GridData::craftableResources, GridData::new ); public static GridData of(final Grid grid) { return new GridData( grid.isGridActive(), - grid.getResources(PlayerActor.class).stream().map(GridResource::of).toList() + grid.getResources(PlayerActor.class).stream().map(GridResource::of).toList(), + grid.getCraftableResources() ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java index c7041aa98..e471c6e77 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java @@ -16,11 +16,13 @@ import com.refinedmods.refinedstorage.common.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; import com.refinedmods.refinedstorage.common.api.support.network.item.NetworkItemContext; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.Set; import net.minecraft.server.level.ServerPlayer; @@ -76,6 +78,11 @@ public List getResources(final Class act return getStorage().map(storage -> storage.getResources(actorType)).orElse(Collections.emptyList()); } + @Override + public Set getCraftableResources() { + return Collections.emptySet(); + } + @Override public GridOperations createOperations(final ResourceType resourceType, final ServerPlayer player) { return getStorage() diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 6d24be377..71a8f9633 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -35,6 +35,7 @@ import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.resources.language.I18n; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; @@ -48,6 +49,7 @@ import static com.refinedmods.refinedstorage.common.support.Sprites.SEARCH_SIZE; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationKey; import static java.util.Objects.requireNonNullElse; public abstract class AbstractGridScreen extends AbstractStretchingScreen { @@ -273,15 +275,32 @@ private void renderAmount(final GuiGraphics graphics, if (!(resource instanceof PlatformGridResource platformResource)) { return; } - final String text = resource.isZeroed() ? "0" : platformResource.getDisplayedAmount(getMenu().getView()); - final int color = resource.isZeroed() - ? requireNonNullElse(ChatFormatting.RED.getColor(), 15) - : requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); + final long amount = platformResource.getAmount(getMenu().getView()); + final String text = getAmountText(resource, platformResource, amount); + final int color = getAmountColor(resource, amount); final boolean large = (minecraft != null && minecraft.isEnforceUnicode()) || Platform.INSTANCE.getConfig().getGrid().isLargeFont(); ResourceSlotRendering.renderAmount(graphics, slotX, slotY, text, color, large); } + private int getAmountColor(final GridResource resource, final long amount) { + if (amount == 0 && resource.isCraftable()) { + return requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); + } else if (resource.isZeroed()) { + return requireNonNullElse(ChatFormatting.RED.getColor(), 15); + } + return requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); + } + + private String getAmountText(final GridResource resource, + final PlatformGridResource platformResource, + final long amount) { + if (amount == 0 && resource.isCraftable()) { + return I18n.get(createTranslationKey("gui", "grid.craft")); + } + return platformResource.getDisplayedAmount(getMenu().getView()); + } + private void renderDisabledSlot(final GuiGraphics graphics, final int slotX, final int slotY) { graphics.fillGradient( RenderType.guiOverlay(), slotX, slotY, slotX + 16, slotY + 16, DISABLED_SLOT_COLOR, DISABLED_SLOT_COLOR, 0 @@ -326,10 +345,11 @@ private void renderHoveredResourceTooltip(final GuiGraphics graphics, platformResource.getTooltipImage(), lines ); - if (Platform.INSTANCE.getConfig().getGrid().isDetailedTooltip()) { - addDetailedTooltip(view, platformResource, processedLines); - } - if (!platformResource.isZeroed()) { + final long amount = platformResource.getAmount(getMenu().getView()); + if (amount > 0) { + if (Platform.INSTANCE.getConfig().getGrid().isDetailedTooltip()) { + addDetailedTooltip(view, platformResource, processedLines); + } processedLines.addAll(platformResource.getExtractionHints(getMenu().getCarried(), getMenu().getView())); } Platform.INSTANCE.renderTooltip(graphics, processedLines, mouseX, mouseY); @@ -338,9 +358,7 @@ private void renderHoveredResourceTooltip(final GuiGraphics graphics, private void addDetailedTooltip(final GridView view, final PlatformGridResource platformResource, final List lines) { - final String amountInTooltip = platformResource.isZeroed() - ? "0" - : platformResource.getAmountInTooltip(getMenu().getView()); + final String amountInTooltip = platformResource.getAmountInTooltip(getMenu().getView()); lines.add(new SmallTextClientTooltipComponent( createTranslation("misc", "total", amountInTooltip).withStyle(ChatFormatting.GRAY) )); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java index 27fa5fb16..6129d5283 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java @@ -15,7 +15,7 @@ public abstract class AbstractFluidGridResourceFactory implements GridResourceFactory { @Override - public Optional apply(final ResourceKey resource) { + public Optional apply(final ResourceKey resource, final boolean craftable) { if (!(resource instanceof FluidResource fluidResource)) { return Optional.empty(); } @@ -30,7 +30,8 @@ public Optional apply(final ResourceKey resource) { modId, modName, tags, - tooltip + tooltip, + craftable )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java index fe3af6975..4411ac082 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java @@ -18,7 +18,7 @@ public abstract class AbstractItemGridResourceFactory implements GridResourceFactory { @Override - public Optional apply(final ResourceKey resource) { + public Optional apply(final ResourceKey resource, final boolean craftable) { if (!(resource instanceof ItemResource itemResource)) { return Optional.empty(); } @@ -36,7 +36,8 @@ public Optional apply(final ResourceKey resource) { modId, modName, tags, - tooltip + tooltip, + craftable )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java index fad231cfa..e73b6275b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java @@ -16,10 +16,10 @@ public CompositeGridResourceFactory(final PlatformRegistry resourc } @Override - public Optional apply(final ResourceKey resource) { + public Optional apply(final ResourceKey resource, final boolean craftable) { return resourceTypeRegistry.getAll() .stream() - .flatMap(type -> type.toGridResource(resource).stream()) + .flatMap(type -> type.toGridResource(resource, craftable).stream()) .findFirst(); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java index 63dae70de..bc9697a5c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java @@ -41,13 +41,14 @@ public FluidGridResource(final FluidResource resource, final String modId, final String modName, final Set tags, - final String tooltip) { + final String tooltip, + final boolean craftable) { super(resource, name, Map.of( GridResourceAttributeKeys.MOD_ID, Set.of(modId), GridResourceAttributeKeys.MOD_NAME, Set.of(modName), GridResourceAttributeKeys.TAGS, tags, GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) - )); + ), craftable); this.id = BuiltInRegistries.FLUID.getId(resource.fluid()); this.rendering = RefinedStorageApi.INSTANCE.getResourceRendering(FluidResource.class); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java index 6abbfedfc..2bdf5ae01 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java @@ -41,13 +41,14 @@ public ItemGridResource(final ItemResource resource, final String modId, final String modName, final Set tags, - final String tooltip) { + final String tooltip, + final boolean craftable) { super(resource, name, Map.of( GridResourceAttributeKeys.MOD_ID, Set.of(modId), GridResourceAttributeKeys.MOD_NAME, Set.of(modName), GridResourceAttributeKeys.TAGS, tags, GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) - )); + ), craftable); this.id = Item.getId(resource.item()); this.itemStack = itemStack; this.itemResource = resource; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java index 90d548274..f7455d5fc 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java @@ -17,11 +17,13 @@ import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.grid.Grid; import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; import com.refinedmods.refinedstorage.common.storage.DiskInventory; import java.util.Collections; import java.util.List; +import java.util.Set; import javax.annotation.Nullable; import net.minecraft.server.level.ServerPlayer; @@ -110,6 +112,11 @@ public List getResources(final Class act )).toList(); } + @Override + public Set getCraftableResources() { + return Collections.emptySet(); + } + @Override public GridOperations createOperations(final ResourceType resourceType, final ServerPlayer player) { if (storage == null) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java index 96a3c1420..4cd868c58 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java @@ -66,7 +66,7 @@ public static void renderAmount(final GuiGraphics graphics, public static void renderAmount(final GuiGraphics graphics, final int x, final int y, - final String amount, + final String text, final int color, final boolean large) { final Font font = Minecraft.getInstance().font; @@ -77,7 +77,7 @@ public static void renderAmount(final GuiGraphics graphics, if (!large) { poseStack.scale(0.5F, 0.5F, 1); } - graphics.drawString(font, amount, (large ? 16 : 30) - font.width(amount), large ? 8 : 22, color, true); + graphics.drawString(font, text, (large ? 16 : 30) - font.width(text), large ? 8 : 22, color, true); poseStack.popPose(); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java index dc1bb66c3..3d57926f7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java @@ -26,8 +26,8 @@ class FluidResourceType implements ResourceType { private static final ResourceLocation SPRITE = createIdentifier("widget/side_button/resource_type/fluid"); @Override - public Optional toGridResource(final ResourceKey resource) { - return Platform.INSTANCE.getFluidGridResourceFactory().apply(resource); + public Optional toGridResource(final ResourceKey resource, final boolean craftable) { + return Platform.INSTANCE.getFluidGridResourceFactory().apply(resource, craftable); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java index 6c32328e0..3cda9e40e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java @@ -26,8 +26,8 @@ class ItemResourceType implements ResourceType { private static final ResourceLocation SPRITE = createIdentifier("widget/side_button/resource_type/item"); @Override - public Optional toGridResource(final ResourceKey resource) { - return Platform.INSTANCE.getItemGridResourceFactory().apply(resource); + public Optional toGridResource(final ResourceKey resource, final boolean craftable) { + return Platform.INSTANCE.getItemGridResourceFactory().apply(resource, craftable); } @Override diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 4a2418c59..2c65188fa 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -61,6 +61,7 @@ "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "All", "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage.grid.craft": "Craft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java index 20b613552..50f787073 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java @@ -23,4 +23,6 @@ public interface GridResource { boolean isZeroed(); void setZeroed(boolean zeroed); + + boolean isCraftable(); } diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java index 64289636b..55913ebe4 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java @@ -15,8 +15,9 @@ public interface GridResourceFactory { /** * Transforms a {@link com.refinedmods.refinedstorage.api.resource.ResourceKey} into a {@link GridResource}. * - * @param resource the resource + * @param resource the resource + * @param craftable whether the resource is craftable * @return the grid resource, if applicable */ - Optional apply(ResourceKey resource); + Optional apply(ResourceKey resource, boolean craftable); } diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java index 9bd00df04..99ca4573f 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java @@ -22,6 +22,14 @@ public interface GridViewBuilder { */ GridViewBuilder withResource(ResourceKey resource, long amount, @Nullable TrackedResource trackedResource); + /** + * Adds a resource into the view and marks it as craftable. + * + * @param resource the resource + * @return this builder + */ + GridViewBuilder withCraftableResource(ResourceKey resource); + /** * @return a {@link GridView} with the specified resources */ diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java index a1fb8af66..0514a0f54 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java @@ -6,7 +6,9 @@ import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import javax.annotation.Nullable; import org.apiguardian.api.API; @@ -15,6 +17,7 @@ public class GridViewBuilderImpl implements GridViewBuilder { private final GridResourceFactory resourceFactory; private final ResourceList backingList = ResourceListImpl.create(); + private final Set craftableResources = new HashSet<>(); private final Map trackedResources = new HashMap<>(); private final GridSortingType identitySortingType; private final GridSortingType defaultSortingType; @@ -36,12 +39,19 @@ public GridViewBuilder withResource(final ResourceKey resource, return this; } + @Override + public GridViewBuilder withCraftableResource(final ResourceKey resource) { + craftableResources.add(resource); + return this; + } + @Override public GridView build() { return new GridViewImpl( resourceFactory, backingList, trackedResources, + craftableResources, identitySortingType, defaultSortingType ); diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java index e0a82b56b..c1c123d34 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.function.BiPredicate; import javax.annotation.Nullable; @@ -27,6 +28,7 @@ public class GridViewImpl implements GridView { private final Comparator identitySort; private final GridResourceFactory resourceFactory; private final Map trackedResources = new HashMap<>(); + private final Set craftableResources; private ViewList viewList = new ViewList(new ArrayList<>(), new HashMap<>()); private GridSortingType sortingType; @@ -42,10 +44,12 @@ public class GridViewImpl implements GridView { * @param initialTrackedResources initial tracked resources state * @param identitySortingType a sorting type required to keep a consistent sorting order with quantity sorting * @param defaultSortingType the default sorting type + * @param craftableResources resources which are craftable and must stay in the view list */ public GridViewImpl(final GridResourceFactory resourceFactory, final ResourceList backingList, final Map initialTrackedResources, + final Set craftableResources, final GridSortingType identitySortingType, final GridSortingType defaultSortingType) { this.resourceFactory = resourceFactory; @@ -53,6 +57,7 @@ public GridViewImpl(final GridResourceFactory resourceFactory, this.sortingType = defaultSortingType; this.backingList = backingList; this.trackedResources.putAll(initialTrackedResources); + this.craftableResources = craftableResources; } @Override @@ -106,19 +111,31 @@ private ViewList createViewList() { final List list = new ArrayList<>(); final Map index = new HashMap<>(); for (final ResourceKey resource : backingList.getAll()) { - final GridResource existingGridResource = viewList.index.get(resource); - if (existingGridResource != null) { - tryAddGridResourceIntoViewList(existingGridResource, list, index, resource); - } else { - resourceFactory.apply(resource).ifPresent( - gridResource -> tryAddGridResourceIntoViewList(gridResource, list, index, resource) - ); + tryAddResourceIntoViewList(resource, list, index, craftableResources.contains(resource)); + } + for (final ResourceKey craftableResource : craftableResources) { + if (!index.containsKey(craftableResource)) { + tryAddResourceIntoViewList(craftableResource, list, index, true); } } list.sort(getComparator()); return new ViewList(list, index); } + private void tryAddResourceIntoViewList(final ResourceKey resource, + final List list, + final Map index, + final boolean craftable) { + final GridResource existingGridResource = viewList.index.get(resource); + if (existingGridResource != null) { + tryAddGridResourceIntoViewList(existingGridResource, list, index, resource); + } else { + resourceFactory.apply(resource, craftable).ifPresent( + gridResource -> tryAddGridResourceIntoViewList(gridResource, list, index, resource) + ); + } + } + private void tryAddGridResourceIntoViewList(final GridResource gridResource, final List list, final Map index, @@ -141,13 +158,13 @@ public void onChange(final ResourceKey resource, if (gridResource != null) { LOGGER.debug("{} was already found in the view list", resource); if (gridResource.isZeroed()) { - reinsertZeroedResourceIntoViewList(resource, operationResult, gridResource); + reinsertZeroedResourceIntoViewList(resource, gridResource); } else { handleChangeForExistingResource(resource, operationResult, gridResource); } } else { LOGGER.debug("{} is a new resource, adding it into the view list if filter allows it", resource); - handleChangeForNewResource(resource, operationResult); + handleChangeForNewResource(resource); } } @@ -168,11 +185,12 @@ private void updateOrRemoveTrackedResource(final ResourceKey resource, } } - private void reinsertZeroedResourceIntoViewList(final ResourceKey resource, - final ResourceList.OperationResult operationResult, - final GridResource oldGridResource) { + private void reinsertZeroedResourceIntoViewList(final ResourceKey resource, final GridResource oldGridResource) { LOGGER.debug("{} was zeroed, unzeroing", resource); - final GridResource newResource = resourceFactory.apply(operationResult.resource()).orElseThrow(); + final GridResource newResource = resourceFactory.apply( + resource, + craftableResources.contains(resource) + ).orElseThrow(); viewList.index.put(resource, newResource); final int index = CoreValidations.validateNotNegative( viewList.list.indexOf(oldGridResource), @@ -201,7 +219,7 @@ private void updateExistingResourceInViewList(final ResourceKey resource, final GridResource gridResource, final boolean noLongerAvailable) { viewList.list.remove(gridResource); - if (noLongerAvailable) { + if (noLongerAvailable && !craftableResources.contains(resource)) { viewList.index.remove(resource); notifyListener(); } else { @@ -210,9 +228,9 @@ private void updateExistingResourceInViewList(final ResourceKey resource, } } - private void handleChangeForNewResource(final ResourceKey resource, - final ResourceList.OperationResult operationResult) { - final GridResource gridResource = resourceFactory.apply(operationResult.resource()).orElseThrow(); + private void handleChangeForNewResource(final ResourceKey resource) { + final GridResource gridResource = resourceFactory.apply(resource, false) + .orElseThrow(); if (filter.test(this, gridResource)) { LOGGER.debug("Filter allowed, actually adding {}", resource); viewList.index.put(resource, gridResource); diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java index 8d69ad560..4c1d63774 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java @@ -13,6 +13,7 @@ import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -33,9 +34,10 @@ class GridQueryParserImplTest { ); private final GridView view = new GridViewImpl( - resource -> Optional.of(new GridResourceImpl(resource)), + (resource, craftable) -> Optional.of(new GridResourceImpl(resource)), ResourceListImpl.create(), new HashMap<>(), + new HashSet<>(), v -> Comparator.comparing(GridResource::getName), v -> Comparator.comparingLong(resource -> resource.getAmount(v)) ); @@ -330,5 +332,10 @@ public boolean isZeroed() { public void setZeroed(final boolean zeroed) { throw new UnsupportedOperationException(); } + + @Override + public boolean isCraftable() { + return false; + } } } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java index ae11dd59e..271b37b4b 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java @@ -11,14 +11,20 @@ public class GridResourceImpl implements GridResource { private final ResourceKey resource; private final Map> attributes; + private boolean craftable; private boolean zeroed; public GridResourceImpl(final ResourceKey resource) { + this(resource, false); + } + + public GridResourceImpl(final ResourceKey resource, final boolean craftable) { this.resource = resource; this.attributes = Map.of( FakeGridResourceAttributeKeys.MOD_ID, Set.of(resource.toString()), FakeGridResourceAttributeKeys.MOD_NAME, Set.of(resource.toString()) ); + this.craftable = craftable; } public GridResourceImpl zeroed() { @@ -26,6 +32,11 @@ public GridResourceImpl zeroed() { return this; } + public GridResourceImpl craftable() { + craftable = true; + return this; + } + @Override public Optional getTrackedResource(final GridView view) { return view.getTrackedResource(resource); @@ -56,6 +67,11 @@ public void setZeroed(final boolean zeroed) { this.zeroed = zeroed; } + @Override + public boolean isCraftable() { + return craftable; + } + @Override public String toString() { return resource.toString(); diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java index 7b5efb742..9a19aa20d 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java @@ -28,7 +28,7 @@ class GridViewImplTest { @BeforeEach void setUp() { - viewBuilder = getViewBuilder(resource -> Optional.of(new GridResourceImpl(resource))); + viewBuilder = getViewBuilder((resource, craftable) -> Optional.of(new GridResourceImpl(resource, craftable))); } private static GridViewBuilderImpl getViewBuilder(final GridResourceFactory resourceFactory) { @@ -47,7 +47,7 @@ void shouldAddResourcesWithSameNameButDifferentIdentity() { // Arrange final GridViewBuilder builder = getViewBuilder( - resourceAmount -> Optional.of(new GridResourceWithMetadata(resourceAmount)) + (resource, craftable) -> Optional.of(new GridResourceWithMetadata(resource)) ); final GridView view = builder.build(); @@ -656,6 +656,101 @@ void shouldClear() { assertThat(view.getAmount(D)).isZero(); } + @Test + void shouldIncludeCraftableResourceInViewList() { + // Arrange + final GridView view = viewBuilder + .withResource(A, 15, null) + .withCraftableResource(B) + .build(); + + // Act + view.sort(); + + // Assert + assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( + new GridResourceImpl(A), + new GridResourceImpl(B).craftable() + ); + assertThat(view.getAmount(A)).isEqualTo(15); + assertThat(view.getAmount(B)).isZero(); + assertThat(view.copyBackingList().copyState()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(new ResourceAmount(A, 15)); + } + + @Test + void shouldIncludeCraftableResourceInViewListEvenIfItIsInTheBackingList() { + // Arrange + final GridView view = viewBuilder + .withResource(A, 15, null) + .withCraftableResource(A) + .build(); + + // Act + view.sort(); + + // Assert + assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new GridResourceImpl(A).craftable() + ); + assertThat(view.getAmount(A)).isEqualTo(15); + assertThat(view.copyBackingList().copyState()) + .usingRecursiveFieldByFieldElementComparator() + .containsExactly(new ResourceAmount(A, 15)); + } + + @Test + void shouldNotRemoveCraftableResource() { + // Arrange + final GridView view = viewBuilder + .withResource(A, 15, null) + .withCraftableResource(A) + .build(); + + view.sort(); + + // Act + view.onChange(A, -15, null); + + // Assert + assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new GridResourceImpl(A).craftable() + ); + assertThat(view.getAmount(A)).isZero(); + assertThat(view.copyBackingList().copyState()).isEmpty(); + } + + @Test + void shouldNotRemoveCraftableResourceEvenWhenPreventingSorting() { + // Arrange + final GridView view = viewBuilder + .withResource(A, 15, null) + .withCraftableResource(A) + .build(); + + view.sort(); + view.setPreventSorting(true); + + // Act & assert + view.onChange(A, -15, null); + + assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new GridResourceImpl(A).zeroed().craftable() + ); + assertThat(view.getAmount(A)).isZero(); + assertThat(view.copyBackingList().copyState()).isEmpty(); + + view.onChange(A, 1, null); + + assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new GridResourceImpl(A).craftable() + ); + assertThat(view.getAmount(A)).isEqualTo(1); + assertThat(view.copyBackingList().copyState()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new ResourceAmount(A, 1) + ); + } + private record ResourceWithMetadata(ResourceKey resource, int metadata) implements ResourceKey { } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java index d63b45027..2b4b0a7b8 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java @@ -73,4 +73,4 @@ void shouldRemovePatternManually() { // Assert assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().isEmpty(); } -} \ No newline at end of file +} diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java index e585c4a0a..1c9412b48 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java @@ -108,4 +108,4 @@ void shouldAddPatternsFromNetworkWhenActive( assertThat(sut.getPatterns()).containsExactly(pattern); assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); } -} \ No newline at end of file +} From aed747347a79aa41af7d008fdac7578b2790a8ae Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 30 Aug 2024 19:29:20 +0200 Subject: [PATCH 30/83] chore: change wording of not chained help --- .../common/autocrafting/PatternGridScreen.java | 4 ++-- .../assets/refinedstorage/lang/en_us.json | 2 +- .../side_button/crafter_lock_mode/never.png | Bin 174 -> 175 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridScreen.java index 3b10fbd67..f8f76f606 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridScreen.java @@ -30,8 +30,8 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationAsHeading; import static java.util.Objects.requireNonNull; -public class PatternGridScreen extends AbstractGridScreen implements - PatternGridContainerMenu.PatternGridListener { +public class PatternGridScreen extends AbstractGridScreen + implements PatternGridContainerMenu.PatternGridListener { static final int INSET_PADDING = 4; static final int INSET_WIDTH = 138; static final int INSET_HEIGHT = 71; diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 2c65188fa..4af0a608b 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -197,7 +197,7 @@ "gui.refinedstorage.crafter.chained.help": "This crafter is part of a chain.", "gui.refinedstorage.crafter.chained.head_help": "This crafter is the head of the chain.", "gui.refinedstorage.crafter.not_chained": "Not chained", - "gui.refinedstorage.crafter.not_chained.help": "You can connect multiple crafters together if you have more than 9 patterns to insert into a single target machine.", + "gui.refinedstorage.crafter.not_chained.help": "If another crafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/never.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/never.png index f6432fe9c0413a03068701fef73074ac1a4db6e4..55d093476291e072d5cd5c42778791bd2830dcd6 100644 GIT binary patch delta 109 zcmZ3-xSnx>XWAhK2EId#q8eTe3=9k|o-U3d7XHZ+zZwL+k{PtMSN{)ClaR44<5?cX z)38pGWkY8pgYXnJX`Vfd5sZ5Olb9tGy*-Spa(J2@miX#i5Hv7gUX93VW N22WQ%mvv4FO#tc>AU*&9 delta 108 zcmZ3_xQ=mxXX;@F2EN0L$MaXDFfcGUd%8G=SokMP{Av*NN^bb{>C^uJHHnh4vPU7^ zj2BFs8O#g?5}GchG&h!kOvT-zopr0A{)+1poj5 From cea095e6dd9f8761afa1d34b76eff1beb9689576 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 31 Aug 2024 08:31:42 +0200 Subject: [PATCH 31/83] refactor: convert patterns to regular classes The equals/hashCode must be the ID. Otherwise, multiple exact same patterns would only occur once in the network pattern set. And when you remove a pattern at that point, even if there is another still present, the pattern would be removed entirely from the set since it's stored once because it's the same pattern, even if duplicated. This also makes it easier to cache the output resources properly. --- .../api/autocrafting/AbstractPattern.java | 29 ++++++++++++ .../api/autocrafting/Pattern.java | 2 +- .../autocrafting/PatternRepositoryImpl.java | 6 +-- .../api/autocrafting/SimplePattern.java | 2 +- .../common/autocrafting/CraftingPattern.java | 36 ++++++++++++--- ...CraftingPatternClientTooltipComponent.java | 8 ++-- .../common/autocrafting/PatternItem.java | 42 +++++++++-------- .../common/autocrafting/PatternRendering.java | 10 ++--- .../autocrafting/ProcessingPattern.java | 28 ++++++++++-- .../autocrafting/SmithingTablePattern.java | 45 ++++++++++++++++--- ...ingTablePatternClientTooltipComponent.java | 10 ++--- .../autocrafting/StonecutterPattern.java | 28 ++++++++++-- ...necutterPatternClientTooltipComponent.java | 6 +-- .../impl/autocrafting/SimplePattern.java | 2 +- 14 files changed, 195 insertions(+), 59 deletions(-) create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java new file mode 100644 index 000000000..9e9b30761 --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java @@ -0,0 +1,29 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import java.util.Objects; +import java.util.UUID; + +public abstract class AbstractPattern implements Pattern { + private final UUID id; + + public AbstractPattern(final UUID id) { + this.id = id; + } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final AbstractPattern that = (AbstractPattern) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java index b82c4ac72..b4c84cf0d 100644 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/Pattern.java @@ -8,5 +8,5 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.4.6") public interface Pattern { - Set getOutputs(); + Set getOutputResources(); } diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java index 9104779de..27c2ec929 100644 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java @@ -12,15 +12,15 @@ public class PatternRepositoryImpl implements PatternRepository { @Override public void add(final Pattern pattern) { patterns.add(pattern); - outputs.addAll(pattern.getOutputs()); + outputs.addAll(pattern.getOutputResources()); } @Override public void remove(final Pattern pattern) { patterns.remove(pattern); - for (final ResourceKey output : pattern.getOutputs()) { + for (final ResourceKey output : pattern.getOutputResources()) { final boolean noOtherPatternHasThisOutput = patterns.stream() - .noneMatch(otherPattern -> otherPattern.getOutputs().contains(output)); + .noneMatch(otherPattern -> otherPattern.getOutputResources().contains(output)); if (noOtherPatternHasThisOutput) { outputs.remove(output); } diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java index 345dae527..3d43c06b4 100644 --- a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java @@ -12,7 +12,7 @@ public SimplePattern(final ResourceKey... outputs) { } @Override - public Set getOutputs() { + public Set getOutputResources() { return outputs; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java index c05d5a76c..3545c9aab 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java @@ -1,17 +1,43 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import java.util.List; import java.util.Set; +import java.util.UUID; + +// TODO: help tooltip for fuzzy mode tooltip +// TODO: help tooltip offset -2 +class CraftingPattern extends AbstractPattern { + private final List> inputs; + private final ResourceAmount output; + private final List byproducts; + private final Set outputResources; + + CraftingPattern(final UUID id, + final List> inputs, + final ResourceAmount output, + final List byproducts) { + super(id); + this.inputs = inputs; + this.output = output; + this.outputResources = Set.of(output.resource()); + this.byproducts = byproducts; + } -record CraftingPattern(List> inputs, ResourceAmount output, List byproducts) - implements Pattern { @Override - public Set getOutputs() { - return Set.of(output.resource()); + public Set getOutputResources() { + return outputResources; + } + + List> getInputs() { + return inputs; + } + + ResourceAmount getOutput() { + return output; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java index 934acb854..9987552f7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java @@ -45,14 +45,14 @@ class CraftingPatternClientTooltipComponent implements ClientTooltipComponent { this.width = width; this.height = height; this.craftingPattern = craftingPattern; - final ItemResource outputResource = craftingPattern.output().resource() instanceof ItemResource itemResource + final ItemResource outputResource = craftingPattern.getOutput().resource() instanceof ItemResource itemResource ? itemResource : null; this.outputStack = outputResource != null - ? outputResource.toItemStack(craftingPattern.output().amount()) + ? outputResource.toItemStack(craftingPattern.getOutput().amount()) : null; this.outputText = outputResource != null - ? Component.literal(String.format("%dx ", craftingPattern.output().amount())) + ? Component.literal(String.format("%dx ", craftingPattern.getOutput().amount())) .append(outputResource.toItemStack().getHoverName()) .withStyle(ChatFormatting.GRAY) : null; } @@ -96,7 +96,7 @@ private void renderInputSlots(final int x, final int y, final GuiGraphics graphi private void renderInputSlot(final int x, final int y, final GuiGraphics graphics, final int sx, final int sy) { graphics.blitSprite(SLOT, x + sx * 18, y + sy * 18, 18, 18); final int index = sy * width + sx; - final List inputs = craftingPattern.inputs().get(index); + final List inputs = craftingPattern.getInputs().get(index); if (!inputs.isEmpty()) { final int idx = currentCycle % inputs.size(); final PlatformResourceKey resource = inputs.get(idx); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java index 28fe9d79e..f29f1e38e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItem.java @@ -159,29 +159,29 @@ public Optional getPattern(final ItemStack stack, final Level level) { return Optional.empty(); } return switch (state.type()) { - case CRAFTING -> getCraftingPattern(stack, level); - case PROCESSING -> getProcessingPattern(stack); - case STONECUTTER -> getStonecutterPattern(stack, level); - case SMITHING_TABLE -> getSmithingTablePattern(stack, level); + case CRAFTING -> getCraftingPattern(state.id(), stack, level); + case PROCESSING -> getProcessingPattern(state.id(), stack); + case STONECUTTER -> getStonecutterPattern(state.id(), stack, level); + case SMITHING_TABLE -> getSmithingTablePattern(state.id(), stack, level); }; } - private Optional getCraftingPattern(final ItemStack stack, final Level level) { + private Optional getCraftingPattern(final UUID id, final ItemStack stack, final Level level) { final CraftingPatternState craftingState = stack.get(DataComponents.INSTANCE.getCraftingPatternState()); if (craftingState == null) { return Optional.empty(); } - return getCraftingPattern(level, craftingState); + return getCraftingPattern(id, level, craftingState); } - private Optional getCraftingPattern(final Level level, final CraftingPatternState state) { + private Optional getCraftingPattern(final UUID id, final Level level, final CraftingPatternState state) { final RecipeMatrixContainer craftingMatrix = getFilledCraftingMatrix(state); final CraftingInput.Positioned positionedCraftingInput = craftingMatrix.asPositionedCraftInput(); final CraftingInput craftingInput = positionedCraftingInput.input(); return level.getRecipeManager() .getRecipeFor(RecipeType.CRAFTING, craftingInput, level) .map(RecipeHolder::value) - .map(recipe -> toCraftingPattern(level, recipe, craftingInput, state)); + .map(recipe -> toCraftingPattern(id, level, recipe, craftingInput, state)); } private RecipeMatrixContainer getFilledCraftingMatrix(final CraftingPatternState state) { @@ -194,14 +194,15 @@ private RecipeMatrixContainer getFilledCraftingMatrix(final CraftingPatternState return craftingMatrix; } - private CraftingPattern toCraftingPattern(final Level level, + private CraftingPattern toCraftingPattern(final UUID id, + final Level level, final CraftingRecipe recipe, final CraftingInput craftingInput, final CraftingPatternState state) { final List> inputs = getInputs(recipe, state); final ResourceAmount output = getOutput(level, recipe, craftingInput); final List byproducts = getByproducts(recipe, craftingInput); - return new CraftingPattern(inputs, output, byproducts); + return new CraftingPattern(id, inputs, output, byproducts); } private List> getInputs(final CraftingRecipe recipe, final CraftingPatternState state) { @@ -237,25 +238,26 @@ private List getByproducts(final CraftingRecipe recipe, final Cr .toList(); } - private Optional getProcessingPattern(final ItemStack stack) { + private Optional getProcessingPattern(final UUID id, final ItemStack stack) { final ProcessingPatternState state = stack.get( DataComponents.INSTANCE.getProcessingPatternState() ); if (state == null) { return Optional.empty(); } - return Optional.of(new ProcessingPattern(state.getFlatInputs(), state.getFlatOutputs())); + return Optional.of(new ProcessingPattern(id, state.getFlatInputs(), state.getFlatOutputs())); } - private Optional getStonecutterPattern(final ItemStack stack, final Level level) { + private Optional getStonecutterPattern(final UUID id, final ItemStack stack, final Level level) { final StonecutterPatternState state = stack.get(DataComponents.INSTANCE.getStonecutterPatternState()); if (state == null) { return Optional.empty(); } - return getStonecutterPattern(level, state); + return getStonecutterPattern(id, level, state); } - private Optional getStonecutterPattern(final Level level, final StonecutterPatternState state) { + private Optional getStonecutterPattern(final UUID id, final Level level, + final StonecutterPatternState state) { final SingleRecipeInput input = new SingleRecipeInput(state.input().toItemStack()); final ItemStack selectedOutput = state.selectedOutput().toItemStack(); final var recipes = level.getRecipeManager().getRecipesFor(RecipeType.STONECUTTING, input, level); @@ -263,6 +265,7 @@ private Optional getStonecutterPattern(final Level level, final Stonecu final ItemStack output = recipe.value().assemble(input, level.registryAccess()); if (ItemStack.isSameItemSameComponents(output, selectedOutput)) { return Optional.of(new StonecutterPattern( + id, state.input(), ItemResource.ofItemStack(output) )); @@ -271,15 +274,17 @@ private Optional getStonecutterPattern(final Level level, final Stonecu return Optional.empty(); } - private Optional getSmithingTablePattern(final ItemStack stack, final Level level) { + private Optional getSmithingTablePattern(final UUID id, final ItemStack stack, final Level level) { final SmithingTablePatternState state = stack.get(DataComponents.INSTANCE.getSmithingTablePatternState()); if (state == null) { return Optional.empty(); } - return getSmithingTablePattern(level, state); + return getSmithingTablePattern(id, level, state); } - private Optional getSmithingTablePattern(final Level level, final SmithingTablePatternState state) { + private Optional getSmithingTablePattern(final UUID id, + final Level level, + final SmithingTablePatternState state) { final SmithingRecipeInput input = new SmithingRecipeInput( state.template().toItemStack(), state.base().toItemStack(), @@ -287,6 +292,7 @@ private Optional getSmithingTablePattern(final Level level, final Smith ); return level.getRecipeManager().getRecipeFor(RecipeType.SMITHING, input, level) .map(recipe -> new SmithingTablePattern( + id, state.template(), state.base(), state.addition(), diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java index 462a4503a..3a7755bfe 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java @@ -42,16 +42,16 @@ public static Optional getOutput(final ItemStack stack) { } return RefinedStorageApi.INSTANCE.getPattern(stack, level).map(pattern -> switch (pattern) { case CraftingPattern craftingPattern - when craftingPattern.output().resource() instanceof ItemResource itemResource -> + when craftingPattern.getOutput().resource() instanceof ItemResource itemResource -> itemResource.toItemStack(); case ProcessingPattern processingPattern - when processingPattern.outputs().size() == 1 - && processingPattern.outputs().getFirst().resource() instanceof ItemResource itemResource -> + when processingPattern.getOutputs().size() == 1 + && processingPattern.getOutputs().getFirst().resource() instanceof ItemResource itemResource -> itemResource.toItemStack(); case StonecutterPattern stonecutterPattern - when stonecutterPattern.output() instanceof ItemResource itemResource -> itemResource.toItemStack(); + when stonecutterPattern.getOutput() instanceof ItemResource itemResource -> itemResource.toItemStack(); case SmithingTablePattern smithingTablePattern - when smithingTablePattern.output() instanceof ItemResource itemResource -> itemResource.toItemStack(); + when smithingTablePattern.getOutput() instanceof ItemResource itemResource -> itemResource.toItemStack(); default -> null; }); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java index bb62e136e..d658f4fc8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java @@ -1,16 +1,36 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import java.util.List; import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; -record ProcessingPattern(List inputs, List outputs) implements Pattern { +class ProcessingPattern extends AbstractPattern { + private final List inputs; + private final List outputs; + private final Set outputResources; + + ProcessingPattern(final UUID id, final List inputs, final List outputs) { + super(id); + this.inputs = inputs; + this.outputs = outputs; + this.outputResources = outputs.stream().map(ResourceAmount::resource).collect(Collectors.toSet()); + } + @Override - public Set getOutputs() { - return outputs.stream().map(ResourceAmount::resource).collect(Collectors.toSet()); + public Set getOutputResources() { + return outputResources; + } + + List getInputs() { + return inputs; + } + + List getOutputs() { + return outputs; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java index 4511879f4..fb9f7daf4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java @@ -1,15 +1,50 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import java.util.Set; +import java.util.UUID; + +class SmithingTablePattern extends AbstractPattern { + private final ItemResource template; + private final ItemResource base; + private final ItemResource addition; + private final ItemResource output; + private final Set outputResources; + + SmithingTablePattern(final UUID id, + final ItemResource template, + final ItemResource base, + final ItemResource addition, + final ItemResource output) { + super(id); + this.template = template; + this.base = base; + this.addition = addition; + this.output = output; + this.outputResources = Set.of(output); + } -record SmithingTablePattern(ItemResource template, ItemResource base, ItemResource addition, ItemResource output) - implements Pattern { @Override - public Set getOutputs() { - return Set.of(output); + public Set getOutputResources() { + return outputResources; + } + + ItemResource getTemplate() { + return template; + } + + ItemResource getBase() { + return base; + } + + ItemResource getAddition() { + return addition; + } + + ItemResource getOutput() { + return output; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java index 312cc58e2..e9c4bc3cc 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java @@ -23,7 +23,7 @@ class SmithingTablePatternClientTooltipComponent implements ClientTooltipCompone private final SmithingTablePattern pattern; SmithingTablePatternClientTooltipComponent(final SmithingTablePattern pattern) { - this.outputText = getOutputText(pattern.output()); + this.outputText = getOutputText(pattern.getOutput()); this.pattern = pattern; } @@ -33,11 +33,11 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap final int slotsY = y + 9 + 2; graphics.blitSprite(Sprites.SLOT, x, slotsY, 18, 18); final ResourceRendering rendering = RefinedStorageApi.INSTANCE.getResourceRendering(ItemResource.class); - rendering.render(pattern.template(), graphics, x + 1, slotsY + 1); + rendering.render(pattern.getTemplate(), graphics, x + 1, slotsY + 1); graphics.blitSprite(Sprites.SLOT, x + 18, slotsY, 18, 18); - rendering.render(pattern.base(), graphics, x + 18 + 1, slotsY + 1); + rendering.render(pattern.getBase(), graphics, x + 18 + 1, slotsY + 1); graphics.blitSprite(Sprites.SLOT, x + 18 + 18, slotsY, 18, 18); - rendering.render(pattern.addition(), graphics, x + 18 + 18 + 1, slotsY + 1); + rendering.render(pattern.getAddition(), graphics, x + 18 + 18 + 1, slotsY + 1); graphics.blitSprite( LIGHT_ARROW, x + (18 * 3) + ARROW_SPACING, @@ -47,7 +47,7 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap ); final int lastSlotX = x + (18 * 3) + ARROW_SPACING + LIGHT_ARROW_WIDTH + ARROW_SPACING; graphics.blitSprite(Sprites.SLOT, lastSlotX, slotsY, 18, 18); - rendering.render(pattern.output(), graphics, lastSlotX + 1, slotsY + 1); + rendering.render(pattern.getOutput(), graphics, lastSlotX + 1, slotsY + 1); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java index 4b4333177..bb17d7f21 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java @@ -1,14 +1,34 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import java.util.Set; +import java.util.UUID; + +class StonecutterPattern extends AbstractPattern { + private final ItemResource input; + private final ItemResource output; + private final Set outputResources; + + StonecutterPattern(final UUID id, final ItemResource input, final ItemResource output) { + super(id); + this.input = input; + this.output = output; + this.outputResources = Set.of(output); + } -record StonecutterPattern(ItemResource input, ItemResource output) implements Pattern { @Override - public Set getOutputs() { - return Set.of(output); + public Set getOutputResources() { + return outputResources; + } + + ItemResource getInput() { + return input; + } + + ItemResource getOutput() { + return output; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java index eeff7d187..b749148dd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java @@ -25,9 +25,9 @@ class StonecutterPatternClientTooltipComponent implements ClientTooltipComponent private final PlatformResourceKey output; StonecutterPatternClientTooltipComponent(final StonecutterPattern pattern) { - this.outputText = getOutputText(pattern.output()); - this.input = pattern.input(); - this.output = pattern.output(); + this.outputText = getOutputText(pattern.getOutput()); + this.input = pattern.getInput(); + this.output = pattern.getOutput(); } @Override diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java index 7e2b26d57..4ebb15448 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/SimplePattern.java @@ -13,7 +13,7 @@ public SimplePattern(final ResourceKey... outputs) { } @Override - public Set getOutputs() { + public Set getOutputResources() { return outputs; } } From eecc1ab0df28be0af374b57d949f64562ebe324f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 31 Aug 2024 08:44:33 +0200 Subject: [PATCH 32/83] feat: the tooltip for the fuzzy mode checkbox is now a help tooltip --- .../common/autocrafting/CraftingPattern.java | 2 -- .../CraftingPatternGridRenderer.java | 10 +++---- .../tooltip/HelpClientTooltipComponent.java | 30 ++++++++----------- .../support/widget/CustomCheckboxWidget.java | 14 +++++++++ 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java index 3545c9aab..8b5cedf74 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java @@ -9,8 +9,6 @@ import java.util.Set; import java.util.UUID; -// TODO: help tooltip for fuzzy mode tooltip -// TODO: help tooltip offset -2 class CraftingPattern extends AbstractPattern { private final List> inputs; private final ResourceAmount output; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternGridRenderer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternGridRenderer.java index cd6c530cc..8b94a7b49 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternGridRenderer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternGridRenderer.java @@ -8,7 +8,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; -import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; @@ -55,13 +55,13 @@ private CustomCheckboxWidget createFuzzyModeCheckbox() { CustomCheckboxWidget.Size.SMALL ); checkbox.setOnPressed((c, selected) -> menu.setFuzzyMode(selected)); - checkbox.setTooltip(getFuzzyModeTooltip(menu.isFuzzyMode())); + checkbox.setHelpTooltip(getFuzzyModeTooltip(menu.isFuzzyMode())); checkbox.visible = isFuzzyModeCheckboxVisible(); return checkbox; } - private static Tooltip getFuzzyModeTooltip(final boolean fuzzyMode) { - return fuzzyMode ? Tooltip.create(FUZZY_MODE_ON_HELP) : Tooltip.create(FUZZY_MODE_OFF_HELP); + private static Component getFuzzyModeTooltip(final boolean fuzzyMode) { + return fuzzyMode ? FUZZY_MODE_ON_HELP : FUZZY_MODE_OFF_HELP; } @Override @@ -91,7 +91,7 @@ public void fuzzyModeChanged(final boolean newFuzzyMode) { return; } fuzzyModeCheckbox.setSelected(newFuzzyMode); - fuzzyModeCheckbox.setTooltip(getFuzzyModeTooltip(newFuzzyMode)); + fuzzyModeCheckbox.setHelpTooltip(getFuzzyModeTooltip(newFuzzyMode)); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java index 8a61efc7d..375b88fd8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java @@ -25,27 +25,31 @@ public class HelpClientTooltipComponent implements ClientTooltipComponent { ); private static final Style STYLE = Style.EMPTY.withColor(0xFF129ED9); private static final int MAX_CHARS = 200; + private static final int HELP_ICON_SIZE = 20; + private static final int HELP_ICON_MARGIN = 4; private final List lines; private final float scale; + private final int paddingTop; - private HelpClientTooltipComponent(final Component text) { + private HelpClientTooltipComponent(final Component text, final int paddingTop) { this.lines = Language.getInstance().getVisualOrder( Minecraft.getInstance().font.getSplitter().splitLines(text, MAX_CHARS, STYLE) ); this.scale = SmallText.getScale(); + this.paddingTop = paddingTop; } @Override public int getHeight() { - return Math.max(20 + 4, (9 * lines.size()) + 4); + return Math.max(HELP_ICON_SIZE + paddingTop, (9 * lines.size()) + paddingTop); } @Override public int getWidth(final Font font) { int width = 0; for (final FormattedCharSequence line : lines) { - final int lineWidth = 20 + 4 + (int) (font.width(line) * scale); + final int lineWidth = HELP_ICON_SIZE + HELP_ICON_MARGIN + (int) (font.width(line) * scale); if (lineWidth > width) { width = lineWidth; } @@ -59,36 +63,28 @@ public void renderText(final Font font, final int y, final Matrix4f pose, final MultiBufferSource.BufferSource buffer) { - final int xx = x + 20 + 4; - int yy = y + 4; + final int xx = x + HELP_ICON_SIZE + HELP_ICON_MARGIN; + int yy = y + paddingTop; for (final FormattedCharSequence line : lines) { - SmallText.render( - font, - line, - xx, - yy, - scale, - pose, - buffer - ); + SmallText.render(font, line, xx, yy, scale, pose, buffer); yy += 9; } } @Override public void renderImage(final Font font, final int x, final int y, final GuiGraphics graphics) { - graphics.blitSprite(SPRITE, x, y + 2, 20, 20); + graphics.blitSprite(SPRITE, x, y + (paddingTop / 2), HELP_ICON_SIZE, HELP_ICON_SIZE); } public static ClientTooltipComponent create(final Component text) { if (hasShiftDown()) { - return createAlwaysDisplayed(text); + return new HelpClientTooltipComponent(text, 4); } else { return PRESS_SHIFT_FOR_HELP; } } public static ClientTooltipComponent createAlwaysDisplayed(final Component text) { - return new HelpClientTooltipComponent(text); + return new HelpClientTooltipComponent(text, 0); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/CustomCheckboxWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/CustomCheckboxWidget.java index 173534d67..054f9929a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/CustomCheckboxWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/CustomCheckboxWidget.java @@ -1,5 +1,9 @@ package com.refinedmods.refinedstorage.common.support.widget; +import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; +import com.refinedmods.refinedstorage.common.support.tooltip.HelpClientTooltipComponent; + +import java.util.List; import javax.annotation.Nullable; import com.mojang.blaze3d.systems.RenderSystem; @@ -32,6 +36,8 @@ public class CustomCheckboxWidget extends AbstractButton { @Nullable private OnPressed onPressed; + @Nullable + private Component helpTooltip; public CustomCheckboxWidget(final int x, final int y, @@ -59,6 +65,11 @@ private static int getWidth(final int maxWidth, final Component text, final Font return Math.min(maxWidth, size.widthHeight + CHECKBOX_TEXT_SPACING + font.width(text)); } + + public void setHelpTooltip(@Nullable final Component helpTooltip) { + this.helpTooltip = helpTooltip; + } + public void setOnPressed(@Nullable final OnPressed onPressed) { this.onPressed = onPressed; } @@ -92,6 +103,9 @@ public void updateWidgetNarration(final NarrationElementOutput output) { @Override public void renderWidget(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { final Minecraft minecraft = Minecraft.getInstance(); + if (isHovered && helpTooltip != null && minecraft.screen instanceof AbstractBaseScreen screen) { + screen.setDeferredTooltip(List.of(HelpClientTooltipComponent.createAlwaysDisplayed(helpTooltip))); + } RenderSystem.enableDepthTest(); final Font font = minecraft.font; graphics.setColor(1.0F, 1.0F, 1.0F, this.alpha); From 7c35657ba4d6d0c8389ba2f90f361e3adfccf7bb Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 10:50:50 +0200 Subject: [PATCH 33/83] feat: craftable grid slots now have a highlight and tooltip --- .../grid/screen/AbstractGridScreen.java | 34 ++++++---- .../CraftableClientTooltipComponent.java | 62 ++++++++++++++++++ .../tooltip/HelpClientTooltipComponent.java | 8 +-- .../common/support/tooltip/SmallText.java | 34 +++++++--- .../SmallTextClientTooltipComponent.java | 6 +- .../assets/refinedstorage/lang/en_us.json | 2 + .../textures/gui/sprites/grid/craftable.png | Bin 0 -> 217 bytes .../sprites/{grid_row.png => grid/row.png} | Bin 8 files changed, 114 insertions(+), 32 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/grid/craftable.png rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/{grid_row.png => grid/row.png} (100%) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 71a8f9633..b9bc09694 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -52,12 +52,14 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationKey; import static java.util.Objects.requireNonNullElse; +// TODO: help tooltip to enable focus mode +// TODO: help tooltips for the rest of grid?? public abstract class AbstractGridScreen extends AbstractStretchingScreen { protected static final int CLEAR_BUTTON_SIZE = 7; private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGridScreen.class); - private static final ResourceLocation ROW_SPRITE = createIdentifier("grid_row"); + private static final ResourceLocation ROW_SPRITE = createIdentifier("grid/row"); private static final int MODIFIED_JUST_NOW_MAX_SECONDS = 10; private static final int COLUMNS = 9; private static final int DISABLED_SLOT_COLOR = 0xFF5B5B5B; @@ -262,6 +264,9 @@ private void renderResourceWithAmount(final GuiGraphics graphics, final int slotX, final int slotY, final GridResource resource) { + if (resource.isCraftable()) { + graphics.fill(slotX, slotY, slotX + 16, slotY + 16, 0xBF9F7F50); + } if (resource instanceof PlatformGridResource platformResource) { platformResource.render(graphics, slotX, slotY); } @@ -316,9 +321,9 @@ protected void renderTooltip(final GuiGraphics graphics, final int x, final int } private void renderOverStorageAreaTooltip(final GuiGraphics graphics, final int x, final int y) { - final PlatformGridResource resource = getCurrentGridResource(); - if (resource != null) { - renderHoveredResourceTooltip(graphics, x, y, menu.getView(), resource); + final PlatformGridResource gridResource = getCurrentGridResource(); + if (gridResource != null) { + renderHoveredResourceTooltip(graphics, x, y, menu.getView(), gridResource); return; } final ItemStack carried = getMenu().getCarried(); @@ -333,24 +338,27 @@ private void renderHoveredResourceTooltip(final GuiGraphics graphics, final int mouseX, final int mouseY, final GridView view, - final PlatformGridResource platformResource) { - final ItemStack stackContext = platformResource instanceof ItemGridResource itemGridResource + final PlatformGridResource gridResource) { + final ItemStack stackContext = gridResource instanceof ItemGridResource itemGridResource ? itemGridResource.getItemStack() : ItemStack.EMPTY; - final List lines = platformResource.getTooltip(); + final List lines = gridResource.getTooltip(); final List processedLines = Platform.INSTANCE.processTooltipComponents( stackContext, graphics, mouseX, - platformResource.getTooltipImage(), + gridResource.getTooltipImage(), lines ); - final long amount = platformResource.getAmount(getMenu().getView()); + final long amount = gridResource.getAmount(getMenu().getView()); + if (amount > 0 && Platform.INSTANCE.getConfig().getGrid().isDetailedTooltip()) { + addDetailedTooltip(view, gridResource, processedLines); + } + if (gridResource.isCraftable()) { + processedLines.add(new CraftableClientTooltipComponent(amount == 0)); + } if (amount > 0) { - if (Platform.INSTANCE.getConfig().getGrid().isDetailedTooltip()) { - addDetailedTooltip(view, platformResource, processedLines); - } - processedLines.addAll(platformResource.getExtractionHints(getMenu().getCarried(), getMenu().getView())); + processedLines.addAll(gridResource.getExtractionHints(getMenu().getCarried(), getMenu().getView())); } Platform.INSTANCE.renderTooltip(graphics, processedLines, mouseX, mouseY); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java new file mode 100644 index 000000000..5dd4e2e77 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java @@ -0,0 +1,62 @@ +package com.refinedmods.refinedstorage.common.grid.screen; + +import com.refinedmods.refinedstorage.common.support.tooltip.SmallText; + +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import org.joml.Matrix4f; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + +class CraftableClientTooltipComponent implements ClientTooltipComponent { + private static final ResourceLocation ICON = createIdentifier("grid/craftable"); + private static final int ICON_SIZE = 9; + private static final int ICON_MARGIN = 4; + + private static final Component EMPTY = createTranslation("gui", "grid.craftable.click_to_craft"); + private static final Component EXISTING = createTranslation("gui", "grid.craftable.ctrl_click_to_craft"); + + private final Component text; + + CraftableClientTooltipComponent(final boolean empty) { + this.text = empty ? EMPTY : EXISTING; + } + + @Override + public int getHeight() { + return ICON_SIZE + 2; + } + + @Override + public int getWidth(final Font font) { + return ICON_SIZE + ICON_MARGIN + (int) (font.width(text) * SmallText.getScale()); + } + + @Override + public void renderText(final Font font, + final int x, + final int y, + final Matrix4f matrix, + final MultiBufferSource.BufferSource bufferSource) { + final int yOffset = SmallText.isSmall() ? 2 : 0; + SmallText.render( + font, + text.getVisualOrderText(), + x + ICON_SIZE + ICON_MARGIN, + y + yOffset, + 0x9F7F50, + matrix, + bufferSource + ); + } + + @Override + public void renderImage(final Font font, final int x, final int y, final GuiGraphics graphics) { + graphics.blitSprite(ICON, x, y, ICON_SIZE, ICON_SIZE); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java index 375b88fd8..8dcfc12cb 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/HelpClientTooltipComponent.java @@ -29,14 +29,12 @@ public class HelpClientTooltipComponent implements ClientTooltipComponent { private static final int HELP_ICON_MARGIN = 4; private final List lines; - private final float scale; private final int paddingTop; private HelpClientTooltipComponent(final Component text, final int paddingTop) { this.lines = Language.getInstance().getVisualOrder( Minecraft.getInstance().font.getSplitter().splitLines(text, MAX_CHARS, STYLE) ); - this.scale = SmallText.getScale(); this.paddingTop = paddingTop; } @@ -49,7 +47,7 @@ public int getHeight() { public int getWidth(final Font font) { int width = 0; for (final FormattedCharSequence line : lines) { - final int lineWidth = HELP_ICON_SIZE + HELP_ICON_MARGIN + (int) (font.width(line) * scale); + final int lineWidth = HELP_ICON_SIZE + HELP_ICON_MARGIN + (int) (font.width(line) * SmallText.getScale()); if (lineWidth > width) { width = lineWidth; } @@ -66,7 +64,7 @@ public void renderText(final Font font, final int xx = x + HELP_ICON_SIZE + HELP_ICON_MARGIN; int yy = y + paddingTop; for (final FormattedCharSequence line : lines) { - SmallText.render(font, line, xx, yy, scale, pose, buffer); + SmallText.render(font, line, xx, yy, pose, buffer); yy += 9; } } @@ -78,7 +76,7 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap public static ClientTooltipComponent create(final Component text) { if (hasShiftDown()) { - return new HelpClientTooltipComponent(text, 4); + return new HelpClientTooltipComponent(text, SmallText.isSmall() ? 4 : 0); } else { return PRESS_SHIFT_FOR_HELP; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java index 8d71dee69..a4756a8c2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java @@ -10,24 +10,38 @@ public final class SmallText { private SmallText() { } - static float getScale() { - return Minecraft.getInstance().isEnforceUnicode() ? 1F : 0.7F; + public static float getScale() { + return isSmall() ? 0.7F : 1F; } - static void render(final Font font, - final FormattedCharSequence text, - final int x, - final int y, - final float scale, - final Matrix4f pose, - final MultiBufferSource.BufferSource buffer) { + public static boolean isSmall() { + return !Minecraft.getInstance().isEnforceUnicode(); + } + + public static void render(final Font font, + final FormattedCharSequence text, + final int x, + final int y, + final Matrix4f pose, + final MultiBufferSource.BufferSource buffer) { + render(font, text, x, y, -1, pose, buffer); + } + + public static void render(final Font font, + final FormattedCharSequence text, + final int x, + final int y, + final int color, + final Matrix4f pose, + final MultiBufferSource.BufferSource buffer) { + final float scale = getScale(); final Matrix4f scaled = new Matrix4f(pose); scaled.scale(scale, scale, 1); font.drawInBatch( text, x / scale, (y / scale) + 1, - -1, + color, true, scaled, buffer, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallTextClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallTextClientTooltipComponent.java index 20190dafb..843547fde 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallTextClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallTextClientTooltipComponent.java @@ -19,8 +19,7 @@ public void renderText(final Font font, final int y, final Matrix4f pose, final MultiBufferSource.BufferSource buffer) { - final float scale = SmallText.getScale(); - SmallText.render(font, text.getVisualOrderText(), x, y, scale, pose, buffer); + SmallText.render(font, text.getVisualOrderText(), x, y, pose, buffer); } @Override @@ -30,7 +29,6 @@ public int getHeight() { @Override public int getWidth(final Font font) { - final float scale = SmallText.getScale(); - return (int) (font.width(text) * scale); + return (int) (font.width(text) * SmallText.getScale()); } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 4af0a608b..cbaed480b 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -62,6 +62,8 @@ "gui.refinedstorage.grid.resource_type.all": "All", "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.craft.click_to_craft": "Click to craft", + "gui.refinedstorage.grid.craft.ctrl_click_to_craft": "CTRL + click to craft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/grid/craftable.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/grid/craftable.png new file mode 100644 index 0000000000000000000000000000000000000000..769fc851ff9e62824bb71f516488641d20521ec1 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>3?#4ne^UZdjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCil21AIbU3knJn5)wK)J3T!;v$M13*9W8r8QSQ}0OjNSPHh8HoFzei!T+Iv zA=tk{2qakG5n0T@z;_sg8IR|$NC65OdAc};NQ9f7QKV Date: Sun, 1 Sep 2024 11:10:51 +0200 Subject: [PATCH 34/83] feat: pattern and crafting grid slots now have a craftable highlight hint isActive and isHighlightable is checked, to avoid rendering the background on processing matrix slots which should be rendered in the scissor instead. --- .../PatternGridContainerMenu.java | 28 ++++++- .../ProcessingPatternGridRenderer.java | 33 +++++++-- .../grid/AbstractGridContainerMenu.java | 9 +++ .../grid/CraftingGridContainerMenu.java | 15 ++++ .../grid/screen/AbstractGridScreen.java | 62 +++++++++++++++- .../CraftableClientTooltipComponent.java | 21 +++++- .../common/support/AbstractBaseScreen.java | 73 +++++++++---------- .../assets/refinedstorage/lang/en_us.json | 1 + .../api/grid/view/GridView.java | 6 ++ .../api/grid/view/GridViewImpl.java | 5 ++ .../api/grid/view/GridViewImplTest.java | 6 ++ 11 files changed, 204 insertions(+), 55 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java index b9b52dd28..45747deb0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.content.Menus; import com.refinedmods.refinedstorage.common.grid.AbstractGridContainerMenu; @@ -80,8 +81,8 @@ public PatternGridContainerMenu(final int syncId, this.stonecutterInput = new StonecutterInputContainer(playerInventory.player::level); this.smithingTableMatrix = new RecipeMatrixContainer(null, 3, 1); this.smithingTableResult = new ResultContainer(); - this.smithingTableRecipes = - playerInventory.player.level().getRecipeManager().getAllRecipesFor(RecipeType.SMITHING); + this.smithingTableRecipes = playerInventory.player.level().getRecipeManager() + .getAllRecipesFor(RecipeType.SMITHING); onScreenReady(0); registerProperty(new ClientProperty<>(PropertyTypes.REDSTONE_MODE, RedstoneMode.IGNORE)); registerProperty(new ClientProperty<>(PatternGridPropertyTypes.PATTERN_TYPE, patternGridData.patternType()) { @@ -183,7 +184,7 @@ boolean canCreatePattern() { public void onScreenReady(final int playerInventoryY) { super.onScreenReady(playerInventoryY); transferManager.clear(); - addSmithingTableSlots(playerInventoryY); + addSmithingTableSlots(playerInventoryY); // these must be always first for the smithing table helpers addPatternSlots(playerInventoryY); addCraftingMatrixSlots(playerInventoryY); addProcessingMatrixSlots(playerInventoryY); @@ -232,6 +233,27 @@ boolean isPatternInOutput(final ItemStack stack) { return patternOutputSlot != null && patternOutputSlot.getItem() == stack; } + @Nullable + @Override + public ResourceKey getCraftableResource(final Slot slot) { + final boolean isInputItem = slot.container == craftingMatrix + || slot.container == stonecutterInput + || slot.container == smithingTableMatrix; + final boolean isResultItem = slot.container == craftingResult + || slot.container == smithingTableResult; + if (isInputItem || isResultItem) { + return ItemResource.ofItemStack(slot.getItem()); + } else if (slot instanceof ProcessingMatrixResourceSlot processingMatrixSlot) { + return processingMatrixSlot.getResource(); + } + return super.getCraftableResource(slot); + } + + @Override + public boolean isLargeSlot(final Slot slot) { + return slot.container == craftingResult || super.isLargeSlot(slot); + } + private void addCraftingMatrixSlots(final int playerInventoryY) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 3; ++x) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java index 077717777..7ef910d8b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting; import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.grid.screen.AbstractGridScreen; import com.refinedmods.refinedstorage.common.support.ResourceSlotRendering; import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlot; import com.refinedmods.refinedstorage.common.support.widget.ScrollbarWidget; @@ -239,18 +240,34 @@ private void renderMatrixSlots(final GuiGraphics graphics, if (resourceSlot.isActive() && resourceSlot instanceof ProcessingMatrixResourceSlot matrixSlot && matrixSlot.isInput() == input) { - ResourceSlotRendering.render(graphics, resourceSlot, leftPos, topPos); - final boolean hovering = mouseX >= resourceSlot.x + leftPos - && mouseX < resourceSlot.x + leftPos + 16 - && mouseY >= resourceSlot.y + topPos - && mouseY < resourceSlot.y + topPos + 16; - if (hovering && canInteractWithResourceSlot(resourceSlot, mouseX, mouseY)) { - renderSlotHighlight(graphics, leftPos + resourceSlot.x, topPos + resourceSlot.y, 0); - } + renderMatrixSlot(graphics, mouseX, mouseY, resourceSlot, matrixSlot); } } } + private void renderMatrixSlot(final GuiGraphics graphics, + final int mouseX, + final int mouseY, + final ResourceSlot resourceSlot, + final ProcessingMatrixResourceSlot matrixSlot) { + if (matrixSlot.getResource() != null && menu.getView().isCraftable(matrixSlot.getResource())) { + AbstractGridScreen.renderCraftableBackground( + graphics, + resourceSlot.x + leftPos, + resourceSlot.y + topPos, + false + ); + } + ResourceSlotRendering.render(graphics, resourceSlot, leftPos, topPos); + final boolean hovering = mouseX >= resourceSlot.x + leftPos + && mouseX < resourceSlot.x + leftPos + 16 + && mouseY >= resourceSlot.y + topPos + && mouseY < resourceSlot.y + topPos + 16; + if (hovering && canInteractWithResourceSlot(resourceSlot, mouseX, mouseY)) { + renderSlotHighlight(graphics, leftPos + resourceSlot.x, topPos + resourceSlot.y, 0); + } + } + @Override public boolean canInteractWithResourceSlot(final ResourceSlot resourceSlot, final double mouseX, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 544c62915..f87729e78 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -425,4 +425,13 @@ protected boolean canTransferSlot(final Slot slot) { public void onClear() { view.clear(); } + + @Nullable + public ResourceKey getCraftableResource(final Slot slot) { + return null; + } + + public boolean isLargeSlot(final Slot slot) { + return false; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java index fc2f93701..452c1f30e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridView; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.resource.list.ResourceList; import com.refinedmods.refinedstorage.common.content.Menus; import com.refinedmods.refinedstorage.common.grid.view.ItemGridResource; @@ -174,4 +175,18 @@ public void stopFilteringBasedOnCraftingMatrixItems() { getView().setFilterAndSort(filterBeforeFilteringBasedOnCraftingMatrixItems); filterBeforeFilteringBasedOnCraftingMatrixItems = null; } + + @Nullable + @Override + public ResourceKey getCraftableResource(final Slot slot) { + if (slot.container == craftingGrid.getCraftingMatrix() || slot.container == craftingGrid.getCraftingResult()) { + return ItemResource.ofItemStack(slot.getItem()); + } + return super.getCraftableResource(slot); + } + + @Override + public boolean isLargeSlot(final Slot slot) { + return slot.container == craftingGrid.getCraftingResult() || super.isLargeSlot(slot); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index b9bc09694..bad7c2d70 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.api.grid.operations.GridInsertMode; import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridView; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; @@ -16,6 +17,7 @@ import com.refinedmods.refinedstorage.common.support.Sprites; import com.refinedmods.refinedstorage.common.support.containermenu.DisabledSlot; import com.refinedmods.refinedstorage.common.support.containermenu.PropertyTypes; +import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlot; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import com.refinedmods.refinedstorage.common.support.stretching.AbstractStretchingScreen; import com.refinedmods.refinedstorage.common.support.tooltip.SmallTextClientTooltipComponent; @@ -236,6 +238,22 @@ private void renderCell(final GuiGraphics graphics, } } + @Override + protected List getResourceSlotTooltip(final ResourceKey resource, final ResourceSlot slot) { + final List tooltip = super.getResourceSlotTooltip(resource, slot); + final ResourceKey craftableResource = getMenu().getCraftableResource(slot); + if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { + tooltip.add(CraftableClientTooltipComponent.craftable()); + } + return tooltip; + } + + @Override + protected void renderSlot(final GuiGraphics guiGraphics, final Slot slot) { + tryRenderCraftableBackground(guiGraphics, slot); + super.renderSlot(guiGraphics, slot); + } + private void renderSlot(final GuiGraphics graphics, final int mouseX, final int mouseY, @@ -260,12 +278,22 @@ private void renderSlot(final GuiGraphics graphics, } } + private void tryRenderCraftableBackground(final GuiGraphics guiGraphics, final Slot slot) { + if (!slot.isHighlightable() || !slot.isActive()) { + return; + } + final ResourceKey craftableResource = getMenu().getCraftableResource(slot); + if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { + renderCraftableBackground(guiGraphics, slot.x, slot.y, getMenu().isLargeSlot(slot)); + } + } + private void renderResourceWithAmount(final GuiGraphics graphics, final int slotX, final int slotY, final GridResource resource) { if (resource.isCraftable()) { - graphics.fill(slotX, slotY, slotX + 16, slotY + 16, 0xBF9F7F50); + renderCraftableBackground(graphics, slotX, slotY, false); } if (resource instanceof PlatformGridResource platformResource) { platformResource.render(graphics, slotX, slotY); @@ -273,6 +301,14 @@ private void renderResourceWithAmount(final GuiGraphics graphics, renderAmount(graphics, slotX, slotY, resource); } + public static void renderCraftableBackground(final GuiGraphics graphics, + final int slotX, + final int slotY, + final boolean large) { + final int offset = large ? 4 : 0; + graphics.fill(slotX - offset, slotY - offset, slotX + 16 + offset, slotY + 16 + offset, 0xBF9F7F50); + } + private void renderAmount(final GuiGraphics graphics, final int slotX, final int slotY, @@ -314,10 +350,28 @@ private void renderDisabledSlot(final GuiGraphics graphics, final int slotX, fin @Override protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { - super.renderTooltip(graphics, x, y); if (isOverStorageArea(x, y)) { renderOverStorageAreaTooltip(graphics, x, y); + return; + } + if (getMenu().getCarried().isEmpty() && hoveredSlot != null && hoveredSlot.hasItem()) { + final ResourceKey craftableResource = getMenu().getCraftableResource(hoveredSlot); + if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { + final ItemStack item = hoveredSlot.getItem(); + final List lines = getTooltipFromContainerItem(item); + final List processedLines = Platform.INSTANCE.processTooltipComponents( + item, + graphics, + x, + item.getTooltipImage(), + lines + ); + processedLines.add(CraftableClientTooltipComponent.craftable()); + Platform.INSTANCE.renderTooltip(graphics, processedLines, x, y); + return; + } } + super.renderTooltip(graphics, x, y); } private void renderOverStorageAreaTooltip(final GuiGraphics graphics, final int x, final int y) { @@ -355,7 +409,9 @@ private void renderHoveredResourceTooltip(final GuiGraphics graphics, addDetailedTooltip(view, gridResource, processedLines); } if (gridResource.isCraftable()) { - processedLines.add(new CraftableClientTooltipComponent(amount == 0)); + processedLines.add(amount == 0 + ? CraftableClientTooltipComponent.empty() + : CraftableClientTooltipComponent.existing()); } if (amount > 0) { processedLines.addAll(gridResource.getExtractionHints(getMenu().getCarried(), getMenu().getView())); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java index 5dd4e2e77..a9015e32f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java @@ -18,13 +18,26 @@ class CraftableClientTooltipComponent implements ClientTooltipComponent { private static final int ICON_SIZE = 9; private static final int ICON_MARGIN = 4; - private static final Component EMPTY = createTranslation("gui", "grid.craftable.click_to_craft"); - private static final Component EXISTING = createTranslation("gui", "grid.craftable.ctrl_click_to_craft"); + private static final Component CRAFTABLE = createTranslation("gui", "grid.craft.craftable"); + private static final Component EMPTY = createTranslation("gui", "grid.craft.click_to_craft"); + private static final Component EXISTING = createTranslation("gui", "grid.craft.ctrl_click_to_craft"); private final Component text; - CraftableClientTooltipComponent(final boolean empty) { - this.text = empty ? EMPTY : EXISTING; + private CraftableClientTooltipComponent(final Component text) { + this.text = text; + } + + static CraftableClientTooltipComponent craftable() { + return new CraftableClientTooltipComponent(CRAFTABLE); + } + + static CraftableClientTooltipComponent empty() { + return new CraftableClientTooltipComponent(EMPTY); + } + + static CraftableClientTooltipComponent existing() { + return new CraftableClientTooltipComponent(EXISTING); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java index de2279751..57ef1c420 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseScreen.java @@ -166,7 +166,7 @@ protected void renderTooltip(final GuiGraphics graphics, final int x, final int } } if (hoveredSlot instanceof ResourceSlot resourceSlot && canInteractWithResourceSlot(resourceSlot, x, y)) { - final List tooltip = getResourceTooltip(menu.getCarried(), resourceSlot); + final List tooltip = getResourceSlotTooltip(menu.getCarried(), resourceSlot); if (!tooltip.isEmpty()) { Platform.INSTANCE.renderTooltip(graphics, tooltip, x, y); return; @@ -195,23 +195,49 @@ private List getUpgradeTooltip(final ItemStack carried, return lines; } - public List getResourceTooltip(final ItemStack carried, final ResourceSlot resourceSlot) { - final ResourceKey resource = resourceSlot.getResource(); + public final List getResourceSlotTooltip(final ItemStack carried, final ResourceSlot slot) { + final ResourceKey resource = slot.getResource(); if (resource == null) { - return getTooltipForEmptySlot(carried, resourceSlot); + return getTooltipForEmptyResourceSlot(carried, slot); } - return getTooltipForResource(resource, resourceSlot); + return getResourceSlotTooltip(resource, slot); } - private List getTooltipForEmptySlot(final ItemStack carried, - final ResourceSlot resourceSlot) { - if (resourceSlot.isDisabled() || resourceSlot.supportsItemSlotInteractions()) { + protected List getResourceSlotTooltip(final ResourceKey resource, final ResourceSlot slot) { + final List tooltip = RefinedStorageApi.INSTANCE + .getResourceRendering(resource.getClass()) + .getTooltip(resource) + .stream() + .map(Component::getVisualOrderText) + .map(ClientTooltipComponent::create) + .collect(Collectors.toList()); + if (!slot.isDisabled() && !slot.supportsItemSlotInteractions()) { + addResourceSlotTooltips(slot, tooltip); + } + if (slot.supportsItemSlotInteractions()) { + RefinedStorageApi.INSTANCE.getResourceContainerInsertStrategies() + .stream() + .flatMap(strategy -> strategy.getConversionInfo(resource, getMenu().getCarried()).stream()) + .map(conversionInfo -> MouseClientTooltipComponent.itemConversion( + MouseClientTooltipComponent.Type.LEFT, + conversionInfo.from(), + conversionInfo.to(), + null + )) + .forEach(tooltip::add); + } + return tooltip; + } + + private List getTooltipForEmptyResourceSlot(final ItemStack carried, + final ResourceSlot slot) { + if (slot.isDisabled() || slot.supportsItemSlotInteractions()) { return Collections.emptyList(); } final List tooltip = new ArrayList<>(); tooltip.add(EMPTY_FILTER); - tooltip.addAll(getResourceSlotHelpTooltip(carried, resourceSlot)); - tooltip.add(HelpClientTooltipComponent.create(resourceSlot.getHelpText())); + tooltip.addAll(getResourceSlotHelpTooltip(carried, slot)); + tooltip.add(HelpClientTooltipComponent.create(slot.getHelpText())); return tooltip; } @@ -239,33 +265,6 @@ private List getResourceSlotHelpTooltip(final ItemStack return lines; } - private List getTooltipForResource(final ResourceKey resource, - final ResourceSlot resourceSlot) { - final List tooltip = RefinedStorageApi.INSTANCE - .getResourceRendering(resource.getClass()) - .getTooltip(resource) - .stream() - .map(Component::getVisualOrderText) - .map(ClientTooltipComponent::create) - .collect(Collectors.toList()); - if (!resourceSlot.isDisabled() && !resourceSlot.supportsItemSlotInteractions()) { - addResourceSlotTooltips(resourceSlot, tooltip); - } - if (resourceSlot.supportsItemSlotInteractions()) { - RefinedStorageApi.INSTANCE.getResourceContainerInsertStrategies() - .stream() - .flatMap(strategy -> strategy.getConversionInfo(resource, getMenu().getCarried()).stream()) - .map(conversionInfo -> MouseClientTooltipComponent.itemConversion( - MouseClientTooltipComponent.Type.LEFT, - conversionInfo.from(), - conversionInfo.to(), - null - )) - .forEach(tooltip::add); - } - return tooltip; - } - protected void addResourceSlotTooltips(final ResourceSlot slot, final List tooltip) { if (slot.canModifyAmount()) { tooltip.add(CLICK_TO_CONFIGURE_AMOUNT); diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index cbaed480b..3a29a2fd5 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -62,6 +62,7 @@ "gui.refinedstorage.grid.resource_type.all": "All", "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.craft.craftable": "This resource is craftable", "gui.refinedstorage.grid.craft.click_to_craft": "Click to craft", "gui.refinedstorage.grid.craft.ctrl_click_to_craft": "CTRL + click to craft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java index df1f422c9..0604761f7 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java @@ -70,6 +70,12 @@ public interface GridView { */ long getAmount(ResourceKey resource); + /** + * @param resource the resource + * @return whether its craftable + */ + boolean isCraftable(ResourceKey resource); + /** * Sorts the view list. * Applies sorting and filtering rules. diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java index c1c123d34..69ca892ee 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java @@ -100,6 +100,11 @@ public long getAmount(final ResourceKey resource) { return backingList.get(resource); } + @Override + public boolean isCraftable(final ResourceKey resource) { + return craftableResources.contains(resource); + } + @Override public void sort() { LOGGER.info("Sorting grid view"); diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java index 9a19aa20d..bd36dd114 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java @@ -672,6 +672,8 @@ void shouldIncludeCraftableResourceInViewList() { new GridResourceImpl(A), new GridResourceImpl(B).craftable() ); + assertThat(view.isCraftable(A)).isFalse(); + assertThat(view.isCraftable(B)).isTrue(); assertThat(view.getAmount(A)).isEqualTo(15); assertThat(view.getAmount(B)).isZero(); assertThat(view.copyBackingList().copyState()).usingRecursiveFieldByFieldElementComparator() @@ -693,6 +695,7 @@ void shouldIncludeCraftableResourceInViewListEvenIfItIsInTheBackingList() { assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( new GridResourceImpl(A).craftable() ); + assertThat(view.isCraftable(A)).isTrue(); assertThat(view.getAmount(A)).isEqualTo(15); assertThat(view.copyBackingList().copyState()) .usingRecursiveFieldByFieldElementComparator() @@ -716,6 +719,7 @@ void shouldNotRemoveCraftableResource() { assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( new GridResourceImpl(A).craftable() ); + assertThat(view.isCraftable(A)).isTrue(); assertThat(view.getAmount(A)).isZero(); assertThat(view.copyBackingList().copyState()).isEmpty(); } @@ -737,6 +741,7 @@ void shouldNotRemoveCraftableResourceEvenWhenPreventingSorting() { assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( new GridResourceImpl(A).zeroed().craftable() ); + assertThat(view.isCraftable(A)).isTrue(); assertThat(view.getAmount(A)).isZero(); assertThat(view.copyBackingList().copyState()).isEmpty(); @@ -745,6 +750,7 @@ void shouldNotRemoveCraftableResourceEvenWhenPreventingSorting() { assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( new GridResourceImpl(A).craftable() ); + assertThat(view.isCraftable(A)).isTrue(); assertThat(view.getAmount(A)).isEqualTo(1); assertThat(view.copyBackingList().copyState()).usingRecursiveFieldByFieldElementComparator().containsExactly( new ResourceAmount(A, 1) From 6b2e9ffa5de1215addb2915ea6cfad7df23cbdfa Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 14:43:37 +0200 Subject: [PATCH 35/83] feat: grid view type Use term "autocraftable" instead of "craftable" everywhere as that makes it more clear what it means. --- .idea/dictionaries/refinedstorage.xml | 1 + .../refinedstorage/common/Config.java | 5 ++ .../grid/AbstractGridContainerMenu.java | 23 +++++- .../common/grid/GridViewType.java | 15 ++++ .../grid/screen/AbstractGridScreen.java | 12 ++-- ... AutocraftableClientTooltipComponent.java} | 22 +++--- .../grid/screen/ViewTypeSideButtonWidget.java | 67 ++++++++++++++++++ .../assets/refinedstorage/lang/en_us.json | 12 +++- .../widget/side_button/grid/view_type/all.png | Bin 0 -> 167 bytes .../grid/view_type/autocraftable.png | Bin 0 -> 164 bytes .../grid/view_type/non_autocraftable.png | Bin 0 -> 216 bytes .../refinedstorage/fabric/ConfigImpl.java | 14 ++++ .../refinedstorage/neoforge/ConfigImpl.java | 19 +++++ 13 files changed, 168 insertions(+), 22 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridViewType.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/{CraftableClientTooltipComponent.java => AutocraftableClientTooltipComponent.java} (74%) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/all.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/autocraftable.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/non_autocraftable.png diff --git a/.idea/dictionaries/refinedstorage.xml b/.idea/dictionaries/refinedstorage.xml index 74576b5dd..5731caf61 100644 --- a/.idea/dictionaries/refinedstorage.xml +++ b/.idea/dictionaries/refinedstorage.xml @@ -2,6 +2,7 @@ allowlist + autocraftable autocrafting autoselected blocklist diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java index 79641b639..018cdc3c4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.grid.view.GridSortingDirection; import com.refinedmods.refinedstorage.common.grid.CraftingGridMatrixCloseBehavior; import com.refinedmods.refinedstorage.common.grid.GridSortingTypes; +import com.refinedmods.refinedstorage.common.grid.GridViewType; import com.refinedmods.refinedstorage.common.support.stretching.ScreenSize; import java.util.Optional; @@ -105,6 +106,10 @@ interface GridEntry extends SimpleEnergyUsageEntry { void setSortingType(GridSortingTypes sortingType); + GridViewType getViewType(); + + void setViewType(GridViewType viewType); + Optional getResourceType(); void setResourceType(ResourceLocation resourceTypeId); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index f87729e78..1652c87bb 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -111,7 +111,7 @@ protected AbstractGridContainerMenu( this.view = viewBuilder.build(); this.view.setSortingDirection(Platform.INSTANCE.getConfig().getGrid().getSortingDirection()); this.view.setSortingType(Platform.INSTANCE.getConfig().getGrid().getSortingType()); - this.view.setFilterAndSort(filterResourceType()); + this.view.setFilterAndSort(createBaseFilter()); this.synchronizer = loadSynchronizer(); this.resourceTypeFilter = loadResourceType(); @@ -139,7 +139,11 @@ protected AbstractGridContainerMenu( initStrategies((ServerPlayer) playerInventory.player); } - private BiPredicate filterResourceType() { + private BiPredicate createBaseFilter() { + return createResourceTypeFilter().and(createViewTypeFilter()); + } + + private BiPredicate createResourceTypeFilter() { return (v, resource) -> resource instanceof PlatformGridResource platformResource && Platform.INSTANCE.getConfig().getGrid().getResourceType().flatMap(resourceTypeId -> RefinedStorageApi.INSTANCE @@ -149,6 +153,10 @@ private BiPredicate filterResourceType() { ).orElse(true); } + private BiPredicate createViewTypeFilter() { + return (v, resource) -> Platform.INSTANCE.getConfig().getGrid().getViewType().accepts(resource.isCraftable()); + } + private static GridViewBuilder createViewBuilder() { return new GridViewBuilderImpl( new CompositeGridResourceFactory(RefinedStorageApi.INSTANCE.getResourceTypeRegistry()), @@ -184,6 +192,15 @@ public void setSortingType(final GridSortingTypes sortingType) { view.sort(); } + public GridViewType getViewType() { + return Platform.INSTANCE.getConfig().getGrid().getViewType(); + } + + public void setViewType(final GridViewType viewType) { + Platform.INSTANCE.getConfig().getGrid().setViewType(viewType); + view.sort(); + } + public void setSearchBox(final GridSearchBox searchBox) { this.searchBox = searchBox; registerViewUpdatingListener(searchBox); @@ -199,7 +216,7 @@ private void registerViewUpdatingListener(final GridSearchBox theSearchBox) { private boolean onSearchTextChanged(final String text) { try { - view.setFilterAndSort(QUERY_PARSER.parse(text).and(filterResourceType())); + view.setFilterAndSort(QUERY_PARSER.parse(text).and(createBaseFilter())); return true; } catch (GridQueryParserException e) { view.setFilterAndSort((v, resource) -> false); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridViewType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridViewType.java new file mode 100644 index 000000000..2eed45c67 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridViewType.java @@ -0,0 +1,15 @@ +package com.refinedmods.refinedstorage.common.grid; + +public enum GridViewType { + ALL, + CRAFTABLE, + NON_CRAFTABLE; + + boolean accepts(final boolean craftable) { + return switch (this) { + case ALL -> true; + case CRAFTABLE -> craftable; + case NON_CRAFTABLE -> !craftable; + }; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index bad7c2d70..6e9c855b8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -56,6 +56,7 @@ // TODO: help tooltip to enable focus mode // TODO: help tooltips for the rest of grid?? +// TODO: remove zeroed system public abstract class AbstractGridScreen extends AbstractStretchingScreen { protected static final int CLEAR_BUTTON_SIZE = 7; @@ -110,10 +111,11 @@ protected void init(final int rows) { if (getMenu().hasProperty(PropertyTypes.REDSTONE_MODE)) { addSideButton(new RedstoneModeSideButtonWidget(getMenu().getProperty(PropertyTypes.REDSTONE_MODE))); } + addSideButton(new ViewTypeSideButtonWidget(getMenu())); + addSideButton(new ResourceTypeSideButtonWidget(getMenu())); addSideButton(new SortingDirectionSideButtonWidget(getMenu())); addSideButton(new SortingTypeSideButtonWidget(getMenu())); addSideButton(new AutoSelectedSideButtonWidget(getMenu())); - addSideButton(new ResourceTypeSideButtonWidget(getMenu())); final boolean onlyHasNoopSynchronizer = RefinedStorageApi.INSTANCE.getGridSynchronizerRegistry() .getAll() @@ -243,7 +245,7 @@ protected List getResourceSlotTooltip(final ResourceKey final List tooltip = super.getResourceSlotTooltip(resource, slot); final ResourceKey craftableResource = getMenu().getCraftableResource(slot); if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { - tooltip.add(CraftableClientTooltipComponent.craftable()); + tooltip.add(AutocraftableClientTooltipComponent.autocraftable()); } return tooltip; } @@ -366,7 +368,7 @@ protected void renderTooltip(final GuiGraphics graphics, final int x, final int item.getTooltipImage(), lines ); - processedLines.add(CraftableClientTooltipComponent.craftable()); + processedLines.add(AutocraftableClientTooltipComponent.autocraftable()); Platform.INSTANCE.renderTooltip(graphics, processedLines, x, y); return; } @@ -410,8 +412,8 @@ private void renderHoveredResourceTooltip(final GuiGraphics graphics, } if (gridResource.isCraftable()) { processedLines.add(amount == 0 - ? CraftableClientTooltipComponent.empty() - : CraftableClientTooltipComponent.existing()); + ? AutocraftableClientTooltipComponent.empty() + : AutocraftableClientTooltipComponent.existing()); } if (amount > 0) { processedLines.addAll(gridResource.getExtractionHints(getMenu().getCarried(), getMenu().getView())); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java similarity index 74% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java index a9015e32f..7a61527d2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftableClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java @@ -13,31 +13,31 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -class CraftableClientTooltipComponent implements ClientTooltipComponent { +class AutocraftableClientTooltipComponent implements ClientTooltipComponent { private static final ResourceLocation ICON = createIdentifier("grid/craftable"); private static final int ICON_SIZE = 9; private static final int ICON_MARGIN = 4; - private static final Component CRAFTABLE = createTranslation("gui", "grid.craft.craftable"); - private static final Component EMPTY = createTranslation("gui", "grid.craft.click_to_craft"); - private static final Component EXISTING = createTranslation("gui", "grid.craft.ctrl_click_to_craft"); + private static final Component AUTOCRAFTABLE = createTranslation("gui", "grid.autocraftable"); + private static final Component EMPTY = createTranslation("gui", "grid.click_to_autocraft"); + private static final Component EXISTING = createTranslation("gui", "grid.ctrl_click_to_autocraft"); private final Component text; - private CraftableClientTooltipComponent(final Component text) { + private AutocraftableClientTooltipComponent(final Component text) { this.text = text; } - static CraftableClientTooltipComponent craftable() { - return new CraftableClientTooltipComponent(CRAFTABLE); + static AutocraftableClientTooltipComponent autocraftable() { + return new AutocraftableClientTooltipComponent(AUTOCRAFTABLE); } - static CraftableClientTooltipComponent empty() { - return new CraftableClientTooltipComponent(EMPTY); + static AutocraftableClientTooltipComponent empty() { + return new AutocraftableClientTooltipComponent(EMPTY); } - static CraftableClientTooltipComponent existing() { - return new CraftableClientTooltipComponent(EXISTING); + static AutocraftableClientTooltipComponent existing() { + return new AutocraftableClientTooltipComponent(EXISTING); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java new file mode 100644 index 000000000..af148a083 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java @@ -0,0 +1,67 @@ +package com.refinedmods.refinedstorage.common.grid.screen; + +import com.refinedmods.refinedstorage.common.grid.AbstractGridContainerMenu; +import com.refinedmods.refinedstorage.common.grid.GridViewType; +import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget; + +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceLocation; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + +class ViewTypeSideButtonWidget extends AbstractSideButtonWidget { + private static final MutableComponent TITLE = createTranslation("gui", "grid.view_type"); + private static final MutableComponent SUBTEXT_ALL = createTranslation("gui", "grid.view_type.all"); + private static final MutableComponent SUBTEXT_AUTOCRAFTABLE = + createTranslation("gui", "grid.view_type.autocraftable"); + private static final MutableComponent SUBTEXT_NON_AUTOCRAFTABLE = + createTranslation("gui", "grid.view_type.non_autocraftable"); + private static final ResourceLocation ALL = createIdentifier("widget/side_button/grid/view_type/all"); + private static final ResourceLocation CRAFTABLE = + createIdentifier("widget/side_button/grid/view_type/autocraftable"); + private static final ResourceLocation NON_CRAFTABLE = + createIdentifier("widget/side_button/grid/view_type/non_autocraftable"); + + private final AbstractGridContainerMenu menu; + + ViewTypeSideButtonWidget(final AbstractGridContainerMenu menu) { + super(createPressAction(menu)); + this.menu = menu; + } + + private static OnPress createPressAction(final AbstractGridContainerMenu menu) { + return btn -> menu.setViewType(toggle(menu.getViewType())); + } + + private static GridViewType toggle(final GridViewType sortingType) { + return switch (sortingType) { + case ALL -> GridViewType.CRAFTABLE; + case CRAFTABLE -> GridViewType.NON_CRAFTABLE; + case NON_CRAFTABLE -> GridViewType.ALL; + }; + } + + @Override + protected ResourceLocation getSprite() { + return switch (menu.getViewType()) { + case ALL -> ALL; + case CRAFTABLE -> CRAFTABLE; + case NON_CRAFTABLE -> NON_CRAFTABLE; + }; + } + + @Override + protected MutableComponent getTitle() { + return TITLE; + } + + @Override + protected MutableComponent getSubText() { + return switch (menu.getViewType()) { + case ALL -> SUBTEXT_ALL; + case CRAFTABLE -> SUBTEXT_AUTOCRAFTABLE; + case NON_CRAFTABLE -> SUBTEXT_NON_AUTOCRAFTABLE; + }; + } +} diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 3a29a2fd5..e5221b341 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -45,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Sorting direction", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", "gui.refinedstorage.grid.sorting.direction.descending": "Descending", @@ -62,9 +66,9 @@ "gui.refinedstorage.grid.resource_type.all": "All", "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", "gui.refinedstorage.grid.craft": "Craft", - "gui.refinedstorage.grid.craft.craftable": "This resource is craftable", - "gui.refinedstorage.grid.craft.click_to_craft": "Click to craft", - "gui.refinedstorage.grid.craft.ctrl_click_to_craft": "CTRL + click to craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", @@ -415,6 +419,8 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/all.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/all.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d64d56d384136953344d7118dd4392f4b489bc GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK^spO#}Etu+aC%MVWxL1FW3XY{ zHa2b<+o~yo$K2Qy3N?gzR=j5lI=Didty!GSPBS=zfti^h_n9v1&resof#xuHy85}S Ib4q9e06Us3?EnA( literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/autocraftable.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/autocraftable.png new file mode 100644 index 0000000000000000000000000000000000000000..e9b9915389ca8e6acef2a6407d88da2121c3c58f GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucK}$~;#}Etu+aC%MVWn0L2?b@~f zjuP_Hk^yg+UL9xBOIO}J@!$$^4Hkv>!Ec%x%^DgR8Cbow3g*puCI~cy!PC{xWt~$( F696;BFT?-< literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/non_autocraftable.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/grid/view_type/non_autocraftable.png new file mode 100644 index 0000000000000000000000000000000000000000..679b2c80f03c3ad56acaf9b0a5104636386dd299 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0G|-o^73*kD=Q$+Q+Dl5AjMn~anMkWx<<#}JL++&)G=1_Ku6kN@5MMIEn2Oq*w>SoVeWl2XU~ro$bxj)?@!XZ_*E zx;wVeJ!WB#xr0)abj4~1PW3}i@9NEn;FV4I#&Cv#vA&PTR}^R{gQu&X%Q~loCICOB BJ&^za literal 0 HcmV?d00001 diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java index a0e9899a3..1ef490941 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.common.content.DefaultEnergyUsage; import com.refinedmods.refinedstorage.common.grid.CraftingGridMatrixCloseBehavior; import com.refinedmods.refinedstorage.common.grid.GridSortingTypes; +import com.refinedmods.refinedstorage.common.grid.GridViewType; import com.refinedmods.refinedstorage.common.support.stretching.ScreenSize; import com.refinedmods.refinedstorage.common.util.IdentifierUtil; @@ -309,6 +310,8 @@ private static class GridEntryImpl implements GridEntry { private GridSortingTypes sortingType = GridSortingTypes.QUANTITY; + private GridViewType viewType = GridViewType.ALL; + @Override public boolean isLargeFont() { return largeFont; @@ -387,6 +390,17 @@ public void setSortingType(final GridSortingTypes sortingType) { save(); } + @Override + public GridViewType getViewType() { + return viewType; + } + + @Override + public void setViewType(final GridViewType viewType) { + this.viewType = viewType; + save(); + } + @Override public Optional getResourceType() { if (resourceType.trim().isBlank()) { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java index 4228d679c..88fd8298e 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java @@ -1,10 +1,12 @@ package com.refinedmods.refinedstorage.neoforge; import com.refinedmods.refinedstorage.api.grid.view.GridSortingDirection; +import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.common.Config; import com.refinedmods.refinedstorage.common.content.DefaultEnergyUsage; import com.refinedmods.refinedstorage.common.grid.CraftingGridMatrixCloseBehavior; import com.refinedmods.refinedstorage.common.grid.GridSortingTypes; +import com.refinedmods.refinedstorage.common.grid.GridViewType; import com.refinedmods.refinedstorage.common.support.stretching.ScreenSize; import java.util.Optional; @@ -369,6 +371,7 @@ private class GridEntryImpl implements GridEntry { private final ModConfigSpec.ConfigValue resourceType; private final ModConfigSpec.EnumValue sortingDirection; private final ModConfigSpec.EnumValue sortingType; + private final ModConfigSpec.EnumValue viewType; GridEntryImpl() { builder.translation(translationKey("grid")).push("grid"); @@ -402,6 +405,9 @@ private class GridEntryImpl implements GridEntry { sortingType = builder .translation(translationKey("grid.sortingType")) .defineEnum("sortingType", GridSortingTypes.QUANTITY); + viewType = builder + .translation(translationKey("grid.viewType")) + .defineEnum("viewType", GridViewType.ALL); builder.pop(); } @@ -493,6 +499,19 @@ public void setSortingType(final GridSortingTypes sortingType) { } } + @Override + public GridViewType getViewType() { + return viewType.get(); + } + + @Override + public void setViewType(final GridViewType viewType) { + if (viewType != this.viewType.get()) { + this.viewType.set(viewType); + ConfigImpl.this.spec.save(); + } + } + @Override public Optional getResourceType() { if (resourceType.get().trim().isBlank()) { From 9406c87ea91c1cbcaf4d6e77e6c790b47a51201d Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 14:45:33 +0200 Subject: [PATCH 36/83] chore: remove resource type help It's noise. --- .../common/grid/screen/ResourceTypeSideButtonWidget.java | 7 ------- .../main/resources/assets/refinedstorage/lang/en_us.json | 1 - 2 files changed, 8 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ResourceTypeSideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ResourceTypeSideButtonWidget.java index ec3c078c0..ef800fb44 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ResourceTypeSideButtonWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ResourceTypeSideButtonWidget.java @@ -4,7 +4,6 @@ import com.refinedmods.refinedstorage.common.grid.AbstractGridContainerMenu; import com.refinedmods.refinedstorage.common.support.widget.AbstractSideButtonWidget; -import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; @@ -14,7 +13,6 @@ class ResourceTypeSideButtonWidget extends AbstractSideButtonWidget { private static final MutableComponent TITLE = createTranslation("gui", "grid.resource_type"); private static final MutableComponent SUBTEXT_ALL = createTranslation("gui", "grid.resource_type.all"); - private static final Component HELP = createTranslation("gui", "grid.resource_type.help"); private static final ResourceLocation ALL = createIdentifier("widget/side_button/resource_type/all"); private final AbstractGridContainerMenu menu; @@ -50,9 +48,4 @@ protected MutableComponent getSubText() { } return resourceType.getTitle(); } - - @Override - protected Component getHelpText() { - return HELP; - } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index e5221b341..cd5e879f4 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -64,7 +64,6 @@ "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "All", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", "gui.refinedstorage.grid.craft": "Craft", "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", From 84e840759fe519757d407fd3172d58dc298b1237 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 15:06:22 +0200 Subject: [PATCH 37/83] feat: autocraftable hint now also checks patterns in inventory --- .../PatternGridContainerMenu.java | 4 +- .../ProcessingPatternGridRenderer.java | 4 +- .../grid/AbstractGridContainerMenu.java | 39 ++++++++++- .../grid/AutocraftableResourceHint.java | 16 +++++ .../grid/CraftingGridContainerMenu.java | 4 +- .../grid/screen/AbstractGridScreen.java | 66 +++++++++++-------- .../AutocraftableClientTooltipComponent.java | 8 ++- .../support/AbstractBaseContainerMenu.java | 18 ++++- .../support/PlayerInventoryListener.java | 8 +++ .../common/support/PlayerInventorySlot.java | 40 +++++++++++ .../assets/refinedstorage/lang/en_us.json | 1 + 11 files changed, 169 insertions(+), 39 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventoryListener.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventorySlot.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java index 45747deb0..9216ba40a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternGridContainerMenu.java @@ -235,7 +235,7 @@ boolean isPatternInOutput(final ItemStack stack) { @Nullable @Override - public ResourceKey getCraftableResource(final Slot slot) { + protected ResourceKey getResourceForAutocraftableHint(final Slot slot) { final boolean isInputItem = slot.container == craftingMatrix || slot.container == stonecutterInput || slot.container == smithingTableMatrix; @@ -246,7 +246,7 @@ public ResourceKey getCraftableResource(final Slot slot) { } else if (slot instanceof ProcessingMatrixResourceSlot processingMatrixSlot) { return processingMatrixSlot.getResource(); } - return super.getCraftableResource(slot); + return super.getResourceForAutocraftableHint(slot); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java index 7ef910d8b..2da20d010 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting; import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.grid.AutocraftableResourceHint; import com.refinedmods.refinedstorage.common.grid.screen.AbstractGridScreen; import com.refinedmods.refinedstorage.common.support.ResourceSlotRendering; import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlot; @@ -255,7 +256,8 @@ private void renderMatrixSlot(final GuiGraphics graphics, graphics, resourceSlot.x + leftPos, resourceSlot.y + topPos, - false + false, + AutocraftableResourceHint.AUTOCRAFTABLE.getColor() ); } ResourceSlotRendering.render(graphics, resourceSlot, leftPos, topPos); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 1652c87bb..8599226c3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -1,5 +1,8 @@ package com.refinedmods.refinedstorage.common.grid; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; import com.refinedmods.refinedstorage.api.grid.operations.GridExtractMode; import com.refinedmods.refinedstorage.api.grid.operations.GridInsertMode; import com.refinedmods.refinedstorage.api.grid.query.GridQueryParserException; @@ -72,6 +75,7 @@ public abstract class AbstractGridContainerMenu extends AbstractResourceContaine protected final Inventory playerInventory; private final GridView view; + private final PatternRepository playerInventoryPatterns = new PatternRepositoryImpl(); @Nullable private Grid grid; @Nullable @@ -247,7 +251,18 @@ public void removed(final Player playerEntity) { @Override public void onScreenReady(final int playerInventoryY) { resetSlots(); - addPlayerInventory(playerInventory, 8, playerInventoryY); + addPlayerInventory(playerInventory, 8, playerInventoryY, (before, after) -> { + final Pattern beforePattern = RefinedStorageApi.INSTANCE.getPattern(before, playerInventory.player.level()) + .orElse(null); + final Pattern afterPattern = RefinedStorageApi.INSTANCE.getPattern(after, playerInventory.player.level()) + .orElse(null); + if (beforePattern != null) { + playerInventoryPatterns.remove(beforePattern); + } + if (afterPattern != null) { + playerInventoryPatterns.add(afterPattern); + } + }); } public GridView getView() { @@ -444,7 +459,27 @@ public void onClear() { } @Nullable - public ResourceKey getCraftableResource(final Slot slot) { + public final AutocraftableResourceHint getAutocraftableResourceHint(final Slot slot) { + final ResourceKey resource = getResourceForAutocraftableHint(slot); + if (resource == null) { + return null; + } + return getAutocraftableResourceHint(resource); + } + + @Nullable + private AutocraftableResourceHint getAutocraftableResourceHint(final ResourceKey resource) { + if (view.isCraftable(resource)) { + return AutocraftableResourceHint.AUTOCRAFTABLE; + } + if (playerInventoryPatterns.getOutputs().contains(resource)) { + return AutocraftableResourceHint.PATTERN_IN_INVENTORY; + } + return null; + } + + @Nullable + protected ResourceKey getResourceForAutocraftableHint(final Slot slot) { return null; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java new file mode 100644 index 000000000..8760cce8d --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java @@ -0,0 +1,16 @@ +package com.refinedmods.refinedstorage.common.grid; + +public enum AutocraftableResourceHint { + AUTOCRAFTABLE(0xBF9F7F50), + PATTERN_IN_INVENTORY(0xBFFFD9A8); + + private final int color; + + AutocraftableResourceHint(final int color) { + this.color = color; + } + + public int getColor() { + return color; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java index 452c1f30e..ba95b6e99 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java @@ -178,11 +178,11 @@ public void stopFilteringBasedOnCraftingMatrixItems() { @Nullable @Override - public ResourceKey getCraftableResource(final Slot slot) { + protected ResourceKey getResourceForAutocraftableHint(final Slot slot) { if (slot.container == craftingGrid.getCraftingMatrix() || slot.container == craftingGrid.getCraftingResult()) { return ItemResource.ofItemStack(slot.getItem()); } - return super.getCraftableResource(slot); + return super.getResourceForAutocraftableHint(slot); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 6e9c855b8..3f4675fe9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -11,6 +11,7 @@ import com.refinedmods.refinedstorage.common.api.grid.GridScrollMode; import com.refinedmods.refinedstorage.common.api.grid.view.PlatformGridResource; import com.refinedmods.refinedstorage.common.grid.AbstractGridContainerMenu; +import com.refinedmods.refinedstorage.common.grid.AutocraftableResourceHint; import com.refinedmods.refinedstorage.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage.common.grid.view.ItemGridResource; import com.refinedmods.refinedstorage.common.support.ResourceSlotRendering; @@ -243,16 +244,16 @@ private void renderCell(final GuiGraphics graphics, @Override protected List getResourceSlotTooltip(final ResourceKey resource, final ResourceSlot slot) { final List tooltip = super.getResourceSlotTooltip(resource, slot); - final ResourceKey craftableResource = getMenu().getCraftableResource(slot); - if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { - tooltip.add(AutocraftableClientTooltipComponent.autocraftable()); + final AutocraftableResourceHint autocraftableHint = getMenu().getAutocraftableResourceHint(slot); + if (autocraftableHint != null) { + tooltip.add(AutocraftableClientTooltipComponent.autocraftable(autocraftableHint)); } return tooltip; } @Override protected void renderSlot(final GuiGraphics guiGraphics, final Slot slot) { - tryRenderCraftableBackground(guiGraphics, slot); + tryRenderAutocraftableResourceHintBackground(guiGraphics, slot); super.renderSlot(guiGraphics, slot); } @@ -280,13 +281,13 @@ private void renderSlot(final GuiGraphics graphics, } } - private void tryRenderCraftableBackground(final GuiGraphics guiGraphics, final Slot slot) { + private void tryRenderAutocraftableResourceHintBackground(final GuiGraphics guiGraphics, final Slot slot) { if (!slot.isHighlightable() || !slot.isActive()) { return; } - final ResourceKey craftableResource = getMenu().getCraftableResource(slot); - if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { - renderCraftableBackground(guiGraphics, slot.x, slot.y, getMenu().isLargeSlot(slot)); + final AutocraftableResourceHint hint = getMenu().getAutocraftableResourceHint(slot); + if (hint != null) { + renderCraftableBackground(guiGraphics, slot.x, slot.y, getMenu().isLargeSlot(slot), hint.getColor()); } } @@ -295,7 +296,8 @@ private void renderResourceWithAmount(final GuiGraphics graphics, final int slotY, final GridResource resource) { if (resource.isCraftable()) { - renderCraftableBackground(graphics, slotX, slotY, false); + renderCraftableBackground(graphics, slotX, slotY, false, + AutocraftableResourceHint.AUTOCRAFTABLE.getColor()); } if (resource instanceof PlatformGridResource platformResource) { platformResource.render(graphics, slotX, slotY); @@ -306,9 +308,11 @@ private void renderResourceWithAmount(final GuiGraphics graphics, public static void renderCraftableBackground(final GuiGraphics graphics, final int slotX, final int slotY, - final boolean large) { + final boolean large, + final int color) { final int offset = large ? 4 : 0; - graphics.fill(slotX - offset, slotY - offset, slotX + 16 + offset, slotY + 16 + offset, 0xBF9F7F50); + graphics.fill(slotX - offset, slotY - offset, slotX + 16 + offset, slotY + 16 + offset, + color); } private void renderAmount(final GuiGraphics graphics, @@ -356,26 +360,34 @@ protected void renderTooltip(final GuiGraphics graphics, final int x, final int renderOverStorageAreaTooltip(graphics, x, y); return; } - if (getMenu().getCarried().isEmpty() && hoveredSlot != null && hoveredSlot.hasItem()) { - final ResourceKey craftableResource = getMenu().getCraftableResource(hoveredSlot); - if (craftableResource != null && getMenu().getView().isCraftable(craftableResource)) { - final ItemStack item = hoveredSlot.getItem(); - final List lines = getTooltipFromContainerItem(item); - final List processedLines = Platform.INSTANCE.processTooltipComponents( - item, - graphics, - x, - item.getTooltipImage(), - lines - ); - processedLines.add(AutocraftableClientTooltipComponent.autocraftable()); - Platform.INSTANCE.renderTooltip(graphics, processedLines, x, y); - return; - } + if (getMenu().getCarried().isEmpty() && tryRenderAutocraftableResourceHintTooltip(graphics, x, y)) { + return; } super.renderTooltip(graphics, x, y); } + private boolean tryRenderAutocraftableResourceHintTooltip(final GuiGraphics graphics, final int x, final int y) { + if (hoveredSlot == null || !hoveredSlot.hasItem()) { + return false; + } + final AutocraftableResourceHint hint = getMenu().getAutocraftableResourceHint(hoveredSlot); + if (hint == null) { + return false; + } + final ItemStack stack = hoveredSlot.getItem(); + final List lines = getTooltipFromContainerItem(stack); + final List processedLines = Platform.INSTANCE.processTooltipComponents( + stack, + graphics, + x, + stack.getTooltipImage(), + lines + ); + processedLines.add(AutocraftableClientTooltipComponent.autocraftable(hint)); + Platform.INSTANCE.renderTooltip(graphics, processedLines, x, y); + return true; + } + private void renderOverStorageAreaTooltip(final GuiGraphics graphics, final int x, final int y) { final PlatformGridResource gridResource = getCurrentGridResource(); if (gridResource != null) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java index 7a61527d2..edd45007f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AutocraftableClientTooltipComponent.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.grid.screen; +import com.refinedmods.refinedstorage.common.grid.AutocraftableResourceHint; import com.refinedmods.refinedstorage.common.support.tooltip.SmallText; import net.minecraft.client.gui.Font; @@ -19,6 +20,7 @@ class AutocraftableClientTooltipComponent implements ClientTooltipComponent { private static final int ICON_MARGIN = 4; private static final Component AUTOCRAFTABLE = createTranslation("gui", "grid.autocraftable"); + private static final Component PATTERN_IN_INVENTORY = createTranslation("gui", "grid.pattern_in_inventory"); private static final Component EMPTY = createTranslation("gui", "grid.click_to_autocraft"); private static final Component EXISTING = createTranslation("gui", "grid.ctrl_click_to_autocraft"); @@ -28,8 +30,10 @@ private AutocraftableClientTooltipComponent(final Component text) { this.text = text; } - static AutocraftableClientTooltipComponent autocraftable() { - return new AutocraftableClientTooltipComponent(AUTOCRAFTABLE); + static AutocraftableClientTooltipComponent autocraftable(final AutocraftableResourceHint hint) { + return new AutocraftableClientTooltipComponent(hint == AutocraftableResourceHint.AUTOCRAFTABLE + ? AUTOCRAFTABLE + : PATTERN_IN_INVENTORY); } static AutocraftableClientTooltipComponent empty() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseContainerMenu.java index 4251106a8..befcfd50a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/AbstractBaseContainerMenu.java @@ -63,11 +63,20 @@ protected void resetSlots() { slots.clear(); } - protected void addPlayerInventory(final Inventory inventory, final int inventoryX, final int inventoryY) { + protected final void addPlayerInventory(final Inventory inventory, + final int inventoryX, + final int inventoryY) { + addPlayerInventory(inventory, inventoryX, inventoryY, null); + } + + protected final void addPlayerInventory(final Inventory inventory, + final int inventoryX, + final int inventoryY, + @Nullable final PlayerInventoryListener listener) { int id = 9; for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { - addSlot(new Slot(inventory, id++, inventoryX + x * 18, inventoryY + y * 18)); + addSlot(new PlayerInventorySlot(inventory, id++, inventoryX + x * 18, inventoryY + y * 18, listener)); } } @@ -77,7 +86,10 @@ protected void addPlayerInventory(final Inventory inventory, final int inventory final int y = inventoryY + 4 + (3 * 18); final boolean disabled = disabledSlot != null && disabledSlot.isDisabledSlot(id); - addSlot(disabled ? new DisabledSlot(inventory, id, x, y) : new Slot(inventory, id, x, y)); + final Slot slot = disabled + ? new DisabledSlot(inventory, id, x, y) + : new PlayerInventorySlot(inventory, id, x, y, listener); + addSlot(slot); id++; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventoryListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventoryListener.java new file mode 100644 index 000000000..fd4128367 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventoryListener.java @@ -0,0 +1,8 @@ +package com.refinedmods.refinedstorage.common.support; + +import net.minecraft.world.item.ItemStack; + +@FunctionalInterface +public interface PlayerInventoryListener { + void changed(ItemStack before, ItemStack after); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventorySlot.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventorySlot.java new file mode 100644 index 000000000..879090aa0 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/PlayerInventorySlot.java @@ -0,0 +1,40 @@ +package com.refinedmods.refinedstorage.common.support; + +import javax.annotation.Nullable; + +import net.minecraft.world.Container; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; + +class PlayerInventorySlot extends Slot { + @Nullable + private final PlayerInventoryListener listener; + + PlayerInventorySlot(final Container container, + final int slot, + final int x, + final int y, + @Nullable final PlayerInventoryListener listener) { + super(container, slot, x, y); + this.listener = listener; + } + + @Override + public void set(final ItemStack stack) { + if (listener != null) { + listener.changed(getItem(), stack); + } + super.set(stack); + } + + @Override + public ItemStack remove(final int amount) { + if (listener != null) { + final ItemStack before = getItem().copy(); + final ItemStack result = super.remove(amount); + listener.changed(before, getItem()); + return result; + } + return super.remove(amount); + } +} diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index cd5e879f4..1db93f305 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -66,6 +66,7 @@ "gui.refinedstorage.grid.resource_type.all": "All", "gui.refinedstorage.grid.craft": "Craft", "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", From 2c1a7571aef5e70fea7dd7d56610ad457b9fdf55 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 15:47:38 +0200 Subject: [PATCH 38/83] refactor: remove zeroed system for grid resources It was necessary because the backing list can never contain zero of a resource, and because the grid resources used to keep a reference to the resource amount in the list. So we needed the zeroed system to properly show "0" in the gui. However, now we just query the backing list for the amount, which can be 0. --- .../grid/view/AbstractPlatformGridResource.java | 12 ------------ .../common/grid/screen/AbstractGridScreen.java | 13 ++++++------- .../api/grid/view/GridResource.java | 4 ---- .../api/grid/view/GridViewImpl.java | 16 +++++++--------- .../api/grid/query/GridQueryParserImplTest.java | 10 ---------- .../api/grid/view/GridResourceImpl.java | 16 ---------------- .../api/grid/view/GridViewImplTest.java | 6 +++--- 7 files changed, 16 insertions(+), 61 deletions(-) diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java index ff6451526..a1d5a8008 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java @@ -19,7 +19,6 @@ public abstract class AbstractPlatformGridResource> attributes; private final boolean craftable; - private boolean zeroed; protected AbstractPlatformGridResource(final T resource, final String name, @@ -51,16 +50,6 @@ public Set getAttribute(final GridResourceAttributeKey key) { return attributes.getOrDefault(key, Collections.emptySet()); } - @Override - public boolean isZeroed() { - return zeroed; - } - - @Override - public void setZeroed(final boolean zeroed) { - this.zeroed = zeroed; - } - @Override public boolean isCraftable() { return craftable; @@ -79,7 +68,6 @@ public String toString() { + ", name='" + name + '\'' + ", attributes=" + attributes + ", craftable=" + craftable - + ", zeroed=" + zeroed + '}'; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 3f4675fe9..be1e09e5f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -53,11 +53,9 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationKey; -import static java.util.Objects.requireNonNullElse; // TODO: help tooltip to enable focus mode // TODO: help tooltips for the rest of grid?? -// TODO: remove zeroed system public abstract class AbstractGridScreen extends AbstractStretchingScreen { protected static final int CLEAR_BUTTON_SIZE = 7; @@ -331,12 +329,13 @@ private void renderAmount(final GuiGraphics graphics, } private int getAmountColor(final GridResource resource, final long amount) { - if (amount == 0 && resource.isCraftable()) { - return requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); - } else if (resource.isZeroed()) { - return requireNonNullElse(ChatFormatting.RED.getColor(), 15); + if (amount == 0) { + if (resource.isCraftable()) { + return 0xFFFFFF; + } + return 0xFF5555; } - return requireNonNullElse(ChatFormatting.WHITE.getColor(), 15); + return 0xFFFFFF; } private String getAmountText(final GridResource resource, diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java index 50f787073..8000b9bdb 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java @@ -20,9 +20,5 @@ public interface GridResource { Set getAttribute(GridResourceAttributeKey key); - boolean isZeroed(); - - void setZeroed(boolean zeroed); - boolean isCraftable(); } diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java index 69ca892ee..66e495708 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java @@ -155,15 +155,14 @@ private void tryAddGridResourceIntoViewList(final GridResource gridResource, public void onChange(final ResourceKey resource, final long amount, @Nullable final TrackedResource trackedResource) { + final boolean wasAvailable = backingList.contains(resource); final ResourceList.OperationResult operationResult = updateBackingList(resource, amount); - updateOrRemoveTrackedResource(resource, trackedResource); - final GridResource gridResource = viewList.index.get(resource); if (gridResource != null) { LOGGER.debug("{} was already found in the view list", resource); - if (gridResource.isZeroed()) { - reinsertZeroedResourceIntoViewList(resource, gridResource); + if (!wasAvailable) { + reinsertIntoViewList(resource, gridResource); } else { handleChangeForExistingResource(resource, operationResult, gridResource); } @@ -190,8 +189,8 @@ private void updateOrRemoveTrackedResource(final ResourceKey resource, } } - private void reinsertZeroedResourceIntoViewList(final ResourceKey resource, final GridResource oldGridResource) { - LOGGER.debug("{} was zeroed, unzeroing", resource); + private void reinsertIntoViewList(final ResourceKey resource, final GridResource oldGridResource) { + LOGGER.debug("{} was removed from backing list, reinserting now into the view list", resource); final GridResource newResource = resourceFactory.apply( resource, craftableResources.contains(resource) @@ -199,7 +198,7 @@ private void reinsertZeroedResourceIntoViewList(final ResourceKey resource, fina viewList.index.put(resource, newResource); final int index = CoreValidations.validateNotNegative( viewList.list.indexOf(oldGridResource), - "Cannot reinsert previously zeroed resource, it was not found" + "Failed to reinsert resource into view list, even though it was still present in the view index" ); viewList.list.set(index, newResource); } @@ -213,8 +212,7 @@ private void handleChangeForExistingResource(final ResourceKey resource, LOGGER.debug("Actually updating {} resource in the view list", resource); updateExistingResourceInViewList(resource, gridResource, noLongerAvailable); } else if (noLongerAvailable) { - LOGGER.debug("{} is no longer available, zeroing", resource); - gridResource.setZeroed(true); + LOGGER.debug("{} is no longer available", resource); } else { LOGGER.debug("{} can't be sorted, preventing sorting is on", resource); } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java index 4c1d63774..3803ecf02 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java @@ -323,16 +323,6 @@ public Set getAttribute(final GridResourceAttributeKey key) { return attributes.getOrDefault(key, Set.of()); } - @Override - public boolean isZeroed() { - return false; - } - - @Override - public void setZeroed(final boolean zeroed) { - throw new UnsupportedOperationException(); - } - @Override public boolean isCraftable() { return false; diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java index 271b37b4b..71ff063dc 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java @@ -12,7 +12,6 @@ public class GridResourceImpl implements GridResource { private final ResourceKey resource; private final Map> attributes; private boolean craftable; - private boolean zeroed; public GridResourceImpl(final ResourceKey resource) { this(resource, false); @@ -27,11 +26,6 @@ public GridResourceImpl(final ResourceKey resource, final boolean craftable) { this.craftable = craftable; } - public GridResourceImpl zeroed() { - setZeroed(true); - return this; - } - public GridResourceImpl craftable() { craftable = true; return this; @@ -57,16 +51,6 @@ public Set getAttribute(final GridResourceAttributeKey key) { return attributes.getOrDefault(key, Collections.emptySet()); } - @Override - public boolean isZeroed() { - return zeroed; - } - - @Override - public void setZeroed(final boolean zeroed) { - this.zeroed = zeroed; - } - @Override public boolean isCraftable() { return craftable; diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java index bd36dd114..67b253280 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java @@ -556,7 +556,7 @@ void shouldNotReorderWhenRemovingExistingResourceCompletelyAndPreventingSorting( assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( new GridResourceImpl(D), new GridResourceImpl(A), - new GridResourceImpl(B).zeroed() + new GridResourceImpl(B) ); assertThat(view.copyBackingList().copyState()) .usingRecursiveFieldByFieldElementComparator() @@ -609,7 +609,7 @@ void shouldReuseExistingResourceWhenPreventingSortingAndRemovingExistingResource assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( new GridResourceImpl(D), new GridResourceImpl(A), - new GridResourceImpl(B).zeroed() + new GridResourceImpl(B) ); // Re-insert the item @@ -739,7 +739,7 @@ void shouldNotRemoveCraftableResourceEvenWhenPreventingSorting() { view.onChange(A, -15, null); assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( - new GridResourceImpl(A).zeroed().craftable() + new GridResourceImpl(A).craftable() ); assertThat(view.isCraftable(A)).isTrue(); assertThat(view.getAmount(A)).isZero(); From f4d8167531d1165b57f1671d9a4542ecddb0e661 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 16:05:16 +0200 Subject: [PATCH 39/83] feat: make filter based on recipe items discoverable with help tooltip --- .../common/autocrafting/PatternRendering.java | 6 ++-- .../grid/screen/AbstractGridScreen.java | 2 -- .../grid/screen/CraftingGridScreen.java | 29 +++++++++++++++++++ .../assets/refinedstorage/lang/en_us.json | 1 + .../refinedstorage/neoforge/ConfigImpl.java | 1 - 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java index 3a7755bfe..fc8962f16 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java @@ -48,10 +48,8 @@ public static Optional getOutput(final ItemStack stack) { when processingPattern.getOutputs().size() == 1 && processingPattern.getOutputs().getFirst().resource() instanceof ItemResource itemResource -> itemResource.toItemStack(); - case StonecutterPattern stonecutterPattern - when stonecutterPattern.getOutput() instanceof ItemResource itemResource -> itemResource.toItemStack(); - case SmithingTablePattern smithingTablePattern - when smithingTablePattern.getOutput() instanceof ItemResource itemResource -> itemResource.toItemStack(); + case StonecutterPattern stonecutterPattern -> stonecutterPattern.getOutput().toItemStack(); + case SmithingTablePattern smithingTablePattern -> smithingTablePattern.getOutput().toItemStack(); default -> null; }); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index be1e09e5f..89ba11179 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -54,8 +54,6 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationKey; -// TODO: help tooltip to enable focus mode -// TODO: help tooltips for the rest of grid?? public abstract class AbstractGridScreen extends AbstractStretchingScreen { protected static final int CLEAR_BUTTON_SIZE = 7; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftingGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftingGridScreen.java index 0f6bd9878..d2b6a8dc6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftingGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/CraftingGridScreen.java @@ -4,8 +4,10 @@ import com.refinedmods.refinedstorage.common.content.KeyMappings; import com.refinedmods.refinedstorage.common.grid.CraftingGridContainerMenu; import com.refinedmods.refinedstorage.common.grid.CraftingGridMatrixCloseBehavior; +import com.refinedmods.refinedstorage.common.support.tooltip.HelpClientTooltipComponent; import com.refinedmods.refinedstorage.common.support.widget.HoveredImageButton; +import java.util.List; import javax.annotation.Nullable; import net.minecraft.ChatFormatting; @@ -13,12 +15,14 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.components.WidgetSprites; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.ResultContainer; import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; @@ -191,4 +195,29 @@ public void onClose() { protected ResourceLocation getTexture() { return TEXTURE; } + + @Override + protected void renderTooltip(final GuiGraphics graphics, final int x, final int y) { + final boolean hoveredSlotValidForHelp = hoveredSlot != null + && hoveredSlot.container instanceof ResultContainer + && hoveredSlot.hasItem(); + if (getMenu().getCarried().isEmpty() && hoveredSlotValidForHelp && !filteringBasedOnCraftingMatrixItems) { + final ItemStack stack = hoveredSlot.getItem(); + final List lines = getTooltipFromContainerItem(stack); + final List processedLines = Platform.INSTANCE.processTooltipComponents( + stack, + graphics, + x, + stack.getTooltipImage(), + lines + ); + processedLines.add(HelpClientTooltipComponent.create(createTranslation( + "gui", + "crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting" + ))); + Platform.INSTANCE.renderTooltip(graphics, processedLines, x, y); + return; + } + super.renderTooltip(graphics, x, y); + } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 1db93f305..f278e5e54 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -71,6 +71,7 @@ "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", "gui.refinedstorage.pattern_grid.clear": "Clear", "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java index 88fd8298e..d92758624 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java @@ -1,7 +1,6 @@ package com.refinedmods.refinedstorage.neoforge; import com.refinedmods.refinedstorage.api.grid.view.GridSortingDirection; -import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.common.Config; import com.refinedmods.refinedstorage.common.content.DefaultEnergyUsage; import com.refinedmods.refinedstorage.common.grid.CraftingGridMatrixCloseBehavior; From 5684bb79d69c0a8f1db3bef9e1e749e2aaf67594 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 16:14:22 +0200 Subject: [PATCH 40/83] docs: update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5d204cb8..2b35d7e57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Lock until all outputs are received (new, facilitates easier "blocking mode" without redstone) - Lock until low redstone signal - Lock until high redstone signal +- Resources in the Grid that are autocraftable now display an orange backdrop and tooltip to indicate whether the resource is autocraftable at a glance. +- Slots used in the Pattern Grid for pattern encoding and Crafting Grid crafting matrix slots now display an orange backdrop and tooltip to indicate whether the item is autocraftable at a glance. This checks patterns from your network and from your inventory. +- Added help tooltip for filtering based on recipe items in the Crafting Grid. ### Fixed From 314776e435cadea03e442dbc63d62bd57d70c537 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 17:03:57 +0200 Subject: [PATCH 41/83] chore: fix build problems --- .../api/autocrafting/AbstractPattern.java | 29 ------------------- .../common/autocrafting/CraftingPattern.java | 25 ++++++++++++++-- .../autocrafting/ProcessingPattern.java | 29 ++++++++++++++----- .../autocrafting/SmithingTablePattern.java | 25 ++++++++++++++-- .../autocrafting/StonecutterPattern.java | 25 ++++++++++++++-- .../AbstractFluidGridResourceFactory.java | 12 +++++--- .../view/AbstractItemGridResourceFactory.java | 12 +++++--- .../common/grid/view/FluidGridResource.java | 14 ++------- .../common/grid/view/ItemGridResource.java | 14 ++------- 9 files changed, 110 insertions(+), 75 deletions(-) delete mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java deleted file mode 100644 index 9e9b30761..000000000 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AbstractPattern.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.refinedmods.refinedstorage.api.autocrafting; - -import java.util.Objects; -import java.util.UUID; - -public abstract class AbstractPattern implements Pattern { - private final UUID id; - - public AbstractPattern(final UUID id) { - this.id = id; - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final AbstractPattern that = (AbstractPattern) o; - return Objects.equals(id, that.id); - } - - @Override - public int hashCode() { - return Objects.hashCode(id); - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java index 8b5cedf74..b4e705e0d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPattern.java @@ -1,15 +1,17 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.UUID; -class CraftingPattern extends AbstractPattern { +class CraftingPattern implements Pattern { + private final UUID id; private final List> inputs; private final ResourceAmount output; private final List byproducts; @@ -19,7 +21,7 @@ class CraftingPattern extends AbstractPattern { final List> inputs, final ResourceAmount output, final List byproducts) { - super(id); + this.id = id; this.inputs = inputs; this.output = output; this.outputResources = Set.of(output.resource()); @@ -38,4 +40,21 @@ List> getInputs() { ResourceAmount getOutput() { return output; } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final CraftingPattern that = (CraftingPattern) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java index d658f4fc8..3240d43d8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPattern.java @@ -1,21 +1,23 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; -class ProcessingPattern extends AbstractPattern { +class ProcessingPattern implements Pattern { + private final UUID id; private final List inputs; private final List outputs; private final Set outputResources; ProcessingPattern(final UUID id, final List inputs, final List outputs) { - super(id); + this.id = id; this.inputs = inputs; this.outputs = outputs; this.outputResources = outputs.stream().map(ResourceAmount::resource).collect(Collectors.toSet()); @@ -26,11 +28,24 @@ public Set getOutputResources() { return outputResources; } - List getInputs() { - return inputs; - } - List getOutputs() { return outputs; } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final ProcessingPattern that = (ProcessingPattern) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java index fb9f7daf4..602a187a7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePattern.java @@ -1,13 +1,15 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; +import java.util.Objects; import java.util.Set; import java.util.UUID; -class SmithingTablePattern extends AbstractPattern { +class SmithingTablePattern implements Pattern { + private final UUID id; private final ItemResource template; private final ItemResource base; private final ItemResource addition; @@ -19,7 +21,7 @@ class SmithingTablePattern extends AbstractPattern { final ItemResource base, final ItemResource addition, final ItemResource output) { - super(id); + this.id = id; this.template = template; this.base = base; this.addition = addition; @@ -47,4 +49,21 @@ ItemResource getAddition() { ItemResource getOutput() { return output; } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final SmithingTablePattern that = (SmithingTablePattern) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java index bb17d7f21..181c81443 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPattern.java @@ -1,19 +1,21 @@ package com.refinedmods.refinedstorage.common.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.AbstractPattern; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; +import java.util.Objects; import java.util.Set; import java.util.UUID; -class StonecutterPattern extends AbstractPattern { +class StonecutterPattern implements Pattern { + private final UUID id; private final ItemResource input; private final ItemResource output; private final Set outputResources; StonecutterPattern(final UUID id, final ItemResource input, final ItemResource output) { - super(id); + this.id = id; this.input = input; this.output = output; this.outputResources = Set.of(output); @@ -31,4 +33,21 @@ ItemResource getInput() { ItemResource getOutput() { return output; } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final StonecutterPattern that = (StonecutterPattern) o; + return Objects.equals(id, that.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java index 6129d5283..1b0aad936 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java @@ -3,8 +3,10 @@ import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridResourceFactory; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.grid.GridResourceAttributeKeys; import com.refinedmods.refinedstorage.common.support.resource.FluidResource; +import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -27,10 +29,12 @@ public Optional apply(final ResourceKey resource, final boolean cr return Optional.of(new FluidGridResource( fluidResource, name, - modId, - modName, - tags, - tooltip, + Map.of( + GridResourceAttributeKeys.MOD_ID, Set.of(modId), + GridResourceAttributeKeys.MOD_NAME, Set.of(modName), + GridResourceAttributeKeys.TAGS, tags, + GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) + ), craftable )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java index 4411ac082..dfd58ebf2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java @@ -3,8 +3,10 @@ import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridResourceFactory; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.grid.GridResourceAttributeKeys; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; +import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -33,10 +35,12 @@ public Optional apply(final ResourceKey resource, final boolean cr itemResource, itemStack, name, - modId, - modName, - tags, - tooltip, + Map.of( + GridResourceAttributeKeys.MOD_ID, Set.of(modId), + GridResourceAttributeKeys.MOD_NAME, Set.of(modName), + GridResourceAttributeKeys.TAGS, tags, + GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) + ), craftable )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java index bc9697a5c..0ffecdb6e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java @@ -1,11 +1,11 @@ package com.refinedmods.refinedstorage.common.grid.view; import com.refinedmods.refinedstorage.api.grid.operations.GridExtractMode; +import com.refinedmods.refinedstorage.api.grid.view.GridResourceAttributeKey; import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; -import com.refinedmods.refinedstorage.common.api.grid.GridResourceAttributeKeys; import com.refinedmods.refinedstorage.common.api.grid.GridScrollMode; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridExtractionStrategy; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridScrollingStrategy; @@ -38,17 +38,9 @@ public class FluidGridResource extends AbstractPlatformGridResource tags, - final String tooltip, + final Map> attributes, final boolean craftable) { - super(resource, name, Map.of( - GridResourceAttributeKeys.MOD_ID, Set.of(modId), - GridResourceAttributeKeys.MOD_NAME, Set.of(modName), - GridResourceAttributeKeys.TAGS, tags, - GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) - ), craftable); + super(resource, name, attributes, craftable); this.id = BuiltInRegistries.FLUID.getId(resource.fluid()); this.rendering = RefinedStorageApi.INSTANCE.getResourceRendering(FluidResource.class); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java index 2bdf5ae01..0bc1a01d1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.common.grid.view; import com.refinedmods.refinedstorage.api.grid.operations.GridExtractMode; +import com.refinedmods.refinedstorage.api.grid.view.GridResourceAttributeKey; import com.refinedmods.refinedstorage.api.grid.view.GridView; -import com.refinedmods.refinedstorage.common.api.grid.GridResourceAttributeKeys; import com.refinedmods.refinedstorage.common.api.grid.GridScrollMode; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridExtractionStrategy; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridScrollingStrategy; @@ -38,17 +38,9 @@ public class ItemGridResource extends AbstractPlatformGridResource public ItemGridResource(final ItemResource resource, final ItemStack itemStack, final String name, - final String modId, - final String modName, - final Set tags, - final String tooltip, + final Map> attributes, final boolean craftable) { - super(resource, name, Map.of( - GridResourceAttributeKeys.MOD_ID, Set.of(modId), - GridResourceAttributeKeys.MOD_NAME, Set.of(modName), - GridResourceAttributeKeys.TAGS, tags, - GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) - ), craftable); + super(resource, name, attributes, craftable); this.id = Item.getId(resource.item()); this.itemStack = itemStack; this.itemResource = resource; From 1de2aeb23f9f869c66a60474209b1edc0e71ba22 Mon Sep 17 00:00:00 2001 From: Starforcraft Date: Sat, 3 Aug 2024 10:39:33 +0200 Subject: [PATCH 42/83] feat: external storage gametest --- .../AbstractExternalStorageBlockEntity.java | 29 + .../ExternalStorageWorkRate.java | 42 +- ...ctBaseNetworkNodeContainerBlockEntity.java | 6 +- .../refinedstorage/common/GameTestUtil.java | 161 +++- .../common/exporter/ExporterTest.java | 12 +- .../common/importer/ImporterTest.java | 30 +- .../common/importer/ImporterTestPlots.java | 28 - .../ExternalStorageFluidTest.java | 344 ++++++++ .../ExternalStorageItemTest.java | 799 ++++++++++++++++++ .../ExternalStorageTestPlots.java | 54 ++ 10 files changed, 1429 insertions(+), 76 deletions(-) create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageItemTest.java create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageTestPlots.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java index 1a1b0778c..adc39467e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/AbstractExternalStorageBlockEntity.java @@ -1,6 +1,9 @@ package com.refinedmods.refinedstorage.common.storage.externalstorage; import com.refinedmods.refinedstorage.api.network.impl.node.externalstorage.ExternalStorageNetworkNode; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; +import com.refinedmods.refinedstorage.api.storage.AccessMode; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.content.BlockEntities; @@ -13,6 +16,7 @@ import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; +import java.util.Set; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; @@ -145,6 +149,31 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider configContainer.load(tag); } + void setFilters(final Set filters) { + mainNetworkNode.getStorageConfiguration().setFilters(filters); + } + + void setFilterMode(final FilterMode mode) { + mainNetworkNode.getStorageConfiguration().setFilterMode(mode); + setChanged(); + } + + void setFuzzyMode(final boolean fuzzyMode) { + filter.setFuzzyMode(fuzzyMode); + } + + void setAccessMode(final AccessMode accessMode) { + mainNetworkNode.getStorageConfiguration().setAccessMode(accessMode); + } + + void setPriority(final int priority) { + mainNetworkNode.getStorageConfiguration().setPriority(priority); + } + + void setVoidExcess(final boolean voidExcess) { + mainNetworkNode.getStorageConfiguration().setVoidExcess(voidExcess); + } + @Override public ResourceContainerData getMenuData() { return ResourceContainerData.of(filter.getFilterContainer()); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageWorkRate.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageWorkRate.java index 99f46938e..b6a9fc28e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageWorkRate.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageWorkRate.java @@ -1,40 +1,42 @@ package com.refinedmods.refinedstorage.common.storage.externalstorage; -import com.google.common.util.concurrent.RateLimiter; - class ExternalStorageWorkRate { - private static final double[] RATE_LIMITERS = new double[] { - 0.5D, // slowest, every 2 sec - 0.75D, // faster - 1D, // medium, every 1 sec - 2D, // faster, every 0.5 sec - 3D // fastest + private static final int[] OPERATION_COUNTS = new int[] { + 40, // slowest, every 2 sec + 30, // faster, every 1.5 sec + 20, // medium, every 1 sec + 10, // faster, every 0.5 sec + 5 // fastest, every 0.25 sec }; private int idx = 2; // medium - private final RateLimiter rateLimiter = RateLimiter.create(RATE_LIMITERS[idx]); + private int counter = 0; + private int threshold = OPERATION_COUNTS[idx]; boolean canDoWork() { - return rateLimiter.tryAcquire(); + counter++; + if (counter >= threshold) { + counter = 0; + return true; + } + return false; } void faster() { - if (idx + 1 >= RATE_LIMITERS.length) { - return; + if (idx + 1 < OPERATION_COUNTS.length) { + idx++; + updateThreshold(); } - idx++; - updateRate(); } void slower() { - if (idx - 1 < 0) { - return; + if (idx - 1 >= 0) { + idx--; + updateThreshold(); } - idx--; - updateRate(); } - private void updateRate() { - rateLimiter.setRate(RATE_LIMITERS[idx]); + private void updateThreshold() { + threshold = OPERATION_COUNTS[idx]; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java index 26a995eb1..5f2a3dd74 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/AbstractBaseNetworkNodeContainerBlockEntity.java @@ -17,7 +17,6 @@ import java.util.UUID; import javax.annotation.Nullable; -import com.google.common.util.concurrent.RateLimiter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.HolderLookup; @@ -46,10 +45,11 @@ public abstract class AbstractBaseNetworkNodeContainerBlockEntity { // Arrange - final ItemStack damagedDiamondChestplate = DIAMOND_CHESTPLATE.getDefaultInstance(); - damagedDiamondChestplate.setDamageValue(500); + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { insert(helper, network, DIRT, 10); @@ -116,8 +116,7 @@ public static void shouldExportItemWithStackUpgrade(final GameTestHelper helper) public static void shouldExportItemFuzzy(final GameTestHelper helper) { ExporterTestPlots.preparePlot(helper, Blocks.CHEST, Direction.EAST, (exporter, pos, sequence) -> { // Arrange - final ItemStack damagedDiamondChestplate = DIAMOND_CHESTPLATE.getDefaultInstance(); - damagedDiamondChestplate.setDamageValue(500); + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { insert(helper, network, DIRT, 10); @@ -202,10 +201,7 @@ public static void shouldExportFluidWithStackUpgrade(final GameTestHelper helper .thenExecute(interfaceContainsExactly( helper, pos.east(), - new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), - new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), - new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), - new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16) + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 64) )) .thenSucceed(); diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java index 409126da3..f620e86e2 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java @@ -20,12 +20,13 @@ import static com.refinedmods.refinedstorage.common.GameTestUtil.asResource; import static com.refinedmods.refinedstorage.common.GameTestUtil.assertInterfaceEmpty; import static com.refinedmods.refinedstorage.common.GameTestUtil.containerContainsExactly; +import static com.refinedmods.refinedstorage.common.GameTestUtil.getItemAsDamaged; import static com.refinedmods.refinedstorage.common.GameTestUtil.insert; import static com.refinedmods.refinedstorage.common.GameTestUtil.interfaceContainsExactly; import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; +import static com.refinedmods.refinedstorage.common.GameTestUtil.prepareChest; +import static com.refinedmods.refinedstorage.common.GameTestUtil.prepareInterface; import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; -import static com.refinedmods.refinedstorage.common.importer.ImporterTestPlots.prepareChest; -import static com.refinedmods.refinedstorage.common.importer.ImporterTestPlots.prepareInterface; import static com.refinedmods.refinedstorage.common.importer.ImporterTestPlots.preparePlot; import static net.minecraft.world.item.Items.COBBLESTONE; import static net.minecraft.world.item.Items.DIAMOND_CHESTPLATE; @@ -87,6 +88,7 @@ public static void shouldImportItemWithStackUpgrade(final GameTestHelper helper) COBBLESTONE.getDefaultInstance().copyWithCount(64), DIRT.getDefaultInstance() ); + importer.addUpgradeItem(RSITEMS.getStackUpgrade()); // Assert @@ -126,13 +128,13 @@ public static void shouldImportItemBlocklist(final GameTestHelper helper) { })); // Act - final ItemStack damagedDiamondChestplate = DIAMOND_CHESTPLATE.getDefaultInstance(); - damagedDiamondChestplate.setDamageValue(500); + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); prepareChest( helper, pos.east(), DIRT.getDefaultInstance(), - DIAMOND_CHESTPLATE.getDefaultInstance(), damagedDiamondChestplate + DIAMOND_CHESTPLATE.getDefaultInstance(), + damagedDiamondChestplate ); importer.setFuzzyMode(false); @@ -167,13 +169,13 @@ public static void shouldImportItemFuzzyBlocklist(final GameTestHelper helper) { })); // Act - final ItemStack damagedDiamondChestplate = DIAMOND_CHESTPLATE.getDefaultInstance(); - damagedDiamondChestplate.setDamageValue(500); + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); prepareChest( helper, pos.east(), DIRT.getDefaultInstance(), - DIAMOND_CHESTPLATE.getDefaultInstance(), damagedDiamondChestplate + DIAMOND_CHESTPLATE.getDefaultInstance(), + damagedDiamondChestplate ); importer.setFuzzyMode(true); @@ -209,13 +211,13 @@ public static void shouldImportItemAllowlist(final GameTestHelper helper) { })); // Act - final ItemStack damagedDiamondChestplate = DIAMOND_CHESTPLATE.getDefaultInstance(); - damagedDiamondChestplate.setDamageValue(500); + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); prepareChest( helper, pos.east(), DIRT.getDefaultInstance(), - DIAMOND_CHESTPLATE.getDefaultInstance(), damagedDiamondChestplate + DIAMOND_CHESTPLATE.getDefaultInstance(), + damagedDiamondChestplate ); importer.setFuzzyMode(false); @@ -252,13 +254,13 @@ public static void shouldImportItemFuzzyAllowlist(final GameTestHelper helper) { })); // Act - final ItemStack damagedDiamondChestplate = DIAMOND_CHESTPLATE.getDefaultInstance(); - damagedDiamondChestplate.setDamageValue(500); + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); prepareChest( helper, pos.east(), DIRT.getDefaultInstance(), - DIAMOND_CHESTPLATE.getDefaultInstance(), damagedDiamondChestplate + DIAMOND_CHESTPLATE.getDefaultInstance(), + damagedDiamondChestplate ); importer.setFuzzyMode(true); diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java index 898bb6d4f..e3936e55d 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTestPlots.java @@ -1,8 +1,5 @@ package com.refinedmods.refinedstorage.common.importer; -import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.common.iface.ExportedResourcesContainer; -import com.refinedmods.refinedstorage.common.iface.InterfaceBlockEntity; import com.refinedmods.refinedstorage.common.storage.FluidStorageVariant; import com.refinedmods.refinedstorage.common.storage.ItemStorageVariant; @@ -10,9 +7,6 @@ import net.minecraft.core.Direction; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.gametest.framework.GameTestSequence; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BaseContainerBlockEntity; import org.apache.commons.lang3.function.TriConsumer; import static com.refinedmods.refinedstorage.common.GameTestUtil.RSBLOCKS; @@ -40,26 +34,4 @@ static void preparePlot(final GameTestHelper helper, helper.startSequence() ); } - - static void prepareChest(final GameTestHelper helper, - final BlockPos pos, - final ItemStack... stacks) { - helper.setBlock(pos, Blocks.CHEST.defaultBlockState()); - final var chestBlockEntity = requireBlockEntity(helper, pos, BaseContainerBlockEntity.class); - for (int i = 0; i < stacks.length; i++) { - chestBlockEntity.setItem(i, stacks[i]); - } - } - - static void prepareInterface(final GameTestHelper helper, - final BlockPos pos, - final ResourceAmount... resource) { - helper.setBlock(pos, RSBLOCKS.getInterface()); - final var interfaceBlockEntity = requireBlockEntity(helper, pos, InterfaceBlockEntity.class); - final ExportedResourcesContainer exportedResources = interfaceBlockEntity.getExportedResources(); - - for (int i = 0; i < resource.length; i++) { - exportedResources.set(i, resource[i]); - } - } } diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java new file mode 100644 index 000000000..0a91639cd --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java @@ -0,0 +1,344 @@ +package com.refinedmods.refinedstorage.common.storage.externalstorage; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; +import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.util.IdentifierUtil; + +import java.util.Set; + +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTest; +import net.minecraft.gametest.framework.GameTestHelper; +import net.neoforged.neoforge.gametest.GameTestHolder; +import net.neoforged.neoforge.gametest.PrefixGameTestTemplate; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.addFluidToInterface; +import static com.refinedmods.refinedstorage.common.GameTestUtil.asResource; +import static com.refinedmods.refinedstorage.common.GameTestUtil.insert; +import static com.refinedmods.refinedstorage.common.GameTestUtil.interfaceContainsExactly; +import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; +import static com.refinedmods.refinedstorage.common.GameTestUtil.prepareInterface; +import static com.refinedmods.refinedstorage.common.GameTestUtil.removeFluidToInterface; +import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; +import static com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageTestPlots.preparePlot; +import static net.minecraft.world.item.Items.STONE; +import static net.minecraft.world.level.material.Fluids.LAVA; +import static net.minecraft.world.level.material.Fluids.WATER; + +@GameTestHolder(IdentifierUtil.MOD_ID) +@PrefixGameTestTemplate(false) +public final class ExternalStorageFluidTest { + private ExternalStorageFluidTest() { + } + + @GameTest(template = "empty_15x15") + public static void shouldExposeFluid(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareInterface( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + ); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertFluidAllowlist(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareInterface( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 14), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + ); + + externalStorage.setPriority(1); + externalStorage.setFilters(Set.of(asResource(WATER))); + externalStorage.setFilterMode(FilterMode.ALLOW); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 30), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 30), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, WATER, Platform.INSTANCE.getBucketAmount() * 2))) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, LAVA, Platform.INSTANCE.getBucketAmount()))) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertFluidBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + })); + + // Act + prepareInterface( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 16), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 14), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + ); + + externalStorage.setPriority(1); + externalStorage.setFilters(Set.of(asResource(WATER))); + externalStorage.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 30), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 30), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, WATER, Platform.INSTANCE.getBucketAmount() * 2))) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 30), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, LAVA, Platform.INSTANCE.getBucketAmount()))) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 30), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 32), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldPropagateExternalFluidExtractions(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareInterface( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + ); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenExecute(() -> removeFluidToInterface( + helper, + pos.east(), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldPropagatePartialExternalFluidExtractions(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareInterface( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + ); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenExecute(() -> removeFluidToInterface( + helper, + pos.east(), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldPropagateExternalFluidInsertions(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareInterface( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()) + ); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()) + )) + .thenExecute(() -> addFluidToInterface( + helper, + pos.east(), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), + new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) + )) + .thenSucceed(); + }); + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageItemTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageItemTest.java new file mode 100644 index 000000000..14497939a --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageItemTest.java @@ -0,0 +1,799 @@ +package com.refinedmods.refinedstorage.common.storage.externalstorage; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; +import com.refinedmods.refinedstorage.api.storage.AccessMode; +import com.refinedmods.refinedstorage.common.support.RedstoneMode; +import com.refinedmods.refinedstorage.common.util.IdentifierUtil; + +import java.util.Set; + +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTest; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Blocks; +import net.neoforged.neoforge.gametest.GameTestHolder; +import net.neoforged.neoforge.gametest.PrefixGameTestTemplate; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.addItemToChest; +import static com.refinedmods.refinedstorage.common.GameTestUtil.asResource; +import static com.refinedmods.refinedstorage.common.GameTestUtil.containerContainsExactly; +import static com.refinedmods.refinedstorage.common.GameTestUtil.createStacks; +import static com.refinedmods.refinedstorage.common.GameTestUtil.extract; +import static com.refinedmods.refinedstorage.common.GameTestUtil.getItemAsDamaged; +import static com.refinedmods.refinedstorage.common.GameTestUtil.insert; +import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; +import static com.refinedmods.refinedstorage.common.GameTestUtil.prepareChest; +import static com.refinedmods.refinedstorage.common.GameTestUtil.removeItemFromChest; +import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; +import static com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageTestPlots.preparePlot; +import static net.minecraft.world.item.Items.COBBLESTONE; +import static net.minecraft.world.item.Items.DIAMOND_CHESTPLATE; +import static net.minecraft.world.item.Items.DIRT; +import static net.minecraft.world.item.Items.STONE; + +@GameTestHolder(IdentifierUtil.MOD_ID) +@PrefixGameTestTemplate(false) +public final class ExternalStorageItemTest { + private ExternalStorageItemTest() { + } + + @GameTest(template = "empty_15x15") + public static void shouldExposeItems(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemAllowlist(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + prepareChest( + helper, + pos.east(), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + externalStorage.setPriority(1); + externalStorage.setFilters(Set.of(asResource(STONE))); + externalStorage.setFilterMode(FilterMode.ALLOW); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(STONE), 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(STONE), 2) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, DIRT, 2))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(STONE), 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 12), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(STONE), 2) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemFuzzyAllowlist(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, false, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + prepareChest( + helper, + pos.east(), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + externalStorage.setFuzzyMode(true); + externalStorage.setFilters(Set.of(asResource(DIAMOND_CHESTPLATE.getDefaultInstance()))); + externalStorage.setFilterMode(FilterMode.ALLOW); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(DIAMOND_CHESTPLATE), 1))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(damagedDiamondChestplate), 1))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(DIRT), 10, false))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + prepareChest( + helper, + pos.east(), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + externalStorage.setPriority(1); + externalStorage.setFilters(Set.of(asResource(STONE))); + externalStorage.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(STONE), 2) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, DIRT, 2))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 12), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 12), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(STONE), 2) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemFuzzyBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, false, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + prepareChest( + helper, + pos.east(), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + externalStorage.setFuzzyMode(true); + externalStorage.setFilters(Set.of(asResource(DIAMOND_CHESTPLATE.getDefaultInstance()))); + externalStorage.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(DIAMOND_CHESTPLATE), 1, false))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(damagedDiamondChestplate), 1, false))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(DIRT), 10))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIRT), 10) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(COBBLESTONE), 3), + new ResourceAmount(asResource(DIRT), 10) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExtractItem(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenExecute(networkIsAvailable(helper, pos, network -> extract(helper, network, DIRT, 5))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldPropagateExternalExtractions(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(2), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenExecute(() -> removeItemFromChest( + helper, + pos.east(), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + )) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldPropagatePartialExternalExtractions(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(2), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenExecute(() -> removeItemFromChest( + helper, + pos.east(), + DIRT.getDefaultInstance().copyWithCount(5) + )) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldPropagateExternalInsertions(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(2), + DIRT.getDefaultInstance().copyWithCount(10) + ); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 10) + )) + .thenExecute(() -> addItemToChest( + helper, + pos.east(), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + )) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldNoLongerExposeItemsWhenExternalBlockIsBroken(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(2), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenExecute(() -> helper.setBlock(pos.east(), Blocks.AIR)) + .thenWaitUntil(() -> helper.assertBlockNotPresent(Blocks.CHEST, pos.east())) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldRespectRedstoneMode(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 2))); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(2), + DIRT.getDefaultInstance().copyWithCount(10), + COBBLESTONE.getDefaultInstance().copyWithCount(3) + ); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenExecute(() -> externalStorage.setRedstoneMode(RedstoneMode.HIGH)) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 2) + )) + .thenExecute(() -> helper.setBlock(pos.west(), Blocks.REDSTONE_BLOCK)) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 2), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 4), + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(COBBLESTONE), 3) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldVoidExcess(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + prepareChest( + helper, + pos.east(), + createStacks(STONE, 64, 27) + ); + + externalStorage.setPriority(1); + externalStorage.setFilters(Set.of(asResource(STONE))); + externalStorage.setFilterMode(FilterMode.ALLOW); + externalStorage.setVoidExcess(true); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 64 * 27) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 64 * 27) + )) + .thenExecute(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 10))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 64 * 27) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 64 * 27) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldRespectInsertAccessMode(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, false, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(64) + ); + + externalStorage.setAccessMode(AccessMode.INSERT); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 64) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 64) + )) + .thenExecute(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 10))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 74) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 74) + )) + .thenExecute(networkIsAvailable(helper, pos, network -> extract(helper, network, STONE, 10, false))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 74) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 74) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldRespectExtractAccessMode(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, false, (externalStorage, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { })); + + // Act + prepareChest( + helper, + pos.east(), + STONE.getDefaultInstance().copyWithCount(64) + ); + + externalStorage.setAccessMode(AccessMode.EXTRACT); + + // Assert + sequence + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 64) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 64) + )) + .thenExecute(networkIsAvailable(helper, pos, network -> insert(helper, network, STONE, 10, false))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 64) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 64) + )) + .thenExecute(networkIsAvailable(helper, pos, network -> extract(helper, network, STONE, 10))) + .thenWaitUntil(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(STONE), 54) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 54) + )) + .thenSucceed(); + }); + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageTestPlots.java new file mode 100644 index 000000000..de71d1bf0 --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageTestPlots.java @@ -0,0 +1,54 @@ +package com.refinedmods.refinedstorage.common.storage.externalstorage; + +import com.refinedmods.refinedstorage.common.storage.FluidStorageVariant; +import com.refinedmods.refinedstorage.common.storage.ItemStorageVariant; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.gametest.framework.GameTestSequence; +import org.apache.commons.lang3.function.TriConsumer; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.RSBLOCKS; +import static com.refinedmods.refinedstorage.common.GameTestUtil.requireBlockEntity; +import static net.minecraft.core.BlockPos.ZERO; + +final class ExternalStorageTestPlots { + private ExternalStorageTestPlots() { + } + + static void preparePlot(final GameTestHelper helper, + final Direction direction, + final TriConsumer< + AbstractExternalStorageBlockEntity, + BlockPos, + GameTestSequence> consumer) { + preparePlot(helper, direction, true, consumer); + } + + static void preparePlot(final GameTestHelper helper, + final Direction direction, + final boolean itemStorage, + final TriConsumer< + AbstractExternalStorageBlockEntity, + BlockPos, + GameTestSequence> consumer) { + helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); + if (itemStorage) { + helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); + } else { + helper.setBlock(ZERO.above().above(), RSBLOCKS.getCable().getDefault()); + } + helper.setBlock( + ZERO.above().above().north(), + RSBLOCKS.getFluidStorageBlock(FluidStorageVariant.SIXTY_FOUR_B) + ); + final BlockPos externalStoragePos = ZERO.above().above().above(); + helper.setBlock(externalStoragePos, RSBLOCKS.getExternalStorage().getDefault().rotated(direction)); + consumer.accept( + requireBlockEntity(helper, externalStoragePos, AbstractExternalStorageBlockEntity.class), + externalStoragePos, + helper.startSequence() + ); + } +} From ae2412ccab49d94e6016d2ee9eeafa8d034e07ff Mon Sep 17 00:00:00 2001 From: Starforcraft Date: Mon, 2 Sep 2024 18:56:12 +0200 Subject: [PATCH 43/83] feat: detector gametest --- .../common/detector/DetectorBlockEntity.java | 12 +- .../common/detector/DetectorTest.java | 233 ++++++++++++++++++ .../common/detector/DetectorTestPlots.java | 39 +++ 3 files changed, 281 insertions(+), 3 deletions(-) create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTest.java create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTestPlots.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java index 2ec523324..210638c00 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/detector/DetectorBlockEntity.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.detector.DetectorAmountStrategyImpl; import com.refinedmods.refinedstorage.api.network.impl.node.detector.DetectorMode; import com.refinedmods.refinedstorage.api.network.impl.node.detector.DetectorNetworkNode; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.network.InWorldNetworkNodeContainer; @@ -22,7 +23,6 @@ import java.util.Optional; import javax.annotation.Nullable; -import com.google.common.util.concurrent.RateLimiter; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; @@ -40,12 +40,13 @@ public class DetectorBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements NetworkNodeExtendedMenuProvider { private static final Logger LOGGER = LoggerFactory.getLogger(DetectorBlockEntity.class); + private static final int POWERED_CHANGE_TICK_RATE = 20; private static final String TAG_AMOUNT = "amount"; private static final String TAG_MODE = "mode"; private final FilterWithFuzzyMode filter; - private final RateLimiter poweredChangeRateLimiter = RateLimiter.create(1); + private int poweredChangeTicks; private double amount; @@ -109,6 +110,10 @@ private void propagateAmount() { mainNetworkNode.setAmount(normalizedAmount); } + void setConfiguredResource(final ResourceKey configuredResource) { + mainNetworkNode.setConfiguredResource(configuredResource); + } + boolean isFuzzyMode() { return filter.isFuzzyMode(); } @@ -165,8 +170,9 @@ public void updateActiveness(final BlockState state, @Nullable final BooleanProp super.updateActiveness(state, activenessProperty); final boolean powered = mainNetworkNode.isActive() && mainNetworkNode.isActivated(); final boolean needToUpdatePowered = state.getValue(DetectorBlock.POWERED) != powered; - if (level != null && needToUpdatePowered && poweredChangeRateLimiter.tryAcquire()) { + if (level != null && needToUpdatePowered && poweredChangeTicks++ % POWERED_CHANGE_TICK_RATE == 0) { level.setBlockAndUpdate(getBlockPos(), state.setValue(DetectorBlock.POWERED, powered)); + poweredChangeTicks = 0; } } diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTest.java new file mode 100644 index 000000000..a8de01eb2 --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTest.java @@ -0,0 +1,233 @@ +package com.refinedmods.refinedstorage.common.detector; + +import com.refinedmods.refinedstorage.api.network.impl.node.detector.DetectorMode; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.common.util.IdentifierUtil; + +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTest; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.RedStoneWireBlock; +import net.neoforged.neoforge.gametest.GameTestHolder; +import net.neoforged.neoforge.gametest.PrefixGameTestTemplate; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.asResource; +import static com.refinedmods.refinedstorage.common.GameTestUtil.getItemAsDamaged; +import static com.refinedmods.refinedstorage.common.GameTestUtil.insert; +import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; +import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; +import static com.refinedmods.refinedstorage.common.detector.DetectorTestPlots.preparePlot; +import static net.minecraft.world.item.Items.DIAMOND_CHESTPLATE; +import static net.minecraft.world.item.Items.DIRT; +import static net.minecraft.world.item.Items.STONE; + +@GameTestHolder(IdentifierUtil.MOD_ID) +@PrefixGameTestTemplate(false) +public final class DetectorTest { + private DetectorTest() { + } + + @GameTest(template = "empty_15x15") + public static void shouldNotEmitRedstone(final GameTestHelper helper) { + preparePlot(helper, Direction.DOWN, (detector, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + })); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos + )) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldEmitRedstoneUnder(final GameTestHelper helper) { + preparePlot(helper, Direction.DOWN, (detector, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + })); + + // Act + detector.setConfiguredResource(asResource(DIRT)); + detector.setMode(DetectorMode.UNDER); + detector.setAmount(5); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(STONE), 15) + )) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(4)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(5)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(6)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(10)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(15)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldUseEqualModeByDefault(final GameTestHelper helper) { + preparePlot(helper, Direction.DOWN, (detector, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + })); + + // Act + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + detector.setConfiguredResource(asResource(DIRT)); + detector.setAmount(9); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(STONE), 15) + )) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(8)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(10)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenExecute(() -> { + detector.setConfiguredResource(asResource(damagedDiamondChestplate)); + detector.setAmount(1); + }) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(damagedDiamondChestplate), 1))) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldEmitRedstoneEquals(final GameTestHelper helper) { + preparePlot(helper, Direction.DOWN, (detector, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + })); + + // Act + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + detector.setConfiguredResource(asResource(DIRT)); + detector.setMode(DetectorMode.EQUAL); + detector.setAmount(9); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(STONE), 15) + )) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(8)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(10)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenExecute(() -> { + detector.setConfiguredResource(asResource(damagedDiamondChestplate)); + detector.setAmount(1); + }) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(networkIsAvailable(helper, pos, network -> + insert(helper, network, asResource(damagedDiamondChestplate), 1))) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldEmitRedstoneAbove(final GameTestHelper helper) { + preparePlot(helper, Direction.DOWN, (detector, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + })); + + // Act + detector.setConfiguredResource(asResource(DIRT)); + detector.setMode(DetectorMode.ABOVE); + detector.setAmount(15); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(STONE), 15) + )) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(16)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(14)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(10)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(5)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldEmitRedstoneFuzzy(final GameTestHelper helper) { + preparePlot(helper, Direction.DOWN, (detector, pos, sequence) -> { + // Arrange + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, asResource(DIAMOND_CHESTPLATE.getDefaultInstance()), 1); + insert(helper, network, asResource(damagedDiamondChestplate), 1); + })); + + // Act + detector.setFuzzyMode(true); + detector.setConfiguredResource(asResource(DIAMOND_CHESTPLATE.getDefaultInstance())); + detector.setMode(DetectorMode.EQUAL); + detector.setAmount(1); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE.getDefaultInstance()), 1), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 0)) + .thenExecute(() -> detector.setAmount(2)) + .thenWaitUntil(() -> helper.assertBlockProperty(pos.north(), RedStoneWireBlock.POWER, 15)) + .thenSucceed(); + }); + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTestPlots.java new file mode 100644 index 000000000..84aa4c0da --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/detector/DetectorTestPlots.java @@ -0,0 +1,39 @@ +package com.refinedmods.refinedstorage.common.detector; + +import com.refinedmods.refinedstorage.common.storage.FluidStorageVariant; +import com.refinedmods.refinedstorage.common.storage.ItemStorageVariant; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.gametest.framework.GameTestSequence; +import net.minecraft.world.level.block.Blocks; +import org.apache.commons.lang3.function.TriConsumer; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.RSBLOCKS; +import static com.refinedmods.refinedstorage.common.GameTestUtil.requireBlockEntity; +import static net.minecraft.core.BlockPos.ZERO; + +final class DetectorTestPlots { + private DetectorTestPlots() { + } + + static void preparePlot(final GameTestHelper helper, + final Direction direction, + final TriConsumer consumer) { + helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); + helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); + helper.setBlock( + ZERO.above().above().north(), + RSBLOCKS.getFluidStorageBlock(FluidStorageVariant.SIXTY_FOUR_B) + ); + helper.setBlock(ZERO.above().above().above().north(), Blocks.REDSTONE_WIRE); + final BlockPos detectorPos = ZERO.above().above().above(); + helper.setBlock(detectorPos, RSBLOCKS.getDetector().getDefault().rotated(direction)); + consumer.accept( + requireBlockEntity(helper, detectorPos, DetectorBlockEntity.class), + detectorPos, + helper.startSequence() + ); + } +} From 2c5c54be73f673a3641aa38c8e0113527b077368 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 4 Sep 2024 13:51:39 +0200 Subject: [PATCH 44/83] refactor: make resource list interface immutable Introduce MutableResourceList for additional operations. --- .../autocrafting/ProcessingPatternState.java | 8 +- .../grid/CraftingGridContainerMenu.java | 5 +- .../SnapshotCraftingGridRefillContext.java | 8 +- .../support/network/ResourceSorters.java | 10 ++- .../PlatformStorageNetworkComponent.java | 6 +- .../resource/list/FuzzyResourceListImpl.java | 8 +- .../list/FuzzyResourceListImplTest.java | 7 +- .../api/grid/view/GridView.java | 4 +- .../api/grid/view/GridViewBuilderImpl.java | 6 +- .../api/grid/view/GridViewImpl.java | 14 ++-- .../grid/query/GridQueryParserImplTest.java | 4 +- .../refinedstorage/common/GameTestUtil.java | 9 ++- .../network/test/NetworkTestFixtures.java | 4 +- .../impl/node/relay/RelayOutputStorage.java | 4 +- .../impl/node/storage/ExposedStorage.java | 4 +- .../storage/StorageNetworkComponentImpl.java | 4 +- .../StorageTransferNetworkNodeTest.java | 38 ++++----- .../StorageNetworkComponentImplTest.java | 4 +- ... => AbstractProxyMutableResourceList.java} | 10 +-- .../resource/list/MutableResourceList.java | 79 +++++++++++++++++++ ...Impl.java => MutableResourceListImpl.java} | 16 ++-- .../api/resource/list/ResourceList.java | 68 +--------------- .../listenable/ListenableResourceList.java | 8 +- .../list/listenable/ResourceListListener.java | 4 +- ...a => AbstractMutableResourceListTest.java} | 34 ++++---- .../list/MutableResourceListImplTest.java | 8 ++ .../resource/list/ProxyResourceListTest.java | 6 +- .../resource/list/ResourceListImplTest.java | 8 -- .../ListenableResourceListTest.java | 22 +++--- .../api/storage/StorageImpl.java | 10 +-- .../composite/CompositeStorageImpl.java | 6 +- .../api/storage/external/ExternalStorage.java | 7 +- .../api/storage/root/RootStorageImpl.java | 8 +- .../composite/CompositeStorageImplTest.java | 4 +- .../ExtractCompositeStorageImplTest.java | 4 +- .../InsertCompositeStorageImplTest.java | 4 +- .../SubCompositeCompositeStorageImplTest.java | 12 +-- .../api/storage/root/RootStorageImplTest.java | 6 +- 38 files changed, 244 insertions(+), 227 deletions(-) rename refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/{AbstractProxyResourceList.java => AbstractProxyMutableResourceList.java} (79%) create mode 100644 refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceList.java rename refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/{ResourceListImpl.java => MutableResourceListImpl.java} (89%) rename refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/{AbstractResourceListTest.java => AbstractMutableResourceListTest.java} (89%) create mode 100644 refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImplTest.java delete mode 100644 refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImplTest.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternState.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternState.java index e27271244..f6ca770a0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternState.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternState.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.common.autocrafting; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; import java.util.ArrayList; @@ -35,13 +35,13 @@ public record ProcessingPatternState( ); List getFlatInputs() { - final ResourceList list = ResourceListImpl.orderPreserving(); + final MutableResourceList list = MutableResourceListImpl.orderPreserving(); inputs.forEach(input -> input.map(Input::input).ifPresent(list::add)); return new ArrayList<>(list.copyState()); } List getFlatOutputs() { - final ResourceList list = ResourceListImpl.orderPreserving(); + final MutableResourceList list = MutableResourceListImpl.orderPreserving(); outputs.forEach(output -> output.ifPresent(list::add)); return new ArrayList<>(list.copyState()); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java index ba95b6e99..880b98f84 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.resource.list.ResourceList; import com.refinedmods.refinedstorage.common.content.Menus; import com.refinedmods.refinedstorage.common.grid.view.ItemGridResource; @@ -128,13 +129,13 @@ public void clear(final boolean toPlayerInventory) { @API(status = API.Status.INTERNAL) public ResourceList getAvailableListForRecipeTransfer() { - final ResourceList available = getView().copyBackingList(); + final MutableResourceList available = getView().copyBackingList(); addContainerToList(craftingGrid.getCraftingMatrix(), available); addContainerToList(gridPlayer.getInventory(), available); return available; } - private void addContainerToList(final Container container, final ResourceList available) { + private void addContainerToList(final Container container, final MutableResourceList available) { for (int i = 0; i < container.getContainerSize(); ++i) { final ItemStack stack = container.getItem(i); if (stack.isEmpty()) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/SnapshotCraftingGridRefillContext.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/SnapshotCraftingGridRefillContext.java index b5f184007..2a3f18d61 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/SnapshotCraftingGridRefillContext.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/SnapshotCraftingGridRefillContext.java @@ -2,8 +2,8 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.root.RootStorage; import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; import com.refinedmods.refinedstorage.common.support.RecipeMatrixContainer; @@ -15,8 +15,8 @@ class SnapshotCraftingGridRefillContext implements CraftingGridRefillContext { private final PlayerActor playerActor; private final CraftingGridBlockEntity blockEntity; - private final ResourceList available = ResourceListImpl.create(); - private final ResourceList used = ResourceListImpl.create(); + private final MutableResourceList available = MutableResourceListImpl.create(); + private final MutableResourceList used = MutableResourceListImpl.create(); SnapshotCraftingGridRefillContext( final Player player, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/ResourceSorters.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/ResourceSorters.java index f70ba6540..bf5ff6516 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/ResourceSorters.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/ResourceSorters.java @@ -3,8 +3,9 @@ import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import java.util.Comparator; @@ -25,19 +26,20 @@ public static Comparator create(@Nullable final Network network, fi public static Comparator create(@Nullable final Network network, final Inventory playerInventory, final Function resourceExtractor) { - final ResourceList available = ResourceListImpl.create(); + final MutableResourceList available = MutableResourceListImpl.create(); addNetworkItemsIntoList(network, available); addPlayerInventoryItemsIntoList(playerInventory, available); return sortByHighestAvailableFirst(available, resourceExtractor); } - private static void addNetworkItemsIntoList(@Nullable final Network network, final ResourceList list) { + private static void addNetworkItemsIntoList(@Nullable final Network network, final MutableResourceList list) { if (network != null) { network.getComponent(StorageNetworkComponent.class).getAll().forEach(list::add); } } - private static void addPlayerInventoryItemsIntoList(final Inventory playerInventory, final ResourceList list) { + private static void addPlayerInventoryItemsIntoList(final Inventory playerInventory, + final MutableResourceList list) { for (int i = 0; i < playerInventory.getContainerSize(); ++i) { final ItemStack playerInventoryStack = playerInventory.getItem(i); if (playerInventoryStack.isEmpty()) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/component/PlatformStorageNetworkComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/component/PlatformStorageNetworkComponent.java index fffbad02c..228a2a8b7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/component/PlatformStorageNetworkComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/network/component/PlatformStorageNetworkComponent.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.network.impl.storage.StorageNetworkComponentImpl; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.common.api.storage.root.FuzzyRootStorage; import com.refinedmods.refinedstorage.common.api.support.resource.list.FuzzyResourceList; import com.refinedmods.refinedstorage.common.support.resource.list.FuzzyResourceListImpl; @@ -13,10 +13,10 @@ public class PlatformStorageNetworkComponent extends StorageNetworkComponentImpl private final FuzzyResourceList fuzzyResourceList; public PlatformStorageNetworkComponent() { - this(new FuzzyResourceListImpl(ResourceListImpl.create())); + this(new FuzzyResourceListImpl(MutableResourceListImpl.create())); } - private PlatformStorageNetworkComponent(final FuzzyResourceList fuzzyResourceList) { + private PlatformStorageNetworkComponent(final FuzzyResourceListImpl fuzzyResourceList) { super(fuzzyResourceList); this.fuzzyResourceList = fuzzyResourceList; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImpl.java index 71f2254cf..deeab38ca 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImpl.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.common.support.resource.list; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.AbstractProxyResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.AbstractProxyMutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.common.api.support.resource.FuzzyModeNormalizer; import com.refinedmods.refinedstorage.common.api.support.resource.list.FuzzyResourceList; @@ -14,10 +14,10 @@ import java.util.Optional; import java.util.Set; -public class FuzzyResourceListImpl extends AbstractProxyResourceList implements FuzzyResourceList { +public class FuzzyResourceListImpl extends AbstractProxyMutableResourceList implements FuzzyResourceList { private final Map> normalizedFuzzyMap = new HashMap<>(); - public FuzzyResourceListImpl(final ResourceList delegate) { + public FuzzyResourceListImpl(final MutableResourceList delegate) { super(delegate); } diff --git a/refinedstorage-common/src/test/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImplTest.java b/refinedstorage-common/src/test/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImplTest.java index 5660e7a86..44110b6f8 100644 --- a/refinedstorage-common/src/test/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImplTest.java +++ b/refinedstorage-common/src/test/java/com/refinedmods/refinedstorage/common/support/resource/list/FuzzyResourceListImplTest.java @@ -1,9 +1,8 @@ package com.refinedmods.refinedstorage.common.support.resource.list; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.common.SetupMinecraft; -import com.refinedmods.refinedstorage.common.api.support.resource.list.FuzzyResourceList; import com.refinedmods.refinedstorage.common.support.resource.ItemResource; import java.util.Collection; @@ -28,11 +27,11 @@ class FuzzyResourceListImplTest { private static final ItemResource DUMMY_D = new ItemResource(Items.GLASS, DataComponentPatch.EMPTY); private static final ItemResource DUMMY_E = new ItemResource(Items.DARK_OAK_DOOR, DataComponentPatch.EMPTY); - FuzzyResourceList sut; + FuzzyResourceListImpl sut; @BeforeEach void setUp() { - sut = new FuzzyResourceListImpl(ResourceListImpl.create()); + sut = new FuzzyResourceListImpl(MutableResourceListImpl.create()); } @Test diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java index 0604761f7..c29deb64c 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage.api.grid.view; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import java.util.List; @@ -100,7 +100,7 @@ public interface GridView { /** * @return a copy of the backing list */ - ResourceList copyBackingList(); + MutableResourceList copyBackingList(); /** * Clears the backing list, view list and tracked resources index. diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java index 0514a0f54..8bc9c0b13 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.api.grid.view; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import java.util.HashMap; @@ -16,7 +16,7 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.2.4") public class GridViewBuilderImpl implements GridViewBuilder { private final GridResourceFactory resourceFactory; - private final ResourceList backingList = ResourceListImpl.create(); + private final MutableResourceList backingList = MutableResourceListImpl.create(); private final Set craftableResources = new HashSet<>(); private final Map trackedResources = new HashMap<>(); private final GridSortingType identitySortingType; diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java index 66e495708..c4b0f4f7f 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.core.CoreValidations; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import java.util.ArrayList; @@ -24,7 +24,7 @@ public class GridViewImpl implements GridView { private static final Logger LOGGER = LoggerFactory.getLogger(GridViewImpl.class); - private final ResourceList backingList; + private final MutableResourceList backingList; private final Comparator identitySort; private final GridResourceFactory resourceFactory; private final Map trackedResources = new HashMap<>(); @@ -47,7 +47,7 @@ public class GridViewImpl implements GridView { * @param craftableResources resources which are craftable and must stay in the view list */ public GridViewImpl(final GridResourceFactory resourceFactory, - final ResourceList backingList, + final MutableResourceList backingList, final Map initialTrackedResources, final Set craftableResources, final GridSortingType identitySortingType, @@ -156,7 +156,7 @@ public void onChange(final ResourceKey resource, final long amount, @Nullable final TrackedResource trackedResource) { final boolean wasAvailable = backingList.contains(resource); - final ResourceList.OperationResult operationResult = updateBackingList(resource, amount); + final MutableResourceList.OperationResult operationResult = updateBackingList(resource, amount); updateOrRemoveTrackedResource(resource, trackedResource); final GridResource gridResource = viewList.index.get(resource); if (gridResource != null) { @@ -172,7 +172,7 @@ public void onChange(final ResourceKey resource, } } - private ResourceList.OperationResult updateBackingList(final ResourceKey resource, final long amount) { + private MutableResourceList.OperationResult updateBackingList(final ResourceKey resource, final long amount) { if (amount < 0) { return backingList.remove(resource, Math.abs(amount)).orElseThrow(RuntimeException::new); } else { @@ -204,7 +204,7 @@ private void reinsertIntoViewList(final ResourceKey resource, final GridResource } private void handleChangeForExistingResource(final ResourceKey resource, - final ResourceList.OperationResult operationResult, + final MutableResourceList.OperationResult operationResult, final GridResource gridResource) { final boolean noLongerAvailable = !operationResult.available(); final boolean canBeSorted = !preventSorting; @@ -283,7 +283,7 @@ public List getViewList() { } @Override - public ResourceList copyBackingList() { + public MutableResourceList copyBackingList() { return backingList.copy(); } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java index 3803ecf02..254269cfb 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java @@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.api.grid.view.GridResourceImpl; import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.api.grid.view.GridViewImpl; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage.query.lexer.LexerTokenMappings; import com.refinedmods.refinedstorage.query.parser.ParserOperatorMappings; @@ -35,7 +35,7 @@ class GridQueryParserImplTest { private final GridView view = new GridViewImpl( (resource, craftable) -> Optional.of(new GridResourceImpl(resource)), - ResourceListImpl.create(), + MutableResourceListImpl.create(), new HashMap<>(), new HashSet<>(), v -> Comparator.comparing(GridResource::getName), diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java index 99c8eb53f..09b901952 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java @@ -6,8 +6,9 @@ import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.common.api.support.network.AbstractNetworkNodeContainerBlockEntity; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; @@ -238,7 +239,7 @@ private static Runnable resourceContainerContainsExactly(final ResourceContainer final ResourceAmount... expected) { final ResourceList expectedList = toResourceList(expected); return () -> { - final ResourceList given = ResourceListImpl.create(); + final MutableResourceList given = MutableResourceListImpl.create(); for (int i = 0; i < container.size(); i++) { final ResourceAmount item = container.get(i); if (item != null) { @@ -255,7 +256,7 @@ public static Runnable containerContainsExactly(final GameTestHelper helper, final var containerBlockEntity = requireBlockEntity(helper, pos, BaseContainerBlockEntity.class); final ResourceList expectedList = toResourceList(expected); return () -> { - final ResourceList given = ResourceListImpl.create(); + final MutableResourceList given = MutableResourceListImpl.create(); for (int i = 0; i < containerBlockEntity.getContainerSize(); i++) { final ItemStack itemStack = containerBlockEntity.getItem(i); if (!itemStack.isEmpty()) { @@ -281,7 +282,7 @@ private static ResourceList toResourceList(final ResourceAmount... resources) { } private static ResourceList toResourceList(final Collection resources) { - final ResourceList list = ResourceListImpl.create(); + final MutableResourceList list = MutableResourceListImpl.create(); for (final ResourceAmount resource : resources) { list.add(resource); } diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java index 2ad303b6c..3d79eb28f 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java @@ -15,7 +15,7 @@ import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; public final class NetworkTestFixtures { @@ -33,7 +33,7 @@ public final class NetworkTestFixtures { ); NETWORK_COMPONENT_MAP_FACTORY.addFactory( StorageNetworkComponent.class, - network -> new StorageNetworkComponentImpl(ResourceListImpl.orderPreserving()) + network -> new StorageNetworkComponentImpl(MutableResourceListImpl.orderPreserving()) ); NETWORK_COMPONENT_MAP_FACTORY.addFactory( SecurityNetworkComponent.class, diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputStorage.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputStorage.java index 90674582f..836b1001a 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputStorage.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputStorage.java @@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.resource.filter.Filter; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.resource.list.listenable.ResourceListListener; import com.refinedmods.refinedstorage.api.storage.AccessMode; import com.refinedmods.refinedstorage.api.storage.Actor; @@ -159,7 +159,7 @@ public long getStored() { } @Override - public void onChanged(final ResourceList.OperationResult change) { + public void onChanged(final MutableResourceList.OperationResult change) { if (delegate != null && delegate.contains(delegate)) { return; } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/ExposedStorage.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/ExposedStorage.java index 0d9987cbb..4ad3e8bf7 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/ExposedStorage.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/ExposedStorage.java @@ -3,7 +3,7 @@ import com.refinedmods.refinedstorage.api.network.impl.storage.AbstractImmutableConfiguredProxyStorage; import com.refinedmods.refinedstorage.api.network.impl.storage.StorageConfiguration; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.composite.CompositeStorage; @@ -17,7 +17,7 @@ class ExposedStorage extends AbstractImmutableConfiguredProxyStorage implements CompositeStorage { protected ExposedStorage(final StorageConfiguration config) { - super(config, new CompositeStorageImpl(ResourceListImpl.create())); + super(config, new CompositeStorageImpl(MutableResourceListImpl.create())); } long getCapacity() { diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImpl.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImpl.java index 1d4babcbb..af09e3b44 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImpl.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImpl.java @@ -3,7 +3,7 @@ import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.network.storage.StorageProvider; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.TrackedResourceAmount; @@ -17,7 +17,7 @@ public class StorageNetworkComponentImpl extends RootStorageImpl implements StorageNetworkComponent { private static final Logger LOGGER = LoggerFactory.getLogger(StorageNetworkComponentImpl.class); - public StorageNetworkComponentImpl(final ResourceList list) { + public StorageNetworkComponentImpl(final MutableResourceList list) { super(list); } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java index 685591a0d..782b0d833 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java @@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.Storage; @@ -56,7 +56,7 @@ void shouldNotTransferWithoutNetwork(@InjectNetworkStorageComponent final Storag // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source = new StorageImpl(MutableResourceListImpl.orderPreserving()); source.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source); @@ -77,7 +77,7 @@ void shouldNotTransferWhenInactive(@InjectNetworkStorageComponent final StorageN // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source = new StorageImpl(MutableResourceListImpl.orderPreserving()); source.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source); @@ -139,14 +139,14 @@ public long extract(final ResourceKey resource, source0.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source0); - final Storage source1 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source1 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source1.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(C, 35, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(1, source1); - final Storage source2 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source2 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source2.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(2, source2); @@ -180,14 +180,14 @@ void shouldInsertAllowlist(@InjectNetworkStorageComponent final StorageNetworkCo // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source1 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source1 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source1.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(C, 35, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set((sut.getSize() / 2) - 2, source1); - final Storage source2 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source2 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source2.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set((sut.getSize() / 2) - 1, source2); @@ -219,14 +219,14 @@ void shouldInsertBlocklist(@InjectNetworkStorageComponent final StorageNetworkCo // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source1 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source1 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source1.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(C, 35, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source1); - final Storage source2 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source2 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source2.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(1, source2); @@ -277,7 +277,7 @@ void shouldNotifyListenerWhenReadyInsertingAllResources( // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source = new StorageImpl(MutableResourceListImpl.orderPreserving()); source.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source.insert(C, 5, Action.EXECUTE, EmptyActor.INSTANCE); @@ -297,12 +297,12 @@ void shouldNotifyListenerWhenReadyInsertingAllResources( @Test void shouldNotifyListenerWhenReadyInsertingAllResourcesAndUsingFilterButInsertedNothing() { // Arrange - final Storage source1 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source1 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source1.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(C, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source1); - final Storage source2 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source2 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source2.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(1, source2); @@ -332,13 +332,13 @@ void shouldNotifyListenerWhenReadyInsertingAllResourcesAndUsingFilterButStillIns // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source1 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source1 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source1.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(C, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source1); - final Storage source2 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source2 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source2.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(1, source2); @@ -368,14 +368,14 @@ void shouldNotNotifyListenerWhenReadyInsertingAllResourcesAndNetworkIsFull( // Arrange networkStorage.addSource(new LimitedStorageImpl(15)); - final Storage source1 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source1 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source1.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(C, 5, Action.EXECUTE, EmptyActor.INSTANCE); source1.insert(D, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(0, source1); - final Storage source2 = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source2 = new StorageImpl(MutableResourceListImpl.orderPreserving()); source2.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); provider.set(1, source2); @@ -596,12 +596,12 @@ void shouldNotifyListenerWhenReadyExtractingAllResourcesAndUsingFilterButStillEx @InjectNetworkStorageComponent final StorageNetworkComponent networkStorage ) { // Arrange - networkStorage.addSource(new StorageImpl(ResourceListImpl.orderPreserving())); + networkStorage.addSource(new StorageImpl(MutableResourceListImpl.orderPreserving())); networkStorage.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); networkStorage.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); networkStorage.insert(C, 5, Action.EXECUTE, EmptyActor.INSTANCE); - final Storage source = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source = new StorageImpl(MutableResourceListImpl.orderPreserving()); provider.set(0, source); sut.setProvider(provider); @@ -662,7 +662,7 @@ void shouldRespectNormalizer( // Arrange networkStorage.addSource(new StorageImpl()); - final Storage source = new StorageImpl(ResourceListImpl.orderPreserving()); + final Storage source = new StorageImpl(MutableResourceListImpl.orderPreserving()); source.insert(A, 5, Action.EXECUTE, EmptyActor.INSTANCE); source.insert(A_ALTERNATIVE, 5, Action.EXECUTE, EmptyActor.INSTANCE); source.insert(B, 5, Action.EXECUTE, EmptyActor.INSTANCE); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java index c79cc9c67..4e5784a06 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java @@ -6,7 +6,7 @@ import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.TrackedResourceAmount; import com.refinedmods.refinedstorage.api.storage.limited.LimitedStorageImpl; @@ -37,7 +37,7 @@ class StorageNetworkComponentImplTest { @BeforeEach void setUp() { - sut = new StorageNetworkComponentImpl(ResourceListImpl.create()); + sut = new StorageNetworkComponentImpl(MutableResourceListImpl.create()); storage1 = new StorageNetworkNode(0, 0, 1); storage1.setNetwork(new NetworkImpl(NetworkTestFixtures.NETWORK_COMPONENT_MAP_FACTORY)); diff --git a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/AbstractProxyResourceList.java b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/AbstractProxyMutableResourceList.java similarity index 79% rename from refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/AbstractProxyResourceList.java rename to refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/AbstractProxyMutableResourceList.java index a4df54f02..2a4871b5a 100644 --- a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/AbstractProxyResourceList.java +++ b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/AbstractProxyMutableResourceList.java @@ -10,13 +10,13 @@ import org.apiguardian.api.API; /** - * This is a utility class to easily decorate a {@link ResourceList}. + * This is a utility class to easily decorate a {@link MutableResourceListImpl}. */ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") -public abstract class AbstractProxyResourceList implements ResourceList { - private final ResourceList delegate; +public abstract class AbstractProxyMutableResourceList implements MutableResourceList { + private final MutableResourceList delegate; - protected AbstractProxyResourceList(final ResourceList delegate) { + protected AbstractProxyMutableResourceList(final MutableResourceList delegate) { this.delegate = delegate; } @@ -51,7 +51,7 @@ public Set getAll() { } @Override - public ResourceList copy() { + public MutableResourceList copy() { return delegate.copy(); } diff --git a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceList.java b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceList.java new file mode 100644 index 000000000..324bc5a10 --- /dev/null +++ b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceList.java @@ -0,0 +1,79 @@ +package com.refinedmods.refinedstorage.api.resource.list; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Optional; + +import org.apiguardian.api.API; + +/** + * Mutable variant of {@link ResourceList}. + * Implementation can be found in {@link MutableResourceListImpl}. + */ +@API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") +public interface MutableResourceList extends ResourceList { + /** + * Adds a given resource to the list. + * + * @param resource the resource, may not be null + * @param amount the amount, must be larger than 0 + * @return the result of the operation + */ + OperationResult add(ResourceKey resource, long amount); + + /** + * Adds a given resource to the list. + * Shorthand for {@link #add(ResourceKey, long)}. + * + * @param resourceAmount the resource and the amount + * @return the result of the operation + */ + default OperationResult add(ResourceAmount resourceAmount) { + return add(resourceAmount.resource(), resourceAmount.amount()); + } + + /** + * Removes an amount of a certain resource in the list. + * If the amount reaches 0 due to this removal, the resource is removed from the list. + * + * @param resource the resource, may not be null + * @param amount the amount, must be larger than 0 + * @return a result if the removal operation was successful, otherwise an empty {@link Optional} + */ + Optional remove(ResourceKey resource, long amount); + + /** + * Removes an amount of a certain resource in the list. + * If the amount reaches 0 due to this removal, the resource is removed from the list. + * Shorthand for {@link #remove(ResourceKey, long)}. + * + * @param resourceAmount the resource and the amount + * @return a result if the removal operation was successful, otherwise an empty {@link Optional} + */ + default Optional remove(ResourceAmount resourceAmount) { + return remove(resourceAmount.resource(), resourceAmount.amount()); + } + + /** + * Clears the list. + */ + void clear(); + + /** + * Copies the list. + */ + MutableResourceList copy(); + + /** + * Represents the result of an operation in a {@link MutableResourceList}. + * + * @param resource the resource affected by the operation + * @param amount the current amount in the list + * @param change the delta caused by the operation + * @param available whether this resource is still available in the list, or if it was removed + */ + @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") + record OperationResult(ResourceKey resource, long amount, long change, boolean available) { + } +} diff --git a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImpl.java b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImpl.java similarity index 89% rename from refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImpl.java rename to refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImpl.java index c47cc8be0..12b6b0131 100644 --- a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImpl.java +++ b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImpl.java @@ -17,19 +17,19 @@ * An implementation of a {@link ResourceList} that stores the resource entries in memory. */ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") -public class ResourceListImpl implements ResourceList { +public class MutableResourceListImpl implements MutableResourceList { private final Map entries; - private ResourceListImpl(final Map entries) { + private MutableResourceListImpl(final Map entries) { this.entries = entries; } - public static ResourceListImpl create() { - return new ResourceListImpl(new HashMap<>()); + public static MutableResourceListImpl create() { + return new MutableResourceListImpl(new HashMap<>()); } - public static ResourceListImpl orderPreserving() { - return new ResourceListImpl(new LinkedHashMap<>()); + public static MutableResourceListImpl orderPreserving() { + return new MutableResourceListImpl(new LinkedHashMap<>()); } @Override @@ -110,8 +110,8 @@ public void clear() { } @Override - public ResourceList copy() { - final ResourceList copy = ResourceListImpl.create(); + public MutableResourceList copy() { + final MutableResourceList copy = MutableResourceListImpl.create(); entries.forEach((key, entry) -> copy.add(key, entry.amount)); return copy; } diff --git a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceList.java b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceList.java index 44f86eaf3..cb87809b4 100644 --- a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceList.java +++ b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/ResourceList.java @@ -4,59 +4,15 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; import java.util.Collection; -import java.util.Optional; import java.util.Set; import org.apiguardian.api.API; /** - * Represents a list of a resource of an arbitrary type. - * A basic implementation of this class can be found in {@link ResourceListImpl}. + * Represents a list of resources of an arbitrary type. */ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") public interface ResourceList { - /** - * Adds a given resource to the list. - * - * @param resource the resource, may not be null - * @param amount the amount, must be larger than 0 - * @return the result of the operation - */ - OperationResult add(ResourceKey resource, long amount); - - /** - * Adds a given resource to the list. - * Shorthand for {@link #add(ResourceKey, long)}. - * - * @param resourceAmount the resource and the amount - * @return the result of the operation - */ - default OperationResult add(ResourceAmount resourceAmount) { - return add(resourceAmount.resource(), resourceAmount.amount()); - } - - /** - * Removes an amount of a certain resource in the list. - * If the amount reaches 0 due to this removal, the resource is removed from the list. - * - * @param resource the resource, may not be null - * @param amount the amount, must be larger than 0 - * @return a result if the removal operation was successful, otherwise an empty {@link Optional} - */ - Optional remove(ResourceKey resource, long amount); - - /** - * Removes an amount of a certain resource in the list. - * If the amount reaches 0 due to this removal, the resource is removed from the list. - * Shorthand for {@link #remove(ResourceKey, long)}. - * - * @param resourceAmount the resource and the amount - * @return a result if the removal operation was successful, otherwise an empty {@link Optional} - */ - default Optional remove(ResourceAmount resourceAmount) { - return remove(resourceAmount.resource(), resourceAmount.amount()); - } - /** * Retrieves all resources and their amounts from the list. * @@ -80,26 +36,4 @@ default Optional remove(ResourceAmount resourceAmount) { * @return whether the list contains this resource */ boolean contains(ResourceKey resource); - - /** - * Clears the list. - */ - void clear(); - - /** - * Copies the list. - */ - ResourceList copy(); - - /** - * Represents the result of an operation in a {@link ResourceList}. - * - * @param resource the resource affected by the operation - * @param amount teh current amount in the list - * @param change the delta caused by the operation - * @param available whether this resource is still available in the list, or if it was removed - */ - @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") - record OperationResult(ResourceKey resource, long amount, long change, boolean available) { - } } diff --git a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceList.java b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceList.java index 91adadfb2..a76c5c911 100644 --- a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceList.java +++ b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceList.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.api.resource.list.listenable; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.AbstractProxyResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.AbstractProxyMutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import java.util.HashSet; import java.util.Optional; @@ -17,10 +17,10 @@ * is being performed through this list, not the delegate list. */ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.2") -public class ListenableResourceList extends AbstractProxyResourceList { +public class ListenableResourceList extends AbstractProxyMutableResourceList { private final Set listeners = new HashSet<>(); - public ListenableResourceList(final ResourceList delegate) { + public ListenableResourceList(final MutableResourceList delegate) { super(delegate); } diff --git a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ResourceListListener.java b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ResourceListListener.java index 47be7f4bf..e428a151c 100644 --- a/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ResourceListListener.java +++ b/refinedstorage-resource-api/src/main/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ResourceListListener.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage.api.resource.list.listenable; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import org.apiguardian.api.API; @@ -15,5 +15,5 @@ public interface ResourceListListener { * * @param change the change */ - void onChanged(ResourceList.OperationResult change); + void onChanged(MutableResourceList.OperationResult change); } diff --git a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/AbstractResourceListTest.java b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/AbstractMutableResourceListTest.java similarity index 89% rename from refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/AbstractResourceListTest.java rename to refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/AbstractMutableResourceListTest.java index 2ed6f703c..2d288e496 100644 --- a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/AbstractResourceListTest.java +++ b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/AbstractMutableResourceListTest.java @@ -14,20 +14,20 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -abstract class AbstractResourceListTest { - private ResourceList list; +abstract class AbstractMutableResourceListTest { + private MutableResourceList list; @BeforeEach void setUp() { list = createList(); } - protected abstract ResourceList createList(); + protected abstract MutableResourceList createList(); @Test void shouldAddNewResource() { // Act - final ResourceList.OperationResult result = list.add(TestResource.A, 10); + final MutableResourceList.OperationResult result = list.add(TestResource.A, 10); // Assert assertThat(result.change()).isEqualTo(10); @@ -47,7 +47,7 @@ void shouldAddNewResource() { @Test void shouldAddNewResourceWithResourceAmountDirectly() { // Act - final ResourceList.OperationResult result = list.add(new ResourceAmount(TestResource.A, 10)); + final MutableResourceList.OperationResult result = list.add(new ResourceAmount(TestResource.A, 10)); // Assert assertThat(result.change()).isEqualTo(10); @@ -67,8 +67,8 @@ void shouldAddNewResourceWithResourceAmountDirectly() { @Test void shouldAddMultipleOfSameResource() { // Act - final ResourceList.OperationResult result1 = list.add(TestResource.A, 10); - final ResourceList.OperationResult result2 = list.add(TestResource.A, 5); + final MutableResourceList.OperationResult result1 = list.add(TestResource.A, 10); + final MutableResourceList.OperationResult result2 = list.add(TestResource.A, 5); // Assert assertThat(result1.change()).isEqualTo(10); @@ -93,9 +93,9 @@ void shouldAddMultipleOfSameResource() { @Test void shouldAddMultipleOfDifferentResources() { // Act - final ResourceList.OperationResult result1 = list.add(TestResource.A, 10); - final ResourceList.OperationResult result2 = list.add(TestResource.A, 5); - final ResourceList.OperationResult result3 = list.add(TestResource.B, 3); + final MutableResourceList.OperationResult result1 = list.add(TestResource.A, 10); + final MutableResourceList.OperationResult result2 = list.add(TestResource.A, 5); + final MutableResourceList.OperationResult result3 = list.add(TestResource.B, 3); // Assert assertThat(result1.change()).isEqualTo(10); @@ -142,7 +142,7 @@ void shouldNotAddInvalidResourceOrAmount() { @Test void shouldNotRemoveResourceWhenItIsNotAvailable() { // Act - final Optional result = list.remove(TestResource.A, 10); + final Optional result = list.remove(TestResource.A, 10); // Assert assertThat(result).isEmpty(); @@ -155,7 +155,7 @@ void shouldRemoveResourcePartly() { list.add(TestResource.B, 6); // Act - final Optional result2 = list.remove(TestResource.A, 5); + final Optional result2 = list.remove(TestResource.A, 5); // Assert assertThat(result2).isPresent(); @@ -184,7 +184,7 @@ void shouldRemoveResourcePartlyWithResourceAmountDirectly() { list.add(TestResource.B, 6); // Act - final Optional result2 = list.remove(new ResourceAmount( + final Optional result2 = list.remove(new ResourceAmount( TestResource.A, 5 )); @@ -216,7 +216,7 @@ void shouldRemoveResourceCompletely() { list.add(TestResource.B, 6); // Act - final Optional result = list.remove(TestResource.A, 20); + final Optional result = list.remove(TestResource.A, 20); // Assert assertThat(result).isPresent(); @@ -244,7 +244,7 @@ void shouldRemoveResourceCompletelyWithResourceAmountDirectly() { list.add(TestResource.B, 6); // Act - final Optional result2 = list.remove(new ResourceAmount( + final Optional result2 = list.remove(new ResourceAmount( TestResource.A, 20 )); @@ -275,7 +275,7 @@ void shouldNotRemoveResourceWithMoreThanIsAvailable() { list.add(TestResource.B, 6); // Act - final Optional result = list.remove(TestResource.A, 21); + final Optional result = list.remove(TestResource.A, 21); // Assert assertThat(result).isPresent(); @@ -340,7 +340,7 @@ void shouldCopyList() { list.add(TestResource.B, 5); // Act - final ResourceList copy = list.copy(); + final MutableResourceList copy = list.copy(); list.add(TestResource.A, 1); list.add(TestResource.C, 3); diff --git a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImplTest.java b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImplTest.java new file mode 100644 index 000000000..1a7a937a4 --- /dev/null +++ b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/MutableResourceListImplTest.java @@ -0,0 +1,8 @@ +package com.refinedmods.refinedstorage.api.resource.list; + +class MutableResourceListImplTest extends AbstractMutableResourceListTest { + @Override + protected MutableResourceList createList() { + return MutableResourceListImpl.create(); + } +} diff --git a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ProxyResourceListTest.java b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ProxyResourceListTest.java index fb0f9aa52..637d8936f 100644 --- a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ProxyResourceListTest.java +++ b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ProxyResourceListTest.java @@ -1,9 +1,9 @@ package com.refinedmods.refinedstorage.api.resource.list; -class ProxyResourceListTest extends AbstractResourceListTest { +class ProxyResourceListTest extends AbstractMutableResourceListTest { @Override - protected ResourceList createList() { - return new AbstractProxyResourceList(ResourceListImpl.create()) { + protected MutableResourceList createList() { + return new AbstractProxyMutableResourceList(MutableResourceListImpl.create()) { }; } } diff --git a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImplTest.java b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImplTest.java deleted file mode 100644 index f8c1259ca..000000000 --- a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/ResourceListImplTest.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.refinedmods.refinedstorage.api.resource.list; - -class ResourceListImplTest extends AbstractResourceListTest { - @Override - protected ResourceList createList() { - return ResourceListImpl.create(); - } -} diff --git a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java index 4cf2d9393..2f4094cae 100644 --- a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java +++ b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.api.resource.list.listenable; import com.refinedmods.refinedstorage.api.resource.TestResource; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import java.util.ArrayList; import java.util.List; @@ -15,13 +15,13 @@ class ListenableResourceListTest { private FakeResourceListListener listener; - private ResourceListImpl list; + private MutableResourceListImpl list; private ListenableResourceList sut; @BeforeEach void setUp() { listener = new FakeResourceListListener(); - list = ResourceListImpl.create(); + list = MutableResourceListImpl.create(); sut = new ListenableResourceList(list); } @@ -31,7 +31,7 @@ void shouldCallListenerWhenAdding() { sut.addListener(listener); // Act - final ResourceList.OperationResult result = sut.add(TestResource.A, 10); + final MutableResourceList.OperationResult result = sut.add(TestResource.A, 10); // Assert assertThat(result.change()).isEqualTo(10); @@ -44,7 +44,7 @@ void shouldCallListenerWhenAdding() { @Test void shouldNotCallListenerWhenAddingWithoutListener() { // Act - final ResourceList.OperationResult result = sut.add(TestResource.A, 10); + final MutableResourceList.OperationResult result = sut.add(TestResource.A, 10); // Assert assertThat(result.change()).isEqualTo(10); @@ -61,7 +61,7 @@ void shouldCallListenerWhenRemoving() { sut.add(TestResource.A, 10); // Act - final Optional result = sut.remove(TestResource.A, 10); + final Optional result = sut.remove(TestResource.A, 10); // Assert assertThat(result).isPresent(); @@ -78,7 +78,7 @@ void shouldNotCallListenerWhenRemovingWithoutListener() { sut.add(TestResource.A, 10); // Act - final Optional result = sut.remove(TestResource.A, 10); + final Optional result = sut.remove(TestResource.A, 10); // Assert assertThat(result).isPresent(); @@ -96,7 +96,7 @@ void shouldNotCallListenerWhenRemovingWithoutResult() { sut.add(TestResource.A, 10); // Act - final Optional result = sut.remove(TestResource.B, 10); + final Optional result = sut.remove(TestResource.B, 10); // Assert assertThat(result).isEmpty(); @@ -130,10 +130,10 @@ void shouldBeAbleToRemoveListener() { } private static class FakeResourceListListener implements ResourceListListener { - private final List changes = new ArrayList<>(); + private final List changes = new ArrayList<>(); @Override - public void onChanged(final ResourceList.OperationResult change) { + public void onChanged(final MutableResourceList.OperationResult change) { changes.add(change); } } diff --git a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/StorageImpl.java b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/StorageImpl.java index d82909000..358e14d20 100644 --- a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/StorageImpl.java +++ b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/StorageImpl.java @@ -3,8 +3,8 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import java.util.Collection; @@ -15,15 +15,15 @@ */ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.0") public class StorageImpl implements Storage { - private final ResourceList list; + private final MutableResourceList list; private long stored; - public StorageImpl(final ResourceList list) { + public StorageImpl(final MutableResourceList list) { this.list = list; } public StorageImpl() { - this(ResourceListImpl.create()); + this(MutableResourceListImpl.create()); } @Override diff --git a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImpl.java b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImpl.java index 829ba79bd..8bd73f4a3 100644 --- a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImpl.java +++ b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImpl.java @@ -3,7 +3,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; @@ -26,13 +26,13 @@ @API(status = API.Status.STABLE, since = "2.0.0-milestone.1.0") public class CompositeStorageImpl implements CompositeStorage, CompositeAwareChild, ParentComposite { private final List sources = new ArrayList<>(); - private final ResourceList list; + private final MutableResourceList list; private final Set parentComposites = new HashSet<>(); /** * @param list the backing list of this composite storage, used to retrieve a view of the sources */ - public CompositeStorageImpl(final ResourceList list) { + public CompositeStorageImpl(final MutableResourceList list) { this.list = list; } diff --git a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/external/ExternalStorage.java b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/external/ExternalStorage.java index 5e063794a..d61e737ae 100644 --- a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/external/ExternalStorage.java +++ b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/external/ExternalStorage.java @@ -3,8 +3,9 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.composite.CompositeAwareChild; import com.refinedmods.refinedstorage.api.storage.composite.ParentComposite; @@ -19,7 +20,7 @@ public class ExternalStorage implements CompositeAwareChild { private final ExternalStorageProvider provider; private final Set parents = new HashSet<>(); - private final ResourceList cache = ResourceListImpl.create(); + private final MutableResourceList cache = MutableResourceListImpl.create(); private final ExternalStorageListener listener; public ExternalStorage(final ExternalStorageProvider provider, final ExternalStorageListener listener) { @@ -116,7 +117,7 @@ private void removeFromCache(final ResourceKey resource, final long amount) { } private ResourceList buildCache() { - final ResourceList list = ResourceListImpl.create(); + final MutableResourceList list = MutableResourceListImpl.create(); provider.iterator().forEachRemaining(list::add); return list; } diff --git a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImpl.java b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImpl.java index b85e38871..f993c9b41 100644 --- a/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImpl.java +++ b/refinedstorage-storage-api/src/main/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImpl.java @@ -3,8 +3,8 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.resource.list.listenable.ListenableResourceList; import com.refinedmods.refinedstorage.api.resource.list.listenable.ResourceListListener; import com.refinedmods.refinedstorage.api.storage.Actor; @@ -24,10 +24,10 @@ public class RootStorageImpl implements RootStorage { private final ListenableResourceList list; public RootStorageImpl() { - this(ResourceListImpl.create()); + this(MutableResourceListImpl.create()); } - public RootStorageImpl(final ResourceList list) { + public RootStorageImpl(final MutableResourceList list) { this.list = new ListenableResourceList(list); this.storage = new CompositeStorageImpl(this.list); } diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java index 985ca196a..a3875a85e 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.FakeActors; import com.refinedmods.refinedstorage.api.storage.Storage; @@ -27,7 +27,7 @@ class CompositeStorageImplTest { @BeforeEach void setUp() { - sut = new CompositeStorageImpl(ResourceListImpl.create()); + sut = new CompositeStorageImpl(MutableResourceListImpl.create()); } @Test diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/ExtractCompositeStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/ExtractCompositeStorageImplTest.java index b5d12bf59..45227e855 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/ExtractCompositeStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/ExtractCompositeStorageImplTest.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.ActorCapturingStorage; import com.refinedmods.refinedstorage.api.storage.EmptyActor; @@ -23,7 +23,7 @@ class ExtractCompositeStorageImplTest { @BeforeEach void setUp() { - sut = new CompositeStorageImpl(ResourceListImpl.create()); + sut = new CompositeStorageImpl(MutableResourceListImpl.create()); } @ParameterizedTest diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/InsertCompositeStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/InsertCompositeStorageImplTest.java index 6dab1918f..076d100a0 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/InsertCompositeStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/InsertCompositeStorageImplTest.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.ActorCapturingStorage; import com.refinedmods.refinedstorage.api.storage.EmptyActor; @@ -22,7 +22,7 @@ class InsertCompositeStorageImplTest { @BeforeEach void setUp() { - sut = new CompositeStorageImpl(ResourceListImpl.create()); + sut = new CompositeStorageImpl(MutableResourceListImpl.create()); } @ParameterizedTest diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/SubCompositeCompositeStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/SubCompositeCompositeStorageImplTest.java index fc051b6b1..0d17e84f1 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/SubCompositeCompositeStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/SubCompositeCompositeStorageImplTest.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceListImpl; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.StorageImpl; @@ -19,13 +19,13 @@ class SubCompositeCompositeStorageImplTest { @BeforeEach void setUp() { - sut = new CompositeStorageImpl(ResourceListImpl.create()); + sut = new CompositeStorageImpl(MutableResourceListImpl.create()); } @Test void testAddingSubCompositeShouldAddAllResourcesToParent() { // Arrange - final CompositeStorage subComposite = new CompositeStorageImpl(ResourceListImpl.create()); + final CompositeStorage subComposite = new CompositeStorageImpl(MutableResourceListImpl.create()); subComposite.addSource(new StorageImpl()); subComposite.insert(A, 10, Action.EXECUTE, EmptyActor.INSTANCE); @@ -41,7 +41,7 @@ void testAddingSubCompositeShouldAddAllResourcesToParent() { @Test void testRemovingSubCompositeShouldRemoveAllResourcesFromParent() { // Arrange - final CompositeStorage subComposite = new CompositeStorageImpl(ResourceListImpl.create()); + final CompositeStorage subComposite = new CompositeStorageImpl(MutableResourceListImpl.create()); subComposite.addSource(new StorageImpl()); subComposite.insert(A, 10, Action.EXECUTE, EmptyActor.INSTANCE); @@ -62,7 +62,7 @@ void testRemovingSubCompositeShouldRemoveAllResourcesFromParent() { @Test void testAddingSourceToSubCompositeShouldNotifyParent() { // Arrange - final CompositeStorage subComposite = new CompositeStorageImpl(ResourceListImpl.create()); + final CompositeStorage subComposite = new CompositeStorageImpl(MutableResourceListImpl.create()); final Storage subStorage = new StorageImpl(); subStorage.insert(B, 10, Action.EXECUTE, EmptyActor.INSTANCE); @@ -89,7 +89,7 @@ void testAddingSourceToSubCompositeShouldNotifyParent() { @Test void testRemovingSourceFromSubCompositeShouldNotifyParent() { // Arrange - final CompositeStorage subComposite = new CompositeStorageImpl(ResourceListImpl.create()); + final CompositeStorage subComposite = new CompositeStorageImpl(MutableResourceListImpl.create()); final Storage subStorage = new StorageImpl(); subStorage.insert(B, 10, Action.EXECUTE, EmptyActor.INSTANCE); diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImplTest.java index da1362897..a8ae7cba2 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/root/RootStorageImplTest.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; +import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; import com.refinedmods.refinedstorage.api.resource.list.listenable.ResourceListListener; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.Storage; @@ -104,7 +104,7 @@ void shouldCallListenerOnInsertion(final Action action) { final ResourceListListener listener = mock(ResourceListListener.class); sut.addListener(listener); - final var changedResource = ArgumentCaptor.forClass(ResourceList.OperationResult.class); + final var changedResource = ArgumentCaptor.forClass(MutableResourceList.OperationResult.class); // Act sut.insert(A, 8, action, EmptyActor.INSTANCE); @@ -134,7 +134,7 @@ void shouldCallListenerOnExtraction(final Action action) { final ResourceListListener listener = mock(ResourceListListener.class); sut.addListener(listener); - final var changedResource = ArgumentCaptor.forClass(ResourceList.OperationResult.class); + final var changedResource = ArgumentCaptor.forClass(MutableResourceList.OperationResult.class); // Act sut.extract(A, 5, action, EmptyActor.INSTANCE); From ac09e651f9709810344e43710718d02f990e9a07 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 9 Sep 2024 20:20:44 +0200 Subject: [PATCH 45/83] chore: upgrade refined architect To fix issues with NeoForge asset updating. With this change, every api module is now compiled with the mod instead of using the fabric jar-in-jar system. The reason for this is for consistency with neoforge, which always had the apis compiled along with the main mod. The only reason why we used jij on fabric was for legacy reasons (RS 2 was originally made on fabric) and for inclusion of the apis in modmenu. But this is not important. --- .github/workflows/build.yml | 2 +- .github/workflows/draft-release.yml | 2 +- .../issue-for-unsupported-version.yml | 2 +- .github/workflows/publish-release.yml | 2 +- .github/workflows/resolved-issue-locking.yml | 2 +- .github/workflows/validate-branch-name.yml | 2 +- .github/workflows/validate-changelog.yml | 2 +- .../workflows/validate-commit-messages.yml | 2 +- gradle.properties | 2 +- .../src/main/resources/fabric.mod.json | 19 --------- refinedstorage-fabric/build.gradle.kts | 40 +++++++++++++----- .../src/main/resources/fabric.mod.json | 19 --------- refinedstorage-neoforge/build.gradle.kts | 42 ++++++++++++++----- .../src/main/resources/fabric.mod.json | 19 --------- .../src/main/resources/fabric.mod.json | 19 --------- .../src/main/resources/fabric.mod.json | 19 --------- .../src/main/resources/fabric.mod.json | 19 --------- .../src/main/resources/fabric.mod.json | 19 --------- 18 files changed, 69 insertions(+), 164 deletions(-) delete mode 100644 refinedstorage-core-api/src/main/resources/fabric.mod.json delete mode 100644 refinedstorage-grid-api/src/main/resources/fabric.mod.json delete mode 100644 refinedstorage-network-api/src/main/resources/fabric.mod.json delete mode 100644 refinedstorage-network/src/main/resources/fabric.mod.json delete mode 100644 refinedstorage-query-parser/src/main/resources/fabric.mod.json delete mode 100644 refinedstorage-resource-api/src/main/resources/fabric.mod.json delete mode 100644 refinedstorage-storage-api/src/main/resources/fabric.mod.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa24ab46a..4833d4945 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ on: types: [ opened, synchronize, reopened ] jobs: build: - uses: refinedmods/refinedarchitect/.github/workflows/build.yml@v0.17.1 + uses: refinedmods/refinedarchitect/.github/workflows/build.yml@v0.18.0 with: gametests: true secrets: inherit diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index e21ed0371..94c9831f3 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -17,7 +17,7 @@ on: type: string jobs: draft: - uses: refinedmods/refinedarchitect/.github/workflows/draft-release.yml@v0.17.1 + uses: refinedmods/refinedarchitect/.github/workflows/draft-release.yml@v0.18.0 with: release-type: ${{ inputs.release-type }} version-number-override: ${{ inputs.version-number-override }} diff --git a/.github/workflows/issue-for-unsupported-version.yml b/.github/workflows/issue-for-unsupported-version.yml index f8ce8650d..d10da50ef 100644 --- a/.github/workflows/issue-for-unsupported-version.yml +++ b/.github/workflows/issue-for-unsupported-version.yml @@ -4,4 +4,4 @@ on: types: [ labeled, unlabeled, reopened ] jobs: unsupported-labeler: - uses: refinedmods/refinedarchitect/.github/workflows/issue-for-unsupported-version.yml@v0.17.1 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/issue-for-unsupported-version.yml@v0.18.0 \ No newline at end of file diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 864977bfc..7a9afc74d 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -7,7 +7,7 @@ on: - closed jobs: publish-release: - uses: refinedmods/refinedarchitect/.github/workflows/publish-release.yml@v0.17.1 + uses: refinedmods/refinedarchitect/.github/workflows/publish-release.yml@v0.18.0 secrets: inherit with: project-name: 'Refined Storage' diff --git a/.github/workflows/resolved-issue-locking.yml b/.github/workflows/resolved-issue-locking.yml index 5c6c04a6f..e99cee5d9 100644 --- a/.github/workflows/resolved-issue-locking.yml +++ b/.github/workflows/resolved-issue-locking.yml @@ -4,4 +4,4 @@ on: - cron: '0 0 * * 1' jobs: lock: - uses: refinedmods/refinedarchitect/.github/workflows/resolved-issue-locking.yml@v0.17.1 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/resolved-issue-locking.yml@v0.18.0 \ No newline at end of file diff --git a/.github/workflows/validate-branch-name.yml b/.github/workflows/validate-branch-name.yml index ce5e06ea5..0baa43ae0 100644 --- a/.github/workflows/validate-branch-name.yml +++ b/.github/workflows/validate-branch-name.yml @@ -2,4 +2,4 @@ name: Validate branch name on: [ pull_request ] jobs: validate-branch-name: - uses: refinedmods/refinedarchitect/.github/workflows/validate-branch-name.yml@v0.17.1 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-branch-name.yml@v0.18.0 \ No newline at end of file diff --git a/.github/workflows/validate-changelog.yml b/.github/workflows/validate-changelog.yml index db04af17b..1e25455e2 100644 --- a/.github/workflows/validate-changelog.yml +++ b/.github/workflows/validate-changelog.yml @@ -4,4 +4,4 @@ on: types: [ opened, synchronize, reopened, ready_for_review, labeled, unlabeled ] jobs: validate-changelog: - uses: refinedmods/refinedarchitect/.github/workflows/validate-changelog.yml@v0.17.1 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-changelog.yml@v0.18.0 \ No newline at end of file diff --git a/.github/workflows/validate-commit-messages.yml b/.github/workflows/validate-commit-messages.yml index 043dba24c..6a790f177 100644 --- a/.github/workflows/validate-commit-messages.yml +++ b/.github/workflows/validate-commit-messages.yml @@ -2,4 +2,4 @@ name: Validate commit messages on: [ pull_request ] jobs: validate-commit-messages: - uses: refinedmods/refinedarchitect/.github/workflows/validate-commit-messages.yml@v0.17.1 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-commit-messages.yml@v0.18.0 \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 4da18d71a..ad92cd70d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ -refinedarchitectVersion=0.17.1 +refinedarchitectVersion=0.18.0 # Gradle org.gradle.jvmargs=-Xmx1G diff --git a/refinedstorage-core-api/src/main/resources/fabric.mod.json b/refinedstorage-core-api/src/main/resources/fabric.mod.json deleted file mode 100644 index 28fec6e52..000000000 --- a/refinedstorage-core-api/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-core-api", - "version": "${version}", - "name": "Refined Storage Core API", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} diff --git a/refinedstorage-fabric/build.gradle.kts b/refinedstorage-fabric/build.gradle.kts index f1cae6473..488d6e346 100644 --- a/refinedstorage-fabric/build.gradle.kts +++ b/refinedstorage-fabric/build.gradle.kts @@ -16,17 +16,6 @@ repositories { refinedarchitect { modId = "refinedstorage" fabric() - compileWithProject(project(":refinedstorage-common")) - compileWithProject(project(":refinedstorage-common-api")) - compileWithProject(project(":refinedstorage-fabric-api")) - addProject(project(":refinedstorage-core-api")) - addProject(project(":refinedstorage-resource-api")) - addProject(project(":refinedstorage-storage-api")) - addProject(project(":refinedstorage-network-api")) - addProject(project(":refinedstorage-network")) - addProject(project(":refinedstorage-grid-api")) - addProject(project(":refinedstorage-autocrafting-api")) - addProject(project(":refinedstorage-query-parser")) publishing { maven = true // curseForge = "243076" @@ -38,6 +27,9 @@ base { archivesName.set("refinedstorage-fabric") } +val commonJava by configurations.existing +val commonResources by configurations.existing + dependencies { modApi(libs.cloth.config) { exclude(group = "net.fabricmc.fabric-api") @@ -48,4 +40,30 @@ dependencies { modApi(libs.modmenu) include(libs.cloth.config) include(libs.teamreborn.energy) + + testCompileOnly(libs.apiguardian) + + compileOnly(project(":refinedstorage-common")) + compileOnly(project(":refinedstorage-common-api")) + compileOnly(project(":refinedstorage-fabric-api")) + compileOnly(project(":refinedstorage-core-api")) + compileOnly(project(":refinedstorage-resource-api")) + compileOnly(project(":refinedstorage-storage-api")) + compileOnly(project(":refinedstorage-network-api")) + compileOnly(project(":refinedstorage-network")) + compileOnly(project(":refinedstorage-grid-api")) + compileOnly(project(":refinedstorage-autocrafting-api")) + compileOnly(project(":refinedstorage-query-parser")) + commonJava(project(path = ":refinedstorage-common", configuration = "commonJava")) + commonResources(project(path = ":refinedstorage-common", configuration = "commonResources")) + commonJava(project(path = ":refinedstorage-common-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-fabric-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-core-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-resource-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-storage-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-network-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-network", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-grid-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-autocrafting-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-query-parser", configuration = "commonJava")) } diff --git a/refinedstorage-grid-api/src/main/resources/fabric.mod.json b/refinedstorage-grid-api/src/main/resources/fabric.mod.json deleted file mode 100644 index 30ce310b3..000000000 --- a/refinedstorage-grid-api/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-grid-api", - "version": "${version}", - "name": "Refined Storage Grid API", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} diff --git a/refinedstorage-neoforge/build.gradle.kts b/refinedstorage-neoforge/build.gradle.kts index ebb56d715..039e35ba7 100644 --- a/refinedstorage-neoforge/build.gradle.kts +++ b/refinedstorage-neoforge/build.gradle.kts @@ -7,17 +7,6 @@ refinedarchitect { neoForge() gameTests() dataGeneration(project(":refinedstorage-common")) - compileWithProject(project(":refinedstorage-common")) - compileWithProject(project(":refinedstorage-common-api")) - compileWithProject(project(":refinedstorage-neoforge-api")) - compileWithProject(project(":refinedstorage-core-api")) - compileWithProject(project(":refinedstorage-resource-api")) - compileWithProject(project(":refinedstorage-storage-api")) - compileWithProject(project(":refinedstorage-network-api")) - compileWithProject(project(":refinedstorage-network")) - compileWithProject(project(":refinedstorage-grid-api")) - compileWithProject(project(":refinedstorage-autocrafting-api")) - compileWithProject(project(":refinedstorage-query-parser")) publishing { maven = true // curseForge = "243076" @@ -25,6 +14,37 @@ refinedarchitect { } } +val commonJava by configurations.existing +val commonResources by configurations.existing + +dependencies { + testCompileOnly(libs.apiguardian) + + compileOnly(project(":refinedstorage-common")) + compileOnly(project(":refinedstorage-common-api")) + compileOnly(project(":refinedstorage-neoforge-api")) + compileOnly(project(":refinedstorage-core-api")) + compileOnly(project(":refinedstorage-resource-api")) + compileOnly(project(":refinedstorage-storage-api")) + compileOnly(project(":refinedstorage-network-api")) + compileOnly(project(":refinedstorage-network")) + compileOnly(project(":refinedstorage-grid-api")) + compileOnly(project(":refinedstorage-autocrafting-api")) + compileOnly(project(":refinedstorage-query-parser")) + commonJava(project(path = ":refinedstorage-common", configuration = "commonJava")) + commonResources(project(path = ":refinedstorage-common", configuration = "commonResources")) + commonJava(project(path = ":refinedstorage-common-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-neoforge-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-core-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-resource-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-storage-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-network-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-network", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-grid-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-autocrafting-api", configuration = "commonJava")) + commonJava(project(path = ":refinedstorage-query-parser", configuration = "commonJava")) +} + base { archivesName.set("refinedstorage-neoforge") } diff --git a/refinedstorage-network-api/src/main/resources/fabric.mod.json b/refinedstorage-network-api/src/main/resources/fabric.mod.json deleted file mode 100644 index cf67514dd..000000000 --- a/refinedstorage-network-api/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-network-api", - "version": "${version}", - "name": "Refined Storage Network API", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} diff --git a/refinedstorage-network/src/main/resources/fabric.mod.json b/refinedstorage-network/src/main/resources/fabric.mod.json deleted file mode 100644 index fd70f35e4..000000000 --- a/refinedstorage-network/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-network", - "version": "${version}", - "name": "Refined Storage Network", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} diff --git a/refinedstorage-query-parser/src/main/resources/fabric.mod.json b/refinedstorage-query-parser/src/main/resources/fabric.mod.json deleted file mode 100644 index 0970459fb..000000000 --- a/refinedstorage-query-parser/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-query-parser", - "version": "${version}", - "name": "Refined Storage Query Parser", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} diff --git a/refinedstorage-resource-api/src/main/resources/fabric.mod.json b/refinedstorage-resource-api/src/main/resources/fabric.mod.json deleted file mode 100644 index 0a1733787..000000000 --- a/refinedstorage-resource-api/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-resource-api", - "version": "${version}", - "name": "Refined Storage Resource API", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} diff --git a/refinedstorage-storage-api/src/main/resources/fabric.mod.json b/refinedstorage-storage-api/src/main/resources/fabric.mod.json deleted file mode 100644 index b7e49a488..000000000 --- a/refinedstorage-storage-api/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "schemaVersion": 1, - "id": "refinedstorage-storage-api", - "version": "${version}", - "name": "Refined Storage Storage API", - "authors": [ - "Refined Mods" - ], - "license": "MIT", - "environment": "*", - "custom": { - "modmenu": { - "parent": "refinedstorage", - "badges": [ - "library" - ] - } - } -} From 38a0983897306fbade1f06fb509f6f15ea9b22f4 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 10 Sep 2024 16:01:25 +0200 Subject: [PATCH 46/83] chore: upgrade refined architect For config cache support. Move to new neo resource gen system as regular processResources doesn't seem to work anymore. --- .github/workflows/build.yml | 2 +- .github/workflows/draft-release.yml | 2 +- .github/workflows/issue-for-unsupported-version.yml | 2 +- .github/workflows/publish-release.yml | 2 +- .github/workflows/resolved-issue-locking.yml | 2 +- .github/workflows/validate-branch-name.yml | 2 +- .github/workflows/validate-changelog.yml | 2 +- .github/workflows/validate-commit-messages.yml | 2 +- gradle.properties | 6 +++++- gradle/wrapper/gradle-wrapper.properties | 2 +- .../{resources => templates}/META-INF/neoforge.mods.toml | 0 11 files changed, 14 insertions(+), 10 deletions(-) rename refinedstorage-neoforge/src/main/{resources => templates}/META-INF/neoforge.mods.toml (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4833d4945..7aa25811e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,7 +8,7 @@ on: types: [ opened, synchronize, reopened ] jobs: build: - uses: refinedmods/refinedarchitect/.github/workflows/build.yml@v0.18.0 + uses: refinedmods/refinedarchitect/.github/workflows/build.yml@v0.19.1 with: gametests: true secrets: inherit diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 94c9831f3..c6d98d534 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -17,7 +17,7 @@ on: type: string jobs: draft: - uses: refinedmods/refinedarchitect/.github/workflows/draft-release.yml@v0.18.0 + uses: refinedmods/refinedarchitect/.github/workflows/draft-release.yml@v0.19.1 with: release-type: ${{ inputs.release-type }} version-number-override: ${{ inputs.version-number-override }} diff --git a/.github/workflows/issue-for-unsupported-version.yml b/.github/workflows/issue-for-unsupported-version.yml index d10da50ef..002c2acd8 100644 --- a/.github/workflows/issue-for-unsupported-version.yml +++ b/.github/workflows/issue-for-unsupported-version.yml @@ -4,4 +4,4 @@ on: types: [ labeled, unlabeled, reopened ] jobs: unsupported-labeler: - uses: refinedmods/refinedarchitect/.github/workflows/issue-for-unsupported-version.yml@v0.18.0 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/issue-for-unsupported-version.yml@v0.19.1 \ No newline at end of file diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 7a9afc74d..f2e4ec7ca 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -7,7 +7,7 @@ on: - closed jobs: publish-release: - uses: refinedmods/refinedarchitect/.github/workflows/publish-release.yml@v0.18.0 + uses: refinedmods/refinedarchitect/.github/workflows/publish-release.yml@v0.19.1 secrets: inherit with: project-name: 'Refined Storage' diff --git a/.github/workflows/resolved-issue-locking.yml b/.github/workflows/resolved-issue-locking.yml index e99cee5d9..c7e6f296d 100644 --- a/.github/workflows/resolved-issue-locking.yml +++ b/.github/workflows/resolved-issue-locking.yml @@ -4,4 +4,4 @@ on: - cron: '0 0 * * 1' jobs: lock: - uses: refinedmods/refinedarchitect/.github/workflows/resolved-issue-locking.yml@v0.18.0 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/resolved-issue-locking.yml@v0.19.1 \ No newline at end of file diff --git a/.github/workflows/validate-branch-name.yml b/.github/workflows/validate-branch-name.yml index 0baa43ae0..c1733fb6f 100644 --- a/.github/workflows/validate-branch-name.yml +++ b/.github/workflows/validate-branch-name.yml @@ -2,4 +2,4 @@ name: Validate branch name on: [ pull_request ] jobs: validate-branch-name: - uses: refinedmods/refinedarchitect/.github/workflows/validate-branch-name.yml@v0.18.0 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-branch-name.yml@v0.19.1 \ No newline at end of file diff --git a/.github/workflows/validate-changelog.yml b/.github/workflows/validate-changelog.yml index 1e25455e2..f5fb9aec9 100644 --- a/.github/workflows/validate-changelog.yml +++ b/.github/workflows/validate-changelog.yml @@ -4,4 +4,4 @@ on: types: [ opened, synchronize, reopened, ready_for_review, labeled, unlabeled ] jobs: validate-changelog: - uses: refinedmods/refinedarchitect/.github/workflows/validate-changelog.yml@v0.18.0 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-changelog.yml@v0.19.1 \ No newline at end of file diff --git a/.github/workflows/validate-commit-messages.yml b/.github/workflows/validate-commit-messages.yml index 6a790f177..620b9e897 100644 --- a/.github/workflows/validate-commit-messages.yml +++ b/.github/workflows/validate-commit-messages.yml @@ -2,4 +2,4 @@ name: Validate commit messages on: [ pull_request ] jobs: validate-commit-messages: - uses: refinedmods/refinedarchitect/.github/workflows/validate-commit-messages.yml@v0.18.0 \ No newline at end of file + uses: refinedmods/refinedarchitect/.github/workflows/validate-commit-messages.yml@v0.19.1 \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index ad92cd70d..a1b566f8c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,7 @@ -refinedarchitectVersion=0.18.0 +refinedarchitectVersion=0.19.1 # Gradle org.gradle.jvmargs=-Xmx1G +org.gradle.configureondemand=true +org.gradle.caching=true +org.gradle.configuration-cache=true +org.gradle.configuration-cache.problems=warn diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c..9355b4155 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/refinedstorage-neoforge/src/main/resources/META-INF/neoforge.mods.toml b/refinedstorage-neoforge/src/main/templates/META-INF/neoforge.mods.toml similarity index 100% rename from refinedstorage-neoforge/src/main/resources/META-INF/neoforge.mods.toml rename to refinedstorage-neoforge/src/main/templates/META-INF/neoforge.mods.toml From 5342df84c4f79d1f83bb588b1c8136200cfd8d40 Mon Sep 17 00:00:00 2001 From: Starforcraft Date: Sat, 7 Sep 2024 20:34:46 +0200 Subject: [PATCH 47/83] feat: disk interface gametest --- refinedstorage-neoforge/build.gradle.kts | 1 + .../refinedstorage/common/GameTestUtil.java | 20 +- .../common/exporter/ExporterTest.java | 2 +- .../diskinterface/DiskInterfaceTest.java | 313 ++++++++++++++++++ .../diskinterface/DiskInterfaceTestPlots.java | 89 +++++ .../ExternalStorageFluidTest.java | 6 +- 6 files changed, 421 insertions(+), 10 deletions(-) create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTestPlots.java diff --git a/refinedstorage-neoforge/build.gradle.kts b/refinedstorage-neoforge/build.gradle.kts index 039e35ba7..f004283d9 100644 --- a/refinedstorage-neoforge/build.gradle.kts +++ b/refinedstorage-neoforge/build.gradle.kts @@ -19,6 +19,7 @@ val commonResources by configurations.existing dependencies { testCompileOnly(libs.apiguardian) + testCompileOnly(project(":refinedstorage-common")) compileOnly(project(":refinedstorage-common")) compileOnly(project(":refinedstorage-common-api")) diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java index 09b901952..ea15f2a27 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/GameTestUtil.java @@ -277,6 +277,14 @@ public static Runnable storageContainsExactly(final GameTestHelper helper, }); } + public static Runnable storageIsEmpty(final GameTestHelper helper, + final BlockPos networkPos) { + return networkIsAvailable(helper, networkPos, network -> { + final StorageNetworkComponent storage = network.getComponent(StorageNetworkComponent.class); + helper.assertTrue(storage.getStored() == 0, "Storage is not empty"); + }); + } + private static ResourceList toResourceList(final ResourceAmount... resources) { return toResourceList(Arrays.asList(resources)); } @@ -343,13 +351,13 @@ public static void removeItemFromChest(final GameTestHelper helper, public static void prepareInterface(final GameTestHelper helper, final BlockPos pos, - final ResourceAmount... resource) { + final ResourceAmount... resources) { helper.setBlock(pos, RSBLOCKS.getInterface()); final var interfaceBlockEntity = requireBlockEntity(helper, pos, InterfaceBlockEntity.class); final ExportedResourcesContainer exportedResources = interfaceBlockEntity.getExportedResources(); - for (int i = 0; i < resource.length; i++) { - exportedResources.set(i, resource[i]); + for (int i = 0; i < resources.length; i++) { + exportedResources.set(i, resources[i]); } } @@ -362,9 +370,9 @@ public static void addFluidToInterface(final GameTestHelper helper, exportedResources.insert(resource.resource(), resource.amount(), Action.EXECUTE); } - public static void removeFluidToInterface(final GameTestHelper helper, - final BlockPos pos, - final ResourceAmount resource) { + public static void removeFluidFromInterface(final GameTestHelper helper, + final BlockPos pos, + final ResourceAmount resource) { final var interfaceBlockEntity = requireBlockEntity(helper, pos, InterfaceBlockEntity.class); final ExportedResourcesContainer exportedResources = interfaceBlockEntity.getExportedResources(); diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java index 8046674ba..db7a2808c 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java @@ -186,8 +186,8 @@ public static void shouldExportFluidWithStackUpgrade(final GameTestHelper helper })); // Act - exporter.addUpgradeItem(RSITEMS.getStackUpgrade()); exporter.setFilters(List.of(asResource(WATER))); + exporter.addUpgradeItem(RSITEMS.getStackUpgrade()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java new file mode 100644 index 000000000..4618f6bd4 --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java @@ -0,0 +1,313 @@ +package com.refinedmods.refinedstorage.common.storage.diskinterface; + +import com.refinedmods.refinedstorage.api.network.impl.node.storagetransfer.StorageTransferMode; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; +import com.refinedmods.refinedstorage.common.util.IdentifierUtil; + +import java.util.Set; + +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTest; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.gametest.GameTestHolder; +import net.neoforged.neoforge.gametest.PrefixGameTestTemplate; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.RSITEMS; +import static com.refinedmods.refinedstorage.common.GameTestUtil.asResource; +import static com.refinedmods.refinedstorage.common.GameTestUtil.getItemAsDamaged; +import static com.refinedmods.refinedstorage.common.GameTestUtil.insert; +import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; +import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; +import static com.refinedmods.refinedstorage.common.GameTestUtil.storageIsEmpty; +import static com.refinedmods.refinedstorage.common.storage.diskinterface.DiskInterfaceTestPlots.addDiskToDiskInterface; +import static com.refinedmods.refinedstorage.common.storage.diskinterface.DiskInterfaceTestPlots.isDiskInOutputWithAmount; +import static com.refinedmods.refinedstorage.common.storage.diskinterface.DiskInterfaceTestPlots.preparePlot; +import static net.minecraft.world.item.Items.DIAMOND_CHESTPLATE; +import static net.minecraft.world.item.Items.DIRT; + +@GameTestHolder(IdentifierUtil.MOD_ID) +@PrefixGameTestTemplate(false) +public final class DiskInterfaceTest { + private DiskInterfaceTest() { + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemsIntoNetwork(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 64); + })); + + // Act + diskInterface.setTransferMode(StorageTransferMode.INSERT_INTO_NETWORK); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 64) + )) + .thenExecute(() -> addDiskToDiskInterface( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10))) + .thenIdle(9 * 10) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 74) + )) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 0)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemsIntoNetworkWithStackUpgrade(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 64); + })); + + // Act + diskInterface.setTransferMode(StorageTransferMode.INSERT_INTO_NETWORK); + diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade()); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 64) + )) + .thenExecute(() -> addDiskToDiskInterface( + helper, + pos, + new ResourceAmount(asResource(DIRT), 64))) + .thenIdle(9) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 128) + )) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 0)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemsIntoNetworkBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 64); + })); + + // Act + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + diskInterface.setTransferMode(StorageTransferMode.INSERT_INTO_NETWORK); + diskInterface.setFuzzyMode(false); + diskInterface.setFilters(Set.of(asResource(damagedDiamondChestplate))); + diskInterface.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 64) + )) + .thenExecute(() -> addDiskToDiskInterface( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenIdle(9 * 6) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 69) + )) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 1)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldInsertItemsIntoNetworkFuzzyBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 64); + })); + + // Act + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + diskInterface.setTransferMode(StorageTransferMode.INSERT_INTO_NETWORK); + diskInterface.setFuzzyMode(true); + diskInterface.setFilters(Set.of(asResource(DIAMOND_CHESTPLATE.getDefaultInstance()))); + diskInterface.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 64) + )) + .thenExecute(() -> addDiskToDiskInterface( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(damagedDiamondChestplate), 1), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE.getDefaultInstance()), 1) + )) + .thenIdle(9 * 7) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 69) + )) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 2)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExtractItemsFromNetwork(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + })); + + // Act + diskInterface.setTransferMode(StorageTransferMode.EXTRACT_FROM_NETWORK); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10) + )) + .thenExecute(() -> addDiskToDiskInterface(helper, pos)) + .thenIdle(9 * 10) + .thenExecute(storageIsEmpty(helper, pos)) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 10)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExtractItemsFromNetworkWithStackUpgrade(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 64); + })); + + // Act + diskInterface.setTransferMode(StorageTransferMode.EXTRACT_FROM_NETWORK); + diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade()); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 64) + )) + .thenExecute(() -> addDiskToDiskInterface(helper, pos)) + .thenIdle(9) + .thenExecute(storageIsEmpty(helper, pos)) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 64)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExtractItemsFromNetworkBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 5); + insert(helper, network, asResource(damagedDiamondChestplate), 1); + })); + + // Act + diskInterface.setTransferMode(StorageTransferMode.EXTRACT_FROM_NETWORK); + diskInterface.setFuzzyMode(false); + diskInterface.setFilters(Set.of(asResource(damagedDiamondChestplate))); + diskInterface.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenExecute(() -> addDiskToDiskInterface(helper, pos)) + .thenIdle(9 * 6) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 5)) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExtractItemsFromNetworkFuzzyBlocklist(final GameTestHelper helper) { + preparePlot(helper, Direction.NORTH, (diskInterface, pos, sequence) -> { + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 5); + insert(helper, network, asResource(damagedDiamondChestplate), 1); + insert(helper, network, DIAMOND_CHESTPLATE, 1); + })); + + // Act + diskInterface.setTransferMode(StorageTransferMode.EXTRACT_FROM_NETWORK); + diskInterface.setFuzzyMode(true); + diskInterface.setFilters(Set.of(asResource(DIAMOND_CHESTPLATE.getDefaultInstance()))); + diskInterface.setFilterMode(FilterMode.BLOCK); + + // Assert + sequence + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(damagedDiamondChestplate), 1), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )) + .thenExecute(() -> addDiskToDiskInterface(helper, pos)) + .thenIdle(9 * 7) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(damagedDiamondChestplate), 1), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )) + .thenExecute(() -> isDiskInOutputWithAmount(helper, pos, 5)) + .thenSucceed(); + }); + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTestPlots.java new file mode 100644 index 000000000..d09b68a14 --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTestPlots.java @@ -0,0 +1,89 @@ +package com.refinedmods.refinedstorage.common.storage.diskinterface; + +import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.storage.Storage; +import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; +import com.refinedmods.refinedstorage.common.content.Items; +import com.refinedmods.refinedstorage.common.storage.ItemStorageVariant; +import com.refinedmods.refinedstorage.common.support.FilteredContainer; +import com.refinedmods.refinedstorage.common.support.direction.BiDirection; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.gametest.framework.GameTestAssertException; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.gametest.framework.GameTestSequence; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GameType; +import org.apache.commons.lang3.function.TriConsumer; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.RSBLOCKS; +import static com.refinedmods.refinedstorage.common.GameTestUtil.requireBlockEntity; +import static net.minecraft.core.BlockPos.ZERO; + +final class DiskInterfaceTestPlots { + private DiskInterfaceTestPlots() { + } + + static void preparePlot(final GameTestHelper helper, + final Direction direction, + final TriConsumer consumer) { + helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); + helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); + final BlockPos diskInterfacePos = ZERO.above().above().above(); + helper.setBlock(diskInterfacePos, RSBLOCKS.getDiskInterface().getDefault() + .rotated(BiDirection.forDirection(direction))); + consumer.accept( + requireBlockEntity(helper, diskInterfacePos, AbstractDiskInterfaceBlockEntity.class), + diskInterfacePos, + helper.startSequence() + ); + } + + static void addDiskToDiskInterface(final GameTestHelper helper, + final BlockPos diskInterfacePos, + final ResourceAmount... resources) { + final ItemStack diskItem = new ItemStack(Items.INSTANCE.getItemStorageDisk(ItemStorageVariant.SIXTY_FOUR_K)); + diskItem.inventoryTick(helper.getLevel(), helper.makeMockPlayer(GameType.SURVIVAL), 0, false); + + final Storage storage = getStorageFromDisk(helper, diskItem); + if (resources.length > 0) { + final PlayerActor actor = new PlayerActor(helper.makeMockPlayer(GameType.SURVIVAL)); + for (final ResourceAmount resource : resources) { + if (resource != null) { + storage.insert(resource.resource(), resource.amount(), Action.EXECUTE, actor); + } + } + } + + final var diskInterfaceBlockEntity = requireBlockEntity(helper, diskInterfacePos, + AbstractDiskInterfaceBlockEntity.class); + final FilteredContainer diskInterfaceContainer = diskInterfaceBlockEntity.getDiskInventory(); + diskInterfaceContainer.addItem(diskItem); + } + + static void isDiskInOutputWithAmount(final GameTestHelper helper, + final BlockPos diskInterfacePos, + final int storedAmount) { + final var diskInterfaceBlockEntity = requireBlockEntity(helper, diskInterfacePos, + AbstractDiskInterfaceBlockEntity.class); + final FilteredContainer diskInterfaceContainer = diskInterfaceBlockEntity.getDiskInventory(); + + final ItemStack diskItem = diskInterfaceContainer.getItem(3); + final Storage storage = getStorageFromDisk(helper, diskItem); + + helper.assertTrue(!diskItem.isEmpty(), "Could not find a Storage Disk in the output slot"); + helper.assertTrue(storage.getStored() == storedAmount, "Expected Storage Disk stored amount " + + storedAmount + ", but was " + storage.getStored()); + } + + private static Storage getStorageFromDisk(final GameTestHelper helper, + final ItemStack diskItem) { + return RefinedStorageApi.INSTANCE + .getStorageContainerItemHelper() + .resolveStorage(RefinedStorageApi.INSTANCE.getStorageRepository(helper.getLevel()), diskItem) + .orElseThrow(() -> new GameTestAssertException("Couldn't find SerializableStorage from Storage Disk")); + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java index 0a91639cd..f61a9ba3d 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/externalstorage/ExternalStorageFluidTest.java @@ -19,7 +19,7 @@ import static com.refinedmods.refinedstorage.common.GameTestUtil.interfaceContainsExactly; import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; import static com.refinedmods.refinedstorage.common.GameTestUtil.prepareInterface; -import static com.refinedmods.refinedstorage.common.GameTestUtil.removeFluidToInterface; +import static com.refinedmods.refinedstorage.common.GameTestUtil.removeFluidFromInterface; import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; import static com.refinedmods.refinedstorage.common.storage.externalstorage.ExternalStorageTestPlots.preparePlot; import static net.minecraft.world.item.Items.STONE; @@ -223,7 +223,7 @@ public static void shouldPropagateExternalFluidExtractions(final GameTestHelper new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) )) - .thenExecute(() -> removeFluidToInterface( + .thenExecute(() -> removeFluidFromInterface( helper, pos.east(), new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) @@ -272,7 +272,7 @@ public static void shouldPropagatePartialExternalFluidExtractions(final GameTest new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount()), new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount() * 2) )) - .thenExecute(() -> removeFluidToInterface( + .thenExecute(() -> removeFluidFromInterface( helper, pos.east(), new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) From 29985c0bae3114145c245d36600dcf800a3e7d6c Mon Sep 17 00:00:00 2001 From: Starforcraft Date: Tue, 10 Sep 2024 21:11:43 +0200 Subject: [PATCH 48/83] feat: interface gametest --- .../common/iface/InterfaceBlockEntity.java | 12 + .../common/iface/InterfaceTest.java | 279 ++++++++++++++++++ .../common/iface/InterfaceTestPlots.java | 35 +++ 3 files changed, 326 insertions(+) create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTest.java create mode 100644 refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTestPlots.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java index 3817a7da2..8d80a2eec 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/iface/InterfaceBlockEntity.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.iface.InterfaceNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.node.iface.externalstorage.InterfaceExternalStorageProvider; import com.refinedmods.refinedstorage.api.network.impl.node.iface.externalstorage.InterfaceExternalStorageProviderImpl; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; @@ -17,6 +18,7 @@ import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; +import java.util.List; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; @@ -137,6 +139,16 @@ void setFuzzyMode(final boolean fuzzyMode) { filter.setFuzzyMode(fuzzyMode); } + void clearFilters() { + filter.getFilterContainer().clear(); + } + + void setFilters(final List filters) { + for (int i = 0; i < filters.size(); i++) { + filter.getFilterContainer().set(i, filters.get(i)); + } + } + public ExportedResourcesContainer getExportedResources() { return exportedResources; } diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTest.java new file mode 100644 index 000000000..5a02aef4c --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTest.java @@ -0,0 +1,279 @@ +package com.refinedmods.refinedstorage.common.iface; + +import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.util.IdentifierUtil; + +import java.util.List; + +import net.minecraft.gametest.framework.GameTest; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.gametest.GameTestHolder; +import net.neoforged.neoforge.gametest.PrefixGameTestTemplate; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.asResource; +import static com.refinedmods.refinedstorage.common.GameTestUtil.assertInterfaceEmpty; +import static com.refinedmods.refinedstorage.common.GameTestUtil.getItemAsDamaged; +import static com.refinedmods.refinedstorage.common.GameTestUtil.insert; +import static com.refinedmods.refinedstorage.common.GameTestUtil.interfaceContainsExactly; +import static com.refinedmods.refinedstorage.common.GameTestUtil.networkIsAvailable; +import static com.refinedmods.refinedstorage.common.GameTestUtil.storageContainsExactly; +import static com.refinedmods.refinedstorage.common.iface.InterfaceTestPlots.preparePlot; +import static net.minecraft.world.item.Items.DIAMOND_CHESTPLATE; +import static net.minecraft.world.item.Items.DIRT; +import static net.minecraft.world.item.Items.STONE; +import static net.minecraft.world.level.material.Fluids.WATER; + +@GameTestHolder(IdentifierUtil.MOD_ID) +@PrefixGameTestTemplate(false) +public final class InterfaceTest { + private InterfaceTest() { + } + + @GameTest(template = "empty_15x15") + public static void shouldExportItem(final GameTestHelper helper) { + preparePlot(helper, (iface, pos, sequence) -> { + // Arrange + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + insert(helper, network, asResource(damagedDiamondChestplate), 1); + })); + + // Act + iface.setFuzzyMode(false); + iface.setFilters(List.of( + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 15), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenExecute(() -> { + iface.clearFilters(); + iface.setFilters(List.of( + new ResourceAmount(asResource(DIRT), 5) + )); + }) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(STONE), 15), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenExecute(() -> iface.setFilters(List.of( + new ResourceAmount(asResource(DIRT), 7) + ))) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 7) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 3), + new ResourceAmount(asResource(STONE), 15), + new ResourceAmount(asResource(damagedDiamondChestplate), 1) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExportItemFuzzy(final GameTestHelper helper) { + preparePlot(helper, (iface, pos, sequence) -> { + // Arrange + final ItemStack damagedDiamondChestplate = getItemAsDamaged(DIAMOND_CHESTPLATE.getDefaultInstance(), 500); + + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + insert(helper, network, asResource(damagedDiamondChestplate), 1); + insert(helper, network, DIAMOND_CHESTPLATE, 1); + })); + + // Act + iface.setFuzzyMode(true); + iface.setFilters(List.of( + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(damagedDiamondChestplate), 1), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(STONE), 15) + )) + .thenExecute(() -> { + iface.clearFilters(); + iface.setFilters(List.of( + new ResourceAmount(asResource(DIRT), 10)) + ); + }) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 15), + new ResourceAmount(asResource(damagedDiamondChestplate), 1), + new ResourceAmount(asResource(DIAMOND_CHESTPLATE), 1) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldExportFluid(final GameTestHelper helper) { + preparePlot(helper, (iface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, WATER, Platform.INSTANCE.getBucketAmount() * 10); + insert(helper, network, STONE, 15); + })); + + // Act + iface.setFilters(List.of(new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 10))); + + // Assert + sequence + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 10) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(STONE), 15) + )) + .thenExecute(() -> iface.setFilters(List.of( + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 5)) + )) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 5) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 5), + new ResourceAmount(asResource(STONE), 15) + )) + .thenExecute(() -> iface.setFilters(List.of( + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 7)) + )) + .thenWaitUntil(interfaceContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 7) + )) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 3), + new ResourceAmount(asResource(STONE), 15) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldImportItem(final GameTestHelper helper) { + preparePlot(helper, (iface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 5); + insert(helper, network, STONE, 15); + })); + + // Assert + sequence + .thenWaitUntil(assertInterfaceEmpty(helper, pos)) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(STONE), 15) + )) + .thenExecute(() -> iface.getExportedResources().insert(asResource(DIRT), 5, Action.EXECUTE)) + .thenWaitUntil(assertInterfaceEmpty(helper, pos)) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 10), + new ResourceAmount(asResource(STONE), 15) + )) + .thenSucceed(); + }); + } + + @GameTest(template = "empty_15x15") + public static void shouldImportFluid(final GameTestHelper helper) { + preparePlot(helper, (iface, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, WATER, Platform.INSTANCE.getBucketAmount() * 5); + insert(helper, network, STONE, 15); + })); + + // Assert + sequence + .thenWaitUntil(assertInterfaceEmpty(helper, pos)) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 5), + new ResourceAmount(asResource(STONE), 15) + )) + .thenExecute(() -> iface.getExportedResources().insert( + asResource(WATER), Platform.INSTANCE.getBucketAmount() * 5, Action.EXECUTE + )) + .thenWaitUntil(assertInterfaceEmpty(helper, pos)) + .thenWaitUntil(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 10), + new ResourceAmount(asResource(STONE), 15) + )) + .thenSucceed(); + }); + } +} diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTestPlots.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTestPlots.java new file mode 100644 index 000000000..0f63c94e4 --- /dev/null +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/iface/InterfaceTestPlots.java @@ -0,0 +1,35 @@ +package com.refinedmods.refinedstorage.common.iface; + +import com.refinedmods.refinedstorage.common.storage.FluidStorageVariant; +import com.refinedmods.refinedstorage.common.storage.ItemStorageVariant; + +import net.minecraft.core.BlockPos; +import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.gametest.framework.GameTestSequence; +import org.apache.commons.lang3.function.TriConsumer; + +import static com.refinedmods.refinedstorage.common.GameTestUtil.RSBLOCKS; +import static com.refinedmods.refinedstorage.common.GameTestUtil.requireBlockEntity; +import static net.minecraft.core.BlockPos.ZERO; + +final class InterfaceTestPlots { + private InterfaceTestPlots() { + } + + static void preparePlot(final GameTestHelper helper, + final TriConsumer consumer) { + helper.setBlock(ZERO.above(), RSBLOCKS.getCreativeController().getDefault()); + helper.setBlock(ZERO.above().above(), RSBLOCKS.getItemStorageBlock(ItemStorageVariant.ONE_K)); + helper.setBlock( + ZERO.above().above().north(), + RSBLOCKS.getFluidStorageBlock(FluidStorageVariant.SIXTY_FOUR_B) + ); + final BlockPos interfacePos = ZERO.above().above().above(); + helper.setBlock(interfacePos, RSBLOCKS.getInterface()); + consumer.accept( + requireBlockEntity(helper, interfacePos, InterfaceBlockEntity.class), + interfacePos, + helper.startSequence() + ); + } +} From 457afca8a2a124fafda9dc7d0d0e905fe5c0536e Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 1 Sep 2024 19:40:24 +0200 Subject: [PATCH 49/83] feat: crafting preview screen --- .../api/autocrafting/CraftingPreview.java | 6 + .../common/api/RefinedStorageApi.java | 4 + .../common/api/RefinedStorageApiProxy.java | 7 + .../common/RefinedStorageApiImpl.java | 17 ++ .../AlternativeContainerMenu.java | 2 +- .../autocrafting/AlternativesScreen.java | 3 +- ...CraftingPatternClientTooltipComponent.java | 2 +- ...ocessingPatternClientTooltipComponent.java | 2 +- ...ingTablePatternClientTooltipComponent.java | 2 +- ...necutterPatternClientTooltipComponent.java | 2 +- .../autocrafting/preview/CraftingPreview.java | 6 + .../preview/CraftingPreviewContainerMenu.java | 45 +++ .../preview/CraftingPreviewItem.java | 6 + .../preview/CraftingPreviewScreen.java | 260 ++++++++++++++++++ .../autocrafting/preview/package-info.java | 7 + .../grid/screen/AbstractGridScreen.java | 15 +- .../grid/screen/GridSearchBoxWidget.java | 5 +- .../common/grid/view/FluidGridResource.java | 3 + .../common/grid/view/ItemGridResource.java | 2 +- .../common/support/ResourceSlotRendering.java | 2 +- .../support/amount/AbstractAmountScreen.java | 61 ++-- .../amount/AbstractSingleAmountScreen.java | 3 +- .../amount/AmountScreenConfiguration.java | 22 ++ .../common/support/amount/PriorityScreen.java | 3 +- .../support/amount/ResourceAmountScreen.java | 3 +- .../ResourceClientTooltipComponent.java | 5 +- .../common/support/tooltip/SmallText.java | 15 + ...radeDestinationClientTooltipComponent.java | 2 +- .../UpgradeItemClientTooltipComponent.java | 5 +- .../assets/refinedstorage/lang/en_us.json | 5 + .../textures/gui/crafting_preview.png | Bin 0 -> 662 bytes .../gui/sprites/crafting_preview/row.png | Bin 0 -> 171 bytes 32 files changed, 465 insertions(+), 57 deletions(-) create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/package-info.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/crafting_preview/row.png diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java new file mode 100644 index 000000000..280f1377a --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.list.ResourceList; + +public record CraftingPreview(ResourceList missing, ResourceList toTake, ResourceList toCraft) { +} diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index a96e5fb72..d43da64b9 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.api.network.energy.EnergyStorage; import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategyFactory; @@ -46,6 +47,7 @@ import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; @@ -203,4 +205,6 @@ EnergyStorage asBlockItemEnergyStorage( boolean canPlaceNetworkNode(ServerPlayer player, Level level, BlockPos pos, BlockState state); Optional getPattern(ItemStack stack, Level level); + + void openCraftingPreview(List resources); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java index 24c147598..c68bf1cd8 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java @@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.api.network.energy.EnergyStorage; import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.constructordestructor.ConstructorStrategyFactory; import com.refinedmods.refinedstorage.common.api.constructordestructor.DestructorStrategyFactory; @@ -46,6 +47,7 @@ import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; @@ -401,6 +403,11 @@ public Optional getPattern(final ItemStack stack, final Level level) { return ensureLoaded().getPattern(stack, level); } + @Override + public void openCraftingPreview(final List resources) { + ensureLoaded().openCraftingPreview(resources); + } + private RefinedStorageApi ensureLoaded() { if (delegate == null) { throw new IllegalStateException("API not loaded yet"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 41ccefd5e..83abe2af5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.api.network.impl.NetworkFactory; import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.autocrafting.PatternProviderItem; @@ -49,6 +50,7 @@ import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReferenceProvider; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; +import com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen; import com.refinedmods.refinedstorage.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage.common.grid.screen.hint.GridInsertionHintsImpl; import com.refinedmods.refinedstorage.common.grid.screen.hint.ItemGridInsertionHint; @@ -99,12 +101,14 @@ import java.util.stream.Collectors; import javax.annotation.Nullable; +import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.Item; @@ -595,4 +599,17 @@ public Optional getPattern(final ItemStack stack, final Level level) { i -> providerItem.getPattern(stack, level).orElse(null) )); } + + @Override + public void openCraftingPreview(final List resources) { + if (resources.isEmpty()) { + return; + } + final Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.screen == null || minecraft.player == null) { + return; + } + final Inventory inventory = minecraft.player.getInventory(); + minecraft.setScreen(new CraftingPreviewScreen(minecraft.screen, inventory, resources.getFirst().resource())); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativeContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativeContainerMenu.java index 9af4991ba..b17189322 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativeContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativeContainerMenu.java @@ -22,7 +22,7 @@ import static com.refinedmods.refinedstorage.common.autocrafting.AlternativesScreen.ALTERNATIVE_ROW_HEIGHT; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.getTagTranslationKey; -public class AlternativeContainerMenu extends AbstractResourceContainerMenu { +class AlternativeContainerMenu extends AbstractResourceContainerMenu { private final List alternatives; private final ResourceSlot amountSlot; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativesScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativesScreen.java index e23aa3dcc..743e92a7d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativesScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AlternativesScreen.java @@ -493,7 +493,7 @@ protected ResourceLocation getTexture() { } @Override - protected void accept(final Double amount) { + protected boolean confirm(final Double amount) { slot.changeAmountOnClient(amount); final Set allowedAlternatives = new HashSet<>(); for (int i = 0; i < alternativeCheckboxes.size(); ++i) { @@ -502,6 +502,7 @@ protected void accept(final Double amount) { } } getMenu().sendAllowedAlternatives(allowedAlternatives); + return true; } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java index 9987552f7..f874917b5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java @@ -78,7 +78,7 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap cycleStart = now; } if (outputText != null) { - graphics.drawString(font, outputText, x, y, requireNonNullElse(ChatFormatting.GRAY.getColor(), 15)); + graphics.drawString(font, outputText, x, y, 0xAAAAAA); } renderInputSlots(x, y + 9 + 2, graphics); renderArrow(x, y + 9 + 2, graphics); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java index 742cefdf6..e0309dec5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java @@ -162,7 +162,7 @@ private void renderOutputText(final Font font, final int x, final int y, final G outputTexts.get(i), x, y + (i * 9), - requireNonNullElse(ChatFormatting.GRAY.getColor(), 15) + 0xAAAAAA ); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java index e9c4bc3cc..86fc09c17 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java @@ -29,7 +29,7 @@ class SmithingTablePatternClientTooltipComponent implements ClientTooltipCompone @Override public void renderImage(final Font font, final int x, final int y, final GuiGraphics graphics) { - graphics.drawString(font, outputText, x, y, requireNonNullElse(ChatFormatting.GRAY.getColor(), 15)); + graphics.drawString(font, outputText, x, y, 0xAAAAAA); final int slotsY = y + 9 + 2; graphics.blitSprite(Sprites.SLOT, x, slotsY, 18, 18); final ResourceRendering rendering = RefinedStorageApi.INSTANCE.getResourceRendering(ItemResource.class); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java index b749148dd..ddf5d2e39 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java @@ -32,7 +32,7 @@ class StonecutterPatternClientTooltipComponent implements ClientTooltipComponent @Override public void renderImage(final Font font, final int x, final int y, final GuiGraphics graphics) { - graphics.drawString(font, outputText, x, y, requireNonNullElse(ChatFormatting.GRAY.getColor(), 15)); + graphics.drawString(font, outputText, x, y, 0xAAAAAA); graphics.blitSprite(SLOT, x, y + 9 + 2, 18, 18); final ResourceRendering rendering = RefinedStorageApi.INSTANCE.getResourceRendering(ItemResource.class); rendering.render(input, graphics, x + 1, y + 9 + 2 + 1); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java new file mode 100644 index 000000000..bbb5a4794 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import java.util.List; + +record CraftingPreview(boolean missing, List items) { +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java new file mode 100644 index 000000000..aca99a72c --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java @@ -0,0 +1,45 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; +import com.refinedmods.refinedstorage.common.support.containermenu.AbstractResourceContainerMenu; +import com.refinedmods.refinedstorage.common.support.containermenu.DisabledResourceSlot; +import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlotType; +import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; + +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; + +import net.minecraft.network.chat.Component; + +class CraftingPreviewContainerMenu extends AbstractResourceContainerMenu { + @Nullable + private CraftingPreview preview; + + CraftingPreviewContainerMenu(final ResourceKey resource) { + super(null, 0); + final ResourceContainer resourceContainer = ResourceContainerImpl.createForFilter(1); + resourceContainer.set(0, new ResourceAmount(resource, 1)); + addSlot(new DisabledResourceSlot( + resourceContainer, + 0, + Component.empty(), + 157, + 48, + ResourceSlotType.FILTER + )); + + final List items = new ArrayList<>(); + for (int i = 0; i < 31; ++i) { + items.add(new CraftingPreviewItem(resource, i, i % 2 == 0 ? 999 : 0, i % 2 == 0 ? 0 : 1000)); + } + preview = new CraftingPreview(true, items); + } + + @Nullable + public CraftingPreview getPreview() { + return preview; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java new file mode 100644 index 000000000..84ec43f5b --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +record CraftingPreviewItem(ResourceKey resource, long available, long missing, long toCraft) { +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java new file mode 100644 index 000000000..d592a0feb --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java @@ -0,0 +1,260 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.support.resource.ResourceRendering; +import com.refinedmods.refinedstorage.common.support.amount.AbstractAmountScreen; +import com.refinedmods.refinedstorage.common.support.amount.AmountScreenConfiguration; +import com.refinedmods.refinedstorage.common.support.amount.DoubleAmountOperations; +import com.refinedmods.refinedstorage.common.support.tooltip.SmallText; +import com.refinedmods.refinedstorage.common.support.widget.ScrollbarWidget; + +import java.util.List; +import javax.annotation.Nullable; + +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import org.joml.Vector3f; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + +public class CraftingPreviewScreen extends AbstractAmountScreen { + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/crafting_preview.png"); + private static final MutableComponent TITLE = Component.translatable("container.crafting"); + private static final MutableComponent START = createTranslation("gui", "crafting_preview.start"); + private static final MutableComponent MISSING_RESOURCES + = createTranslation("gui", "crafting_preview.start.missing_resources"); + private static final ResourceLocation ROW = createIdentifier("crafting_preview/row"); + + private static final int ROWS_VISIBLE = 4; + private static final int COLUMNS = 3; + private static final int PREVIEW_AREA_HEIGHT = 119; + + private static final int ROW_HEIGHT = 30; + private static final int ROW_WIDTH = 221; + + @Nullable + private ScrollbarWidget scrollbar; + + public CraftingPreviewScreen(final Screen parent, final Inventory playerInventory, final ResourceKey resource) { + super( + new CraftingPreviewContainerMenu(resource), + parent, + playerInventory, + TITLE, + AmountScreenConfiguration.AmountScreenConfigurationBuilder.create() + .withInitialAmount(1D) + .withIncrementsTop(1, 10, 64) + .withIncrementsTopStartPosition(new Vector3f(80, 20, 0)) + .withIncrementsBottom(-1, -10, -64) + .withIncrementsBottomStartPosition(new Vector3f(80, 71, 0)) + .withAmountFieldPosition(new Vector3f(77, 51, 0)) + .withActionButtonsStartPosition(new Vector3f(7, 222, 0)) + .withHorizontalActionButtons(true) + .withMinAmount(1D) + .withResetAmount(1D) + .withConfirmButtonText(START) + .build(), + DoubleAmountOperations.INSTANCE + ); + this.imageWidth = 254; + this.imageHeight = 249; + } + + @Override + protected void init() { + super.init(); + scrollbar = new ScrollbarWidget( + leftPos + 235, + topPos + 98, + ScrollbarWidget.Type.NORMAL, + PREVIEW_AREA_HEIGHT + ); + scrollbar.setEnabled(false); + if (confirmButton != null) { + confirmButton.active = false; + } + updatePreview(); + } + + private void updatePreview() { + if (scrollbar == null || confirmButton == null) { + return; + } + final CraftingPreview preview = getMenu().getPreview(); + if (preview == null) { + scrollbar.setEnabled(false); + scrollbar.setMaxOffset(0); + confirmButton.active = false; + return; + } + final int items = getMenu().getPreview().items().size(); + final int rows = Math.ceilDiv(items, COLUMNS) - ROWS_VISIBLE; + scrollbar.setMaxOffset(scrollbar.isSmoothScrolling() ? rows * ROW_HEIGHT : rows); + scrollbar.setEnabled(rows > 0); + confirmButton.active = !preview.missing(); + confirmButton.setTooltip(preview.missing() ? Tooltip.create(MISSING_RESOURCES) : null); + } + + @Override + public void render(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { + super.render(graphics, mouseX, mouseY, partialTicks); + if (scrollbar != null) { + scrollbar.render(graphics, mouseX, mouseY, partialTicks); + } + } + + @Override + protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { + super.renderBg(graphics, delta, mouseX, mouseY); + final CraftingPreview preview = getMenu().getPreview(); + if (preview == null || scrollbar == null) { + return; + } + final int x = leftPos + 8; + final int y = topPos + 98; + graphics.enableScissor(x, y, x + 221, y + PREVIEW_AREA_HEIGHT); + final List items = getMenu().getPreview().items(); + final int rows = Math.ceilDiv(items.size(), COLUMNS); + for (int i = 0; i < rows; ++i) { + final int scrollOffset = scrollbar.isSmoothScrolling() + ? (int) scrollbar.getOffset() + : (int) scrollbar.getOffset() * ROW_HEIGHT; + final int yy = y + (i * ROW_HEIGHT) - scrollOffset; + renderRow(graphics, x, yy, i, items, mouseX, mouseY); + } + graphics.disableScissor(); + } + + private void renderRow(final GuiGraphics graphics, + final int x, + final int y, + final int i, + final List items, + final double mouseX, + final double mouseY) { + if (y <= topPos + 98 - ROW_HEIGHT || y > topPos + 98 + PREVIEW_AREA_HEIGHT) { + return; + } + graphics.blitSprite(ROW, x, y, ROW_WIDTH, ROW_HEIGHT); + for (int column = i * COLUMNS; column < Math.min(i * COLUMNS + COLUMNS, items.size()); ++column) { + final CraftingPreviewItem item = items.get(column); + final int xx = x + (column % COLUMNS) * 74; + renderCell(graphics, xx, y, item, mouseX, mouseY); + } + } + + private void renderCell(final GuiGraphics graphics, + final int x, + final int y, + final CraftingPreviewItem item, + final double mouseX, + final double mouseY) { + if (item.missing() > 0) { + graphics.fill(x, y, x + 73, y + 29, 0xFFF2DEDE); + } + int xx = x + 2; + final ResourceRendering rendering = RefinedStorageApi.INSTANCE.getResourceRendering(item.resource().getClass()); + int yy = y + 7; + rendering.render(item.resource(), graphics, xx, yy); + if (isHovering(xx - leftPos, yy - topPos, 16, 16, mouseX, mouseY) + && isHoveringOverPreviewArea(mouseX, mouseY)) { + setTooltipForNextRenderPass(rendering.getTooltip(item.resource()).stream() + .map(Component::getVisualOrderText) + .toList()); + } + if (!SmallText.isSmall()) { + yy -= 2; + } + xx += 16 + 3; + if (item.missing() > 0) { + renderCellText(graphics, "missing", rendering, xx, yy, item.missing()); + yy += 7; + } + if (item.available() > 0) { + renderCellText(graphics, "available", rendering, xx, yy, item.available()); + yy += 7; + } + if (item.toCraft() > 0) { + renderCellText(graphics, "to_craft", rendering, xx, yy, item.toCraft()); + } + } + + private void renderCellText(final GuiGraphics graphics, + final String type, + final ResourceRendering rendering, + final int x, + final int y, + final long amount) { + SmallText.render( + graphics, + font, + createTranslation("gui", "crafting_preview." + type, rendering.formatAmount(amount, true)) + .getVisualOrderText(), + x, + y, + 0x404040, + false + ); + } + + @Override + public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { + if (scrollbar != null && scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { + return true; + } + return super.mouseClicked(mouseX, mouseY, clickedButton); + } + + @Override + public void mouseMoved(final double mx, final double my) { + if (scrollbar != null) { + scrollbar.mouseMoved(mx, my); + } + super.mouseMoved(mx, my); + } + + @Override + public boolean mouseReleased(final double mx, final double my, final int button) { + return (scrollbar != null && scrollbar.mouseReleased(mx, my, button)) + || super.mouseReleased(mx, my, button); + } + + @Override + public boolean mouseScrolled(final double x, final double y, final double z, final double delta) { + final boolean didScrollbar = scrollbar != null + && isHoveringOverPreviewArea(x, y) + && scrollbar.mouseScrolled(x, y, z, delta); + return didScrollbar || super.mouseScrolled(x, y, z, delta); + } + + private boolean isHoveringOverPreviewArea(final double x, final double y) { + return isHovering(7, 97, 241, 121, x, y); + } + + @Override + protected ResourceLocation getTexture() { + return TEXTURE; + } + + @Override + protected void onAmountFieldChanged() { + if (amountField == null || confirmButton == null) { + return; + } + confirmButton.active = false; + final boolean valid = getAndValidateAmount().isPresent(); + amountField.setTextColor(valid ? 0xFFFFFF : 0xFF5555); + } + + @Override + protected boolean confirm(final Double amount) { + return false; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/package-info.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/package-info.java new file mode 100644 index 000000000..b10fddc11 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 89ba11179..7877e55a2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.api.grid.operations.GridInsertMode; import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridView; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage.common.Platform; @@ -493,9 +494,17 @@ public boolean mouseClicked(final double mouseX, final double mouseY, final int final ItemStack carriedStack = getMenu().getCarried(); final PlatformGridResource resource = getCurrentGridResource(); - if (resource != null && resource.canExtract(carriedStack, getMenu().getView())) { - mouseClickedInGrid(clickedButton, resource); - return true; + if (resource != null) { + if (resource.canExtract(carriedStack, getMenu().getView()) && !hasControlDown()) { + mouseClickedInGrid(clickedButton, resource); + return true; + } else if (resource.isCraftable()) { + RefinedStorageApi.INSTANCE.openCraftingPreview(List.of(new ResourceAmount( + resource.getResourceForRecipeMods(), + 1 + ))); + return true; + } } if (isOverStorageArea((int) mouseX, (int) mouseY) diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java index 94f5ac1ac..ea0928725 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java @@ -85,9 +85,6 @@ public void addListener(final Consumer listener) { @Override public void setValid(final boolean valid) { this.valid = valid; - setTextColor(valid - ? Objects.requireNonNullElse(ChatFormatting.WHITE.getColor(), 15) - : Objects.requireNonNullElse(ChatFormatting.RED.getColor(), 15) - ); + setTextColor(valid ? 0xFFFFFF : 0xFF5555); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java index 0ffecdb6e..77834ef9a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java @@ -70,6 +70,9 @@ private Optional tryFillFluidContainer(final ItemStack car @Override public boolean canExtract(final ItemStack carriedStack, final GridView view) { + if (getAmount(view) == 0) { + return false; + } if (carriedStack.isEmpty()) { return true; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java index 0bc1a01d1..02d11ab59 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java @@ -80,7 +80,7 @@ public List getExtractionHints(final ItemStack carriedSt @Override public boolean canExtract(final ItemStack carriedStack, final GridView view) { - return carriedStack.isEmpty(); + return getAmount(view) > 0 && carriedStack.isEmpty(); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java index 4cd868c58..c0d29a830 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java @@ -58,7 +58,7 @@ public static void renderAmount(final GuiGraphics graphics, x, y, rendering.formatAmount(amount, true), - requireNonNullElse(ChatFormatting.WHITE.getColor(), 15), + 0xFFFFFF, true ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java index e6a0e0a26..ae47bd290 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java @@ -3,11 +3,9 @@ import com.refinedmods.refinedstorage.common.autocrafting.AlternativesScreen; import com.refinedmods.refinedstorage.common.support.AbstractBaseScreen; -import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; -import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; @@ -26,7 +24,6 @@ public abstract class AbstractAmountScreen extends AbstractBaseScreen { - private static final MutableComponent SET_TEXT = createTranslation("gui", "configure_amount.set"); private static final MutableComponent RESET_TEXT = createTranslation("gui", "configure_amount.reset"); private static final MutableComponent CANCEL_TEXT = Component.translatable("gui.cancel"); @@ -34,16 +31,16 @@ public abstract class AbstractAmountScreen configuration; private final AmountOperations amountOperations; - @Nullable - private EditBox amountField; - @Nullable - private Button confirmButton; - protected AbstractAmountScreen(final T containerMenu, @Nullable final Screen parent, final Inventory playerInventory, @@ -89,10 +86,11 @@ private void addResetButton(final int x, final int y) { } private void addConfirmButton(final int x, final int y) { - confirmButton = addRenderableWidget(Button.builder(SET_TEXT, btn -> tryConfirmAndCloseToParent()) - .pos(leftPos + x, topPos + y) - .size(ACTION_BUTTON_WIDTH, ACTION_BUTTON_HEIGHT) - .build()); + confirmButton = addRenderableWidget( + Button.builder(configuration.getConfirmButtonText(), btn -> tryConfirmAndCloseToParent()) + .pos(leftPos + x, topPos + y) + .size(ACTION_BUTTON_WIDTH, ACTION_BUTTON_HEIGHT) + .build()); } private void addCancelButton(final int x, final int y) { @@ -119,24 +117,26 @@ private void addAmountField() { amountField.setVisible(true); amountField.setCanLoseFocus(this instanceof AlternativesScreen); amountField.setFocused(true); - amountField.setResponder(value -> { - final boolean valid = getAndValidateAmount().isPresent(); - if (confirmButton != null) { - confirmButton.active = valid; - } else { - tryConfirm(); - } - amountField.setTextColor(valid - ? Objects.requireNonNullElse(ChatFormatting.WHITE.getColor(), 15) - : Objects.requireNonNullElse(ChatFormatting.RED.getColor(), 15) - ); - }); - amountField.setTextColor(Objects.requireNonNullElse(ChatFormatting.WHITE.getColor(), 15)); + amountField.setResponder(value -> onAmountFieldChanged()); + amountField.setTextColor(0xFFFFFF); setFocused(amountField); addRenderableWidget(amountField); } + protected void onAmountFieldChanged() { + if (amountField == null) { + return; + } + final boolean valid = getAndValidateAmount().isPresent(); + if (confirmButton != null) { + confirmButton.active = valid; + } else { + tryConfirm(); + } + amountField.setTextColor(valid ? 0xFFFFFF : 0xFF5555); + } + private void addIncrementButtons() { final Vector3f incrementsTopPos = configuration.getIncrementsTopStartPosition(); addIncrementButtons( @@ -160,7 +160,7 @@ private void addIncrementButtons(final int[] increments, final int x, final int } } - protected abstract void accept(N amount); + protected abstract boolean confirm(N amount); private Button createIncrementButton(final int x, final int y, final int increment) { final Component text = Component.literal((increment > 0 ? "+" : "") + increment); @@ -252,13 +252,14 @@ protected void reset() { } private void tryConfirm() { - getAndValidateAmount().ifPresent(this::accept); + getAndValidateAmount().ifPresent(this::confirm); } private void tryConfirmAndCloseToParent() { getAndValidateAmount().ifPresent(value -> { - accept(value); - tryCloseToParent(); + if (confirm(value)) { + tryCloseToParent(); + } }); } @@ -270,7 +271,7 @@ private boolean tryCloseToParent() { return false; } - private Optional getAndValidateAmount() { + protected final Optional getAndValidateAmount() { if (amountField == null) { return Optional.empty(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java index 24b0c03a4..37b707b9c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractSingleAmountScreen.java @@ -38,8 +38,9 @@ protected AbstractSingleAmountScreen(final T containerMenu, } @Override - protected void accept(final Double amount) { + protected boolean confirm(final Double amount) { getMenu().changeAmountOnClient(amount); + return true; } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AmountScreenConfiguration.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AmountScreenConfiguration.java index 3f24f8552..b51cfa8c4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AmountScreenConfiguration.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AmountScreenConfiguration.java @@ -2,9 +2,15 @@ import javax.annotation.Nullable; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; import org.joml.Vector3f; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + public final class AmountScreenConfiguration { + private static final MutableComponent SET_TEXT = createTranslation("gui", "configure_amount.set"); + @Nullable private final T initialAmount; private final int[] incrementsTop; @@ -16,6 +22,7 @@ public final class AmountScreenConfiguration { private final Vector3f actionButtonsStartPosition; private final boolean horizontalActionButtons; private final boolean actionButtonsEnabled; + private final Component confirmButtonText; @Nullable private final T minAmount; @Nullable @@ -33,6 +40,7 @@ private AmountScreenConfiguration(@Nullable final T initialAmount, final Vector3f actionButtonsStartPosition, final boolean horizontalActionButtons, final boolean actionButtonsEnabled, + final Component confirmButtonText, @Nullable final T minAmount, @Nullable final T maxAmount, @Nullable final T resetAmount) { @@ -46,6 +54,7 @@ private AmountScreenConfiguration(@Nullable final T initialAmount, this.actionButtonsStartPosition = actionButtonsStartPosition; this.horizontalActionButtons = horizontalActionButtons; this.actionButtonsEnabled = actionButtonsEnabled; + this.confirmButtonText = confirmButtonText; this.minAmount = minAmount; this.maxAmount = maxAmount; this.resetAmount = resetAmount; @@ -92,6 +101,10 @@ public boolean isActionButtonsEnabled() { return actionButtonsEnabled; } + public Component getConfirmButtonText() { + return confirmButtonText; + } + @Nullable public T getMinAmount() { return minAmount; @@ -118,6 +131,7 @@ public static final class AmountScreenConfigurationBuilder { private Vector3f amountFieldPosition = new Vector3f(0, 0, 0); private Vector3f actionButtonsStartPosition = new Vector3f(0, 0, 0); private boolean horizontalActionButtons = false; + private Component confirmButtonText = SET_TEXT; private boolean actionButtonsEnabled = true; @Nullable private T minAmount; @@ -182,6 +196,13 @@ public AmountScreenConfigurationBuilder withHorizontalActionButtons( return this; } + public AmountScreenConfigurationBuilder withConfirmButtonText( + final Component newConfirmButtonText + ) { + this.confirmButtonText = newConfirmButtonText; + return this; + } + public AmountScreenConfigurationBuilder withActionButtonsEnabled( final boolean newActionButtonsEnabled ) { @@ -216,6 +237,7 @@ public AmountScreenConfiguration build() { actionButtonsStartPosition, horizontalActionButtons, actionButtonsEnabled, + confirmButtonText, minAmount, maxAmount, resetAmount diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/PriorityScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/PriorityScreen.java index bf53e52dc..2e008372c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/PriorityScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/PriorityScreen.java @@ -43,8 +43,9 @@ public PriorityScreen(final ClientProperty property, } @Override - protected void accept(final Integer amount) { + protected boolean confirm(final Integer amount) { property.setValue(amount); + return true; } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ResourceAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ResourceAmountScreen.java index 3035986b6..104e9584a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ResourceAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ResourceAmountScreen.java @@ -46,8 +46,9 @@ public ResourceAmountScreen(final Screen parent, final Inventory playerInventory } @Override - protected void accept(final Double amount) { + protected boolean confirm(final Double amount) { slot.changeAmountOnClient(amount); + return true; } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/ResourceClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/ResourceClientTooltipComponent.java index ecff0219d..526fa8153 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/ResourceClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/ResourceClientTooltipComponent.java @@ -4,9 +4,6 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceRendering; -import java.util.Objects; - -import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; @@ -44,7 +41,7 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap name, x + 16 + 4, y + 4, - Objects.requireNonNullElse(ChatFormatting.GRAY.getColor(), 11184810) + 0xAAAAAA ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java index a4756a8c2..d84fcc952 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/tooltip/SmallText.java @@ -2,6 +2,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.util.FormattedCharSequence; import org.joml.Matrix4f; @@ -50,4 +51,18 @@ public static void render(final Font font, 15728880 ); } + + public static void render(final GuiGraphics graphics, + final Font font, + final FormattedCharSequence text, + final int x, + final int y, + final int color, + final boolean dropShadow) { + final float scale = getScale(); + graphics.pose().pushPose(); + graphics.pose().scale(scale, scale, 1); + graphics.drawString(font, text, (int) (x / scale), (int) (y / scale) + 1, color, dropShadow); + graphics.pose().popPose(); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java index 1895b2dac..633044702 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java @@ -45,7 +45,7 @@ private void renderMapping(final Font font, mapping.destinationDisplayName().copy().withStyle(ChatFormatting.GRAY), x + 16 + 4, y + 4, - Objects.requireNonNullElse(ChatFormatting.GRAY.getColor(), 7) + 0xAAAAAA ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeItemClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeItemClientTooltipComponent.java index 737db9d77..be000cacc 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeItemClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeItemClientTooltipComponent.java @@ -3,9 +3,6 @@ import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; -import java.util.Objects; - -import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; @@ -36,7 +33,7 @@ public void renderImage(final Font font, final int x, final int y, final GuiGrap mapping.upgradeDisplayName(), x + 16 + 4, y + 4, - Objects.requireNonNullElse(ChatFormatting.WHITE.getColor(), 15) + 0xFFFFFF ); } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index f278e5e54..2009ba76d 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -206,6 +206,11 @@ "gui.refinedstorage.crafter.chained.head_help": "This crafter is the head of the chain.", "gui.refinedstorage.crafter.not_chained": "Not chained", "gui.refinedstorage.crafter.not_chained.help": "If another crafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.crafting_preview.start": "Start", + "gui.refinedstorage.crafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.crafting_preview.available": "Available: %s", + "gui.refinedstorage.crafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.crafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..cbce82533d29b98e1e0b66f77a60a17a2afc4ed3 GIT binary patch literal 662 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBzC?geh%1o(|NsB7W5+^6L(R?2ySuw@-@XkL{BrrbA&}xI3GxdDDgXh7 zd(C?zfnuBm9+AZi41AkFn9%hAr*0NZ(sB}>>$u~ajoIAzxQvvd-lF{ z+9TJdCDzZKJ+||x7Ee&}xV3HTs@%QXwnkrVb6CCm|J%jfJPrM`bWi_a(%5YeG#&;l zr*p%Y3=Zd>GQl|$ig&`;;;cVvuFh(F94nJhd$DpmSi^EAo%An1Ce?d4+2|KCkYXl zaMvA02Fgh(IR{}iys<+B0z#$2;$k)kFXg)+LKwl4oNEl^{9)a2Z`r%bqxTs^q3!_+ zA_XOqPZ#JN5Nfy4uo@ZMpX^=|B8- S-SNn{1`*#dk*TyNjL-PqXJW#{(;D8gCb5n0T@z;_sg8IR|$NC67!dAc};cpQIw z){vKhf#ZNd0mHwuNsY|~rQatVTV^x6>G Date: Thu, 5 Sep 2024 19:12:06 +0200 Subject: [PATCH 50/83] feat: crafting requests on the side of the preview --- CHANGELOG.md | 3 + .../api/autocrafting/CraftingPreview.java | 6 - .../common/api/RefinedStorageApi.java | 2 +- .../common/api/RefinedStorageApiProxy.java | 4 +- .../api/grid/view/PlatformGridResource.java | 4 + .../common/RefinedStorageApiImpl.java | 11 +- .../autocrafting/CrafterBlockEntity.java | 1 + ...CraftingPatternClientTooltipComponent.java | 1 - ...ocessingPatternClientTooltipComponent.java | 1 - ...ingTablePatternClientTooltipComponent.java | 1 - ...necutterPatternClientTooltipComponent.java | 1 - .../preview/CraftingPreviewContainerMenu.java | 32 +-- .../preview/CraftingPreviewScreen.java | 204 +++++++++++++++--- .../autocrafting/preview/CraftingRequest.java | 46 ++++ .../preview/CraftingRequestButton.java | 73 +++++++ .../grid/screen/AbstractGridScreen.java | 24 ++- .../common/grid/screen/GridScreen.java | 2 +- .../grid/screen/GridSearchBoxWidget.java | 1 - .../common/grid/view/FluidGridResource.java | 7 + .../common/grid/view/ItemGridResource.java | 8 + .../common/support/ResourceSlotRendering.java | 3 - .../support/amount/AbstractAmountScreen.java | 13 +- .../common/support/widget/TextMarquee.java | 48 ++++- ...radeDestinationClientTooltipComponent.java | 1 - .../assets/refinedstorage/lang/en_us.json | 2 +- .../textures/gui/crafting_preview.png | Bin 662 -> 662 bytes .../crafting_preview/crafting_requests.png | Bin 0 -> 301 bytes 27 files changed, 418 insertions(+), 81 deletions(-) delete mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/crafting_preview/crafting_requests.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b35d7e57..0adf911b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Resources in the Grid that are autocraftable now display an orange backdrop and tooltip to indicate whether the resource is autocraftable at a glance. - Slots used in the Pattern Grid for pattern encoding and Crafting Grid crafting matrix slots now display an orange backdrop and tooltip to indicate whether the item is autocraftable at a glance. This checks patterns from your network and from your inventory. - Added help tooltip for filtering based on recipe items in the Crafting Grid. +- The crafting amount and crafting preview screens have been merged. Changing the amount will update the live preview. +- The numbers on the crafting preview screen are now compacted with units. +- When requesting autocrafting multiple resources at once, which can happen via a recipe mod, all the crafting requests are now listed on the side of the GUI. ### Fixed diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java deleted file mode 100644 index 280f1377a..000000000 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/CraftingPreview.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.refinedmods.refinedstorage.api.autocrafting; - -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; - -public record CraftingPreview(ResourceList missing, ResourceList toTake, ResourceList toCraft) { -} diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index d43da64b9..73afb28de 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -206,5 +206,5 @@ EnergyStorage asBlockItemEnergyStorage( Optional getPattern(ItemStack stack, Level level); - void openCraftingPreview(List resources); + void openCraftingPreview(List requests); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java index c68bf1cd8..267910bd2 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java @@ -404,8 +404,8 @@ public Optional getPattern(final ItemStack stack, final Level level) { } @Override - public void openCraftingPreview(final List resources) { - ensureLoaded().openCraftingPreview(resources); + public void openCraftingPreview(final List requests) { + ensureLoaded().openCraftingPreview(requests); } private RefinedStorageApi ensureLoaded() { diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/PlatformGridResource.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/PlatformGridResource.java index 0b062d6fd..2b692f2fb 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/PlatformGridResource.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/PlatformGridResource.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.grid.operations.GridExtractMode; import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridView; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.api.grid.GridScrollMode; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridExtractionStrategy; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridScrollingStrategy; @@ -47,6 +48,9 @@ void onScroll(GridScrollMode scrollMode, List getExtractionHints(ItemStack carriedStack, GridView view); + @Nullable + ResourceAmount getAutocraftingRequest(); + @Nullable @API(status = API.Status.INTERNAL) PlatformResourceKey getResourceForRecipeMods(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 83abe2af5..39ab3bafb 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -51,6 +51,7 @@ import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; import com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen; +import com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingRequest; import com.refinedmods.refinedstorage.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage.common.grid.screen.hint.GridInsertionHintsImpl; import com.refinedmods.refinedstorage.common.grid.screen.hint.ItemGridInsertionHint; @@ -601,8 +602,8 @@ public Optional getPattern(final ItemStack stack, final Level level) { } @Override - public void openCraftingPreview(final List resources) { - if (resources.isEmpty()) { + public void openCraftingPreview(final List requests) { + if (requests.isEmpty()) { return; } final Minecraft minecraft = Minecraft.getInstance(); @@ -610,6 +611,10 @@ public void openCraftingPreview(final List resources) { return; } final Inventory inventory = minecraft.player.getInventory(); - minecraft.setScreen(new CraftingPreviewScreen(minecraft.screen, inventory, resources.getFirst().resource())); + minecraft.setScreen(new CraftingPreviewScreen( + minecraft.screen, + inventory, + requests.stream().map(CraftingRequest::of).toList() + )); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java index 533cccb20..71d997548 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java @@ -40,6 +40,7 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; +// TODO: More energy usage for more patterns. public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements ExtendedMenuProvider, BlockEntityWithDrops, PatternInventory.Listener { static final int PATTERNS = 9; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java index f874917b5..b431f29ce 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CraftingPatternClientTooltipComponent.java @@ -20,7 +20,6 @@ import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_WIDTH; import static com.refinedmods.refinedstorage.common.support.Sprites.SLOT; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; -import static java.util.Objects.requireNonNullElse; class CraftingPatternClientTooltipComponent implements ClientTooltipComponent { private static final long CYCLE_MS = 1000; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java index e0309dec5..06afaf280 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternClientTooltipComponent.java @@ -19,7 +19,6 @@ import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_HEIGHT; import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_WIDTH; import static com.refinedmods.refinedstorage.common.support.Sprites.SLOT; -import static java.util.Objects.requireNonNullElse; class ProcessingPatternClientTooltipComponent implements ClientTooltipComponent { private static final long CYCLE_MS = 1000; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java index 86fc09c17..71ad06504 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/SmithingTablePatternClientTooltipComponent.java @@ -14,7 +14,6 @@ import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW; import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_HEIGHT; import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_WIDTH; -import static java.util.Objects.requireNonNullElse; class SmithingTablePatternClientTooltipComponent implements ClientTooltipComponent { private static final int ARROW_SPACING = 8; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java index ddf5d2e39..5e32c883c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/StonecutterPatternClientTooltipComponent.java @@ -15,7 +15,6 @@ import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_HEIGHT; import static com.refinedmods.refinedstorage.common.support.Sprites.LIGHT_ARROW_WIDTH; import static com.refinedmods.refinedstorage.common.support.Sprites.SLOT; -import static java.util.Objects.requireNonNullElse; class StonecutterPatternClientTooltipComponent implements ClientTooltipComponent { private static final int ARROW_SPACING = 8; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java index aca99a72c..1388b7ba8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java @@ -1,27 +1,26 @@ package com.refinedmods.refinedstorage.common.autocrafting.preview; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.support.containermenu.AbstractResourceContainerMenu; import com.refinedmods.refinedstorage.common.support.containermenu.DisabledResourceSlot; import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlotType; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import javax.annotation.Nullable; import net.minecraft.network.chat.Component; class CraftingPreviewContainerMenu extends AbstractResourceContainerMenu { - @Nullable - private CraftingPreview preview; + private final List requests; - CraftingPreviewContainerMenu(final ResourceKey resource) { + private CraftingRequest currentRequest; + + CraftingPreviewContainerMenu(final List requests) { super(null, 0); final ResourceContainer resourceContainer = ResourceContainerImpl.createForFilter(1); - resourceContainer.set(0, new ResourceAmount(resource, 1)); + resourceContainer.set(0, new ResourceAmount(requests.getFirst().getResource(), 1)); addSlot(new DisabledResourceSlot( resourceContainer, 0, @@ -30,16 +29,19 @@ class CraftingPreviewContainerMenu extends AbstractResourceContainerMenu { 48, ResourceSlotType.FILTER )); + this.requests = Collections.unmodifiableList(requests); + this.currentRequest = requests.getFirst(); + } + + List getRequests() { + return requests; + } - final List items = new ArrayList<>(); - for (int i = 0; i < 31; ++i) { - items.add(new CraftingPreviewItem(resource, i, i % 2 == 0 ? 999 : 0, i % 2 == 0 ? 0 : 1000)); - } - preview = new CraftingPreview(true, items); + CraftingRequest getCurrentRequest() { + return currentRequest; } - @Nullable - public CraftingPreview getPreview() { - return preview; + void setCurrentRequest(final CraftingRequest request) { + this.currentRequest = request; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java index d592a0feb..697b5b05a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.common.autocrafting.preview; -import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceRendering; import com.refinedmods.refinedstorage.common.support.amount.AbstractAmountScreen; @@ -9,12 +8,14 @@ import com.refinedmods.refinedstorage.common.support.tooltip.SmallText; import com.refinedmods.refinedstorage.common.support.widget.ScrollbarWidget; +import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; @@ -25,12 +26,16 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public class CraftingPreviewScreen extends AbstractAmountScreen { + static final int REQUEST_BUTTON_HEIGHT = 96 / 4; + static final int REQUEST_BUTTON_WIDTH = 64; + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/crafting_preview.png"); private static final MutableComponent TITLE = Component.translatable("container.crafting"); private static final MutableComponent START = createTranslation("gui", "crafting_preview.start"); private static final MutableComponent MISSING_RESOURCES = createTranslation("gui", "crafting_preview.start.missing_resources"); private static final ResourceLocation ROW = createIdentifier("crafting_preview/row"); + private static final ResourceLocation CRAFTING_REQUESTS = createIdentifier("crafting_preview/crafting_requests"); private static final int ROWS_VISIBLE = 4; private static final int COLUMNS = 3; @@ -39,12 +44,25 @@ public class CraftingPreviewScreen extends AbstractAmountScreen requestButtons = new ArrayList<>(); + private final boolean requestsButtonsVisible; + + public CraftingPreviewScreen(final Screen parent, + final Inventory playerInventory, + final List requests) { super( - new CraftingPreviewContainerMenu(resource), + new CraftingPreviewContainerMenu(requests), parent, playerInventory, TITLE, @@ -65,39 +83,107 @@ public CraftingPreviewScreen(final Screen parent, final Inventory playerInventor ); this.imageWidth = 254; this.imageHeight = 249; + this.requestsButtonsVisible = getMenu().getRequests().size() > 1; } @Override protected void init() { super.init(); - scrollbar = new ScrollbarWidget( + previewItemsScrollbar = new ScrollbarWidget( leftPos + 235, topPos + 98, ScrollbarWidget.Type.NORMAL, PREVIEW_AREA_HEIGHT ); - scrollbar.setEnabled(false); + previewItemsScrollbar.setEnabled(false); + if (requestsButtonsVisible) { + initRequestButtons(); + } if (confirmButton != null) { confirmButton.active = false; } - updatePreview(); + updateCurrentRequest(); + getExclusionZones().add(new Rect2i( + leftPos - REQUESTS_WIDTH + 4, + topPos, + REQUESTS_WIDTH, + REQUESTS_HEIGHT + )); + } + + private void initRequestButtons() { + requestButtons.clear(); + requestButtonsScrollbar = new ScrollbarWidget( + leftPos - 17 + 4, + getRequestButtonsInnerY(), + ScrollbarWidget.Type.NORMAL, + 96 + ); + requestButtonsScrollbar.setListener(value -> { + final int scrollOffset = requestButtonsScrollbar.isSmoothScrolling() + ? (int) requestButtonsScrollbar.getOffset() + : (int) requestButtonsScrollbar.getOffset() * REQUEST_BUTTON_HEIGHT; + for (int i = 0; i < requestButtons.size(); i++) { + final CraftingRequestButton requestButton = requestButtons.get(i); + final int y = getCraftingRequestButtonY(i) - scrollOffset; + requestButton.setY(y); + requestButton.visible = isCraftingRequestButtonVisible(y); + } + }); + final int totalRequestButtons = getMenu().getRequests().size() - REQUESTS_VISIBLE; + final int maxOffset = requestButtonsScrollbar.isSmoothScrolling() + ? totalRequestButtons * REQUEST_BUTTON_HEIGHT + : totalRequestButtons; + requestButtonsScrollbar.setEnabled(maxOffset > 0); + requestButtonsScrollbar.setMaxOffset(maxOffset); + for (int i = 0; i < getMenu().getRequests().size(); ++i) { + final CraftingRequest request = getMenu().getRequests().get(i); + final int buttonY = getCraftingRequestButtonY(i); + final CraftingRequestButton button = new CraftingRequestButton( + getRequestButtonsInnerX(), + buttonY, + request, + this::changeCurrentRequest + ); + button.visible = isCraftingRequestButtonVisible(buttonY); + requestButtons.add(addWidget(button)); + } + } + + private boolean isCraftingRequestButtonVisible(final int y) { + final int innerY = getRequestButtonsInnerY(); + return y >= innerY - REQUEST_BUTTON_HEIGHT && y <= innerY + REQUESTS_INNER_HEIGHT; + } + + private int getCraftingRequestButtonY(final int i) { + return getRequestButtonsInnerY() + (i * REQUEST_BUTTON_HEIGHT); } - private void updatePreview() { - if (scrollbar == null || confirmButton == null) { + private void changeCurrentRequest(final CraftingRequest request) { + getMenu().setCurrentRequest(request); + updateCurrentRequest(); + } + + private void updateCurrentRequest() { + if (previewItemsScrollbar == null || confirmButton == null) { return; } - final CraftingPreview preview = getMenu().getPreview(); + final CraftingRequest currentRequest = getMenu().getCurrentRequest(); + for (final CraftingRequestButton requestButton : requestButtons) { + requestButton.active = requestButton.getRequest() != currentRequest; + } + updateAmount(currentRequest.getAmount()); + final CraftingPreview preview = currentRequest.getPreview(); if (preview == null) { - scrollbar.setEnabled(false); - scrollbar.setMaxOffset(0); + previewItemsScrollbar.setEnabled(false); + previewItemsScrollbar.setMaxOffset(0); confirmButton.active = false; return; } - final int items = getMenu().getPreview().items().size(); + final int items = preview.items().size(); final int rows = Math.ceilDiv(items, COLUMNS) - ROWS_VISIBLE; - scrollbar.setMaxOffset(scrollbar.isSmoothScrolling() ? rows * ROW_HEIGHT : rows); - scrollbar.setEnabled(rows > 0); + previewItemsScrollbar.setMaxOffset(previewItemsScrollbar.isSmoothScrolling() ? rows * ROW_HEIGHT : rows); + previewItemsScrollbar.setEnabled(rows > 0); confirmButton.active = !preview.missing(); confirmButton.setTooltip(preview.missing() ? Tooltip.create(MISSING_RESOURCES) : null); } @@ -105,27 +191,49 @@ private void updatePreview() { @Override public void render(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { super.render(graphics, mouseX, mouseY, partialTicks); - if (scrollbar != null) { - scrollbar.render(graphics, mouseX, mouseY, partialTicks); + if (previewItemsScrollbar != null) { + previewItemsScrollbar.render(graphics, mouseX, mouseY, partialTicks); + } + if (requestButtonsScrollbar != null) { + requestButtonsScrollbar.render(graphics, mouseX, mouseY, partialTicks); + } + if (requestsButtonsVisible) { + final int requestsInnerX = getRequestButtonsInnerX(); + final int requestsInnerY = getRequestButtonsInnerY(); + graphics.enableScissor( + requestsInnerX, + requestsInnerY, + requestsInnerX + REQUESTS_INNER_WIDTH, + requestsInnerY + REQUESTS_INNER_HEIGHT + ); + for (final CraftingRequestButton requestButton : requestButtons) { + requestButton.render(graphics, mouseX, mouseY, partialTicks); + } + graphics.disableScissor(); } } @Override protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { super.renderBg(graphics, delta, mouseX, mouseY); - final CraftingPreview preview = getMenu().getPreview(); - if (preview == null || scrollbar == null) { + if (requestsButtonsVisible) { + graphics.blitSprite(CRAFTING_REQUESTS, leftPos - REQUESTS_WIDTH + 4, topPos, REQUESTS_WIDTH, + REQUESTS_HEIGHT); + } + final CraftingRequest request = getMenu().getCurrentRequest(); + final CraftingPreview preview = request.getPreview(); + if (preview == null || previewItemsScrollbar == null) { return; } final int x = leftPos + 8; final int y = topPos + 98; graphics.enableScissor(x, y, x + 221, y + PREVIEW_AREA_HEIGHT); - final List items = getMenu().getPreview().items(); + final List items = preview.items(); final int rows = Math.ceilDiv(items.size(), COLUMNS); for (int i = 0; i < rows; ++i) { - final int scrollOffset = scrollbar.isSmoothScrolling() - ? (int) scrollbar.getOffset() - : (int) scrollbar.getOffset() * ROW_HEIGHT; + final int scrollOffset = previewItemsScrollbar.isSmoothScrolling() + ? (int) previewItemsScrollbar.getOffset() + : (int) previewItemsScrollbar.getOffset() * ROW_HEIGHT; final int yy = y + (i * ROW_HEIGHT) - scrollOffset; renderRow(graphics, x, yy, i, items, mouseX, mouseY); } @@ -206,7 +314,10 @@ private void renderCellText(final GuiGraphics graphics, @Override public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { - if (scrollbar != null && scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { + if (previewItemsScrollbar != null && previewItemsScrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { + return true; + } + if (requestButtonsScrollbar != null && requestButtonsScrollbar.mouseClicked(mouseX, mouseY, clickedButton)) { return true; } return super.mouseClicked(mouseX, mouseY, clickedButton); @@ -214,30 +325,56 @@ public boolean mouseClicked(final double mouseX, final double mouseY, final int @Override public void mouseMoved(final double mx, final double my) { - if (scrollbar != null) { - scrollbar.mouseMoved(mx, my); + if (previewItemsScrollbar != null) { + previewItemsScrollbar.mouseMoved(mx, my); + } + if (requestButtonsScrollbar != null) { + requestButtonsScrollbar.mouseMoved(mx, my); } super.mouseMoved(mx, my); } @Override public boolean mouseReleased(final double mx, final double my, final int button) { - return (scrollbar != null && scrollbar.mouseReleased(mx, my, button)) - || super.mouseReleased(mx, my, button); + if (previewItemsScrollbar != null && previewItemsScrollbar.mouseReleased(mx, my, button)) { + return true; + } + if (requestButtonsScrollbar != null && requestButtonsScrollbar.mouseReleased(mx, my, button)) { + return true; + } + return super.mouseReleased(mx, my, button); } @Override public boolean mouseScrolled(final double x, final double y, final double z, final double delta) { - final boolean didScrollbar = scrollbar != null + final boolean didPreviewItemsScrollbar = previewItemsScrollbar != null && isHoveringOverPreviewArea(x, y) - && scrollbar.mouseScrolled(x, y, z, delta); - return didScrollbar || super.mouseScrolled(x, y, z, delta); + && previewItemsScrollbar.mouseScrolled(x, y, z, delta); + final boolean didRequestButtonsScrollbar = !didPreviewItemsScrollbar + && requestButtonsScrollbar != null + && isHoveringOverRequestButtons(x, y) + && requestButtonsScrollbar.mouseScrolled(x, y, z, delta); + return didPreviewItemsScrollbar || didRequestButtonsScrollbar || super.mouseScrolled(x, y, z, delta); } private boolean isHoveringOverPreviewArea(final double x, final double y) { return isHovering(7, 97, 241, 121, x, y); } + private boolean isHoveringOverRequestButtons(final double x, final double y) { + final int requestsInnerX = getRequestButtonsInnerX() - 1; + final int requestsInnerY = getRequestButtonsInnerY() - 1; + return isHovering(requestsInnerX - leftPos, requestsInnerY - topPos, 80, 98, x, y); + } + + private int getRequestButtonsInnerY() { + return topPos + 8; + } + + private int getRequestButtonsInnerX() { + return leftPos - 83 + 4; + } + @Override protected ResourceLocation getTexture() { return TEXTURE; @@ -253,6 +390,11 @@ protected void onAmountFieldChanged() { amountField.setTextColor(valid ? 0xFFFFFF : 0xFF5555); } + @Override + protected void reset() { + updateAmount(getMenu().getCurrentRequest().getAmount()); + } + @Override protected boolean confirm(final Double amount) { return false; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java new file mode 100644 index 000000000..d8d19fa1c --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java @@ -0,0 +1,46 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; + +import java.util.ArrayList; +import java.util.List; +import javax.annotation.Nullable; + +public class CraftingRequest { + private final ResourceKey resource; + private final double amount; + @Nullable + private CraftingPreview preview; + + private CraftingRequest(final ResourceKey resource, final double amount) { + this.resource = resource; + this.amount = amount; + final List items = new ArrayList<>(); + for (int i = 0; i < 31; ++i) { + items.add(new CraftingPreviewItem(resource, i, i % 2 == 0 ? 999 : 0, i % 2 == 0 ? 0 : 1000)); + } + this.preview = new CraftingPreview(true, items); + } + + public static CraftingRequest of(final ResourceAmount resourceAmount) { + final double displayAmount = resourceAmount.resource() instanceof PlatformResourceKey platformResourceKey + ? platformResourceKey.getResourceType().getDisplayAmount(resourceAmount.amount()) + : resourceAmount.amount(); + return new CraftingRequest(resourceAmount.resource(), displayAmount); + } + + ResourceKey getResource() { + return resource; + } + + double getAmount() { + return amount; + } + + @Nullable + CraftingPreview getPreview() { + return preview; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java new file mode 100644 index 000000000..fb8ede269 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java @@ -0,0 +1,73 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.api.support.resource.ResourceRendering; +import com.refinedmods.refinedstorage.common.support.tooltip.SmallText; +import com.refinedmods.refinedstorage.common.support.widget.TextMarquee; + +import java.util.function.Consumer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.AbstractButton; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.network.chat.Component; + +import static com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen.REQUEST_BUTTON_HEIGHT; +import static com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen.REQUEST_BUTTON_WIDTH; + +class CraftingRequestButton extends AbstractButton { + private final CraftingRequest request; + private final TextMarquee text; + private final Consumer onPress; + + CraftingRequestButton(final int x, + final int y, + final CraftingRequest request, + final Consumer onPress) { + super(x, y, REQUEST_BUTTON_WIDTH, REQUEST_BUTTON_HEIGHT, Component.empty()); + this.request = request; + final ResourceKey resource = request.getResource(); + final long normalizedAmount = resource instanceof PlatformResourceKey platformResourceKey + ? platformResourceKey.getResourceType().normalizeAmount(request.getAmount()) + : 0; + final ResourceRendering rendering = RefinedStorageApi.INSTANCE.getResourceRendering(resource.getClass()); + this.text = new TextMarquee(Component.literal(rendering.formatAmount(normalizedAmount, true)) + .append(" ") + .append(rendering.getDisplayName(resource)), + REQUEST_BUTTON_WIDTH - 16 - 4 - 4 - 4, + 0xFFFFFF, + true, + true); + this.onPress = onPress; + } + + CraftingRequest getRequest() { + return request; + } + + @Override + protected void renderWidget(final GuiGraphics graphics, + final int mouseX, + final int mouseY, + final float partialTick) { + super.renderWidget(graphics, mouseX, mouseY, partialTick); + final ResourceKey resource = request.getResource(); + final ResourceRendering rendering = RefinedStorageApi.INSTANCE.getResourceRendering(resource.getClass()); + rendering.render(resource, graphics, getX() + 3, getY() + 4); + final int yOffset = SmallText.isSmall() ? 8 : 5; + text.render(graphics, getX() + 3 + 16 + 3, getY() + yOffset, Minecraft.getInstance().font, isHovered); + } + + @Override + public void onPress() { + onPress.accept(request); + } + + @Override + protected void updateWidgetNarration(final NarrationElementOutput narrationElementOutput) { + // no op + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 7877e55a2..b124ae275 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -498,11 +498,7 @@ public boolean mouseClicked(final double mouseX, final double mouseY, final int if (resource.canExtract(carriedStack, getMenu().getView()) && !hasControlDown()) { mouseClickedInGrid(clickedButton, resource); return true; - } else if (resource.isCraftable()) { - RefinedStorageApi.INSTANCE.openCraftingPreview(List.of(new ResourceAmount( - resource.getResourceForRecipeMods(), - 1 - ))); + } else if (resource.isCraftable() && tryStartAutocrafting(resource)) { return true; } } @@ -516,6 +512,24 @@ public boolean mouseClicked(final double mouseX, final double mouseY, final int return super.mouseClicked(mouseX, mouseY, clickedButton); } + private static boolean tryStartAutocrafting(final PlatformGridResource resource) { + final ResourceAmount request = resource.getAutocraftingRequest(); + if (request == null) { + return false; + } + final List requests = new ArrayList<>(); + requests.add(request); + // TODO: Remove - temporary code + if (hasShiftDown()) { + requests.add(new ResourceAmount(request.resource(), request.amount() * 2)); + requests.add(new ResourceAmount(request.resource(), request.amount() * 3)); + requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); + requests.add(new ResourceAmount(request.resource(), request.amount() * 5)); + } + RefinedStorageApi.INSTANCE.openCraftingPreview(requests); + return true; + } + private void mouseClickedInGrid(final int clickedButton) { final GridInsertMode mode = clickedButton == 1 ? GridInsertMode.SINGLE_RESOURCE diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java index 58cb19f21..740c4d1e7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java @@ -9,7 +9,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; public class GridScreen extends AbstractGridScreen { - private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/grid.png"); + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/grid2.png"); public GridScreen(final T menu, final Inventory inventory, final Component title) { super(menu, inventory, title, 99); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java index ea0928725..46f461841 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridSearchBoxWidget.java @@ -12,7 +12,6 @@ import java.util.HashSet; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.function.Consumer; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java index 77834ef9a..3b11cc868 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import javax.annotation.Nullable; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; @@ -61,6 +62,12 @@ public List getExtractionHints(final ItemStack carriedSt )).stream().toList(); } + @Nullable + @Override + public ResourceAmount getAutocraftingRequest() { + return new ResourceAmount(resource, Platform.INSTANCE.getBucketAmount()); + } + private Optional tryFillFluidContainer(final ItemStack carriedStack) { final ResourceAmount toFill = new ResourceAmount(resource, Platform.INSTANCE.getBucketAmount()); return carriedStack.isEmpty() diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java index 02d11ab59..dd56b2a55 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.grid.operations.GridExtractMode; import com.refinedmods.refinedstorage.api.grid.view.GridResourceAttributeKey; import com.refinedmods.refinedstorage.api.grid.view.GridView; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.api.grid.GridScrollMode; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridExtractionStrategy; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridScrollingStrategy; @@ -16,6 +17,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import javax.annotation.Nullable; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; @@ -78,6 +80,12 @@ public List getExtractionHints(final ItemStack carriedSt ); } + @Nullable + @Override + public ResourceAmount getAutocraftingRequest() { + return new ResourceAmount(itemResource, 1); + } + @Override public boolean canExtract(final ItemStack carriedStack, final GridView view) { return getAmount(view) > 0 && carriedStack.isEmpty(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java index c0d29a830..4c4d8d604 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/ResourceSlotRendering.java @@ -6,13 +6,10 @@ import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlot; import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; -import static java.util.Objects.requireNonNullElse; - public final class ResourceSlotRendering { private ResourceSlotRendering() { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java index ae47bd290..d6f8ef3a4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java @@ -112,7 +112,7 @@ private void addAmountField() { ); amountField.setBordered(false); if (configuration.getInitialAmount() != null) { - amountField.setValue(amountOperations.format(configuration.getInitialAmount())); + updateAmount(configuration.getInitialAmount()); } amountField.setVisible(true); amountField.setCanLoseFocus(this instanceof AlternativesScreen); @@ -124,6 +124,13 @@ private void addAmountField() { addRenderableWidget(amountField); } + protected final void updateAmount(final N amount) { + if (amountField == null) { + return; + } + amountField.setValue(amountOperations.format(amount)); + } + protected void onAmountFieldChanged() { if (amountField == null) { return; @@ -182,7 +189,7 @@ private void changeAmount(final int delta) { configuration.getMinAmount(), configuration.getMaxAmount() ); - amountField.setValue(amountOperations.format(newAmount)); + updateAmount(newAmount); }); } @@ -248,7 +255,7 @@ protected void reset() { if (amountField == null || configuration.getResetAmount() == null) { return; } - amountField.setValue(amountOperations.format(configuration.getResetAmount())); + updateAmount(configuration.getResetAmount()); } private void tryConfirm() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java index dcf34b4b6..16532eab6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/widget/TextMarquee.java @@ -1,20 +1,36 @@ package com.refinedmods.refinedstorage.common.support.widget; +import com.refinedmods.refinedstorage.common.support.tooltip.SmallText; + import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; public class TextMarquee { private final int maxWidth; + private final int color; + private final boolean dropShadow; + private final boolean small; private Component text; private int offset; private int stateTicks; private State state = State.MOVING_LEFT; - public TextMarquee(final Component text, final int maxWidth) { + public TextMarquee(final Component text, + final int maxWidth, + final int color, + final boolean dropShadow, + final boolean small) { this.text = text; this.maxWidth = maxWidth; + this.color = color; + this.dropShadow = dropShadow; + this.small = small; + } + + public TextMarquee(final Component text, final int maxWidth) { + this(text, maxWidth, 4210752, false, false); } public int getEffectiveWidth(final Font font) { @@ -27,17 +43,41 @@ public void render(final GuiGraphics graphics, final int x, final int y, final F state = State.MOVING_LEFT; stateTicks = 0; } - final int width = font.width(text); + final int width = (int) (font.width(text) * (small ? SmallText.getScale() : 1F)); if (width > maxWidth) { final int overflow = width - maxWidth; if (hovering) { updateMarquee(overflow); } graphics.enableScissor(x, y, x + maxWidth, y + font.lineHeight); - graphics.drawString(font, text, x + offset, y, 4210752, false); + if (small) { + SmallText.render( + graphics, + font, + text.getVisualOrderText(), + x + offset, + y, + color, + dropShadow + ); + } else { + graphics.drawString(font, text, x + offset, y, color, dropShadow); + } graphics.disableScissor(); } else { - graphics.drawString(font, text, x, y, 4210752, false); + if (small) { + SmallText.render( + graphics, + font, + text.getVisualOrderText(), + x, + y, + color, + dropShadow + ); + } else { + graphics.drawString(font, text, x, y, color, dropShadow); + } } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java index 633044702..ae68aedf3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinationClientTooltipComponent.java @@ -2,7 +2,6 @@ import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; -import java.util.Objects; import java.util.Set; import net.minecraft.ChatFormatting; diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 2009ba76d..f59b5e5d4 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -6,7 +6,7 @@ "block.refinedstorage.disk_drive": "Disk Drive", "block.refinedstorage.machine_casing": "Machine Casing", "block.refinedstorage.grid": "Grid", - "block.refinedstorage.pattern_grid": "Pattern Grid", + "block.refinedstorage.pattern_grid": "Pattern Fart Grid", "block.refinedstorage.crafting_grid": "Crafting Grid", "block.refinedstorage.controller": "Controller", "block.refinedstorage.creative_controller": "Creative Controller", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png index cbce82533d29b98e1e0b66f77a60a17a2afc4ed3..6f801a9a2cdbf9bf2088c37342589ba960396a6d 100644 GIT binary patch delta 21 dcmbQnI*oNgBiBX-2EL7qb9&@&ZS3Y|0su|n2Q2^q delta 21 dcmbQnI*oNgBiAMd2EI*{;n`WodQwy235%zn8}6>o2}ly8Bzk`sQUz@6PePz3rgcO|{!8vvVfr zZt~rBk|5_Y|LwK@-E218-^*BUi%5PBQ$Af*5&evB+rqgAT-s-E2D*yD)78&qol`;+ E0NdzyZU6uP literal 0 HcmV?d00001 From 673817fae9cf17a922dd4f2bd381d76ec9d9c481 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 4 Oct 2024 17:23:42 +0200 Subject: [PATCH 51/83] feat: crafting preview on the server --- .../common/RefinedStorageApiImpl.java | 8 +- .../preview/AutocraftingPreview.java | 18 +++ .../AutocraftingPreviewContainerMenu.java | 77 +++++++++++ .../preview/AutocraftingPreviewItem.java | 18 +++ .../preview/AutocraftingPreviewListener.java | 9 ++ .../preview/AutocraftingPreviewProvider.java | 8 ++ ...en.java => AutocraftingPreviewScreen.java} | 121 ++++++++++++------ .../preview/AutocraftingPreviewType.java | 7 + .../preview/AutocraftingRequest.java | 72 +++++++++++ ...on.java => AutocraftingRequestButton.java} | 20 +-- .../autocrafting/preview/CraftingPreview.java | 6 - .../preview/CraftingPreviewContainerMenu.java | 47 ------- .../preview/CraftingPreviewItem.java | 6 - .../autocrafting/preview/CraftingRequest.java | 46 ------- .../grid/AbstractGridContainerMenu.java | 26 +++- .../support/amount/AbstractAmountScreen.java | 56 +++++--- .../common/support/amount/ConfirmButton.java | 52 ++++++++ .../c2s/AutocraftingPreviewRequestPacket.java | 48 +++++++ .../common/support/packet/c2s/C2SPackets.java | 6 + .../AutocraftingPreviewResponsePacket.java | 37 ++++++ .../common/support/packet/s2c/S2CPackets.java | 7 + .../common/util/ClientPlatformUtil.java | 10 ++ .../assets/refinedstorage/lang/en_us.json | 14 +- ...g_preview.png => autocrafting_preview.png} | Bin .../requests.png} | Bin .../row.png | Bin .../textures/gui/sprites/error.png | Bin 0 -> 205 bytes .../fabric/ClientModInitializerImpl.java | 5 + .../fabric/ModInitializerImpl.java | 14 ++ .../neoforge/ModInitializer.java | 12 ++ 30 files changed, 566 insertions(+), 184 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/{CraftingPreviewScreen.java => AutocraftingPreviewScreen.java} (78%) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/{CraftingRequestButton.java => AutocraftingRequestButton.java} (83%) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ConfirmButton.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/{crafting_preview.png => autocrafting_preview.png} (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/{crafting_preview/crafting_requests.png => autocrafting_preview/requests.png} (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/{crafting_preview => autocrafting_preview}/row.png (100%) create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/error.png diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 39ab3bafb..1daca02e8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -50,8 +50,8 @@ import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReferenceProvider; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; -import com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen; -import com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingRequest; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingRequest; import com.refinedmods.refinedstorage.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage.common.grid.screen.hint.GridInsertionHintsImpl; import com.refinedmods.refinedstorage.common.grid.screen.hint.ItemGridInsertionHint; @@ -611,10 +611,10 @@ public void openCraftingPreview(final List requests) { return; } final Inventory inventory = minecraft.player.getInventory(); - minecraft.setScreen(new CraftingPreviewScreen( + minecraft.setScreen(new AutocraftingPreviewScreen( minecraft.screen, inventory, - requests.stream().map(CraftingRequest::of).toList() + requests.stream().map(AutocraftingRequest::of).toList() )); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java new file mode 100644 index 000000000..afd1946f6 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java @@ -0,0 +1,18 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.common.util.PlatformUtil; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +public record AutocraftingPreview(AutocraftingPreviewType type, List items) { + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + PlatformUtil.enumStreamCodec(AutocraftingPreviewType.values()), AutocraftingPreview::type, + ByteBufCodecs.collection(ArrayList::new, AutocraftingPreviewItem.STREAM_CODEC), AutocraftingPreview::items, + AutocraftingPreview::new + ); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java new file mode 100644 index 000000000..a6d3da8ba --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java @@ -0,0 +1,77 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; +import com.refinedmods.refinedstorage.common.support.containermenu.AbstractResourceContainerMenu; +import com.refinedmods.refinedstorage.common.support.containermenu.DisabledResourceSlot; +import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlotType; +import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; +import javax.annotation.Nullable; + +import net.minecraft.network.chat.Component; + +public class AutocraftingPreviewContainerMenu extends AbstractResourceContainerMenu { + private final List requests; + + private AutocraftingRequest currentRequest; + @Nullable + private AutocraftingPreviewListener listener; + + AutocraftingPreviewContainerMenu(final List requests) { + super(null, 0); + final ResourceContainer resourceContainer = ResourceContainerImpl.createForFilter(1); + resourceContainer.set(0, new ResourceAmount(requests.getFirst().getResource(), 1)); + addSlot(new DisabledResourceSlot( + resourceContainer, + 0, + Component.empty(), + 157, + 48, + ResourceSlotType.FILTER + )); + this.requests = Collections.unmodifiableList(requests); + this.currentRequest = requests.getFirst(); + } + + void setListener(final AutocraftingPreviewListener listener) { + this.listener = listener; + } + + List getRequests() { + return requests; + } + + AutocraftingRequest getCurrentRequest() { + return currentRequest; + } + + void setCurrentRequest(final AutocraftingRequest request) { + this.currentRequest = request; + if (listener != null) { + listener.requestChanged(request); + } + } + + void amountChanged(final double amount) { + if (currentRequest.trySendRequest(amount) && listener != null) { + listener.previewChanged(null); + } + } + + public void previewReceived(final UUID id, final AutocraftingPreview preview) { + if (currentRequest.previewReceived(id, preview) && listener != null) { + listener.previewChanged(preview); + } + } + + public void loadCurrentRequest() { + if (listener != null) { + currentRequest.clearPreview(); + listener.requestChanged(currentRequest); + } + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java new file mode 100644 index 000000000..c82b2e9f1 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java @@ -0,0 +1,18 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +public record AutocraftingPreviewItem(PlatformResourceKey resource, long available, long missing, long toCraft) { + static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceCodecs.STREAM_CODEC, AutocraftingPreviewItem::resource, + ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::available, + ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::missing, + ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::toCraft, + AutocraftingPreviewItem::new + ); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java new file mode 100644 index 000000000..984f2c520 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java @@ -0,0 +1,9 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import javax.annotation.Nullable; + +interface AutocraftingPreviewListener { + void requestChanged(AutocraftingRequest request); + + void previewChanged(@Nullable AutocraftingPreview preview); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java new file mode 100644 index 000000000..1d42cb723 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java @@ -0,0 +1,8 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; + +@FunctionalInterface +public interface AutocraftingPreviewProvider { + AutocraftingPreview getPreview(PlatformResourceKey resource, long amount); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java similarity index 78% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java index 697b5b05a..03951eeed 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java @@ -12,6 +12,7 @@ import java.util.List; import javax.annotation.Nullable; +import com.google.common.util.concurrent.RateLimiter; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; @@ -25,17 +26,21 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class CraftingPreviewScreen extends AbstractAmountScreen { +public class AutocraftingPreviewScreen extends AbstractAmountScreen + implements AutocraftingPreviewListener { static final int REQUEST_BUTTON_HEIGHT = 96 / 4; static final int REQUEST_BUTTON_WIDTH = 64; - private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/crafting_preview.png"); - private static final MutableComponent TITLE = Component.translatable("container.crafting"); - private static final MutableComponent START = createTranslation("gui", "crafting_preview.start"); - private static final MutableComponent MISSING_RESOURCES - = createTranslation("gui", "crafting_preview.start.missing_resources"); - private static final ResourceLocation ROW = createIdentifier("crafting_preview/row"); - private static final ResourceLocation CRAFTING_REQUESTS = createIdentifier("crafting_preview/crafting_requests"); + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/autocrafting_preview.png"); + private static final MutableComponent TITLE = createTranslation("gui", "autocrafting_preview.title"); + private static final MutableComponent START = createTranslation("gui", "autocrafting_preview.start"); + private static final MutableComponent PENDING = createTranslation("gui", "autocrafting_preview.pending"); + private static final MutableComponent MISSING_RESOURCES = createTranslation( + "gui", + "autocrafting_preview.start.missing_resources" + ); + private static final ResourceLocation ROW = createIdentifier("autocrafting_preview/row"); + private static final ResourceLocation CRAFTING_REQUESTS = createIdentifier("autocrafting_preview/requests"); private static final int ROWS_VISIBLE = 4; private static final int COLUMNS = 3; @@ -55,14 +60,19 @@ public class CraftingPreviewScreen extends AbstractAmountScreen requestButtons = new ArrayList<>(); + private final List requestButtons = new ArrayList<>(); private final boolean requestsButtonsVisible; - public CraftingPreviewScreen(final Screen parent, - final Inventory playerInventory, - final List requests) { + private final RateLimiter requestRateLimiter = RateLimiter.create(0.5); + + @Nullable + private Double changedAmount; + + public AutocraftingPreviewScreen(final Screen parent, + final Inventory playerInventory, + final List requests) { super( - new CraftingPreviewContainerMenu(requests), + new AutocraftingPreviewContainerMenu(requests), parent, playerInventory, TITLE, @@ -84,6 +94,7 @@ public CraftingPreviewScreen(final Screen parent, this.imageWidth = 254; this.imageHeight = 249; this.requestsButtonsVisible = getMenu().getRequests().size() > 1; + getMenu().setListener(this); } @Override @@ -101,8 +112,11 @@ protected void init() { } if (confirmButton != null) { confirmButton.active = false; + confirmButton.setMessage(START); + confirmButton.setTooltip(null); + confirmButton.setError(false); } - updateCurrentRequest(); + getMenu().loadCurrentRequest(); getExclusionZones().add(new Rect2i( leftPos - REQUESTS_WIDTH + 4, topPos, @@ -124,7 +138,7 @@ private void initRequestButtons() { ? (int) requestButtonsScrollbar.getOffset() : (int) requestButtonsScrollbar.getOffset() * REQUEST_BUTTON_HEIGHT; for (int i = 0; i < requestButtons.size(); i++) { - final CraftingRequestButton requestButton = requestButtons.get(i); + final AutocraftingRequestButton requestButton = requestButtons.get(i); final int y = getCraftingRequestButtonY(i) - scrollOffset; requestButton.setY(y); requestButton.visible = isCraftingRequestButtonVisible(y); @@ -137,9 +151,9 @@ private void initRequestButtons() { requestButtonsScrollbar.setEnabled(maxOffset > 0); requestButtonsScrollbar.setMaxOffset(maxOffset); for (int i = 0; i < getMenu().getRequests().size(); ++i) { - final CraftingRequest request = getMenu().getRequests().get(i); + final AutocraftingRequest request = getMenu().getRequests().get(i); final int buttonY = getCraftingRequestButtonY(i); - final CraftingRequestButton button = new CraftingRequestButton( + final AutocraftingRequestButton button = new AutocraftingRequestButton( getRequestButtonsInnerX(), buttonY, request, @@ -159,33 +173,40 @@ private int getCraftingRequestButtonY(final int i) { return getRequestButtonsInnerY() + (i * REQUEST_BUTTON_HEIGHT); } - private void changeCurrentRequest(final CraftingRequest request) { + private void changeCurrentRequest(final AutocraftingRequest request) { getMenu().setCurrentRequest(request); - updateCurrentRequest(); } - private void updateCurrentRequest() { + private void setRequest(final AutocraftingRequest request) { + for (final AutocraftingRequestButton requestButton : requestButtons) { + requestButton.active = requestButton.getRequest() != request; + } + updateAmount(request.getAmount()); + setPreview(request.getPreview()); + } + + private void setPreview(@Nullable final AutocraftingPreview preview) { if (previewItemsScrollbar == null || confirmButton == null) { return; } - final CraftingRequest currentRequest = getMenu().getCurrentRequest(); - for (final CraftingRequestButton requestButton : requestButtons) { - requestButton.active = requestButton.getRequest() != currentRequest; - } - updateAmount(currentRequest.getAmount()); - final CraftingPreview preview = currentRequest.getPreview(); + confirmButton.setMessage(START); if (preview == null) { previewItemsScrollbar.setEnabled(false); previewItemsScrollbar.setMaxOffset(0); confirmButton.active = false; + confirmButton.setError(false); + confirmButton.setTooltip(null); return; } final int items = preview.items().size(); final int rows = Math.ceilDiv(items, COLUMNS) - ROWS_VISIBLE; previewItemsScrollbar.setMaxOffset(previewItemsScrollbar.isSmoothScrolling() ? rows * ROW_HEIGHT : rows); previewItemsScrollbar.setEnabled(rows > 0); - confirmButton.active = !preview.missing(); - confirmButton.setTooltip(preview.missing() ? Tooltip.create(MISSING_RESOURCES) : null); + confirmButton.active = preview.type() == AutocraftingPreviewType.SUCCESS; + confirmButton.setError(preview.type() != AutocraftingPreviewType.SUCCESS); + confirmButton.setTooltip(preview.type() == AutocraftingPreviewType.MISSING_RESOURCES + ? Tooltip.create(MISSING_RESOURCES) + : null); } @Override @@ -206,7 +227,7 @@ public void render(final GuiGraphics graphics, final int mouseX, final int mouse requestsInnerX + REQUESTS_INNER_WIDTH, requestsInnerY + REQUESTS_INNER_HEIGHT ); - for (final CraftingRequestButton requestButton : requestButtons) { + for (final AutocraftingRequestButton requestButton : requestButtons) { requestButton.render(graphics, mouseX, mouseY, partialTicks); } graphics.disableScissor(); @@ -220,15 +241,15 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int graphics.blitSprite(CRAFTING_REQUESTS, leftPos - REQUESTS_WIDTH + 4, topPos, REQUESTS_WIDTH, REQUESTS_HEIGHT); } - final CraftingRequest request = getMenu().getCurrentRequest(); - final CraftingPreview preview = request.getPreview(); + final AutocraftingRequest request = getMenu().getCurrentRequest(); + final AutocraftingPreview preview = request.getPreview(); if (preview == null || previewItemsScrollbar == null) { return; } final int x = leftPos + 8; final int y = topPos + 98; graphics.enableScissor(x, y, x + 221, y + PREVIEW_AREA_HEIGHT); - final List items = preview.items(); + final List items = preview.items(); final int rows = Math.ceilDiv(items.size(), COLUMNS); for (int i = 0; i < rows; ++i) { final int scrollOffset = previewItemsScrollbar.isSmoothScrolling() @@ -244,7 +265,7 @@ private void renderRow(final GuiGraphics graphics, final int x, final int y, final int i, - final List items, + final List items, final double mouseX, final double mouseY) { if (y <= topPos + 98 - ROW_HEIGHT || y > topPos + 98 + PREVIEW_AREA_HEIGHT) { @@ -252,7 +273,7 @@ private void renderRow(final GuiGraphics graphics, } graphics.blitSprite(ROW, x, y, ROW_WIDTH, ROW_HEIGHT); for (int column = i * COLUMNS; column < Math.min(i * COLUMNS + COLUMNS, items.size()); ++column) { - final CraftingPreviewItem item = items.get(column); + final AutocraftingPreviewItem item = items.get(column); final int xx = x + (column % COLUMNS) * 74; renderCell(graphics, xx, y, item, mouseX, mouseY); } @@ -261,7 +282,7 @@ private void renderRow(final GuiGraphics graphics, private void renderCell(final GuiGraphics graphics, final int x, final int y, - final CraftingPreviewItem item, + final AutocraftingPreviewItem item, final double mouseX, final double mouseY) { if (item.missing() > 0) { @@ -303,7 +324,7 @@ private void renderCellText(final GuiGraphics graphics, SmallText.render( graphics, font, - createTranslation("gui", "crafting_preview." + type, rendering.formatAmount(amount, true)) + createTranslation("gui", "autocrafting_preview." + type, rendering.formatAmount(amount, true)) .getVisualOrderText(), x, y, @@ -386,8 +407,22 @@ protected void onAmountFieldChanged() { return; } confirmButton.active = false; - final boolean valid = getAndValidateAmount().isPresent(); - amountField.setTextColor(valid ? 0xFFFFFF : 0xFF5555); + confirmButton.setError(false); + confirmButton.setTooltip(null); + confirmButton.setMessage(PENDING); + getAndValidateAmount().ifPresentOrElse(amount -> { + changedAmount = amount; + amountField.setTextColor(0xFFFFFF); + }, () -> amountField.setTextColor(0xFF5555)); + } + + @Override + protected void containerTick() { + super.containerTick(); + if (changedAmount != null && requestRateLimiter.tryAcquire()) { + getMenu().amountChanged(changedAmount); + changedAmount = null; + } } @Override @@ -399,4 +434,14 @@ protected void reset() { protected boolean confirm(final Double amount) { return false; } + + @Override + public void requestChanged(final AutocraftingRequest request) { + setRequest(request); + } + + @Override + public void previewChanged(@Nullable final AutocraftingPreview preview) { + setPreview(preview); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java new file mode 100644 index 000000000..d53bef456 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java @@ -0,0 +1,7 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +public enum AutocraftingPreviewType { + SUCCESS, + MISSING_RESOURCES +} + diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java new file mode 100644 index 000000000..f3593d4ff --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java @@ -0,0 +1,72 @@ +package com.refinedmods.refinedstorage.common.autocrafting.preview; + +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.support.packet.c2s.C2SPackets; + +import java.util.UUID; +import javax.annotation.Nullable; + +public class AutocraftingRequest { + private final UUID id; + private final ResourceKey resource; + private final double amount; + @Nullable + private AutocraftingPreview preview; + private long pendingPreviewAmount; + + private AutocraftingRequest(final UUID id, final ResourceKey resource, final double amount) { + this.id = id; + this.resource = resource; + this.amount = amount; + } + + public static AutocraftingRequest of(final ResourceAmount resourceAmount) { + final double displayAmount = resourceAmount.resource() instanceof PlatformResourceKey platformResourceKey + ? platformResourceKey.getResourceType().getDisplayAmount(resourceAmount.amount()) + : resourceAmount.amount(); + return new AutocraftingRequest(UUID.randomUUID(), resourceAmount.resource(), displayAmount); + } + + boolean trySendRequest(final double amountRequested) { + if (!(resource instanceof PlatformResourceKey resourceKey)) { + return false; + } + final long normalizedAmount = resourceKey.getResourceType().normalizeAmount(amountRequested); + if (normalizedAmount == pendingPreviewAmount) { + return false; + } + this.preview = null; + this.pendingPreviewAmount = normalizedAmount; + C2SPackets.sendAutocraftingPreviewRequest(id, resourceKey, normalizedAmount); + return true; + } + + ResourceKey getResource() { + return resource; + } + + double getAmount() { + return amount; + } + + @Nullable + AutocraftingPreview getPreview() { + return preview; + } + + boolean previewReceived(final UUID idReceived, final AutocraftingPreview previewReceived) { + if (id.equals(idReceived)) { + pendingPreviewAmount = 0; + preview = previewReceived; + return true; + } + return false; + } + + void clearPreview() { + pendingPreviewAmount = 0; + preview = null; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequestButton.java similarity index 83% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequestButton.java index fb8ede269..050bdc89a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequestButton.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequestButton.java @@ -15,18 +15,18 @@ import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.network.chat.Component; -import static com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen.REQUEST_BUTTON_HEIGHT; -import static com.refinedmods.refinedstorage.common.autocrafting.preview.CraftingPreviewScreen.REQUEST_BUTTON_WIDTH; +import static com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen.REQUEST_BUTTON_HEIGHT; +import static com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen.REQUEST_BUTTON_WIDTH; -class CraftingRequestButton extends AbstractButton { - private final CraftingRequest request; +class AutocraftingRequestButton extends AbstractButton { + private final AutocraftingRequest request; private final TextMarquee text; - private final Consumer onPress; + private final Consumer onPress; - CraftingRequestButton(final int x, - final int y, - final CraftingRequest request, - final Consumer onPress) { + AutocraftingRequestButton(final int x, + final int y, + final AutocraftingRequest request, + final Consumer onPress) { super(x, y, REQUEST_BUTTON_WIDTH, REQUEST_BUTTON_HEIGHT, Component.empty()); this.request = request; final ResourceKey resource = request.getResource(); @@ -44,7 +44,7 @@ class CraftingRequestButton extends AbstractButton { this.onPress = onPress; } - CraftingRequest getRequest() { + AutocraftingRequest getRequest() { return request; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java deleted file mode 100644 index bbb5a4794..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreview.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import java.util.List; - -record CraftingPreview(boolean missing, List items) { -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java deleted file mode 100644 index 1388b7ba8..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewContainerMenu.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; -import com.refinedmods.refinedstorage.common.support.containermenu.AbstractResourceContainerMenu; -import com.refinedmods.refinedstorage.common.support.containermenu.DisabledResourceSlot; -import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlotType; -import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; - -import java.util.Collections; -import java.util.List; - -import net.minecraft.network.chat.Component; - -class CraftingPreviewContainerMenu extends AbstractResourceContainerMenu { - private final List requests; - - private CraftingRequest currentRequest; - - CraftingPreviewContainerMenu(final List requests) { - super(null, 0); - final ResourceContainer resourceContainer = ResourceContainerImpl.createForFilter(1); - resourceContainer.set(0, new ResourceAmount(requests.getFirst().getResource(), 1)); - addSlot(new DisabledResourceSlot( - resourceContainer, - 0, - Component.empty(), - 157, - 48, - ResourceSlotType.FILTER - )); - this.requests = Collections.unmodifiableList(requests); - this.currentRequest = requests.getFirst(); - } - - List getRequests() { - return requests; - } - - CraftingRequest getCurrentRequest() { - return currentRequest; - } - - void setCurrentRequest(final CraftingRequest request) { - this.currentRequest = request; - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java deleted file mode 100644 index 84ec43f5b..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingPreviewItem.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import com.refinedmods.refinedstorage.api.resource.ResourceKey; - -record CraftingPreviewItem(ResourceKey resource, long available, long missing, long toCraft) { -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java deleted file mode 100644 index d8d19fa1c..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/CraftingRequest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import com.refinedmods.refinedstorage.api.resource.ResourceAmount; -import com.refinedmods.refinedstorage.api.resource.ResourceKey; -import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; - -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Nullable; - -public class CraftingRequest { - private final ResourceKey resource; - private final double amount; - @Nullable - private CraftingPreview preview; - - private CraftingRequest(final ResourceKey resource, final double amount) { - this.resource = resource; - this.amount = amount; - final List items = new ArrayList<>(); - for (int i = 0; i < 31; ++i) { - items.add(new CraftingPreviewItem(resource, i, i % 2 == 0 ? 999 : 0, i % 2 == 0 ? 0 : 1000)); - } - this.preview = new CraftingPreview(true, items); - } - - public static CraftingRequest of(final ResourceAmount resourceAmount) { - final double displayAmount = resourceAmount.resource() instanceof PlatformResourceKey platformResourceKey - ? platformResourceKey.getResourceType().getDisplayAmount(resourceAmount.amount()) - : resourceAmount.amount(); - return new CraftingRequest(resourceAmount.resource(), displayAmount); - } - - ResourceKey getResource() { - return resource; - } - - double getAmount() { - return amount; - } - - @Nullable - CraftingPreview getPreview() { - return preview; - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 8599226c3..f5ec39801 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -30,6 +30,10 @@ import com.refinedmods.refinedstorage.common.api.support.registry.PlatformRegistry; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewItem; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewProvider; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewType; import com.refinedmods.refinedstorage.common.grid.strategy.ClientGridExtractionStrategy; import com.refinedmods.refinedstorage.common.grid.strategy.ClientGridInsertionStrategy; import com.refinedmods.refinedstorage.common.grid.strategy.ClientGridScrollingStrategy; @@ -41,6 +45,8 @@ import com.refinedmods.refinedstorage.query.lexer.LexerTokenMappings; import com.refinedmods.refinedstorage.query.parser.ParserOperatorMappings; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.BiPredicate; @@ -58,7 +64,8 @@ import static java.util.Objects.requireNonNull; public abstract class AbstractGridContainerMenu extends AbstractResourceContainerMenu - implements GridWatcher, GridInsertionStrategy, GridExtractionStrategy, GridScrollingStrategy, ScreenSizeListener { + implements GridWatcher, GridInsertionStrategy, GridExtractionStrategy, GridScrollingStrategy, ScreenSizeListener, + AutocraftingPreviewProvider { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGridContainerMenu.class); private static final GridQueryParserImpl QUERY_PARSER = new GridQueryParserImpl( LexerTokenMappings.DEFAULT_MAPPINGS, @@ -483,6 +490,23 @@ protected ResourceKey getResourceForAutocraftableHint(final Slot slot) { return null; } + @Override + public AutocraftingPreview getPreview(final PlatformResourceKey resource, final long amount) { + final List items = new ArrayList<>(); + final boolean missing = amount == 404; + for (int i = 0; i < 31; ++i) { + items.add(new AutocraftingPreviewItem( + resource, + (i + 1), + (i % 2 == 0 && missing) ? amount : 0, + i % 2 == 0 ? 0 : amount + )); + } + return new AutocraftingPreview(missing + ? AutocraftingPreviewType.MISSING_RESOURCES + : AutocraftingPreviewType.SUCCESS, items); + } + public boolean isLargeSlot(final Slot slot) { return false; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java index d6f8ef3a4..f9cf67691 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java @@ -20,6 +20,7 @@ import org.joml.Vector3f; import org.lwjgl.glfw.GLFW; +import static com.refinedmods.refinedstorage.common.support.amount.ConfirmButton.ERROR_SIZE; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; public abstract class AbstractAmountScreen @@ -28,11 +29,12 @@ public abstract class AbstractAmountScreen reset()) + private Button addResetButton(final int x, final int y) { + final int width = configuration.isHorizontalActionButtons() + ? font.width(RESET_TEXT) + ACTION_BUTTON_SPACING + : ACTION_BUTTON_WIDTH; + return addRenderableWidget(Button.builder(RESET_TEXT, btn -> reset()) .pos(leftPos + x, topPos + y) - .size(ACTION_BUTTON_WIDTH, ACTION_BUTTON_HEIGHT) + .size(width, ACTION_BUTTON_HEIGHT) .build()); } private void addConfirmButton(final int x, final int y) { - confirmButton = addRenderableWidget( - Button.builder(configuration.getConfirmButtonText(), btn -> tryConfirmAndCloseToParent()) - .pos(leftPos + x, topPos + y) - .size(ACTION_BUTTON_WIDTH, ACTION_BUTTON_HEIGHT) - .build()); + final int width = configuration.isHorizontalActionButtons() + ? font.width(configuration.getConfirmButtonText()) + ACTION_BUTTON_SPACING + ERROR_SIZE + : ACTION_BUTTON_WIDTH; + confirmButton = addRenderableWidget(new ConfirmButton( + leftPos + x, + topPos + y, + width, + ACTION_BUTTON_HEIGHT, + configuration.getConfirmButtonText(), + btn -> tryConfirmAndCloseToParent() + )); } - private void addCancelButton(final int x, final int y) { - addRenderableWidget(Button.builder(CANCEL_TEXT, btn -> tryCloseToParent()) + private Button addCancelButton(final int x, final int y) { + final int width = configuration.isHorizontalActionButtons() + ? font.width(CANCEL_TEXT) + ACTION_BUTTON_SPACING + : ACTION_BUTTON_WIDTH; + return addRenderableWidget(Button.builder(CANCEL_TEXT, btn -> tryCloseToParent()) .pos(leftPos + x, topPos + y) - .size(ACTION_BUTTON_WIDTH, ACTION_BUTTON_HEIGHT) + .size(width, ACTION_BUTTON_HEIGHT) .build()); } @@ -138,6 +153,7 @@ protected void onAmountFieldChanged() { final boolean valid = getAndValidateAmount().isPresent(); if (confirmButton != null) { confirmButton.active = valid; + confirmButton.setError(!valid); } else { tryConfirm(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ConfirmButton.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ConfirmButton.java new file mode 100644 index 000000000..b4998c387 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/ConfirmButton.java @@ -0,0 +1,52 @@ +package com.refinedmods.refinedstorage.common.support.amount; + +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public class ConfirmButton extends Button { + static final int ERROR_SIZE = 12; + + private static final ResourceLocation ERROR_ICON = createIdentifier("error"); + + private boolean error; + + public ConfirmButton(final int x, + final int y, + final int width, + final int height, + final Component message, + final OnPress onPress) { + super(x, y, width, height, message, onPress, DEFAULT_NARRATION); + } + + @Override + protected void renderWidget(final GuiGraphics graphics, + final int mouseX, + final int mouseY, + final float partialTick) { + super.renderWidget(graphics, mouseX, mouseY, partialTick); + if (error) { + graphics.blitSprite(ERROR_ICON, getX() + 4, getY() + 4, ERROR_SIZE, ERROR_SIZE); + } + } + + @Override + protected void renderScrollingString(final GuiGraphics graphics, + final Font font, + final int width, + final int color) { + final int offset = error ? (ERROR_SIZE - 6) : 0; + final int start = offset + getX() + width; + final int end = offset + getX() + getWidth() - width; + renderScrollingString(graphics, font, getMessage(), start, getY(), end, getY() + getHeight(), color); + } + + public void setError(final boolean error) { + this.error = error; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java new file mode 100644 index 000000000..3c5544aef --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java @@ -0,0 +1,48 @@ +package com.refinedmods.refinedstorage.common.support.packet.c2s; + +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewProvider; +import com.refinedmods.refinedstorage.common.support.packet.PacketContext; +import com.refinedmods.refinedstorage.common.support.packet.s2c.S2CPackets; +import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; + +import java.util.UUID; + +import net.minecraft.core.UUIDUtil; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.server.level.ServerPlayer; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public record AutocraftingPreviewRequestPacket(UUID id, + PlatformResourceKey resource, + long amount) implements CustomPacketPayload { + public static final CustomPacketPayload.Type + PACKET_TYPE = new CustomPacketPayload.Type<>( + createIdentifier("autocrafting_preview_request") + ); + public static final StreamCodec STREAM_CODEC = + StreamCodec + .composite( + UUIDUtil.STREAM_CODEC, AutocraftingPreviewRequestPacket::id, + ResourceCodecs.STREAM_CODEC, AutocraftingPreviewRequestPacket::resource, + ByteBufCodecs.VAR_LONG, AutocraftingPreviewRequestPacket::amount, + AutocraftingPreviewRequestPacket::new + ); + + public static void handle(final AutocraftingPreviewRequestPacket packet, final PacketContext ctx) { + if (ctx.getPlayer().containerMenu instanceof AutocraftingPreviewProvider provider) { + final AutocraftingPreview preview = provider.getPreview(packet.resource(), packet.amount()); + S2CPackets.sendAutocraftingPreviewResponse((ServerPlayer) ctx.getPlayer(), packet.id, preview); + } + } + + @Override + public CustomPacketPayload.Type type() { + return PACKET_TYPE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java index 618e09aef..4aba50bee 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java @@ -131,4 +131,10 @@ public static void sendPatternGridSmithingTableRecipeTransfer(final List PACKET_TYPE = new Type<>( + createIdentifier("autocrafting_preview_response") + ); + + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + UUIDUtil.STREAM_CODEC, AutocraftingPreviewResponsePacket::id, + AutocraftingPreview.STREAM_CODEC, AutocraftingPreviewResponsePacket::preview, + AutocraftingPreviewResponsePacket::new + ); + + public static void handle(final AutocraftingPreviewResponsePacket packet) { + ClientPlatformUtil.craftingPreviewReceived(packet.id, packet.preview); + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} + diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java index 2cc191708..ab1ef3796 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java @@ -5,6 +5,7 @@ import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.storage.StorageInfo; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; import com.refinedmods.refinedstorage.common.networking.NetworkTransmitterData; import java.util.Optional; @@ -85,4 +86,10 @@ public static void sendPatternGridAllowedAlternativesUpdate(final ServerPlayer p public static void sendCrafterNameUpdate(final ServerPlayer player, final Component name) { Platform.INSTANCE.sendPacketToClient(player, new CrafterNameUpdatePacket(name)); } + + public static void sendAutocraftingPreviewResponse(final ServerPlayer player, + final UUID id, + final AutocraftingPreview preview) { + Platform.INSTANCE.sendPacketToClient(player, new AutocraftingPreviewResponsePacket(id, preview)); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java index 72bf0d0dd..07ce08854 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java @@ -1,5 +1,9 @@ package com.refinedmods.refinedstorage.common.util; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; + +import java.util.UUID; import javax.annotation.Nullable; import net.minecraft.client.Minecraft; @@ -30,4 +34,10 @@ public static void addNoPermissionToast(final Component message) { message ); } + + public static void craftingPreviewReceived(final UUID id, final AutocraftingPreview preview) { + if (Minecraft.getInstance().screen instanceof AutocraftingPreviewScreen screen) { + screen.getMenu().previewReceived(id, preview); + } + } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index f59b5e5d4..23b21ddc2 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -6,7 +6,7 @@ "block.refinedstorage.disk_drive": "Disk Drive", "block.refinedstorage.machine_casing": "Machine Casing", "block.refinedstorage.grid": "Grid", - "block.refinedstorage.pattern_grid": "Pattern Fart Grid", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Crafting Grid", "block.refinedstorage.controller": "Controller", "block.refinedstorage.creative_controller": "Creative Controller", @@ -206,11 +206,13 @@ "gui.refinedstorage.crafter.chained.head_help": "This crafter is the head of the chain.", "gui.refinedstorage.crafter.not_chained": "Not chained", "gui.refinedstorage.crafter.not_chained.help": "If another crafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", - "gui.refinedstorage.crafting_preview.start": "Start", - "gui.refinedstorage.crafting_preview.start.missing_resources": "There are missing resources.", - "gui.refinedstorage.crafting_preview.available": "Available: %s", - "gui.refinedstorage.crafting_preview.to_craft": "To craft: %s", - "gui.refinedstorage.crafting_preview.missing": "Missing: %s", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/autocrafting_preview.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/crafting_preview.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/autocrafting_preview.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/crafting_preview/crafting_requests.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/autocrafting_preview/requests.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/crafting_preview/crafting_requests.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/autocrafting_preview/requests.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/crafting_preview/row.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/autocrafting_preview/row.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/crafting_preview/row.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/autocrafting_preview/row.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/error.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/error.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee9da4ea1f73cf302fbfe1d1e938d49cc40d12f GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$3?vg*uel1O7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O=*!;1l9np{F<3!lKvI6ey6fHS;D&T}hB%@c;k+8631$egX113p^r=85sBu zgD~Uq{1qucK`T!e#}J9|+CEDm1_KTz&maHiZw|0X7Up8*4`E|EyO7=G)Gl+`B-idG qXG$6cK8drYNannjICrt~c%AW5hUGp|dtU=hVeoYIb6Mw<&;$VMB0LcQ literal 0 HcmV?d00001 diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index fe960a80f..dd7ffd7ec 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -19,6 +19,7 @@ import com.refinedmods.refinedstorage.common.storagemonitor.StorageMonitorBlockEntityRenderer; import com.refinedmods.refinedstorage.common.support.network.item.NetworkItemPropertyFunction; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; @@ -290,6 +291,10 @@ private void registerPacketHandlers() { CrafterNameUpdatePacket.PACKET_TYPE, wrapHandler(CrafterNameUpdatePacket::handle) ); + ClientPlayNetworking.registerGlobalReceiver( + AutocraftingPreviewResponsePacket.PACKET_TYPE, + wrapHandler((packet, ctx) -> AutocraftingPreviewResponsePacket.handle(packet)) + ); } private static ClientPlayNetworking.PlayPayloadHandler wrapHandler( diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index 92e3255ca..16747b7a0 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -29,6 +29,7 @@ import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingPreviewRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; @@ -53,6 +54,7 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; @@ -443,6 +445,10 @@ private void registerServerToClientPackets() { CrafterNameUpdatePacket.PACKET_TYPE, CrafterNameUpdatePacket.STREAM_CODEC ); + PayloadTypeRegistry.playS2C().register( + AutocraftingPreviewResponsePacket.PACKET_TYPE, + AutocraftingPreviewResponsePacket.STREAM_CODEC + ); } private void registerClientToServerPackets() { @@ -530,6 +536,10 @@ private void registerClientToServerPackets() { CrafterNameChangePacket.PACKET_TYPE, CrafterNameChangePacket.STREAM_CODEC ); + PayloadTypeRegistry.playC2S().register( + AutocraftingPreviewRequestPacket.PACKET_TYPE, + AutocraftingPreviewRequestPacket.STREAM_CODEC + ); } private void registerPacketHandlers() { @@ -629,6 +639,10 @@ private void registerPacketHandlers() { CrafterNameChangePacket.PACKET_TYPE, wrapHandler(CrafterNameChangePacket::handle) ); + ServerPlayNetworking.registerGlobalReceiver( + AutocraftingPreviewRequestPacket.PACKET_TYPE, + wrapHandler(AutocraftingPreviewRequestPacket::handle) + ); } private static ServerPlayNetworking.PlayPayloadHandler wrapHandler( diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 537ae459f..79c413015 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -29,6 +29,7 @@ import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingPreviewRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; @@ -53,6 +54,7 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; @@ -631,6 +633,11 @@ private static void registerServerToClientPackets(final PayloadRegistrar registr CrafterNameUpdatePacket.STREAM_CODEC, wrapHandler(CrafterNameUpdatePacket::handle) ); + registrar.playToClient( + AutocraftingPreviewResponsePacket.PACKET_TYPE, + AutocraftingPreviewResponsePacket.STREAM_CODEC, + wrapHandler((packet, ctx) -> AutocraftingPreviewResponsePacket.handle(packet)) + ); } private static void registerClientToServerPackets(final PayloadRegistrar registrar) { @@ -754,6 +761,11 @@ private static void registerClientToServerPackets(final PayloadRegistrar registr CrafterNameChangePacket.STREAM_CODEC, wrapHandler(CrafterNameChangePacket::handle) ); + registrar.playToServer( + AutocraftingPreviewRequestPacket.PACKET_TYPE, + AutocraftingPreviewRequestPacket.STREAM_CODEC, + wrapHandler(AutocraftingPreviewRequestPacket::handle) + ); } private static IPayloadHandler wrapHandler(final PacketHandler handler) { From 1b3a43e67e3306c5f9840a8c23acd3335a657dde Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 4 Oct 2024 20:40:09 +0200 Subject: [PATCH 52/83] feat: starting crafting tasks on the server Not autocrafting itself yet ;) --- .../common/RefinedStorageApiImpl.java | 2 +- .../AutocraftingPreviewContainerMenu.java | 26 ++++++- .../preview/AutocraftingPreviewListener.java | 2 + .../preview/AutocraftingPreviewProvider.java | 3 +- .../preview/AutocraftingPreviewScreen.java | 75 ++++++++++++++----- .../preview/AutocraftingRequest.java | 12 +++ .../grid/AbstractGridContainerMenu.java | 5 ++ .../grid/screen/AbstractGridScreen.java | 2 +- .../support/amount/AbstractAmountScreen.java | 2 +- .../packet/c2s/AutocraftingRequestPacket.java | 46 ++++++++++++ .../common/support/packet/c2s/C2SPackets.java | 6 ++ .../AutocraftingPreviewResponsePacket.java | 3 +- .../s2c/AutocraftingResponsePacket.java | 36 +++++++++ .../common/support/packet/s2c/S2CPackets.java | 6 ++ .../common/util/ClientPlatformUtil.java | 10 ++- .../fabric/ClientModInitializerImpl.java | 5 ++ .../fabric/ModInitializerImpl.java | 14 ++++ .../neoforge/ModInitializer.java | 12 +++ 18 files changed, 236 insertions(+), 31 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingResponsePacket.java diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 1daca02e8..a7487641a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -614,7 +614,7 @@ public void openCraftingPreview(final List requests) { minecraft.setScreen(new AutocraftingPreviewScreen( minecraft.screen, inventory, - requests.stream().map(AutocraftingRequest::of).toList() + requests.stream().map(AutocraftingRequest::of).collect(Collectors.toList()) )); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java index a6d3da8ba..81054f343 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java @@ -7,7 +7,6 @@ import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlotType; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; -import java.util.Collections; import java.util.List; import java.util.UUID; import javax.annotation.Nullable; @@ -33,7 +32,7 @@ public class AutocraftingPreviewContainerMenu extends AbstractResourceContainerM 48, ResourceSlotType.FILTER )); - this.requests = Collections.unmodifiableList(requests); + this.requests = requests; this.currentRequest = requests.getFirst(); } @@ -62,16 +61,35 @@ void amountChanged(final double amount) { } } - public void previewReceived(final UUID id, final AutocraftingPreview preview) { + public void previewResponseReceived(final UUID id, final AutocraftingPreview preview) { if (currentRequest.previewReceived(id, preview) && listener != null) { listener.previewChanged(preview); } } - public void loadCurrentRequest() { + void loadCurrentRequest() { if (listener != null) { currentRequest.clearPreview(); listener.requestChanged(currentRequest); } } + + void startRequest(final double amount) { + currentRequest.start(amount); + } + + boolean requestStarted(final UUID id) { + if (currentRequest.isStarted(id)) { + if (listener != null) { + listener.requestRemoved(currentRequest); + } + requests.remove(currentRequest); + if (!requests.isEmpty()) { + setCurrentRequest(requests.getFirst()); + return false; + } + return true; + } + return false; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java index 984f2c520..eb6a0e3dd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java @@ -6,4 +6,6 @@ interface AutocraftingPreviewListener { void requestChanged(AutocraftingRequest request); void previewChanged(@Nullable AutocraftingPreview preview); + + void requestRemoved(AutocraftingRequest request); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java index 1d42cb723..558056cb7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java @@ -2,7 +2,8 @@ import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; -@FunctionalInterface public interface AutocraftingPreviewProvider { AutocraftingPreview getPreview(PlatformResourceKey resource, long amount); + + boolean start(PlatformResourceKey resource, long amount); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java index 03951eeed..4eef82282 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.UUID; import javax.annotation.Nullable; import com.google.common.util.concurrent.RateLimiter; @@ -63,7 +64,7 @@ public class AutocraftingPreviewScreen extends AbstractAmountScreen requestButtons = new ArrayList<>(); private final boolean requestsButtonsVisible; - private final RateLimiter requestRateLimiter = RateLimiter.create(0.5); + private final RateLimiter requestRateLimiter = RateLimiter.create(1); @Nullable private Double changedAmount; @@ -111,10 +112,7 @@ protected void init() { initRequestButtons(); } if (confirmButton != null) { - confirmButton.active = false; - confirmButton.setMessage(START); - confirmButton.setTooltip(null); - confirmButton.setError(false); + setStartDisabled(); } getMenu().loadCurrentRequest(); getExclusionZones().add(new Rect2i( @@ -144,12 +142,7 @@ private void initRequestButtons() { requestButton.visible = isCraftingRequestButtonVisible(y); } }); - final int totalRequestButtons = getMenu().getRequests().size() - REQUESTS_VISIBLE; - final int maxOffset = requestButtonsScrollbar.isSmoothScrolling() - ? totalRequestButtons * REQUEST_BUTTON_HEIGHT - : totalRequestButtons; - requestButtonsScrollbar.setEnabled(maxOffset > 0); - requestButtonsScrollbar.setMaxOffset(maxOffset); + updateRequestsScrollbar(); for (int i = 0; i < getMenu().getRequests().size(); ++i) { final AutocraftingRequest request = getMenu().getRequests().get(i); final int buttonY = getCraftingRequestButtonY(i); @@ -189,19 +182,17 @@ private void setPreview(@Nullable final AutocraftingPreview preview) { if (previewItemsScrollbar == null || confirmButton == null) { return; } - confirmButton.setMessage(START); if (preview == null) { previewItemsScrollbar.setEnabled(false); previewItemsScrollbar.setMaxOffset(0); - confirmButton.active = false; - confirmButton.setError(false); - confirmButton.setTooltip(null); + setStartDisabled(); return; } final int items = preview.items().size(); final int rows = Math.ceilDiv(items, COLUMNS) - ROWS_VISIBLE; previewItemsScrollbar.setMaxOffset(previewItemsScrollbar.isSmoothScrolling() ? rows * ROW_HEIGHT : rows); previewItemsScrollbar.setEnabled(rows > 0); + confirmButton.setMessage(START); confirmButton.active = preview.type() == AutocraftingPreviewType.SUCCESS; confirmButton.setError(preview.type() != AutocraftingPreviewType.SUCCESS); confirmButton.setTooltip(preview.type() == AutocraftingPreviewType.MISSING_RESOURCES @@ -406,14 +397,28 @@ protected void onAmountFieldChanged() { if (amountField == null || confirmButton == null) { return; } + getAndValidateAmount().ifPresentOrElse(amount -> { + setPending(); + changedAmount = amount; + amountField.setTextColor(0xFFFFFF); + }, () -> { + setStartDisabled(); + amountField.setTextColor(0xFF5555); + }); + } + + private void setPending() { confirmButton.active = false; confirmButton.setError(false); confirmButton.setTooltip(null); confirmButton.setMessage(PENDING); - getAndValidateAmount().ifPresentOrElse(amount -> { - changedAmount = amount; - amountField.setTextColor(0xFFFFFF); - }, () -> amountField.setTextColor(0xFF5555)); + } + + private void setStartDisabled() { + confirmButton.active = false; + confirmButton.setError(false); + confirmButton.setTooltip(null); + confirmButton.setMessage(START); } @Override @@ -432,6 +437,8 @@ protected void reset() { @Override protected boolean confirm(final Double amount) { + setPending(); + getMenu().startRequest(amount); return false; } @@ -444,4 +451,34 @@ public void requestChanged(final AutocraftingRequest request) { public void previewChanged(@Nullable final AutocraftingPreview preview) { setPreview(preview); } + + @Override + public void requestRemoved(final AutocraftingRequest request) { + requestButtons.removeIf(requestButton -> requestButton.getRequest() == request); + updateRequestsScrollbar(); + for (int i = 0; i < requestButtons.size(); ++i) { + final AutocraftingRequestButton requestButton = requestButtons.get(i); + final int buttonY = getCraftingRequestButtonY(i); + requestButton.setY(buttonY); + requestButton.visible = isCraftingRequestButtonVisible(buttonY); + } + } + + private void updateRequestsScrollbar() { + if (requestButtonsScrollbar == null) { + return; + } + final int totalRequestButtons = getMenu().getRequests().size() - REQUESTS_VISIBLE; + final int maxOffset = requestButtonsScrollbar.isSmoothScrolling() + ? totalRequestButtons * REQUEST_BUTTON_HEIGHT + : totalRequestButtons; + requestButtonsScrollbar.setEnabled(maxOffset > 0); + requestButtonsScrollbar.setMaxOffset(maxOffset); + } + + public void responseReceived(final UUID id, final boolean started) { + if (started && getMenu().requestStarted(id)) { + tryCloseToParent(); + } + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java index f3593d4ff..714845084 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java @@ -43,6 +43,14 @@ boolean trySendRequest(final double amountRequested) { return true; } + void start(final double amountRequested) { + if (!(resource instanceof PlatformResourceKey resourceKey)) { + return; + } + final long normalizedAmount = resourceKey.getResourceType().normalizeAmount(amountRequested); + C2SPackets.sendAutocraftingRequest(id, resourceKey, normalizedAmount); + } + ResourceKey getResource() { return resource; } @@ -69,4 +77,8 @@ void clearPreview() { pendingPreviewAmount = 0; preview = null; } + + boolean isStarted(final UUID startedId) { + return id.equals(startedId); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index f5ec39801..fcfe79c88 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -507,6 +507,11 @@ public AutocraftingPreview getPreview(final PlatformResourceKey resource, final : AutocraftingPreviewType.SUCCESS, items); } + @Override + public boolean start(final PlatformResourceKey resource, final long amount) { + return true; + } + public boolean isLargeSlot(final Slot slot) { return false; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index b124ae275..9747967b0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -524,7 +524,7 @@ private static boolean tryStartAutocrafting(final PlatformGridResource resource) requests.add(new ResourceAmount(request.resource(), request.amount() * 2)); requests.add(new ResourceAmount(request.resource(), request.amount() * 3)); requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); - requests.add(new ResourceAmount(request.resource(), request.amount() * 5)); + requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); } RefinedStorageApi.INSTANCE.openCraftingPreview(requests); return true; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java index f9cf67691..e585d2fcf 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java @@ -286,7 +286,7 @@ private void tryConfirmAndCloseToParent() { }); } - private boolean tryCloseToParent() { + protected final boolean tryCloseToParent() { if (parent != null) { Minecraft.getInstance().setScreen(parent); return true; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java new file mode 100644 index 000000000..2b2ea00a0 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java @@ -0,0 +1,46 @@ +package com.refinedmods.refinedstorage.common.support.packet.c2s; + +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewProvider; +import com.refinedmods.refinedstorage.common.support.packet.PacketContext; +import com.refinedmods.refinedstorage.common.support.packet.s2c.S2CPackets; +import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; + +import java.util.UUID; + +import net.minecraft.core.UUIDUtil; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.server.level.ServerPlayer; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public record AutocraftingRequestPacket(UUID id, + PlatformResourceKey resource, + long amount) implements CustomPacketPayload { + public static final Type PACKET_TYPE = new Type<>( + createIdentifier("autocrafting_request") + ); + public static final StreamCodec STREAM_CODEC = + StreamCodec + .composite( + UUIDUtil.STREAM_CODEC, AutocraftingRequestPacket::id, + ResourceCodecs.STREAM_CODEC, AutocraftingRequestPacket::resource, + ByteBufCodecs.VAR_LONG, AutocraftingRequestPacket::amount, + AutocraftingRequestPacket::new + ); + + public static void handle(final AutocraftingRequestPacket packet, final PacketContext ctx) { + if (ctx.getPlayer().containerMenu instanceof AutocraftingPreviewProvider provider) { + final boolean started = provider.start(packet.resource(), packet.amount()); + S2CPackets.sendAutocraftingResponse((ServerPlayer) ctx.getPlayer(), packet.id, started); + } + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java index 4aba50bee..bc20c2224 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java @@ -137,4 +137,10 @@ public static void sendAutocraftingPreviewRequest(final UUID id, final long amount) { Platform.INSTANCE.sendPacketToServer(new AutocraftingPreviewRequestPacket(id, resource, amount)); } + + public static void sendAutocraftingRequest(final UUID id, + final PlatformResourceKey resource, + final long amount) { + Platform.INSTANCE.sendPacketToServer(new AutocraftingRequestPacket(id, resource, amount)); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java index e09b02d5b..bd9c8a1f1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java @@ -1,7 +1,6 @@ package com.refinedmods.refinedstorage.common.support.packet.s2c; import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; -import com.refinedmods.refinedstorage.common.support.packet.PacketContext; import com.refinedmods.refinedstorage.common.util.ClientPlatformUtil; import java.util.UUID; @@ -26,7 +25,7 @@ public record AutocraftingPreviewResponsePacket(UUID id, AutocraftingPreview pre ); public static void handle(final AutocraftingPreviewResponsePacket packet) { - ClientPlatformUtil.craftingPreviewReceived(packet.id, packet.preview); + ClientPlatformUtil.autocraftingPreviewResponseReceived(packet.id, packet.preview); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingResponsePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingResponsePacket.java new file mode 100644 index 000000000..1b1467d63 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingResponsePacket.java @@ -0,0 +1,36 @@ +package com.refinedmods.refinedstorage.common.support.packet.s2c; + +import com.refinedmods.refinedstorage.common.util.ClientPlatformUtil; + +import java.util.UUID; + +import net.minecraft.core.UUIDUtil; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public record AutocraftingResponsePacket(UUID id, boolean started) implements CustomPacketPayload { + public static final Type PACKET_TYPE = new Type<>( + createIdentifier("autocrafting_response") + ); + + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + UUIDUtil.STREAM_CODEC, AutocraftingResponsePacket::id, + ByteBufCodecs.BOOL, AutocraftingResponsePacket::started, + AutocraftingResponsePacket::new + ); + + public static void handle(final AutocraftingResponsePacket packet) { + ClientPlatformUtil.autocraftingResponseReceived(packet.id, packet.started); + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} + diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java index ab1ef3796..623a0bd79 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java @@ -92,4 +92,10 @@ public static void sendAutocraftingPreviewResponse(final ServerPlayer player, final AutocraftingPreview preview) { Platform.INSTANCE.sendPacketToClient(player, new AutocraftingPreviewResponsePacket(id, preview)); } + + public static void sendAutocraftingResponse(final ServerPlayer player, + final UUID id, + final boolean started) { + Platform.INSTANCE.sendPacketToClient(player, new AutocraftingResponsePacket(id, started)); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java index 07ce08854..065af4437 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java @@ -35,9 +35,15 @@ public static void addNoPermissionToast(final Component message) { ); } - public static void craftingPreviewReceived(final UUID id, final AutocraftingPreview preview) { + public static void autocraftingPreviewResponseReceived(final UUID id, final AutocraftingPreview preview) { if (Minecraft.getInstance().screen instanceof AutocraftingPreviewScreen screen) { - screen.getMenu().previewReceived(id, preview); + screen.getMenu().previewResponseReceived(id, preview); + } + } + + public static void autocraftingResponseReceived(final UUID id, final boolean started) { + if (Minecraft.getInstance().screen instanceof AutocraftingPreviewScreen screen) { + screen.responseReceived(id, started); } } } diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index dd7ffd7ec..37e89fd79 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -20,6 +20,7 @@ import com.refinedmods.refinedstorage.common.support.network.item.NetworkItemPropertyFunction; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; @@ -295,6 +296,10 @@ private void registerPacketHandlers() { AutocraftingPreviewResponsePacket.PACKET_TYPE, wrapHandler((packet, ctx) -> AutocraftingPreviewResponsePacket.handle(packet)) ); + ClientPlayNetworking.registerGlobalReceiver( + AutocraftingResponsePacket.PACKET_TYPE, + wrapHandler((packet, ctx) -> AutocraftingResponsePacket.handle(packet)) + ); } private static ClientPlayNetworking.PlayPayloadHandler wrapHandler( diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index 16747b7a0..dc3f23626 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -30,6 +30,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingPreviewRequestPacket; +import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; @@ -55,6 +56,7 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; @@ -449,6 +451,10 @@ private void registerServerToClientPackets() { AutocraftingPreviewResponsePacket.PACKET_TYPE, AutocraftingPreviewResponsePacket.STREAM_CODEC ); + PayloadTypeRegistry.playS2C().register( + AutocraftingResponsePacket.PACKET_TYPE, + AutocraftingResponsePacket.STREAM_CODEC + ); } private void registerClientToServerPackets() { @@ -540,6 +546,10 @@ private void registerClientToServerPackets() { AutocraftingPreviewRequestPacket.PACKET_TYPE, AutocraftingPreviewRequestPacket.STREAM_CODEC ); + PayloadTypeRegistry.playC2S().register( + AutocraftingRequestPacket.PACKET_TYPE, + AutocraftingRequestPacket.STREAM_CODEC + ); } private void registerPacketHandlers() { @@ -643,6 +653,10 @@ private void registerPacketHandlers() { AutocraftingPreviewRequestPacket.PACKET_TYPE, wrapHandler(AutocraftingPreviewRequestPacket::handle) ); + ServerPlayNetworking.registerGlobalReceiver( + AutocraftingRequestPacket.PACKET_TYPE, + wrapHandler(AutocraftingRequestPacket::handle) + ); } private static ServerPlayNetworking.PlayPayloadHandler wrapHandler( diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 79c413015..a8b9ebd5a 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -30,6 +30,7 @@ import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingPreviewRequestPacket; +import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; @@ -55,6 +56,7 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; @@ -638,6 +640,11 @@ private static void registerServerToClientPackets(final PayloadRegistrar registr AutocraftingPreviewResponsePacket.STREAM_CODEC, wrapHandler((packet, ctx) -> AutocraftingPreviewResponsePacket.handle(packet)) ); + registrar.playToClient( + AutocraftingResponsePacket.PACKET_TYPE, + AutocraftingResponsePacket.STREAM_CODEC, + wrapHandler((packet, ctx) -> AutocraftingResponsePacket.handle(packet)) + ); } private static void registerClientToServerPackets(final PayloadRegistrar registrar) { @@ -766,6 +773,11 @@ private static void registerClientToServerPackets(final PayloadRegistrar registr AutocraftingPreviewRequestPacket.STREAM_CODEC, wrapHandler(AutocraftingPreviewRequestPacket::handle) ); + registrar.playToServer( + AutocraftingRequestPacket.PACKET_TYPE, + AutocraftingRequestPacket.STREAM_CODEC, + wrapHandler(AutocraftingRequestPacket::handle) + ); } private static IPayloadHandler wrapHandler(final PacketHandler handler) { From fb0c927c15c4e665f4895056c2582d0dd4c99e93 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 4 Oct 2024 22:47:51 +0200 Subject: [PATCH 53/83] feat: storage monitor autocrafting Only if the resource could no longer be extracted, try trigger autocrafting. I tried to reuse shift clicking for this to force autocrafting, but shift is already used to only extract one of a resource. You have to wait 250ms until the last extract to trigger autocrafting as attack method from block might be called very often, and we don't want open the autocrafting window when it's not needed (eg right after an extract). --- CHANGELOG.md | 1 + .../api/autocrafting/AutocraftingPreview.java | 6 ++ .../autocrafting/AutocraftingPreviewItem.java | 6 ++ .../AutocraftingPreviewProvider.java | 11 ++++ .../AutocraftingPreviewType.java | 2 +- .../refinedstorage/common/api/grid/Grid.java | 3 +- .../common/AbstractClientModInitializer.java | 11 ++++ .../common/AbstractModInitializer.java | 9 +++ .../common/RefinedStorageApiImpl.java | 2 +- .../preview/AutocraftingPreview.java | 18 ------ .../AutocraftingPreviewContainerMenu.java | 15 ++++- .../preview/AutocraftingPreviewItem.java | 18 ------ .../preview/AutocraftingPreviewListener.java | 2 + .../preview/AutocraftingPreviewProvider.java | 9 --- .../preview/AutocraftingPreviewScreen.java | 19 +++++- .../preview/AutocraftingRequest.java | 1 + .../refinedstorage/common/content/Menus.java | 13 +++++ .../common/grid/AbstractGridBlockEntity.java | 19 ++++++ .../grid/AbstractGridContainerMenu.java | 29 +++------- .../common/grid/WirelessGrid.java | 17 ++++++ .../common/grid/screen/GridScreen.java | 2 +- .../storage/portablegrid/PortableGrid.java | 13 +++++ ...tocraftingStorageMonitorContainerMenu.java | 50 ++++++++++++++++ ...ingStorageMonitorExtendedMenuProvider.java | 46 +++++++++++++++ .../storagemonitor/StorageMonitorBlock.java | 3 +- .../StorageMonitorBlockEntity.java | 58 ++++++++++++++++--- .../support/amount/AbstractAmountScreen.java | 14 +++-- .../c2s/AutocraftingPreviewRequestPacket.java | 9 +-- .../packet/c2s/AutocraftingRequestPacket.java | 2 +- .../AutocraftingPreviewResponsePacket.java | 26 ++++++++- .../common/support/packet/s2c/S2CPackets.java | 2 +- .../common/util/ClientPlatformUtil.java | 2 +- .../AutocraftingNetworkComponent.java | 3 +- .../AutocraftingNetworkComponentImpl.java | 28 +++++++++ .../AutocraftingNetworkComponentImplTest.java | 10 ++++ 35 files changed, 379 insertions(+), 100 deletions(-) create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreview.java create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewItem.java create mode 100644 refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java rename {refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview => refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting}/AutocraftingPreviewType.java (53%) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorExtendedMenuProvider.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 0adf911b2..afca303c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - The crafting amount and crafting preview screens have been merged. Changing the amount will update the live preview. - The numbers on the crafting preview screen are now compacted with units. - When requesting autocrafting multiple resources at once, which can happen via a recipe mod, all the crafting requests are now listed on the side of the GUI. +- You can now request autocrafting from the Storage Monitor if the resource count reaches zero. ### Fixed diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreview.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreview.java new file mode 100644 index 000000000..e11e56a4f --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreview.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import java.util.List; + +public record AutocraftingPreview(AutocraftingPreviewType type, List items) { +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewItem.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewItem.java new file mode 100644 index 000000000..82919b373 --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewItem.java @@ -0,0 +1,6 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +public record AutocraftingPreviewItem(ResourceKey resource, long available, long missing, long toCraft) { +} diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java new file mode 100644 index 000000000..207a0d2fd --- /dev/null +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java @@ -0,0 +1,11 @@ +package com.refinedmods.refinedstorage.api.autocrafting; + +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Optional; + +public interface AutocraftingPreviewProvider { + Optional getPreview(ResourceKey resource, long amount); + + boolean start(ResourceKey resource, long amount); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewType.java similarity index 53% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java rename to refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewType.java index d53bef456..3d1832829 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewType.java +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewType.java @@ -1,4 +1,4 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; +package com.refinedmods.refinedstorage.api.autocrafting; public enum AutocraftingPreviewType { SUCCESS, diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java index a493a55c0..e02e7412e 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.api.grid; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcher; import com.refinedmods.refinedstorage.api.storage.Actor; @@ -15,7 +16,7 @@ import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.3.0") -public interface Grid { +public interface Grid extends AutocraftingPreviewProvider { void addWatcher(GridWatcher watcher, Class actorType); void removeWatcher(GridWatcher watcher); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java index c1cc720b8..30fd6efb1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java @@ -5,6 +5,8 @@ import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; import com.refinedmods.refinedstorage.common.autocrafting.CrafterScreen; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridScreen; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewContainerMenu; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorScreen; import com.refinedmods.refinedstorage.common.constructordestructor.DestructorScreen; import com.refinedmods.refinedstorage.common.content.Items; @@ -93,6 +95,15 @@ protected static void registerScreens(final ScreenRegistration registration) { registration.register(Menus.INSTANCE.getRelay(), RelayScreen::new); registration.register(Menus.INSTANCE.getDiskInterface(), DiskInterfaceScreen::new); registration.register(Menus.INSTANCE.getCrafter(), CrafterScreen::new); + registration.register(Menus.INSTANCE.getAutocraftingStorageMonitor(), + new ScreenConstructor() { + @Override + public AutocraftingPreviewScreen create(final AutocraftingPreviewContainerMenu menu, + final Inventory inventory, + final Component title) { + return new AutocraftingPreviewScreen(menu, inventory, title); + } + }); } protected static void registerAlternativeGridHints() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index 75373db79..b6b25841c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -121,6 +121,7 @@ import com.refinedmods.refinedstorage.common.storage.storageblock.StorageBlockLootItemFunction; import com.refinedmods.refinedstorage.common.storage.storagedisk.FluidStorageDiskItem; import com.refinedmods.refinedstorage.common.storage.storagedisk.ItemStorageDiskItem; +import com.refinedmods.refinedstorage.common.storagemonitor.AutocraftingStorageMonitorContainerMenu; import com.refinedmods.refinedstorage.common.storagemonitor.FluidStorageMonitorExtractionStrategy; import com.refinedmods.refinedstorage.common.storagemonitor.FluidStorageMonitorInsertionStrategy; import com.refinedmods.refinedstorage.common.storagemonitor.ItemStorageMonitorExtractionStrategy; @@ -136,6 +137,7 @@ import com.refinedmods.refinedstorage.common.support.network.component.PlatformStorageNetworkComponent; import com.refinedmods.refinedstorage.common.support.resource.FluidResourceContainerInsertStrategy; import com.refinedmods.refinedstorage.common.support.resource.FluidResourceFactory; +import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerData; import com.refinedmods.refinedstorage.common.support.resource.ResourceTypes; import com.refinedmods.refinedstorage.common.support.slotreference.InventorySlotReferenceFactory; @@ -745,6 +747,13 @@ protected final void registerMenus(final RegistryCallback> callback, ContentIds.STORAGE_MONITOR, () -> extendedMenuTypeFactory.create(StorageMonitorContainerMenu::new, ResourceContainerData.STREAM_CODEC) )); + Menus.INSTANCE.setAutocraftingStorageMonitor(callback.register( + createIdentifier("autocrafting_storage_monitor"), + () -> extendedMenuTypeFactory.create( + (syncId, playerInventory, data) -> new AutocraftingStorageMonitorContainerMenu(syncId, data), + ResourceCodecs.STREAM_CODEC + ) + )); Menus.INSTANCE.setNetworkTransmitter(callback.register( ContentIds.NETWORK_TRANSMITTER, () -> extendedMenuTypeFactory.create(NetworkTransmitterContainerMenu::new, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index a7487641a..1daca02e8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -614,7 +614,7 @@ public void openCraftingPreview(final List requests) { minecraft.setScreen(new AutocraftingPreviewScreen( minecraft.screen, inventory, - requests.stream().map(AutocraftingRequest::of).collect(Collectors.toList()) + requests.stream().map(AutocraftingRequest::of).toList() )); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java deleted file mode 100644 index afd1946f6..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreview.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import com.refinedmods.refinedstorage.common.util.PlatformUtil; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; - -public record AutocraftingPreview(AutocraftingPreviewType type, List items) { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - PlatformUtil.enumStreamCodec(AutocraftingPreviewType.values()), AutocraftingPreview::type, - ByteBufCodecs.collection(ArrayList::new, AutocraftingPreviewItem.STREAM_CODEC), AutocraftingPreview::items, - AutocraftingPreview::new - ); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java index 81054f343..2b9bc38d9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.autocrafting.preview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.support.containermenu.AbstractResourceContainerMenu; @@ -7,11 +8,13 @@ import com.refinedmods.refinedstorage.common.support.containermenu.ResourceSlotType; import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.annotation.Nullable; import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; public class AutocraftingPreviewContainerMenu extends AbstractResourceContainerMenu { private final List requests; @@ -21,7 +24,15 @@ public class AutocraftingPreviewContainerMenu extends AbstractResourceContainerM private AutocraftingPreviewListener listener; AutocraftingPreviewContainerMenu(final List requests) { - super(null, 0); + this(null, 0, requests); + } + + public AutocraftingPreviewContainerMenu(@Nullable final MenuType type, + final int syncId, + final List requests) { + super(type, syncId); + this.requests = new ArrayList<>(requests); + this.currentRequest = requests.getFirst(); final ResourceContainer resourceContainer = ResourceContainerImpl.createForFilter(1); resourceContainer.set(0, new ResourceAmount(requests.getFirst().getResource(), 1)); addSlot(new DisabledResourceSlot( @@ -32,8 +43,6 @@ public class AutocraftingPreviewContainerMenu extends AbstractResourceContainerM 48, ResourceSlotType.FILTER )); - this.requests = requests; - this.currentRequest = requests.getFirst(); } void setListener(final AutocraftingPreviewListener listener) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java deleted file mode 100644 index c82b2e9f1..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewItem.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; -import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; - -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; - -public record AutocraftingPreviewItem(PlatformResourceKey resource, long available, long missing, long toCraft) { - static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ResourceCodecs.STREAM_CODEC, AutocraftingPreviewItem::resource, - ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::available, - ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::missing, - ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::toCraft, - AutocraftingPreviewItem::new - ); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java index eb6a0e3dd..5ba959f4e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java @@ -1,5 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting.preview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; + import javax.annotation.Nullable; interface AutocraftingPreviewListener { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java deleted file mode 100644 index 558056cb7..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewProvider.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting.preview; - -import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; - -public interface AutocraftingPreviewProvider { - AutocraftingPreview getPreview(PlatformResourceKey resource, long amount); - - boolean start(PlatformResourceKey resource, long amount); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java index 4eef82282..fabe0d70a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java @@ -1,5 +1,8 @@ package com.refinedmods.refinedstorage.common.autocrafting.preview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewItem; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewType; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceRendering; import com.refinedmods.refinedstorage.common.support.amount.AbstractAmountScreen; @@ -72,8 +75,20 @@ public class AutocraftingPreviewScreen extends AbstractAmountScreen requests) { + this(new AutocraftingPreviewContainerMenu(requests), parent, playerInventory); + } + + public AutocraftingPreviewScreen(final AutocraftingPreviewContainerMenu menu, + final Inventory playerInventory, + final Component title) { + this(menu, null, playerInventory); + } + + public AutocraftingPreviewScreen(final AutocraftingPreviewContainerMenu menu, + @Nullable final Screen parent, + final Inventory playerInventory) { super( - new AutocraftingPreviewContainerMenu(requests), + menu, parent, playerInventory, TITLE, @@ -478,7 +493,7 @@ private void updateRequestsScrollbar() { public void responseReceived(final UUID id, final boolean started) { if (started && getMenu().requestStarted(id)) { - tryCloseToParent(); + close(); } } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java index 714845084..f93798dd7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.autocrafting.preview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java index eba2dc15d..57d8771d3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewContainerMenu; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorContainerMenu; import com.refinedmods.refinedstorage.common.constructordestructor.DestructorContainerMenu; import com.refinedmods.refinedstorage.common.controller.ControllerContainerMenu; @@ -75,6 +76,8 @@ public final class Menus { @Nullable private Supplier> storageMonitor; @Nullable + private Supplier> autocraftingStorageMonitor; + @Nullable private Supplier> networkTransmitter; @Nullable private Supplier> portableGridBlock; @@ -240,6 +243,16 @@ public void setStorageMonitor(final Supplier getAutocraftingStorageMonitor() { + return requireNonNull(autocraftingStorageMonitor).get(); + } + + public void setAutocraftingStorageMonitor( + final Supplier> supplier + ) { + this.autocraftingStorageMonitor = supplier; + } + public MenuType getNetworkTransmitter() { return requireNonNull(networkTransmitter).get(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index c29cc6df3..30988fee3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.grid; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcher; import com.refinedmods.refinedstorage.api.network.Network; @@ -7,6 +8,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.container.NetworkNodeContainerPriorities; import com.refinedmods.refinedstorage.api.network.impl.node.grid.GridNetworkNode; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.TrackedResourceAmount; @@ -23,6 +25,7 @@ import com.refinedmods.refinedstorage.common.support.network.ColoredConnectionStrategy; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -97,6 +100,22 @@ public void removeWatcher(final GridWatcher watcher) { mainNetworkNode.removeWatcher(watcher); } + @Override + public Optional getPreview(final ResourceKey resource, final long amount) { + return Optional.ofNullable(mainNetworkNode.getNetwork()) + .map(network -> network.getComponent(AutocraftingNetworkComponent.class)) + .flatMap(component -> component.getPreview(resource, amount)); + } + + @Override + public boolean start(final ResourceKey resource, final long amount) { + final Network network = mainNetworkNode.getNetwork(); + if (network == null) { + return false; + } + return network.getComponent(AutocraftingNetworkComponent.class).start(resource, amount); + } + @Override protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState oldBlockState, final BlockState newBlockState) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index fcfe79c88..158af2302 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -1,5 +1,7 @@ package com.refinedmods.refinedstorage.common.grid; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; @@ -30,10 +32,6 @@ import com.refinedmods.refinedstorage.common.api.support.registry.PlatformRegistry; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceType; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewItem; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewProvider; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewType; import com.refinedmods.refinedstorage.common.grid.strategy.ClientGridExtractionStrategy; import com.refinedmods.refinedstorage.common.grid.strategy.ClientGridInsertionStrategy; import com.refinedmods.refinedstorage.common.grid.strategy.ClientGridScrollingStrategy; @@ -45,9 +43,8 @@ import com.refinedmods.refinedstorage.query.lexer.LexerTokenMappings; import com.refinedmods.refinedstorage.query.parser.ParserOperatorMappings; -import java.util.ArrayList; -import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.function.BiPredicate; import javax.annotation.Nullable; @@ -491,25 +488,13 @@ protected ResourceKey getResourceForAutocraftableHint(final Slot slot) { } @Override - public AutocraftingPreview getPreview(final PlatformResourceKey resource, final long amount) { - final List items = new ArrayList<>(); - final boolean missing = amount == 404; - for (int i = 0; i < 31; ++i) { - items.add(new AutocraftingPreviewItem( - resource, - (i + 1), - (i % 2 == 0 && missing) ? amount : 0, - i % 2 == 0 ? 0 : amount - )); - } - return new AutocraftingPreview(missing - ? AutocraftingPreviewType.MISSING_RESOURCES - : AutocraftingPreviewType.SUCCESS, items); + public Optional getPreview(final ResourceKey resource, final long amount) { + return requireNonNull(grid).getPreview(resource, amount); } @Override - public boolean start(final PlatformResourceKey resource, final long amount) { - return true; + public boolean start(final ResourceKey resource, final long amount) { + return requireNonNull(grid).start(resource, amount); } public boolean isLargeSlot(final Slot slot) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java index e471c6e77..765b3a92e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java @@ -1,12 +1,15 @@ package com.refinedmods.refinedstorage.common.grid; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage.api.grid.operations.NoopGridOperations; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcher; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcherManager; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcherManagerImpl; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.NoopStorage; import com.refinedmods.refinedstorage.api.storage.Storage; @@ -100,4 +103,18 @@ private GridOperations createGridOperations(final ResourceType resourceType, final GridOperations operations = resourceType.createGridOperations(rootStorage, playerActor); return new SecuredGridOperations(player, securityNetworkComponent, operations); } + + @Override + public Optional getPreview(final ResourceKey resource, final long amount) { + return context.resolveNetwork() + .map(network -> network.getComponent(AutocraftingNetworkComponent.class)) + .flatMap(component -> component.getPreview(resource, amount)); + } + + @Override + public boolean start(final ResourceKey resource, final long amount) { + return context.resolveNetwork() + .map(network -> network.getComponent(AutocraftingNetworkComponent.class).start(resource, amount)) + .orElse(false); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java index 740c4d1e7..58cb19f21 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/GridScreen.java @@ -9,7 +9,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; public class GridScreen extends AbstractGridScreen { - private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/grid2.png"); + private static final ResourceLocation TEXTURE = createIdentifier("textures/gui/grid.png"); public GridScreen(final T menu, final Inventory inventory, final Component title) { super(menu, inventory, title, 99); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java index f7455d5fc..f38d75ae6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.common.storage.portablegrid; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.grid.operations.GridOperations; import com.refinedmods.refinedstorage.api.grid.operations.NoopGridOperations; @@ -7,6 +8,7 @@ import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcherManager; import com.refinedmods.refinedstorage.api.grid.watcher.GridWatcherManagerImpl; import com.refinedmods.refinedstorage.api.network.energy.EnergyStorage; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.NoopStorage; import com.refinedmods.refinedstorage.api.storage.StateTrackedStorage; @@ -23,6 +25,7 @@ import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; @@ -126,4 +129,14 @@ public GridOperations createOperations(final ResourceType resourceType, final Se final GridOperations operations = resourceType.createGridOperations(rootStorage, new PlayerActor(player)); return new PortableGridOperations(operations, energyStorage); } + + @Override + public Optional getPreview(final ResourceKey resource, final long amount) { + return Optional.empty(); + } + + @Override + public boolean start(final ResourceKey resource, final long amount) { + return false; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java new file mode 100644 index 000000000..5cb83aa86 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java @@ -0,0 +1,50 @@ +package com.refinedmods.refinedstorage.common.storagemonitor; + +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewContainerMenu; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingRequest; +import com.refinedmods.refinedstorage.common.content.Menus; + +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +import static java.util.Objects.requireNonNull; + +public class AutocraftingStorageMonitorContainerMenu extends AutocraftingPreviewContainerMenu + implements AutocraftingPreviewProvider { + @Nullable + private final StorageMonitorBlockEntity storageMonitor; + + public AutocraftingStorageMonitorContainerMenu(final int syncId, final PlatformResourceKey resource) { + super(Menus.INSTANCE.getAutocraftingStorageMonitor(), syncId, getRequests(resource)); + this.storageMonitor = null; + } + + AutocraftingStorageMonitorContainerMenu(final int syncId, + final PlatformResourceKey resource, + final StorageMonitorBlockEntity storageMonitor) { + super(Menus.INSTANCE.getAutocraftingStorageMonitor(), syncId, getRequests(resource)); + this.storageMonitor = storageMonitor; + } + + private static List getRequests(final PlatformResourceKey resource) { + return List.of(AutocraftingRequest.of( + new ResourceAmount(resource, resource.getResourceType().normalizeAmount(1.0D)) + )); + } + + @Override + public Optional getPreview(final ResourceKey resource, final long amount) { + return requireNonNull(storageMonitor).getPreview(resource, amount); + } + + @Override + public boolean start(final ResourceKey resource, final long amount) { + return requireNonNull(storageMonitor).start(resource, amount); + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorExtendedMenuProvider.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorExtendedMenuProvider.java new file mode 100644 index 000000000..876db6b15 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorExtendedMenuProvider.java @@ -0,0 +1,46 @@ +package com.refinedmods.refinedstorage.common.storagemonitor; + +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.content.ContentNames; +import com.refinedmods.refinedstorage.common.support.containermenu.ExtendedMenuProvider; +import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamEncoder; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractContainerMenu; + +class AutocraftingStorageMonitorExtendedMenuProvider implements ExtendedMenuProvider { + private final PlatformResourceKey resource; + private final StorageMonitorBlockEntity blockEntity; + + AutocraftingStorageMonitorExtendedMenuProvider(final PlatformResourceKey resource, + final StorageMonitorBlockEntity blockEntity) { + this.resource = resource; + this.blockEntity = blockEntity; + } + + @Override + public AbstractContainerMenu createMenu(final int syncId, + final Inventory inventory, + final Player player) { + return new AutocraftingStorageMonitorContainerMenu(syncId, resource, blockEntity); + } + + @Override + public Component getDisplayName() { + return ContentNames.STORAGE_MONITOR; + } + + @Override + public PlatformResourceKey getMenuData() { + return resource; + } + + @Override + public StreamEncoder getMenuCodec() { + return ResourceCodecs.STREAM_CODEC; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlock.java index 6168adf7b..ddf44f1b0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlock.java @@ -15,6 +15,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; @@ -96,7 +97,7 @@ public void attack(final BlockState state, final Level level, final BlockPos pos if (hitDirection != direction.asDirection()) { return; } - storageMonitor.extract(player); + storageMonitor.extract((ServerPlayer) player); } private Direction getHitDirection(final Level level, final Player player) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index 8b8925d9c..ec255feac 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -1,6 +1,9 @@ package com.refinedmods.refinedstorage.common.storagemonitor; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceKey; @@ -9,6 +12,7 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.storage.PlayerActor; import com.refinedmods.refinedstorage.common.api.storage.root.FuzzyRootStorage; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; import com.refinedmods.refinedstorage.common.api.support.resource.ResourceContainer; import com.refinedmods.refinedstorage.common.content.BlockEntities; import com.refinedmods.refinedstorage.common.content.ContentNames; @@ -21,6 +25,7 @@ import com.refinedmods.refinedstorage.common.support.resource.ResourceContainerImpl; import com.refinedmods.refinedstorage.common.util.PlatformUtil; +import java.util.Optional; import javax.annotation.Nullable; import com.google.common.util.concurrent.RateLimiter; @@ -31,6 +36,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.codec.StreamEncoder; import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; @@ -44,7 +50,7 @@ import org.slf4j.LoggerFactory; public class StorageMonitorBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity - implements NetworkNodeExtendedMenuProvider { + implements NetworkNodeExtendedMenuProvider, AutocraftingPreviewProvider { private static final Logger LOGGER = LoggerFactory.getLogger(StorageMonitorBlockEntity.class); private static final String TAG_CLIENT_FILTER = "cf"; @@ -57,6 +63,7 @@ public class StorageMonitorBlockEntity extends AbstractBaseNetworkNodeContainerB private long currentAmount; private boolean currentlyActive; + private long lastExtractTime; public StorageMonitorBlockEntity(final BlockPos pos, final BlockState state) { super(BlockEntities.INSTANCE.getStorageMonitor(), pos, state, new SimpleNetworkNode( @@ -109,7 +116,7 @@ private long getAmount(final Network network, final ResourceKey configuredResour .sum(); } - public void extract(final Player player) { + public void extract(final ServerPlayer player) { if (level == null) { return; } @@ -117,14 +124,34 @@ public void extract(final Player player) { if (network == null) { return; } - final ResourceKey configuredResource = getConfiguredResource(); + final PlatformResourceKey configuredResource = getConfiguredResource(); if (configuredResource == null) { return; } - doExtract(level, player, configuredResource, network); + final boolean extracted = doExtract(level, player, configuredResource, network); + if (extracted) { + lastExtractTime = System.currentTimeMillis(); + } + if (!extracted && System.currentTimeMillis() - lastExtractTime > 250) { + tryAutocrafting(player, network, configuredResource); + } } - private void doExtract( + private void tryAutocrafting(final ServerPlayer player, + final Network network, + final PlatformResourceKey configuredResource) { + final boolean autocraftable = network.getComponent(AutocraftingNetworkComponent.class) + .getOutputs() + .contains(configuredResource); + if (autocraftable) { + Platform.INSTANCE.getMenuOpener().openMenu( + player, + new AutocraftingStorageMonitorExtendedMenuProvider(configuredResource, this) + ); + } + } + + private boolean doExtract( final Level level, final Player player, final ResourceKey configuredResource, @@ -138,7 +165,7 @@ private void doExtract( network ); if (!success) { - return; + return false; } sendDisplayUpdate(); level.playSound( @@ -149,6 +176,7 @@ private void doExtract( .2f, ((level.random.nextFloat() - level.random.nextFloat()) * .7f + 1) * 2 ); + return true; } public void insert(final Player player, final InteractionHand hand) { @@ -249,7 +277,7 @@ public void setFuzzyMode(final boolean fuzzyMode) { } @Nullable - public ResourceKey getConfiguredResource() { + public PlatformResourceKey getConfiguredResource() { return filter.getFilterContainer().getResource(0); } @@ -337,4 +365,20 @@ protected boolean doesBlockStateChangeWarrantNetworkNodeUpdate(final BlockState final BlockState newBlockState) { return AbstractDirectionalBlock.didDirectionChange(oldBlockState, newBlockState); } + + @Override + public Optional getPreview(final ResourceKey resource, final long amount) { + return Optional.ofNullable(mainNetworkNode.getNetwork()) + .map(network -> network.getComponent(AutocraftingNetworkComponent.class)) + .flatMap(component -> component.getPreview(resource, amount)); + } + + @Override + public boolean start(final ResourceKey resource, final long amount) { + final Network network = mainNetworkNode.getNetwork(); + if (network == null) { + return false; + } + return network.getComponent(AutocraftingNetworkComponent.class).start(resource, amount); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java index e585d2fcf..1743e4589 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/amount/AbstractAmountScreen.java @@ -109,7 +109,7 @@ private Button addCancelButton(final int x, final int y) { final int width = configuration.isHorizontalActionButtons() ? font.width(CANCEL_TEXT) + ACTION_BUTTON_SPACING : ACTION_BUTTON_WIDTH; - return addRenderableWidget(Button.builder(CANCEL_TEXT, btn -> tryCloseToParent()) + return addRenderableWidget(Button.builder(CANCEL_TEXT, btn -> close()) .pos(leftPos + x, topPos + y) .size(width, ACTION_BUTTON_HEIGHT) .build()); @@ -259,9 +259,7 @@ public boolean keyPressed(final int key, final int scanCode, final int modifiers protected final boolean tryClose(final int key) { if (key == GLFW.GLFW_KEY_ESCAPE) { - if (!tryCloseToParent()) { - onClose(); - } + close(); return true; } return false; @@ -286,7 +284,7 @@ private void tryConfirmAndCloseToParent() { }); } - protected final boolean tryCloseToParent() { + private boolean tryCloseToParent() { if (parent != null) { Minecraft.getInstance().setScreen(parent); return true; @@ -294,6 +292,12 @@ protected final boolean tryCloseToParent() { return false; } + protected final void close() { + if (!tryCloseToParent()) { + onClose(); + } + } + protected final Optional getAndValidateAmount() { if (amountField == null) { return Optional.empty(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java index 3c5544aef..c7e7fb8d3 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingPreviewRequestPacket.java @@ -1,8 +1,7 @@ package com.refinedmods.refinedstorage.common.support.packet.c2s; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.common.support.packet.PacketContext; import com.refinedmods.refinedstorage.common.support.packet.s2c.S2CPackets; import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; @@ -36,8 +35,10 @@ public record AutocraftingPreviewRequestPacket(UUID id, public static void handle(final AutocraftingPreviewRequestPacket packet, final PacketContext ctx) { if (ctx.getPlayer().containerMenu instanceof AutocraftingPreviewProvider provider) { - final AutocraftingPreview preview = provider.getPreview(packet.resource(), packet.amount()); - S2CPackets.sendAutocraftingPreviewResponse((ServerPlayer) ctx.getPlayer(), packet.id, preview); + final ServerPlayer player = (ServerPlayer) ctx.getPlayer(); + provider.getPreview(packet.resource(), packet.amount()).ifPresent( + preview -> S2CPackets.sendAutocraftingPreviewResponse(player, packet.id, preview) + ); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java index 2b2ea00a0..18ba3b302 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage.common.support.packet.c2s; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.common.support.packet.PacketContext; import com.refinedmods.refinedstorage.common.support.packet.s2c.S2CPackets; import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java index bd9c8a1f1..94114242c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocraftingPreviewResponsePacket.java @@ -1,26 +1,46 @@ package com.refinedmods.refinedstorage.common.support.packet.s2c; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewItem; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewType; +import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; +import com.refinedmods.refinedstorage.common.support.resource.ResourceCodecs; import com.refinedmods.refinedstorage.common.util.ClientPlatformUtil; +import java.util.ArrayList; import java.util.UUID; import net.minecraft.core.UUIDUtil; import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.PlatformUtil.enumStreamCodec; public record AutocraftingPreviewResponsePacket(UUID id, AutocraftingPreview preview) implements CustomPacketPayload { public static final Type PACKET_TYPE = new Type<>( createIdentifier("autocrafting_preview_response") ); - + private static final StreamCodec PREVIEW_ITEM_STREAM_CODEC = + StreamCodec.composite( + ResourceCodecs.STREAM_CODEC, item -> (PlatformResourceKey) item.resource(), + ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::available, + ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::missing, + ByteBufCodecs.VAR_LONG, AutocraftingPreviewItem::toCraft, + AutocraftingPreviewItem::new + ); + private static final StreamCodec PREVIEW_STREAM_CODEC = + StreamCodec.composite( + enumStreamCodec(AutocraftingPreviewType.values()), AutocraftingPreview::type, + ByteBufCodecs.collection(ArrayList::new, PREVIEW_ITEM_STREAM_CODEC), AutocraftingPreview::items, + AutocraftingPreview::new + ); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( UUIDUtil.STREAM_CODEC, AutocraftingPreviewResponsePacket::id, - AutocraftingPreview.STREAM_CODEC, AutocraftingPreviewResponsePacket::preview, + PREVIEW_STREAM_CODEC, AutocraftingPreviewResponsePacket::preview, AutocraftingPreviewResponsePacket::new ); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java index 623a0bd79..08b365c36 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java @@ -1,11 +1,11 @@ package com.refinedmods.refinedstorage.common.support.packet.s2c; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.api.storage.StorageInfo; import com.refinedmods.refinedstorage.common.api.support.resource.PlatformResourceKey; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; import com.refinedmods.refinedstorage.common.networking.NetworkTransmitterData; import java.util.Optional; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java index 065af4437..8d3f95629 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage.common.util; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; import java.util.UUID; diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java index 392287596..8bca0a60a 100644 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java @@ -1,10 +1,11 @@ package com.refinedmods.refinedstorage.api.network.autocrafting; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; import com.refinedmods.refinedstorage.api.network.NetworkComponent; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") -public interface AutocraftingNetworkComponent extends NetworkComponent, PatternRepository { +public interface AutocraftingNetworkComponent extends NetworkComponent, PatternRepository, AutocraftingPreviewProvider { } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java index 6d3db761e..0e7fe1329 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java @@ -1,5 +1,8 @@ package com.refinedmods.refinedstorage.api.network.impl.autocrafting; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewItem; +import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewType; import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; @@ -7,6 +10,9 @@ import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import java.util.Set; public class AutocraftingNetworkComponentImpl implements AutocraftingNetworkComponent { @@ -44,4 +50,26 @@ public void remove(final Pattern pattern) { public Set getOutputs() { return patternRepository.getOutputs(); } + + @Override + public Optional getPreview(final ResourceKey resource, final long amount) { + final List items = new ArrayList<>(); + final boolean missing = amount == 404; + for (int i = 0; i < 31; ++i) { + items.add(new AutocraftingPreviewItem( + resource, + (i + 1), + (i % 2 == 0 && missing) ? amount : 0, + i % 2 == 0 ? 0 : amount + )); + } + return Optional.of(new AutocraftingPreview(missing + ? AutocraftingPreviewType.MISSING_RESOURCES + : AutocraftingPreviewType.SUCCESS, items)); + } + + @Override + public boolean start(final ResourceKey resource, final long amount) { + return true; + } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java index 2b4b0a7b8..791020b50 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java @@ -73,4 +73,14 @@ void shouldRemovePatternManually() { // Assert assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().isEmpty(); } + + @Test + void shouldStart() { + sut.start(FakeResources.A, 10); + } + + @Test + void shouldGetPreview() { + sut.getPreview(FakeResources.A, 10); + } } From 2229ae9226ad79820beaa35140d9dd473906f90f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 5 Oct 2024 00:45:43 +0200 Subject: [PATCH 54/83] chore: rename crafter to autocrafter To make things more clear. --- .idea/dictionaries/refinedstorage.xml | 5 +- CHANGELOG.md | 3 +- .../refinedstorage/common/api/grid/Grid.java | 2 +- .../view/AbstractPlatformGridResource.java | 12 ++-- .../api/support/resource/ResourceType.java | 2 +- .../blockstates/autocrafter.json | 56 ++++++++++++++++++ .../blockstates/black_autocrafter.json | 56 ++++++++++++++++++ ...lue_crafter.json => blue_autocrafter.json} | 24 ++++---- .../blockstates/brown_autocrafter.json | 56 ++++++++++++++++++ ...own_crafter.json => cyan_autocrafter.json} | 24 ++++---- .../blockstates/cyan_crafter.json | 56 ------------------ .../{crafter.json => gray_autocrafter.json} | 24 ++++---- .../blockstates/gray_crafter.json | 56 ------------------ .../blockstates/green_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/green_crafter.json | 56 ------------------ .../blockstates/light_gray_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/light_gray_crafter.json | 56 ------------------ .../blockstates/lime_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/lime_crafter.json | 56 ------------------ .../blockstates/magenta_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/magenta_crafter.json | 56 ------------------ .../blockstates/orange_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/orange_crafter.json | 56 ------------------ .../blockstates/pink_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/pink_crafter.json | 56 ------------------ .../blockstates/purple_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/purple_crafter.json | 56 ------------------ ...lack_crafter.json => red_autocrafter.json} | 24 ++++---- .../blockstates/red_crafter.json | 56 ------------------ .../blockstates/white_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/white_crafter.json | 56 ------------------ .../blockstates/yellow_autocrafter.json | 56 ++++++++++++++++++ .../blockstates/yellow_crafter.json | 56 ------------------ .../models/block/autocrafter/black.json | 18 ++++++ .../models/block/autocrafter/blue.json | 18 ++++++ .../models/block/autocrafter/brown.json | 18 ++++++ .../models/block/autocrafter/cyan.json | 18 ++++++ .../models/block/autocrafter/gray.json | 18 ++++++ .../models/block/autocrafter/green.json | 18 ++++++ .../models/block/autocrafter/inactive.json | 18 ++++++ .../models/block/autocrafter/light_blue.json | 18 ++++++ .../models/block/autocrafter/light_gray.json | 18 ++++++ .../models/block/autocrafter/lime.json | 18 ++++++ .../models/block/autocrafter/magenta.json | 18 ++++++ .../models/block/autocrafter/orange.json | 18 ++++++ .../models/block/autocrafter/pink.json | 18 ++++++ .../models/block/autocrafter/purple.json | 18 ++++++ .../models/block/autocrafter/red.json | 18 ++++++ .../models/block/autocrafter/white.json | 18 ++++++ .../models/block/autocrafter/yellow.json | 18 ++++++ .../models/block/crafter/black.json | 18 ------ .../models/block/crafter/blue.json | 18 ------ .../models/block/crafter/brown.json | 18 ------ .../models/block/crafter/cyan.json | 18 ------ .../models/block/crafter/gray.json | 18 ------ .../models/block/crafter/green.json | 18 ------ .../models/block/crafter/inactive.json | 18 ------ .../models/block/crafter/light_blue.json | 18 ------ .../models/block/crafter/light_gray.json | 18 ------ .../models/block/crafter/lime.json | 18 ------ .../models/block/crafter/magenta.json | 18 ------ .../models/block/crafter/orange.json | 18 ------ .../models/block/crafter/pink.json | 18 ------ .../models/block/crafter/purple.json | 18 ------ .../models/block/crafter/red.json | 18 ------ .../models/block/crafter/white.json | 18 ------ .../models/block/crafter/yellow.json | 18 ------ .../models/item/autocrafter.json | 3 + .../models/item/black_autocrafter.json | 3 + .../models/item/black_crafter.json | 3 - .../models/item/blue_autocrafter.json | 3 + .../models/item/blue_crafter.json | 3 - .../models/item/brown_autocrafter.json | 3 + .../models/item/brown_crafter.json | 3 - .../refinedstorage/models/item/crafter.json | 3 - .../models/item/cyan_autocrafter.json | 3 + .../models/item/cyan_crafter.json | 3 - .../models/item/gray_autocrafter.json | 3 + .../models/item/gray_crafter.json | 3 - .../models/item/green_autocrafter.json | 3 + .../models/item/green_crafter.json | 3 - .../models/item/light_gray_autocrafter.json | 3 + .../models/item/light_gray_crafter.json | 3 - .../models/item/lime_autocrafter.json | 3 + .../models/item/lime_crafter.json | 3 - .../models/item/magenta_autocrafter.json | 3 + .../models/item/magenta_crafter.json | 3 - .../models/item/orange_autocrafter.json | 3 + .../models/item/orange_crafter.json | 3 - .../models/item/pink_autocrafter.json | 3 + .../models/item/pink_crafter.json | 3 - .../models/item/purple_autocrafter.json | 3 + .../models/item/purple_crafter.json | 3 - .../models/item/red_autocrafter.json | 3 + .../models/item/red_crafter.json | 3 - .../models/item/white_autocrafter.json | 3 + .../models/item/white_crafter.json | 3 - .../models/item/yellow_autocrafter.json | 3 + .../models/item/yellow_crafter.json | 3 - .../misc/coloring/black_autocrafter.json | 32 ++++++++++ ...ack_crafter.json => blue_autocrafter.json} | 10 ++-- .../misc/coloring/brown_autocrafter.json | 32 ++++++++++ ...lue_crafter.json => cyan_autocrafter.json} | 10 ++-- ...own_crafter.json => gray_autocrafter.json} | 10 ++-- .../recipes/misc/coloring/gray_crafter.json | 32 ---------- .../misc/coloring/green_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/green_crafter.json | 32 ---------- .../misc/coloring/light_blue_autocrafter.json | 32 ++++++++++ .../misc/coloring/light_blue_crafter.json | 32 ---------- .../misc/coloring/light_gray_autocrafter.json | 32 ++++++++++ .../misc/coloring/light_gray_crafter.json | 32 ---------- .../misc/coloring/lime_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/lime_crafter.json | 32 ---------- .../misc/coloring/magenta_autocrafter.json | 32 ++++++++++ .../misc/coloring/magenta_crafter.json | 32 ---------- .../misc/coloring/orange_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/orange_crafter.json | 32 ---------- .../misc/coloring/pink_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/pink_crafter.json | 32 ---------- .../misc/coloring/purple_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/purple_crafter.json | 32 ---------- ...cyan_crafter.json => red_autocrafter.json} | 10 ++-- .../recipes/misc/coloring/red_crafter.json | 32 ---------- .../misc/coloring/white_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/white_crafter.json | 32 ---------- .../misc/coloring/yellow_autocrafter.json | 32 ++++++++++ .../recipes/misc/coloring/yellow_crafter.json | 32 ---------- .../blocks/{crafter.json => autocrafter.json} | 4 +- .../loot_table/blocks/black_autocrafter.json | 30 ++++++++++ ...lue_crafter.json => blue_autocrafter.json} | 4 +- .../loot_table/blocks/brown_autocrafter.json | 30 ++++++++++ ...own_crafter.json => cyan_autocrafter.json} | 4 +- .../loot_table/blocks/cyan_crafter.json | 30 ---------- .../loot_table/blocks/gray_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/gray_crafter.json | 30 ---------- .../loot_table/blocks/green_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/green_crafter.json | 30 ---------- .../blocks/light_gray_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/light_gray_crafter.json | 30 ---------- .../loot_table/blocks/lime_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/lime_crafter.json | 30 ---------- .../blocks/magenta_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/magenta_crafter.json | 30 ---------- .../loot_table/blocks/orange_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/orange_crafter.json | 30 ---------- .../loot_table/blocks/pink_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/pink_crafter.json | 30 ---------- .../loot_table/blocks/purple_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/purple_crafter.json | 30 ---------- ...lack_crafter.json => red_autocrafter.json} | 4 +- .../loot_table/blocks/red_crafter.json | 30 ---------- .../loot_table/blocks/white_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/white_crafter.json | 30 ---------- .../loot_table/blocks/yellow_autocrafter.json | 30 ++++++++++ .../loot_table/blocks/yellow_crafter.json | 30 ---------- ...ck_crafter.json => black_autocrafter.json} | 4 +- ...lue_crafter.json => blue_autocrafter.json} | 4 +- ...wn_crafter.json => brown_autocrafter.json} | 4 +- ...yan_crafter.json => cyan_autocrafter.json} | 4 +- ...ray_crafter.json => gray_autocrafter.json} | 4 +- ...en_crafter.json => green_autocrafter.json} | 4 +- ...after.json => light_blue_autocrafter.json} | 4 +- ...after.json => light_gray_autocrafter.json} | 4 +- ...ime_crafter.json => lime_autocrafter.json} | 4 +- ..._crafter.json => magenta_autocrafter.json} | 4 +- ...e_crafter.json => orange_autocrafter.json} | 4 +- ...ink_crafter.json => pink_autocrafter.json} | 4 +- ...e_crafter.json => purple_autocrafter.json} | 4 +- ...{red_crafter.json => red_autocrafter.json} | 4 +- ...te_crafter.json => white_autocrafter.json} | 4 +- ...w_crafter.json => yellow_autocrafter.json} | 4 +- .../tags/item/autocrafters.json | 20 +++++++ .../refinedstorage/tags/item/crafters.json | 20 ------- .../common/AbstractClientModInitializer.java | 4 +- .../common/AbstractModInitializer.java | 24 ++++---- .../refinedstorage/common/Config.java | 2 +- ...rafterBlock.java => AutocrafterBlock.java} | 16 ++--- ...ntity.java => AutocrafterBlockEntity.java} | 46 +++++++------- ...ava => AutocrafterConnectionStrategy.java} | 4 +- ...enu.java => AutocrafterContainerMenu.java} | 52 ++++++++-------- .../common/autocrafting/AutocrafterData.java | 13 ++++ ...pes.java => AutocrafterPropertyTypes.java} | 4 +- ...fterScreen.java => AutocrafterScreen.java} | 32 +++++----- .../common/autocrafting/CrafterData.java | 13 ---- .../LockModeSideButtonWidget.java | 14 ++--- .../common/autocrafting/PatternInventory.java | 4 +- .../common/autocrafting/PatternRendering.java | 2 +- .../common/autocrafting/PatternSlot.java | 2 +- .../ProcessingPatternGridRenderer.java | 2 +- .../common/content/BlockEntities.java | 12 ++-- .../refinedstorage/common/content/Blocks.java | 14 ++--- .../common/content/ContentIds.java | 2 +- .../common/content/ContentNames.java | 2 +- .../common/content/CreativeModeTabItems.java | 2 +- .../common/content/DefaultEnergyUsage.java | 2 +- .../refinedstorage/common/content/Items.java | 10 ++-- .../refinedstorage/common/content/Menus.java | 12 ++-- .../refinedstorage/common/content/Tags.java | 2 +- .../common/grid/AbstractGridBlockEntity.java | 2 +- .../grid/AbstractGridContainerMenu.java | 7 ++- .../refinedstorage/common/grid/GridData.java | 6 +- .../common/grid/GridViewType.java | 10 ++-- .../common/grid/WirelessGrid.java | 2 +- .../grid/screen/AbstractGridScreen.java | 10 ++-- .../grid/screen/ViewTypeSideButtonWidget.java | 14 ++--- .../AbstractFluidGridResourceFactory.java | 4 +- .../view/AbstractItemGridResourceFactory.java | 4 +- .../view/CompositeGridResourceFactory.java | 4 +- .../common/grid/view/FluidGridResource.java | 4 +- .../common/grid/view/ItemGridResource.java | 4 +- .../storage/portablegrid/PortableGrid.java | 2 +- .../c2s/AutocrafterNameChangePacket.java | 33 +++++++++++ .../common/support/packet/c2s/C2SPackets.java | 4 +- .../packet/c2s/CrafterNameChangePacket.java | 33 ----------- .../s2c/AutocrafterNameUpdatePacket.java | 34 +++++++++++ .../packet/s2c/CrafterNameUpdatePacket.java | 34 ----------- .../common/support/packet/s2c/S2CPackets.java | 4 +- .../support/resource/FluidResourceType.java | 4 +- .../support/resource/ItemResourceType.java | 4 +- .../common/upgrade/UpgradeDestinations.java | 2 +- .../assets/refinedstorage/lang/en_us.json | 44 +++++++------- .../cutouts/side/black.png | Bin .../cutouts/side/blue.png | Bin .../cutouts/side/brown.png | Bin .../cutouts/side/cyan.png | Bin .../cutouts/side/gray.png | Bin .../cutouts/side/green.png | Bin .../cutouts/side/inactive.png | Bin .../cutouts/side/light_blue.png | Bin .../cutouts/side/light_gray.png | Bin .../cutouts/side/lime.png | Bin .../cutouts/side/magenta.png | Bin .../cutouts/side/orange.png | Bin .../cutouts/side/pink.png | Bin .../cutouts/side/purple.png | Bin .../cutouts/side/red.png | Bin .../cutouts/side/white.png | Bin .../cutouts/side/yellow.png | Bin .../cutouts/top/black.png | Bin .../cutouts/top/blue.png | Bin .../cutouts/top/brown.png | Bin .../cutouts/top/cyan.png | Bin .../cutouts/top/gray.png | Bin .../cutouts/top/green.png | Bin .../cutouts/top/inactive.png | Bin .../cutouts/top/light_blue.png | Bin .../cutouts/top/light_gray.png | Bin .../cutouts/top/lime.png | Bin .../cutouts/top/magenta.png | Bin .../cutouts/top/orange.png | Bin .../cutouts/top/pink.png | Bin .../cutouts/top/purple.png | Bin .../cutouts/top/red.png | Bin .../cutouts/top/white.png | Bin .../cutouts/top/yellow.png | Bin .../block/{crafter => autocrafter}/side.png | Bin .../block/{crafter => autocrafter}/top.png | Bin ...{crafter_name.png => autocrafter_name.png} | Bin .../lock_until_all_outputs_are_received.png | Bin .../lock_until_connected_machine_is_empty.png | Bin .../lock_until_high_redstone_signal.png | Bin .../lock_until_low_redstone_signal.png | Bin .../lock_until_redstone_pulse_is_received.png | Bin .../never.png | Bin .../advancement/autocrafting.json | 6 +- .../recipe/{crafter.json => autocrafter.json} | 2 +- .../fabric/ClientModInitializerImpl.java | 22 +++---- .../refinedstorage/fabric/ConfigImpl.java | 8 +-- .../fabric/ModInitializerImpl.java | 18 +++--- .../api/grid/view/GridResource.java | 2 +- .../api/grid/view/GridResourceFactory.java | 6 +- .../api/grid/view/GridView.java | 4 +- .../api/grid/view/GridViewBuilder.java | 4 +- .../api/grid/view/GridViewBuilderImpl.java | 8 +-- .../api/grid/view/GridViewImpl.java | 28 ++++----- .../grid/query/GridQueryParserImplTest.java | 2 +- .../api/grid/view/GridResourceImpl.java | 14 ++--- .../api/grid/view/GridViewImplTest.java | 38 ++++++------ .../refinedstorage/neoforge/ConfigImpl.java | 8 +-- .../neoforge/ModInitializer.java | 18 +++--- .../datagen/BlockModelProviderImpl.java | 22 +++---- .../datagen/BlockStateProviderImpl.java | 14 ++--- .../datagen/ItemModelProviderImpl.java | 8 +-- .../datagen/loot/BlockDropProvider.java | 4 +- .../recipe/RecoloringRecipeProvider.java | 6 +- .../datagen/tag/ItemTagsProviderImpl.java | 6 +- 286 files changed, 2317 insertions(+), 2312 deletions(-) create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/autocrafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_autocrafter.json rename refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/{blue_crafter.json => blue_autocrafter.json} (52%) create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_autocrafter.json rename refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/{brown_crafter.json => cyan_autocrafter.json} (52%) delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json rename refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/{crafter.json => gray_autocrafter.json} (52%) delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json rename refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/{black_crafter.json => red_autocrafter.json} (53%) delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/black.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/blue.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/brown.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/cyan.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/gray.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/green.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/inactive.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_blue.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_gray.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/lime.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/magenta.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/orange.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/pink.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/purple.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/red.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/white.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/yellow.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/autocrafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_autocrafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/{black_crafter.json => blue_autocrafter.json} (65%) create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_autocrafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/{blue_crafter.json => cyan_autocrafter.json} (65%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/{brown_crafter.json => gray_autocrafter.json} (65%) delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/{cyan_crafter.json => red_autocrafter.json} (65%) delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/{crafter.json => autocrafter.json} (81%) create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_autocrafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/{blue_crafter.json => blue_autocrafter.json} (80%) create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_autocrafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/{brown_crafter.json => cyan_autocrafter.json} (80%) delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/{black_crafter.json => red_autocrafter.json} (80%) delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_autocrafter.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{black_crafter.json => black_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{blue_crafter.json => blue_autocrafter.json} (67%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{brown_crafter.json => brown_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{cyan_crafter.json => cyan_autocrafter.json} (67%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{gray_crafter.json => gray_autocrafter.json} (67%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{green_crafter.json => green_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{light_blue_crafter.json => light_blue_autocrafter.json} (69%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{light_gray_crafter.json => light_gray_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{lime_crafter.json => lime_autocrafter.json} (67%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{magenta_crafter.json => magenta_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{orange_crafter.json => orange_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{pink_crafter.json => pink_autocrafter.json} (67%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{purple_crafter.json => purple_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{red_crafter.json => red_autocrafter.json} (67%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{white_crafter.json => white_autocrafter.json} (66%) rename refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/{yellow_crafter.json => yellow_autocrafter.json} (66%) create mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/autocrafters.json delete mode 100644 refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/{CrafterBlock.java => AutocrafterBlock.java} (82%) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/{CrafterBlockEntity.java => AutocrafterBlockEntity.java} (85%) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/{CrafterConnectionStrategy.java => AutocrafterConnectionStrategy.java} (83%) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/{CrafterContainerMenu.java => AutocrafterContainerMenu.java} (73%) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterData.java rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/{CrafterPropertyTypes.java => AutocrafterPropertyTypes.java} (89%) rename refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/{CrafterScreen.java => AutocrafterScreen.java} (89%) delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocrafterNameChangePacket.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/CrafterNameChangePacket.java create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocrafterNameUpdatePacket.java delete mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/black.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/blue.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/brown.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/cyan.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/gray.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/green.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/inactive.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/light_blue.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/light_gray.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/lime.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/magenta.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/orange.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/pink.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/purple.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/red.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/white.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/side/yellow.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/black.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/blue.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/brown.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/cyan.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/gray.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/green.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/inactive.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/light_blue.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/light_gray.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/lime.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/magenta.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/orange.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/pink.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/purple.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/red.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/white.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/cutouts/top/yellow.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/side.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/{crafter => autocrafter}/top.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/{crafter_name.png => autocrafter_name.png} (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/{crafter_lock_mode => autocrafter_lock_mode}/lock_until_all_outputs_are_received.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/{crafter_lock_mode => autocrafter_lock_mode}/lock_until_connected_machine_is_empty.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/{crafter_lock_mode => autocrafter_lock_mode}/lock_until_high_redstone_signal.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/{crafter_lock_mode => autocrafter_lock_mode}/lock_until_low_redstone_signal.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/{crafter_lock_mode => autocrafter_lock_mode}/lock_until_redstone_pulse_is_received.png (100%) rename refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/{crafter_lock_mode => autocrafter_lock_mode}/never.png (100%) rename refinedstorage-common/src/main/resources/data/refinedstorage/recipe/{crafter.json => autocrafter.json} (92%) diff --git a/.idea/dictionaries/refinedstorage.xml b/.idea/dictionaries/refinedstorage.xml index 5731caf61..5d8aa73fa 100644 --- a/.idea/dictionaries/refinedstorage.xml +++ b/.idea/dictionaries/refinedstorage.xml @@ -3,12 +3,11 @@ allowlist autocraftable + autocrafter + autocrafters autocrafting autoselected blocklist - craftable - crafter - crafters cullface emissive firstperson diff --git a/CHANGELOG.md b/CHANGELOG.md index afca303c7..0ac637d70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- Crafter +- Autocrafter ### Changed @@ -32,6 +32,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - The numbers on the crafting preview screen are now compacted with units. - When requesting autocrafting multiple resources at once, which can happen via a recipe mod, all the crafting requests are now listed on the side of the GUI. - You can now request autocrafting from the Storage Monitor if the resource count reaches zero. +- The Crafter has been renamed to "Autocrafter". ### Fixed diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java index e02e7412e..6c999dd42 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/Grid.java @@ -27,7 +27,7 @@ public interface Grid extends AutocraftingPreviewProvider { List getResources(Class actorType); - Set getCraftableResources(); + Set getAutocraftableResources(); GridOperations createOperations(ResourceType resourceType, ServerPlayer player); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java index a1d5a8008..07a05b6b0 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/grid/view/AbstractPlatformGridResource.java @@ -18,16 +18,16 @@ public abstract class AbstractPlatformGridResource> attributes; - private final boolean craftable; + private final boolean autocraftable; protected AbstractPlatformGridResource(final T resource, final String name, final Map> attributes, - final boolean craftable) { + final boolean autocraftable) { this.resource = resource; this.name = name; this.attributes = attributes; - this.craftable = craftable; + this.autocraftable = autocraftable; } @Override @@ -51,8 +51,8 @@ public Set getAttribute(final GridResourceAttributeKey key) { } @Override - public boolean isCraftable() { - return craftable; + public boolean isAutocraftable() { + return autocraftable; } @Nullable @@ -67,7 +67,7 @@ public String toString() { + "resource=" + resource + ", name='" + name + '\'' + ", attributes=" + attributes - + ", craftable=" + craftable + + ", autocraftable=" + autocraftable + '}'; } } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java index d31f1e176..a622ae8f4 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/support/resource/ResourceType.java @@ -29,7 +29,7 @@ public interface ResourceType { double getDisplayAmount(long amount); - Optional toGridResource(ResourceKey resource, boolean craftable); + Optional toGridResource(ResourceKey resource, boolean autocraftable); long getInterfaceExportLimit(); diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/autocrafter.json new file mode 100644 index 000000000..1d0dae569 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/light_blue", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/light_blue", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/light_blue", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/light_blue", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/light_blue" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/light_blue", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_autocrafter.json new file mode 100644 index 000000000..6d5161a9e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/black", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/black", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/black", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/black", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/black" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/black", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_autocrafter.json similarity index 52% rename from refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json rename to refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_autocrafter.json index 67a82b4c7..651846801 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_crafter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/blue_autocrafter.json @@ -1,54 +1,54 @@ { "variants": { "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 180 }, "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 90 }, "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90 }, "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 180 }, "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" + "model": "refinedstorage:block/autocrafter/inactive" }, "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 270 }, "active=true,direction=down": { - "model": "refinedstorage:block/crafter/blue", + "model": "refinedstorage:block/autocrafter/blue", "x": 180 }, "active=true,direction=east": { - "model": "refinedstorage:block/crafter/blue", + "model": "refinedstorage:block/autocrafter/blue", "x": 90, "y": 90 }, "active=true,direction=north": { - "model": "refinedstorage:block/crafter/blue", + "model": "refinedstorage:block/autocrafter/blue", "x": 90 }, "active=true,direction=south": { - "model": "refinedstorage:block/crafter/blue", + "model": "refinedstorage:block/autocrafter/blue", "x": 90, "y": 180 }, "active=true,direction=up": { - "model": "refinedstorage:block/crafter/blue" + "model": "refinedstorage:block/autocrafter/blue" }, "active=true,direction=west": { - "model": "refinedstorage:block/crafter/blue", + "model": "refinedstorage:block/autocrafter/blue", "x": 90, "y": 270 } diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_autocrafter.json new file mode 100644 index 000000000..13c577b7d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/brown", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/brown", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/brown", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/brown", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/brown" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/brown", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_autocrafter.json similarity index 52% rename from refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json rename to refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_autocrafter.json index f7e980273..368f9eddf 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/brown_crafter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_autocrafter.json @@ -1,54 +1,54 @@ { "variants": { "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 180 }, "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 90 }, "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90 }, "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 180 }, "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" + "model": "refinedstorage:block/autocrafter/inactive" }, "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 270 }, "active=true,direction=down": { - "model": "refinedstorage:block/crafter/brown", + "model": "refinedstorage:block/autocrafter/cyan", "x": 180 }, "active=true,direction=east": { - "model": "refinedstorage:block/crafter/brown", + "model": "refinedstorage:block/autocrafter/cyan", "x": 90, "y": 90 }, "active=true,direction=north": { - "model": "refinedstorage:block/crafter/brown", + "model": "refinedstorage:block/autocrafter/cyan", "x": 90 }, "active=true,direction=south": { - "model": "refinedstorage:block/crafter/brown", + "model": "refinedstorage:block/autocrafter/cyan", "x": 90, "y": 180 }, "active=true,direction=up": { - "model": "refinedstorage:block/crafter/brown" + "model": "refinedstorage:block/autocrafter/cyan" }, "active=true,direction=west": { - "model": "refinedstorage:block/crafter/brown", + "model": "refinedstorage:block/autocrafter/cyan", "x": 90, "y": 270 } diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json deleted file mode 100644 index ec6336bdc..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/cyan_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/cyan", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/cyan", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/cyan", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/cyan", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/cyan" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/cyan", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_autocrafter.json similarity index 52% rename from refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json rename to refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_autocrafter.json index ebb944768..771e3641a 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/crafter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_autocrafter.json @@ -1,54 +1,54 @@ { "variants": { "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 180 }, "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 90 }, "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90 }, "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 180 }, "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" + "model": "refinedstorage:block/autocrafter/inactive" }, "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 270 }, "active=true,direction=down": { - "model": "refinedstorage:block/crafter/light_blue", + "model": "refinedstorage:block/autocrafter/gray", "x": 180 }, "active=true,direction=east": { - "model": "refinedstorage:block/crafter/light_blue", + "model": "refinedstorage:block/autocrafter/gray", "x": 90, "y": 90 }, "active=true,direction=north": { - "model": "refinedstorage:block/crafter/light_blue", + "model": "refinedstorage:block/autocrafter/gray", "x": 90 }, "active=true,direction=south": { - "model": "refinedstorage:block/crafter/light_blue", + "model": "refinedstorage:block/autocrafter/gray", "x": 90, "y": 180 }, "active=true,direction=up": { - "model": "refinedstorage:block/crafter/light_blue" + "model": "refinedstorage:block/autocrafter/gray" }, "active=true,direction=west": { - "model": "refinedstorage:block/crafter/light_blue", + "model": "refinedstorage:block/autocrafter/gray", "x": 90, "y": 270 } diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json deleted file mode 100644 index 0d17db938..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/gray_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/gray", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/gray", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/gray", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/gray", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/gray" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/gray", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_autocrafter.json new file mode 100644 index 000000000..3ac5c3abc --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/green", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/green", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/green", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/green", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/green" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/green", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json deleted file mode 100644 index 843091a40..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/green_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/green", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/green", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/green", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/green", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/green" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/green", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_autocrafter.json new file mode 100644 index 000000000..69a2f69e2 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/light_gray", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/light_gray", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/light_gray", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/light_gray", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/light_gray" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/light_gray", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json deleted file mode 100644 index 0adc18f77..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/light_gray_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/light_gray", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/light_gray", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/light_gray", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/light_gray", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/light_gray" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/light_gray", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_autocrafter.json new file mode 100644 index 000000000..01b9c57a1 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/lime", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/lime", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/lime", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/lime", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/lime" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/lime", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json deleted file mode 100644 index bb1a371ad..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/lime_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/lime", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/lime", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/lime", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/lime", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/lime" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/lime", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_autocrafter.json new file mode 100644 index 000000000..0bce32b65 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/magenta", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/magenta", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/magenta", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/magenta", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/magenta" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/magenta", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json deleted file mode 100644 index a560d8148..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/magenta_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/magenta", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/magenta", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/magenta", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/magenta", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/magenta" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/magenta", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_autocrafter.json new file mode 100644 index 000000000..11d7247f4 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/orange", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/orange", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/orange", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/orange", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/orange" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/orange", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json deleted file mode 100644 index d03485bba..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/orange_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/orange", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/orange", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/orange", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/orange", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/orange" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/orange", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_autocrafter.json new file mode 100644 index 000000000..7a8de7565 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/pink", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/pink", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/pink", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/pink", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/pink" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/pink", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json deleted file mode 100644 index 735409627..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/pink_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/pink", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/pink", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/pink", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/pink", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/pink" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/pink", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_autocrafter.json new file mode 100644 index 000000000..f1e432fc1 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/purple", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/purple", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/purple", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/purple", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/purple" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/purple", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json deleted file mode 100644 index d2c25823b..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/purple_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/purple", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/purple", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/purple", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/purple", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/purple" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/purple", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_autocrafter.json similarity index 53% rename from refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json rename to refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_autocrafter.json index 3efddbdce..02897d1c5 100644 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/black_crafter.json +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_autocrafter.json @@ -1,54 +1,54 @@ { "variants": { "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 180 }, "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 90 }, "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90 }, "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 180 }, "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" + "model": "refinedstorage:block/autocrafter/inactive" }, "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", + "model": "refinedstorage:block/autocrafter/inactive", "x": 90, "y": 270 }, "active=true,direction=down": { - "model": "refinedstorage:block/crafter/black", + "model": "refinedstorage:block/autocrafter/red", "x": 180 }, "active=true,direction=east": { - "model": "refinedstorage:block/crafter/black", + "model": "refinedstorage:block/autocrafter/red", "x": 90, "y": 90 }, "active=true,direction=north": { - "model": "refinedstorage:block/crafter/black", + "model": "refinedstorage:block/autocrafter/red", "x": 90 }, "active=true,direction=south": { - "model": "refinedstorage:block/crafter/black", + "model": "refinedstorage:block/autocrafter/red", "x": 90, "y": 180 }, "active=true,direction=up": { - "model": "refinedstorage:block/crafter/black" + "model": "refinedstorage:block/autocrafter/red" }, "active=true,direction=west": { - "model": "refinedstorage:block/crafter/black", + "model": "refinedstorage:block/autocrafter/red", "x": 90, "y": 270 } diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json deleted file mode 100644 index 5cddc0110..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/red_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/red", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/red", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/red", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/red", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/red" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/red", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_autocrafter.json new file mode 100644 index 000000000..6c8711fb2 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/white", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/white", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/white", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/white", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/white" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/white", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json deleted file mode 100644 index 259d76b6e..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/white_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/white", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/white", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/white", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/white", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/white" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/white", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_autocrafter.json new file mode 100644 index 000000000..8153b7001 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_autocrafter.json @@ -0,0 +1,56 @@ +{ + "variants": { + "active=false,direction=down": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 180 + }, + "active=false,direction=east": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 90 + }, + "active=false,direction=north": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90 + }, + "active=false,direction=south": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 180 + }, + "active=false,direction=up": { + "model": "refinedstorage:block/autocrafter/inactive" + }, + "active=false,direction=west": { + "model": "refinedstorage:block/autocrafter/inactive", + "x": 90, + "y": 270 + }, + "active=true,direction=down": { + "model": "refinedstorage:block/autocrafter/yellow", + "x": 180 + }, + "active=true,direction=east": { + "model": "refinedstorage:block/autocrafter/yellow", + "x": 90, + "y": 90 + }, + "active=true,direction=north": { + "model": "refinedstorage:block/autocrafter/yellow", + "x": 90 + }, + "active=true,direction=south": { + "model": "refinedstorage:block/autocrafter/yellow", + "x": 90, + "y": 180 + }, + "active=true,direction=up": { + "model": "refinedstorage:block/autocrafter/yellow" + }, + "active=true,direction=west": { + "model": "refinedstorage:block/autocrafter/yellow", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json deleted file mode 100644 index bdbdb3e3c..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/blockstates/yellow_crafter.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "variants": { - "active=false,direction=down": { - "model": "refinedstorage:block/crafter/inactive", - "x": 180 - }, - "active=false,direction=east": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 90 - }, - "active=false,direction=north": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90 - }, - "active=false,direction=south": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 180 - }, - "active=false,direction=up": { - "model": "refinedstorage:block/crafter/inactive" - }, - "active=false,direction=west": { - "model": "refinedstorage:block/crafter/inactive", - "x": 90, - "y": 270 - }, - "active=true,direction=down": { - "model": "refinedstorage:block/crafter/yellow", - "x": 180 - }, - "active=true,direction=east": { - "model": "refinedstorage:block/crafter/yellow", - "x": 90, - "y": 90 - }, - "active=true,direction=north": { - "model": "refinedstorage:block/crafter/yellow", - "x": 90 - }, - "active=true,direction=south": { - "model": "refinedstorage:block/crafter/yellow", - "x": 90, - "y": 180 - }, - "active=true,direction=up": { - "model": "refinedstorage:block/crafter/yellow" - }, - "active=true,direction=west": { - "model": "refinedstorage:block/crafter/yellow", - "x": 90, - "y": 270 - } - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/black.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/black.json new file mode 100644 index 000000000..31dc22334 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/black.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/black", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/black", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/black", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/black", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/black", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/blue.json new file mode 100644 index 000000000..8b871805f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/blue.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/blue", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/blue", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/blue", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/blue", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/blue", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/brown.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/brown.json new file mode 100644 index 000000000..6c90bac5c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/brown.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/brown", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/brown", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/brown", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/brown", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/brown", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/cyan.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/cyan.json new file mode 100644 index 000000000..71ae49092 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/cyan.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/cyan", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/cyan", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/cyan", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/cyan", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/cyan", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/gray.json new file mode 100644 index 000000000..286ad7726 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/gray.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/gray", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/gray", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/gray", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/gray", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/gray", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/green.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/green.json new file mode 100644 index 000000000..931e5c24c --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/green.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/green", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/green", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/green", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/green", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/green", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/inactive.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/inactive.json new file mode 100644 index 000000000..a7e6b97d3 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/inactive.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/inactive", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/inactive", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/inactive", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/inactive", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/inactive", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_blue.json new file mode 100644 index 000000000..77f583f74 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_blue.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/light_blue", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/light_blue", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/light_blue", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/light_blue", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/light_blue", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_gray.json new file mode 100644 index 000000000..4a3930c0a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/light_gray.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/light_gray", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/light_gray", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/light_gray", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/light_gray", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/light_gray", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/lime.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/lime.json new file mode 100644 index 000000000..74f446585 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/lime.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/lime", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/lime", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/lime", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/lime", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/lime", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/magenta.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/magenta.json new file mode 100644 index 000000000..95fac1354 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/magenta.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/magenta", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/magenta", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/magenta", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/magenta", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/magenta", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/orange.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/orange.json new file mode 100644 index 000000000..f86758f23 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/orange.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/orange", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/orange", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/orange", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/orange", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/orange", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/pink.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/pink.json new file mode 100644 index 000000000..951d0e6c2 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/pink.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/pink", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/pink", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/pink", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/pink", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/pink", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/purple.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/purple.json new file mode 100644 index 000000000..c3d7ae5f6 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/purple.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/purple", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/purple", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/purple", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/purple", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/purple", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/red.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/red.json new file mode 100644 index 000000000..378e69693 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/red.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/red", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/red", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/red", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/red", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/red", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/white.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/white.json new file mode 100644 index 000000000..757b3cac6 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/white.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/white", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/white", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/white", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/white", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/white", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/yellow.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/yellow.json new file mode 100644 index 000000000..0b1fadea8 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/autocrafter/yellow.json @@ -0,0 +1,18 @@ +{ + "parent": "refinedstorage:block/emissive_cutout", + "textures": { + "cutout_down": "refinedstorage:block/bottom", + "cutout_east": "refinedstorage:block/autocrafter/cutouts/side/yellow", + "cutout_north": "refinedstorage:block/autocrafter/cutouts/side/yellow", + "cutout_south": "refinedstorage:block/autocrafter/cutouts/side/yellow", + "cutout_up": "refinedstorage:block/autocrafter/cutouts/top/yellow", + "cutout_west": "refinedstorage:block/autocrafter/cutouts/side/yellow", + "down": "refinedstorage:block/bottom", + "east": "refinedstorage:block/autocrafter/side", + "north": "refinedstorage:block/autocrafter/side", + "particle": "refinedstorage:block/autocrafter/side", + "south": "refinedstorage:block/autocrafter/side", + "up": "refinedstorage:block/autocrafter/top", + "west": "refinedstorage:block/autocrafter/side" + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json deleted file mode 100644 index 80593f95a..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/black.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/black", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/black", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/black", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/black", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/black", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json deleted file mode 100644 index e8f631301..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/blue.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/blue", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/blue", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/blue", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/blue", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/blue", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json deleted file mode 100644 index 254921b3b..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/brown.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/brown", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/brown", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/brown", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/brown", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/brown", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json deleted file mode 100644 index 7dcf4b2bc..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/cyan.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/cyan", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/cyan", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/cyan", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/cyan", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/cyan", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json deleted file mode 100644 index fbca35d3c..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/gray.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/gray", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/gray", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/gray", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/gray", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/gray", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json deleted file mode 100644 index b061aad2c..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/green.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/green", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/green", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/green", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/green", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/green", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json deleted file mode 100644 index d102b64cf..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/inactive.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/inactive", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/inactive", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/inactive", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/inactive", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/inactive", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json deleted file mode 100644 index 0e835aee2..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_blue.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/light_blue", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/light_blue", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/light_blue", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/light_blue", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/light_blue", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json deleted file mode 100644 index 4586aad1f..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/light_gray.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/light_gray", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/light_gray", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/light_gray", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/light_gray", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/light_gray", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json deleted file mode 100644 index a97de199a..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/lime.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/lime", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/lime", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/lime", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/lime", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/lime", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json deleted file mode 100644 index ed891c156..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/magenta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/magenta", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/magenta", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/magenta", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/magenta", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/magenta", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json deleted file mode 100644 index 50547c38e..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/orange.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/orange", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/orange", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/orange", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/orange", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/orange", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json deleted file mode 100644 index 015d13d72..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/pink.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/pink", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/pink", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/pink", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/pink", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/pink", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json deleted file mode 100644 index c55c5aa8a..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/purple.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/purple", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/purple", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/purple", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/purple", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/purple", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json deleted file mode 100644 index c8872d6ba..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/red.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/red", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/red", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/red", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/red", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/red", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json deleted file mode 100644 index bb0443b64..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/white.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/white", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/white", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/white", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/white", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/white", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json deleted file mode 100644 index b5ce91e01..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/block/crafter/yellow.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parent": "refinedstorage:block/emissive_cutout", - "textures": { - "cutout_down": "refinedstorage:block/bottom", - "cutout_east": "refinedstorage:block/crafter/cutouts/side/yellow", - "cutout_north": "refinedstorage:block/crafter/cutouts/side/yellow", - "cutout_south": "refinedstorage:block/crafter/cutouts/side/yellow", - "cutout_up": "refinedstorage:block/crafter/cutouts/top/yellow", - "cutout_west": "refinedstorage:block/crafter/cutouts/side/yellow", - "down": "refinedstorage:block/bottom", - "east": "refinedstorage:block/crafter/side", - "north": "refinedstorage:block/crafter/side", - "particle": "refinedstorage:block/crafter/side", - "south": "refinedstorage:block/crafter/side", - "up": "refinedstorage:block/crafter/top", - "west": "refinedstorage:block/crafter/side" - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/autocrafter.json new file mode 100644 index 000000000..88130ab6f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/light_blue" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_autocrafter.json new file mode 100644 index 000000000..67f0709b2 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/black" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json deleted file mode 100644 index 98633c2cc..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/black_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/black" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_autocrafter.json new file mode 100644 index 000000000..05144a25a --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/blue" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json deleted file mode 100644 index d434378e6..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/blue_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/blue" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_autocrafter.json new file mode 100644 index 000000000..fd3ece6fc --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/brown" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json deleted file mode 100644 index 6f6b63b57..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/brown_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/brown" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json deleted file mode 100644 index db4b4e848..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/light_blue" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_autocrafter.json new file mode 100644 index 000000000..0c0867ca7 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/cyan" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json deleted file mode 100644 index bb4ce620c..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/cyan_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/cyan" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_autocrafter.json new file mode 100644 index 000000000..e9bd37fe5 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/gray" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json deleted file mode 100644 index 518058aaf..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/gray_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/gray" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_autocrafter.json new file mode 100644 index 000000000..023b6857f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/green" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json deleted file mode 100644 index 412af43ce..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/green_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/green" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_autocrafter.json new file mode 100644 index 000000000..802d6920b --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/light_gray" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json deleted file mode 100644 index 202f076dd..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/light_gray_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/light_gray" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_autocrafter.json new file mode 100644 index 000000000..21a98e751 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/lime" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json deleted file mode 100644 index 162cdffaa..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/lime_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/lime" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_autocrafter.json new file mode 100644 index 000000000..3e56775dd --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/magenta" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json deleted file mode 100644 index d9243b1e0..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/magenta_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/magenta" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_autocrafter.json new file mode 100644 index 000000000..4365a5c15 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/orange" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json deleted file mode 100644 index e7aa14eca..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/orange_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/orange" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_autocrafter.json new file mode 100644 index 000000000..78d53fc65 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/pink" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json deleted file mode 100644 index 6336b4fc4..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/pink_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/pink" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_autocrafter.json new file mode 100644 index 000000000..e28738b0f --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/purple" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json deleted file mode 100644 index f6cd434fb..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/purple_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/purple" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_autocrafter.json new file mode 100644 index 000000000..92800d36e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/red" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json deleted file mode 100644 index 68cd81152..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/red_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/red" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_autocrafter.json new file mode 100644 index 000000000..a2e2050da --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/white" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json deleted file mode 100644 index 66dcfa851..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/white_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/white" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_autocrafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_autocrafter.json new file mode 100644 index 000000000..426b875e2 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_autocrafter.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage:block/autocrafter/yellow" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json b/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json deleted file mode 100644 index 195eaf6dd..000000000 --- a/refinedstorage-common/src/generated/resources/assets/refinedstorage/models/item/yellow_crafter.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "refinedstorage:block/crafter/yellow" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_autocrafter.json new file mode 100644 index 000000000..307b34d1e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/black_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/black_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_autocrafter.json similarity index 65% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_autocrafter.json index 79dbd5749..173530a41 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/black_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_autocrafter.json @@ -1,11 +1,11 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_crafters": { + "has_autocrafters": { "conditions": { "items": [ { - "items": "#refinedstorage:crafters" + "items": "#refinedstorage:autocrafters" } ] }, @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "refinedstorage:coloring/black_crafter" + "recipe": "refinedstorage:coloring/blue_autocrafter" }, "trigger": "minecraft:recipe_unlocked" } @@ -21,12 +21,12 @@ "requirements": [ [ "has_the_recipe", - "has_crafters" + "has_autocrafters" ] ], "rewards": { "recipes": [ - "refinedstorage:coloring/black_crafter" + "refinedstorage:coloring/blue_autocrafter" ] } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_autocrafter.json new file mode 100644 index 000000000..86759a619 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/brown_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/brown_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_autocrafter.json similarity index 65% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_autocrafter.json index 651b3a5f5..2a3350158 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/blue_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_autocrafter.json @@ -1,11 +1,11 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_crafters": { + "has_autocrafters": { "conditions": { "items": [ { - "items": "#refinedstorage:crafters" + "items": "#refinedstorage:autocrafters" } ] }, @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "refinedstorage:coloring/blue_crafter" + "recipe": "refinedstorage:coloring/cyan_autocrafter" }, "trigger": "minecraft:recipe_unlocked" } @@ -21,12 +21,12 @@ "requirements": [ [ "has_the_recipe", - "has_crafters" + "has_autocrafters" ] ], "rewards": { "recipes": [ - "refinedstorage:coloring/blue_crafter" + "refinedstorage:coloring/cyan_autocrafter" ] } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_autocrafter.json similarity index 65% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_autocrafter.json index b6533e45a..3f91eee3f 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/brown_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_autocrafter.json @@ -1,11 +1,11 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_crafters": { + "has_autocrafters": { "conditions": { "items": [ { - "items": "#refinedstorage:crafters" + "items": "#refinedstorage:autocrafters" } ] }, @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "refinedstorage:coloring/brown_crafter" + "recipe": "refinedstorage:coloring/gray_autocrafter" }, "trigger": "minecraft:recipe_unlocked" } @@ -21,12 +21,12 @@ "requirements": [ [ "has_the_recipe", - "has_crafters" + "has_autocrafters" ] ], "rewards": { "recipes": [ - "refinedstorage:coloring/brown_crafter" + "refinedstorage:coloring/gray_autocrafter" ] } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json deleted file mode 100644 index fbf672c93..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/gray_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/gray_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/gray_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_autocrafter.json new file mode 100644 index 000000000..576293fe5 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/green_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/green_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json deleted file mode 100644 index 741854daf..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/green_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/green_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/green_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_autocrafter.json new file mode 100644 index 000000000..2be275bf0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/light_blue_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/light_blue_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json deleted file mode 100644 index 03d3a94ad..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_blue_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/light_blue_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/light_blue_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_autocrafter.json new file mode 100644 index 000000000..410e607da --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/light_gray_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/light_gray_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json deleted file mode 100644 index 65e9fee43..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/light_gray_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/light_gray_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/light_gray_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_autocrafter.json new file mode 100644 index 000000000..c8a1da55e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/lime_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/lime_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json deleted file mode 100644 index acf330d01..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/lime_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/lime_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/lime_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_autocrafter.json new file mode 100644 index 000000000..edc3d7836 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/magenta_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/magenta_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json deleted file mode 100644 index eb7cf31d0..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/magenta_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/magenta_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/magenta_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_autocrafter.json new file mode 100644 index 000000000..604c26de3 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/orange_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/orange_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json deleted file mode 100644 index 77bba14c1..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/orange_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/orange_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/orange_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_autocrafter.json new file mode 100644 index 000000000..07894f6ae --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/pink_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/pink_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json deleted file mode 100644 index 4c0d71038..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/pink_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/pink_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/pink_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_autocrafter.json new file mode 100644 index 000000000..c0373ee44 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/purple_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/purple_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json deleted file mode 100644 index 8b4de13bf..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/purple_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/purple_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/purple_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_autocrafter.json similarity index 65% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_autocrafter.json index 2416c2308..dd5c73749 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/cyan_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_autocrafter.json @@ -1,11 +1,11 @@ { "parent": "minecraft:recipes/root", "criteria": { - "has_crafters": { + "has_autocrafters": { "conditions": { "items": [ { - "items": "#refinedstorage:crafters" + "items": "#refinedstorage:autocrafters" } ] }, @@ -13,7 +13,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "refinedstorage:coloring/cyan_crafter" + "recipe": "refinedstorage:coloring/red_autocrafter" }, "trigger": "minecraft:recipe_unlocked" } @@ -21,12 +21,12 @@ "requirements": [ [ "has_the_recipe", - "has_crafters" + "has_autocrafters" ] ], "rewards": { "recipes": [ - "refinedstorage:coloring/cyan_crafter" + "refinedstorage:coloring/red_autocrafter" ] } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json deleted file mode 100644 index 371f8765d..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/red_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/red_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/red_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_autocrafter.json new file mode 100644 index 000000000..2b6cf71b0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/white_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/white_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json deleted file mode 100644 index 6c0bf9067..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/white_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/white_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/white_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_autocrafter.json new file mode 100644 index 000000000..ab26ddca6 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_autocrafter.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_autocrafters": { + "conditions": { + "items": [ + { + "items": "#refinedstorage:autocrafters" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "refinedstorage:coloring/yellow_autocrafter" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_autocrafters" + ] + ], + "rewards": { + "recipes": [ + "refinedstorage:coloring/yellow_autocrafter" + ] + } +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json deleted file mode 100644 index f36cce8de..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/advancement/recipes/misc/coloring/yellow_crafter.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_crafters": { - "conditions": { - "items": [ - { - "items": "#refinedstorage:crafters" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "refinedstorage:coloring/yellow_crafter" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_crafters" - ] - ], - "rewards": { - "recipes": [ - "refinedstorage:coloring/yellow_crafter" - ] - } -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/autocrafter.json similarity index 81% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/autocrafter.json index 2e0025c58..86ad90b49 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/autocrafter.json @@ -20,11 +20,11 @@ "entries": [ { "type": "minecraft:item", - "name": "refinedstorage:crafter" + "name": "refinedstorage:autocrafter" } ], "rolls": 1.0 } ], - "random_sequence": "refinedstorage:blocks/crafter" + "random_sequence": "refinedstorage:blocks/autocrafter" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_autocrafter.json new file mode 100644 index 000000000..10b335994 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:black_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/black_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_autocrafter.json similarity index 80% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_autocrafter.json index 5d0ca047f..c17624b59 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/blue_autocrafter.json @@ -20,11 +20,11 @@ "entries": [ { "type": "minecraft:item", - "name": "refinedstorage:blue_crafter" + "name": "refinedstorage:blue_autocrafter" } ], "rolls": 1.0 } ], - "random_sequence": "refinedstorage:blocks/blue_crafter" + "random_sequence": "refinedstorage:blocks/blue_autocrafter" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_autocrafter.json new file mode 100644 index 000000000..82af1bbd9 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:brown_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/brown_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_autocrafter.json similarity index 80% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_autocrafter.json index a5c65c9fb..e60f5479a 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/brown_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_autocrafter.json @@ -20,11 +20,11 @@ "entries": [ { "type": "minecraft:item", - "name": "refinedstorage:brown_crafter" + "name": "refinedstorage:cyan_autocrafter" } ], "rolls": 1.0 } ], - "random_sequence": "refinedstorage:blocks/brown_crafter" + "random_sequence": "refinedstorage:blocks/cyan_autocrafter" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json deleted file mode 100644 index 757a47795..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/cyan_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:cyan_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/cyan_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_autocrafter.json new file mode 100644 index 000000000..4724a29f1 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:gray_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/gray_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json deleted file mode 100644 index 560f3f68a..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/gray_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:gray_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/gray_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_autocrafter.json new file mode 100644 index 000000000..d41236978 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:green_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/green_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json deleted file mode 100644 index a99ea230a..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/green_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:green_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/green_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_autocrafter.json new file mode 100644 index 000000000..6327e51a6 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:light_gray_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/light_gray_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json deleted file mode 100644 index 3a55004ce..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/light_gray_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:light_gray_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/light_gray_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_autocrafter.json new file mode 100644 index 000000000..989d61f7d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:lime_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/lime_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json deleted file mode 100644 index 02cba6ebf..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/lime_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:lime_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/lime_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_autocrafter.json new file mode 100644 index 000000000..01562d3e0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:magenta_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/magenta_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json deleted file mode 100644 index 0a11c938e..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/magenta_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:magenta_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/magenta_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_autocrafter.json new file mode 100644 index 000000000..178a2b90e --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:orange_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/orange_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json deleted file mode 100644 index 2191b7186..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/orange_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:orange_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/orange_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_autocrafter.json new file mode 100644 index 000000000..c23afa99d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:pink_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/pink_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json deleted file mode 100644 index c86e79cbb..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/pink_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:pink_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/pink_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_autocrafter.json new file mode 100644 index 000000000..2f5a77e62 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:purple_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/purple_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json deleted file mode 100644 index e2ac59182..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/purple_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:purple_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/purple_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_autocrafter.json similarity index 80% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_autocrafter.json index 9e3f87067..101a0f4f3 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/black_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_autocrafter.json @@ -20,11 +20,11 @@ "entries": [ { "type": "minecraft:item", - "name": "refinedstorage:black_crafter" + "name": "refinedstorage:red_autocrafter" } ], "rolls": 1.0 } ], - "random_sequence": "refinedstorage:blocks/black_crafter" + "random_sequence": "refinedstorage:blocks/red_autocrafter" } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json deleted file mode 100644 index 892e7097e..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/red_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:red_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/red_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_autocrafter.json new file mode 100644 index 000000000..e9d1560d0 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:white_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/white_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json deleted file mode 100644 index 40453b663..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/white_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:white_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/white_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_autocrafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_autocrafter.json new file mode 100644 index 000000000..2fed1dd5d --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_autocrafter.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "minecraft:custom_name" + ], + "source": "block_entity" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "refinedstorage:yellow_autocrafter" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "refinedstorage:blocks/yellow_autocrafter" +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json deleted file mode 100644 index af9313455..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/loot_table/blocks/yellow_crafter.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "minecraft:block", - "functions": [ - { - "function": "minecraft:copy_components", - "include": [ - "minecraft:custom_name" - ], - "source": "block_entity" - } - ], - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:survives_explosion" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "refinedstorage:yellow_crafter" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "refinedstorage:blocks/yellow_crafter" -} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_autocrafter.json index c4aff7eba..8926cd009 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/black_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/black" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:black_crafter" + "id": "refinedstorage:black_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_autocrafter.json similarity index 67% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_autocrafter.json index 0fc17ef1a..5a887f308 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/blue_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/blue" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:blue_crafter" + "id": "refinedstorage:blue_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_autocrafter.json index 5837706b0..1f803e530 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/brown_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/brown" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:brown_crafter" + "id": "refinedstorage:brown_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_autocrafter.json similarity index 67% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_autocrafter.json index 118726fe9..cf34f942a 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/cyan_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/cyan" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:cyan_crafter" + "id": "refinedstorage:cyan_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_autocrafter.json similarity index 67% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_autocrafter.json index 2752d0972..f1adab13e 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/gray_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/gray" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:gray_crafter" + "id": "refinedstorage:gray_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_autocrafter.json index 8b8dadde7..824982db3 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/green_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/green" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:green_crafter" + "id": "refinedstorage:green_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_autocrafter.json similarity index 69% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_autocrafter.json index ec954a018..965adf95c 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_blue_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/light_blue" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:crafter" + "id": "refinedstorage:autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_autocrafter.json index 84a06b2ed..3346c5fff 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/light_gray_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/light_gray" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:light_gray_crafter" + "id": "refinedstorage:light_gray_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_autocrafter.json similarity index 67% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_autocrafter.json index 30da99e3d..23a48b548 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/lime_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/lime" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:lime_crafter" + "id": "refinedstorage:lime_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_autocrafter.json index a71de1b35..59883425b 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/magenta_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/magenta" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:magenta_crafter" + "id": "refinedstorage:magenta_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_autocrafter.json index c9933b779..197f142d3 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/orange_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/orange" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:orange_crafter" + "id": "refinedstorage:orange_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_autocrafter.json similarity index 67% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_autocrafter.json index b2f0afa8e..67f80037c 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/pink_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/pink" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:pink_crafter" + "id": "refinedstorage:pink_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_autocrafter.json index 591e2fb1c..14ca0b91b 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/purple_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/purple" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:purple_crafter" + "id": "refinedstorage:purple_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_autocrafter.json similarity index 67% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_autocrafter.json index 37c8788fc..45a12872b 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/red_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/red" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:red_crafter" + "id": "refinedstorage:red_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_autocrafter.json index a0bf7182e..c29d1f895 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/white_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/white" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:white_crafter" + "id": "refinedstorage:white_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_autocrafter.json similarity index 66% rename from refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json rename to refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_autocrafter.json index 0828bcda9..d79d3753c 100644 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_crafter.json +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/recipe/coloring/yellow_autocrafter.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "refinedstorage:crafters" + "tag": "refinedstorage:autocrafters" }, { "tag": "c:dyes/yellow" @@ -11,6 +11,6 @@ ], "result": { "count": 1, - "id": "refinedstorage:yellow_crafter" + "id": "refinedstorage:yellow_autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/autocrafters.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/autocrafters.json new file mode 100644 index 000000000..d77a283c3 --- /dev/null +++ b/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/autocrafters.json @@ -0,0 +1,20 @@ +{ + "values": [ + "refinedstorage:white_autocrafter", + "refinedstorage:orange_autocrafter", + "refinedstorage:magenta_autocrafter", + "refinedstorage:autocrafter", + "refinedstorage:yellow_autocrafter", + "refinedstorage:lime_autocrafter", + "refinedstorage:pink_autocrafter", + "refinedstorage:gray_autocrafter", + "refinedstorage:light_gray_autocrafter", + "refinedstorage:cyan_autocrafter", + "refinedstorage:purple_autocrafter", + "refinedstorage:blue_autocrafter", + "refinedstorage:brown_autocrafter", + "refinedstorage:green_autocrafter", + "refinedstorage:red_autocrafter", + "refinedstorage:black_autocrafter" + ] +} \ No newline at end of file diff --git a/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json b/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json deleted file mode 100644 index bcc58380b..000000000 --- a/refinedstorage-common/src/generated/resources/data/refinedstorage/tags/item/crafters.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "values": [ - "refinedstorage:white_crafter", - "refinedstorage:orange_crafter", - "refinedstorage:magenta_crafter", - "refinedstorage:crafter", - "refinedstorage:yellow_crafter", - "refinedstorage:lime_crafter", - "refinedstorage:pink_crafter", - "refinedstorage:gray_crafter", - "refinedstorage:light_gray_crafter", - "refinedstorage:cyan_crafter", - "refinedstorage:purple_crafter", - "refinedstorage:blue_crafter", - "refinedstorage:brown_crafter", - "refinedstorage:green_crafter", - "refinedstorage:red_crafter", - "refinedstorage:black_crafter" - ] -} \ No newline at end of file diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java index 30fd6efb1..8526ff4ca 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractClientModInitializer.java @@ -3,7 +3,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeMapping; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterScreen; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterScreen; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridScreen; import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewContainerMenu; import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; @@ -94,7 +94,7 @@ protected static void registerScreens(final ScreenRegistration registration) { registration.register(Menus.INSTANCE.getSecurityManager(), SecurityManagerScreen::new); registration.register(Menus.INSTANCE.getRelay(), RelayScreen::new); registration.register(Menus.INSTANCE.getDiskInterface(), DiskInterfaceScreen::new); - registration.register(Menus.INSTANCE.getCrafter(), CrafterScreen::new); + registration.register(Menus.INSTANCE.getAutocrafter(), AutocrafterScreen::new); registration.register(Menus.INSTANCE.getAutocraftingStorageMonitor(), new ScreenConstructor() { @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index b6b25841c..aeedd165b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -14,9 +14,9 @@ import com.refinedmods.refinedstorage.common.api.RefinedStorageApiProxy; import com.refinedmods.refinedstorage.common.api.security.PlatformSecurityNetworkComponent; import com.refinedmods.refinedstorage.common.api.upgrade.AbstractUpgradeItem; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterData; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterBlockEntity; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterContainerMenu; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterData; import com.refinedmods.refinedstorage.common.autocrafting.CraftingPatternState; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; @@ -343,7 +343,7 @@ protected final void registerBlocks(final RegistryCallback callback, Blocks.INSTANCE.getSecurityManager().registerBlocks(callback); Blocks.INSTANCE.getRelay().registerBlocks(callback); Blocks.INSTANCE.setDiskInterface(blockEntityProviders.diskInterface()).registerBlocks(callback); - Blocks.INSTANCE.getCrafter().registerBlocks(callback); + Blocks.INSTANCE.getAutocrafter().registerBlocks(callback); } protected final void registerItems(final RegistryCallback callback) { @@ -366,7 +366,7 @@ protected final void registerItems(final RegistryCallback callback) { Blocks.INSTANCE.getSecurityManager().registerItems(callback, Items.INSTANCE::addSecurityManager); Blocks.INSTANCE.getRelay().registerItems(callback, Items.INSTANCE::addRelay); Blocks.INSTANCE.getDiskInterface().registerItems(callback, Items.INSTANCE::addDiskInterface); - Blocks.INSTANCE.getCrafter().registerItems(callback, Items.INSTANCE::addCrafter); + Blocks.INSTANCE.getAutocrafter().registerItems(callback, Items.INSTANCE::addAutocrafter); registerStorageItems(callback); registerUpgrades(callback); } @@ -527,7 +527,7 @@ protected final void registerUpgradeMappings() { .add(Items.INSTANCE.getSpeedUpgrade(), 4) .add(Items.INSTANCE.getStackUpgrade()); - RefinedStorageApi.INSTANCE.getUpgradeRegistry().forDestination(UpgradeDestinations.CRAFTER) + RefinedStorageApi.INSTANCE.getUpgradeRegistry().forDestination(UpgradeDestinations.AUTOCRAFTER) .add(Items.INSTANCE.getSpeedUpgrade(), 4); } @@ -665,9 +665,9 @@ protected final void registerBlockEntities( ContentIds.DISK_INTERFACE, () -> typeFactory.create(providers.diskInterface(), Blocks.INSTANCE.getDiskInterface().toArray()) )); - BlockEntities.INSTANCE.setCrafter(callback.register( - ContentIds.CRAFTER, - () -> typeFactory.create(CrafterBlockEntity::new, Blocks.INSTANCE.getCrafter().toArray()) + BlockEntities.INSTANCE.setAutocrafter(callback.register( + ContentIds.AUTOCRAFTER, + () -> typeFactory.create(AutocrafterBlockEntity::new, Blocks.INSTANCE.getAutocrafter().toArray()) )); } @@ -788,9 +788,9 @@ protected final void registerMenus(final RegistryCallback> callback, ContentIds.DISK_INTERFACE, () -> extendedMenuTypeFactory.create(DiskInterfaceContainerMenu::new, ResourceContainerData.STREAM_CODEC) )); - Menus.INSTANCE.setCrafter(callback.register( - ContentIds.CRAFTER, - () -> extendedMenuTypeFactory.create(CrafterContainerMenu::new, CrafterData.STREAM_CODEC) + Menus.INSTANCE.setAutocrafter(callback.register( + ContentIds.AUTOCRAFTER, + () -> extendedMenuTypeFactory.create(AutocrafterContainerMenu::new, AutocrafterData.STREAM_CODEC) )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java index 018cdc3c4..4954b9077 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java @@ -73,7 +73,7 @@ public interface Config { RelayEntry getRelay(); - SimpleEnergyUsageEntry getCrafter(); + SimpleEnergyUsageEntry getAutocrafter(); interface SimpleEnergyUsageEntry { long getEnergyUsage(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlock.java similarity index 82% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlock.java index 40f36dddd..5b1311324 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlock.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlock.java @@ -29,15 +29,15 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; -public class CrafterBlock extends AbstractActiveColoredDirectionalBlock +public class AutocrafterBlock extends AbstractActiveColoredDirectionalBlock implements BlockItemProvider, EntityBlock { - private static final Component HELP = createTranslation("item", "crafter.help"); - private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( - BlockEntities.INSTANCE::getCrafter, + private static final Component HELP = createTranslation("item", "autocrafter.help"); + private static final AbstractBlockEntityTicker TICKER = new NetworkNodeBlockEntityTicker<>( + BlockEntities.INSTANCE::getAutocrafter, ACTIVE ); - public CrafterBlock(final DyeColor color, final MutableComponent name) { + public AutocrafterBlock(final DyeColor color, final MutableComponent name) { super(BlockConstants.PROPERTIES, color, name); } @@ -47,8 +47,8 @@ protected DirectionType getDirectionType() { } @Override - public BlockColorMap getBlockColorMap() { - return Blocks.INSTANCE.getCrafter(); + public BlockColorMap getBlockColorMap() { + return Blocks.INSTANCE.getAutocrafter(); } @Override @@ -59,7 +59,7 @@ public boolean canAlwaysConnect() { @Nullable @Override public BlockEntity newBlockEntity(final BlockPos pos, final BlockState state) { - return new CrafterBlockEntity(pos, state); + return new AutocrafterBlockEntity(pos, state); } @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java similarity index 85% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java index 71d997548..0bd4f665d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java @@ -41,8 +41,8 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; // TODO: More energy usage for more patterns. -public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity - implements ExtendedMenuProvider, BlockEntityWithDrops, PatternInventory.Listener { +public class AutocrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity + implements ExtendedMenuProvider, BlockEntityWithDrops, PatternInventory.Listener { static final int PATTERNS = 9; private static final int MAX_CHAINED_CRAFTERS = 8; @@ -56,15 +56,15 @@ public class CrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEnt private LockMode lockMode = LockMode.NEVER; private int priority; - public CrafterBlockEntity(final BlockPos pos, final BlockState state) { + public AutocrafterBlockEntity(final BlockPos pos, final BlockState state) { super( - BlockEntities.INSTANCE.getCrafter(), + BlockEntities.INSTANCE.getAutocrafter(), pos, state, - new PatternProviderNetworkNode(Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage(), PATTERNS) + new PatternProviderNetworkNode(Platform.INSTANCE.getConfig().getAutocrafter().getEnergyUsage(), PATTERNS) ); - this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.CRAFTER, upgradeEnergyUsage -> { - final long baseEnergyUsage = Platform.INSTANCE.getConfig().getCrafter().getEnergyUsage(); + this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.AUTOCRAFTER, upgradeEnergyUsage -> { + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getAutocrafter().getEnergyUsage(); mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); setChanged(); }); @@ -75,7 +75,7 @@ public CrafterBlockEntity(final BlockPos pos, final BlockState state) { @Override protected InWorldNetworkNodeContainer createMainContainer(final PatternProviderNetworkNode networkNode) { return RefinedStorageApi.INSTANCE.createNetworkNodeContainer(this, networkNode) - .connectionStrategy(new CrafterConnectionStrategy(this::getBlockState, getBlockPos())) + .connectionStrategy(new AutocrafterConnectionStrategy(this::getBlockState, getBlockPos())) .build(); } @@ -91,7 +91,7 @@ private boolean isPartOfChain() { return getChainingRoot() != this; } - // if there is another crafter next to us, that is pointing in our direction, + // if there is another autocrafter next to us, that is pointing in our direction, // and we are not part of a chain, we are the head of the chain private boolean isHeadOfChain() { if (level == null || isPartOfChain()) { @@ -103,8 +103,8 @@ private boolean isHeadOfChain() { continue; } final BlockEntity neighbor = level.getBlockEntity(pos); - if (neighbor instanceof CrafterBlockEntity neighborCrafter) { - final Direction neighborDirection = tryExtractDirection(neighborCrafter.getBlockState()); + if (neighbor instanceof AutocrafterBlockEntity neighborAutocrafter) { + final Direction neighborDirection = tryExtractDirection(neighborAutocrafter.getBlockState()); if (neighborDirection == direction.getOpposite()) { return true; } @@ -113,17 +113,17 @@ private boolean isHeadOfChain() { return false; } - private CrafterBlockEntity getChainingRoot() { + private AutocrafterBlockEntity getChainingRoot() { return getChainingRoot(0, this); } - private CrafterBlockEntity getChainingRoot(final int depth, final CrafterBlockEntity origin) { + private AutocrafterBlockEntity getChainingRoot(final int depth, final AutocrafterBlockEntity origin) { final Direction direction = tryExtractDirection(getBlockState()); if (level == null || direction == null || depth >= MAX_CHAINED_CRAFTERS) { return origin; } final BlockEntity neighbor = getConnectedMachine(); - if (!(neighbor instanceof CrafterBlockEntity neighborCrafter)) { + if (!(neighbor instanceof AutocrafterBlockEntity neighborCrafter)) { return this; } return neighborCrafter.getChainingRoot(depth + 1, origin); @@ -144,7 +144,7 @@ private BlockEntity getConnectedMachine() { @Override public Component getName() { - final CrafterBlockEntity root = getChainingRoot(); + final AutocrafterBlockEntity root = getChainingRoot(); if (root == this) { return doGetName(); } @@ -157,29 +157,29 @@ private Component doGetName() { return customName; } final BlockEntity connectedMachine = getConnectedMachine(); - // We don't handle crafters here, as crafters are also nameable, and we could have infinite recursion. - if (connectedMachine instanceof Nameable nameable && !(connectedMachine instanceof CrafterBlockEntity)) { + // We don't handle autocrafters here, as autocrafters are also nameable, and we could have infinite recursion. + if (connectedMachine instanceof Nameable nameable && !(connectedMachine instanceof AutocrafterBlockEntity)) { return nameable.getName(); } else if (connectedMachine != null) { return connectedMachine.getBlockState().getBlock().getName(); } - return ContentNames.CRAFTER; + return ContentNames.AUTOCRAFTER; } @Nullable @Override public AbstractContainerMenu createMenu(final int syncId, final Inventory inventory, final Player player) { - return new CrafterContainerMenu(syncId, inventory, this); + return new AutocrafterContainerMenu(syncId, inventory, this); } @Override - public CrafterData getMenuData() { - return new CrafterData(isPartOfChain(), isHeadOfChain()); + public AutocrafterData getMenuData() { + return new AutocrafterData(isPartOfChain(), isHeadOfChain()); } @Override - public StreamEncoder getMenuCodec() { - return CrafterData.STREAM_CODEC; + public StreamEncoder getMenuCodec() { + return AutocrafterData.STREAM_CODEC; } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterConnectionStrategy.java similarity index 83% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterConnectionStrategy.java index e60f5fc6f..12e7161db 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterConnectionStrategy.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterConnectionStrategy.java @@ -9,8 +9,8 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; -class CrafterConnectionStrategy extends ColoredConnectionStrategy { - CrafterConnectionStrategy(final Supplier blockStateProvider, final BlockPos origin) { +class AutocrafterConnectionStrategy extends ColoredConnectionStrategy { + AutocrafterConnectionStrategy(final Supplier blockStateProvider, final BlockPos origin) { super(blockStateProvider, origin); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterContainerMenu.java similarity index 73% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterContainerMenu.java index 32cf774c0..3619372df 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterContainerMenu.java @@ -22,7 +22,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -public class CrafterContainerMenu extends AbstractBaseContainerMenu { +public class AutocrafterContainerMenu extends AbstractBaseContainerMenu { private static final int PATTERN_SLOT_X = 8; private static final int PATTERN_SLOT_Y = 20; @@ -32,43 +32,45 @@ public class CrafterContainerMenu extends AbstractBaseContainerMenu { private final RateLimiter nameRateLimiter = RateLimiter.create(0.5); @Nullable - private CrafterBlockEntity crafter; + private AutocrafterBlockEntity autocrafter; @Nullable private Listener listener; private Component name; - public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterData data) { - super(Menus.INSTANCE.getCrafter(), syncId); + public AutocrafterContainerMenu(final int syncId, final Inventory playerInventory, final AutocrafterData data) { + super(Menus.INSTANCE.getAutocrafter(), syncId); this.player = playerInventory.player; - registerProperty(new ClientProperty<>(CrafterPropertyTypes.LOCK_MODE, LockMode.NEVER)); - registerProperty(new ClientProperty<>(CrafterPropertyTypes.PRIORITY, 0)); + registerProperty(new ClientProperty<>(AutocrafterPropertyTypes.LOCK_MODE, LockMode.NEVER)); + registerProperty(new ClientProperty<>(AutocrafterPropertyTypes.PRIORITY, 0)); addSlots( new PatternInventory(playerInventory.player::level), - new UpgradeContainer(UpgradeDestinations.CRAFTER) + new UpgradeContainer(UpgradeDestinations.AUTOCRAFTER) ); this.name = Component.empty(); this.partOfChain = data.partOfChain(); this.headOfChain = data.headOfChain(); } - public CrafterContainerMenu(final int syncId, final Inventory playerInventory, final CrafterBlockEntity crafter) { - super(Menus.INSTANCE.getCrafter(), syncId); - this.crafter = crafter; + public AutocrafterContainerMenu(final int syncId, + final Inventory playerInventory, + final AutocrafterBlockEntity autocrafter) { + super(Menus.INSTANCE.getAutocrafter(), syncId); + this.autocrafter = autocrafter; this.player = playerInventory.player; - this.name = crafter.getDisplayName(); + this.name = autocrafter.getDisplayName(); this.partOfChain = false; this.headOfChain = false; registerProperty(new ServerProperty<>( - CrafterPropertyTypes.LOCK_MODE, - crafter::getLockMode, - crafter::setLockMode + AutocrafterPropertyTypes.LOCK_MODE, + autocrafter::getLockMode, + autocrafter::setLockMode )); registerProperty(new ServerProperty<>( - CrafterPropertyTypes.PRIORITY, - crafter::getPriority, - crafter::setPriority + AutocrafterPropertyTypes.PRIORITY, + autocrafter::getPriority, + autocrafter::setPriority )); - addSlots(crafter.getPatternContainer(), crafter.getUpgradeContainer()); + addSlots(autocrafter.getPatternContainer(), autocrafter.getUpgradeContainer()); } boolean canChangeName() { @@ -90,7 +92,7 @@ void setListener(@Nullable final Listener listener) { @Override public void broadcastChanges() { super.broadcastChanges(); - if (crafter == null) { + if (autocrafter == null) { return; } if (nameRateLimiter.tryAcquire()) { @@ -99,13 +101,13 @@ public void broadcastChanges() { } private void detectNameChange() { - if (crafter == null) { + if (autocrafter == null) { return; } - final Component newName = crafter.getDisplayName(); + final Component newName = autocrafter.getDisplayName(); if (!newName.equals(name)) { this.name = newName; - S2CPackets.sendCrafterNameUpdate((ServerPlayer) player, newName); + S2CPackets.sendAutocrafterNameUpdate((ServerPlayer) player, newName); } } @@ -141,11 +143,11 @@ public void changeName(final String newName) { if (partOfChain) { return; } - if (crafter != null) { - crafter.setCustomName(newName); + if (autocrafter != null) { + autocrafter.setCustomName(newName); detectNameChange(); } else { - C2SPackets.sendCrafterNameChange(newName); + C2SPackets.sendAutocrafterNameChange(newName); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterData.java new file mode 100644 index 000000000..6cb7995df --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterData.java @@ -0,0 +1,13 @@ +package com.refinedmods.refinedstorage.common.autocrafting; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +public record AutocrafterData(boolean partOfChain, boolean headOfChain) { + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL, AutocrafterData::partOfChain, + ByteBufCodecs.BOOL, AutocrafterData::headOfChain, + AutocrafterData::new + ); +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterPropertyTypes.java similarity index 89% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterPropertyTypes.java index bb60a91e1..3d7aca144 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterPropertyTypes.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterPropertyTypes.java @@ -5,7 +5,7 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; -final class CrafterPropertyTypes { +final class AutocrafterPropertyTypes { static final PropertyType LOCK_MODE = new PropertyType<>( createIdentifier("lock_mode"), LockModeSettings::getLockMode, @@ -16,6 +16,6 @@ final class CrafterPropertyTypes { createIdentifier("crafter_priority") ); - private CrafterPropertyTypes() { + private AutocrafterPropertyTypes() { } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java similarity index 89% rename from refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java rename to refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java index e87e7a70d..ab50b8f88 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java @@ -27,19 +27,19 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslationAsHeading; import static java.util.Objects.requireNonNull; -public class CrafterScreen extends AbstractBaseScreen { +public class AutocrafterScreen extends AbstractBaseScreen { private static final Component EMPTY_PATTERN_SLOT = createTranslationAsHeading( - "gui", "crafter.empty_pattern_slot" + "gui", "autocrafter.empty_pattern_slot" ); - private static final Component CHAINED = createTranslation("gui", "crafter.chained"); - private static final Component CHAINED_HELP = createTranslation("gui", "crafter.chained.help"); - private static final Component CHAINED_HEAD_HELP = createTranslation("gui", "crafter.chained.head_help"); - private static final Component NOT_CHAINED = createTranslation("gui", "crafter.not_chained"); - private static final Component NOT_CHAINED_HELP = createTranslation("gui", "crafter.not_chained.help"); - private static final Component EDIT = createTranslation("gui", "crafter.edit_name"); + private static final Component CHAINED = createTranslation("gui", "autocrafter.chained"); + private static final Component CHAINED_HELP = createTranslation("gui", "autocrafter.chained.help"); + private static final Component CHAINED_HEAD_HELP = createTranslation("gui", "autocrafter.chained.head_help"); + private static final Component NOT_CHAINED = createTranslation("gui", "autocrafter.not_chained"); + private static final Component NOT_CHAINED_HELP = createTranslation("gui", "autocrafter.not_chained.help"); + private static final Component EDIT = createTranslation("gui", "autocrafter.edit_name"); - private static final ResourceLocation CRAFTER_NAME_BACKGROUND = createIdentifier("widget/crafter_name"); + private static final ResourceLocation NAME_BACKGROUND = createIdentifier("widget/autocrafter_name"); private static final List CRAFTER_NAME_HISTORY = new ArrayList<>(); private final Inventory playerInventory; @@ -50,7 +50,9 @@ public class CrafterScreen extends AbstractBaseScreen { private Button editButton; private boolean editName; - public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInventory, final Component title) { + public AutocrafterScreen(final AutocrafterContainerMenu menu, + final Inventory playerInventory, + final Component title) { super(menu, playerInventory, new TextMarquee(title, getTitleMaxWidth(menu))); this.inventoryLabelY = 42; this.imageWidth = 210; @@ -58,7 +60,7 @@ public CrafterScreen(final CrafterContainerMenu menu, final Inventory playerInve this.playerInventory = playerInventory; } - private static int getTitleMaxWidth(final CrafterContainerMenu menu) { + private static int getTitleMaxWidth(final AutocrafterContainerMenu menu) { final int chainingTitleWidth = Minecraft.getInstance().font.width(getChainingTitle(menu)); final int editButtonWidth = getEditButtonWidth(); return TITLE_MAX_WIDTH - chainingTitleWidth - editButtonWidth - 10; @@ -72,7 +74,7 @@ private static int getEditButtonWidth() { return Minecraft.getInstance().font.width(EDIT) + 8; } - private static Component getChainingTitle(final CrafterContainerMenu menu) { + private static Component getChainingTitle(final AutocrafterContainerMenu menu) { return (menu.isPartOfChain() || menu.isHeadOfChain()) ? CHAINED : NOT_CHAINED; } @@ -87,7 +89,7 @@ private Component getChainingTooltip() { protected void renderBg(final GuiGraphics graphics, final float delta, final int mouseX, final int mouseY) { super.renderBg(graphics, delta, mouseX, mouseY); if (editName) { - graphics.blitSprite(CRAFTER_NAME_BACKGROUND, leftPos + 7, topPos + 5, 162, 12); + graphics.blitSprite(NAME_BACKGROUND, leftPos + 7, topPos + 5, 162, 12); } } @@ -115,9 +117,9 @@ protected void init() { } }); - addSideButton(new LockModeSideButtonWidget(getMenu().getProperty(CrafterPropertyTypes.LOCK_MODE))); + addSideButton(new LockModeSideButtonWidget(getMenu().getProperty(AutocrafterPropertyTypes.LOCK_MODE))); addSideButton(PrioritySideButtonWidget.forCrafter( - getMenu().getProperty(CrafterPropertyTypes.PRIORITY), + getMenu().getProperty(AutocrafterPropertyTypes.PRIORITY), playerInventory, this )); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java deleted file mode 100644 index b1cbf8cb6..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/CrafterData.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.refinedmods.refinedstorage.common.autocrafting; - -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; - -public record CrafterData(boolean partOfChain, boolean headOfChain) { - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.BOOL, CrafterData::partOfChain, - ByteBufCodecs.BOOL, CrafterData::headOfChain, - CrafterData::new - ); -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java index 7d038d4d0..8253d98ba 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/LockModeSideButtonWidget.java @@ -10,24 +10,24 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; class LockModeSideButtonWidget extends AbstractSideButtonWidget { - private static final String PREFIX = "crafter.lock_mode"; + private static final String PREFIX = "autocrafter.lock_mode"; private static final MutableComponent TITLE = createTranslation("gui", PREFIX); - private static final ResourceLocation NEVER = createIdentifier("widget/side_button/crafter_lock_mode/never"); + private static final ResourceLocation NEVER = createIdentifier("widget/side_button/autocrafter_lock_mode/never"); private static final ResourceLocation LOCK_UNTIL_REDSTONE_PULSE_RECEIVED = createIdentifier( - "widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received" + "widget/side_button/autocrafter_lock_mode/lock_until_redstone_pulse_is_received" ); private static final ResourceLocation LOCK_UNTIL_CONNECTED_MACHINE_IS_EMPTY = createIdentifier( - "widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty" + "widget/side_button/autocrafter_lock_mode/lock_until_connected_machine_is_empty" ); private static final ResourceLocation LOCK_UNTIL_ALL_OUTPUTS_ARE_RECEIVED = createIdentifier( - "widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received" + "widget/side_button/autocrafter_lock_mode/lock_until_all_outputs_are_received" ); private static final ResourceLocation LOCK_UNTIL_HIGH_REDSTONE_SIGNAL = createIdentifier( - "widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal" + "widget/side_button/autocrafter_lock_mode/lock_until_high_redstone_signal" ); private static final ResourceLocation LOCK_UNTIL_LOW_REDSTONE_SIGNAL = createIdentifier( - "widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal" + "widget/side_button/autocrafter_lock_mode/lock_until_low_redstone_signal" ); private static final MutableComponent NEVER_TITLE = createTranslation("gui", PREFIX + ".never"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java index d18aa5603..d094ad103 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java @@ -10,8 +10,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.PATTERNS; -import static com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity.isValidPattern; +import static com.refinedmods.refinedstorage.common.autocrafting.AutocrafterBlockEntity.PATTERNS; +import static com.refinedmods.refinedstorage.common.autocrafting.AutocrafterBlockEntity.isValidPattern; class PatternInventory extends FilteredContainer { @Nullable diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java index fc8962f16..5310342e1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternRendering.java @@ -30,7 +30,7 @@ private static boolean canDisplayOutputInScreen(final ItemStack stack) { final Screen screen = Minecraft.getInstance().screen; return switch (screen) { case PatternGridScreen patternGridScreen -> patternGridScreen.getMenu().isPatternInOutput(stack); - case CrafterScreen crafterScreen -> crafterScreen.getMenu().containsPattern(stack); + case AutocrafterScreen autocrafterScreen -> autocrafterScreen.getMenu().containsPattern(stack); case null, default -> false; }; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java index 800104eed..ab24426be 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternSlot.java @@ -7,6 +7,6 @@ class PatternSlot extends ValidatedSlot { PatternSlot(final Container container, final int index, final int x, final int y, final Level level) { - super(container, index, x, y, stack -> CrafterBlockEntity.isValidPattern(stack, level)); + super(container, index, x, y, stack -> AutocrafterBlockEntity.isValidPattern(stack, level)); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java index 2da20d010..467b224d1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java @@ -251,7 +251,7 @@ private void renderMatrixSlot(final GuiGraphics graphics, final int mouseY, final ResourceSlot resourceSlot, final ProcessingMatrixResourceSlot matrixSlot) { - if (matrixSlot.getResource() != null && menu.getView().isCraftable(matrixSlot.getResource())) { + if (matrixSlot.getResource() != null && menu.getView().isAutocraftable(matrixSlot.getResource())) { AbstractGridScreen.renderCraftableBackground( graphics, resourceSlot.x + leftPos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java index 0dc196060..1868b4c92 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/BlockEntities.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage.common.content; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlockEntity; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterBlockEntity; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; @@ -90,7 +90,7 @@ public final class BlockEntities { @Nullable private Supplier> diskInterface; @Nullable - private Supplier> crafter; + private Supplier> autocrafter; private BlockEntities() { } @@ -297,11 +297,11 @@ public void setDiskInterface(final Supplier getCrafter() { - return requireNonNull(crafter).get(); + public BlockEntityType getAutocrafter() { + return requireNonNull(autocrafter).get(); } - public void setCrafter(final Supplier> supplier) { - this.crafter = supplier; + public void setAutocrafter(final Supplier> supplier) { + this.autocrafter = supplier; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java index 52979ac31..0c7b8036f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Blocks.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage.common.content; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterBlock; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterBlock; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridBlock; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractConstructorBlockEntity; import com.refinedmods.refinedstorage.common.constructordestructor.AbstractDestructorBlockEntity; @@ -145,10 +145,10 @@ public final class Blocks { ); @Nullable private BlockColorMap diskInterface; - private final BlockColorMap crafter = new BlockColorMap<>( - CrafterBlock::new, - ContentIds.CRAFTER, - ContentNames.CRAFTER, + private final BlockColorMap autocrafter = new BlockColorMap<>( + AutocrafterBlock::new, + ContentIds.AUTOCRAFTER, + ContentNames.AUTOCRAFTER, COLOR ); @@ -419,7 +419,7 @@ public BlockColorMap getDiskInterface() { return requireNonNull(diskInterface); } - public BlockColorMap getCrafter() { - return crafter; + public BlockColorMap getAutocrafter() { + return autocrafter; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java index 5b477fd38..3d932e4e2 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java @@ -65,7 +65,7 @@ public final class ContentIds { public static final ResourceLocation RELAY = createIdentifier("relay"); public static final ResourceLocation DISK_INTERFACE = createIdentifier("disk_interface"); public static final ResourceLocation PATTERN = createIdentifier("pattern"); - public static final ResourceLocation CRAFTER = createIdentifier("crafter"); + public static final ResourceLocation AUTOCRAFTER = createIdentifier("autocrafter"); private ContentIds() { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java index 08b3c65f0..1cacbaacc 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentNames.java @@ -39,7 +39,7 @@ public final class ContentNames { public static final MutableComponent SECURITY_MANAGER = name("security_manager"); public static final MutableComponent RELAY = name("relay"); public static final MutableComponent DISK_INTERFACE = name("disk_interface"); - public static final MutableComponent CRAFTER = name("crafter"); + public static final MutableComponent AUTOCRAFTER = name("autocrafter"); public static final String CLEAR_CRAFTING_MATRIX_TO_NETWORK_TRANSLATION_KEY = createTranslationKey("key", "clear_crafting_grid_matrix_to_network"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java index 5aa97d549..bcae7cd56 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/CreativeModeTabItems.java @@ -58,7 +58,7 @@ private static void appendBlocks(final Consumer consumer) { Items.INSTANCE.getSecurityManagers().stream().map(Supplier::get).forEach(itemConsumer); Items.INSTANCE.getRelays().stream().map(Supplier::get).forEach(itemConsumer); Items.INSTANCE.getDiskInterfaces().stream().map(Supplier::get).forEach(itemConsumer); - Items.INSTANCE.getCrafters().stream().map(Supplier::get).forEach(itemConsumer); + Items.INSTANCE.getAutocrafters().stream().map(Supplier::get).forEach(itemConsumer); } private static void appendBlockColors(final Consumer consumer, final BlockColorMap map) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java index 3ee31ab9d..594b16f5b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java @@ -22,7 +22,7 @@ public final class DefaultEnergyUsage { public static final long SECURITY_MANAGER = 16; public static final long RELAY_INPUT_NETWORK = 8; public static final long RELAY_OUTPUT_NETWORK = 8; - public static final long CRAFTER = 4; + public static final long AUTOCRAFTER = 4; public static final long CONTROLLER_CAPACITY = 1000; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java index d21089a56..2dfc026af 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Items.java @@ -51,7 +51,7 @@ public final class Items { private final List> allSecurityManagers = new ArrayList<>(); private final List> allRelays = new ArrayList<>(); private final List> allDiskInterfaces = new ArrayList<>(); - private final List> allCrafters = new ArrayList<>(); + private final List> allAutocrafters = new ArrayList<>(); @Nullable private Supplier quartzEnrichedIron; @Nullable @@ -439,12 +439,12 @@ public List> getDiskInterfaces() { return Collections.unmodifiableList(allDiskInterfaces); } - public void addCrafter(final Supplier supplier) { - allCrafters.add(supplier); + public void addAutocrafter(final Supplier supplier) { + allAutocrafters.add(supplier); } - public List> getCrafters() { - return Collections.unmodifiableList(allCrafters); + public List> getAutocrafters() { + return Collections.unmodifiableList(allAutocrafters); } public Item getNetworkCard() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java index 57d8771d3..4658b8af7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Menus.java @@ -1,6 +1,6 @@ package com.refinedmods.refinedstorage.common.content; -import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterContainerMenu; import com.refinedmods.refinedstorage.common.autocrafting.PatternGridContainerMenu; import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewContainerMenu; import com.refinedmods.refinedstorage.common.constructordestructor.ConstructorContainerMenu; @@ -94,7 +94,7 @@ public final class Menus { @Nullable private Supplier> diskInterface; @Nullable - private Supplier> crafter; + private Supplier> autocrafter; private Menus() { } @@ -319,11 +319,11 @@ public void setDiskInterface(final Supplier this.diskInterface = diskInterface; } - public MenuType getCrafter() { - return requireNonNull(crafter).get(); + public MenuType getAutocrafter() { + return requireNonNull(autocrafter).get(); } - public void setCrafter(final Supplier> crafter) { - this.crafter = crafter; + public void setAutocrafter(final Supplier> autocrafter) { + this.autocrafter = autocrafter; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java index 19f308085..8763b85fd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/Tags.java @@ -27,7 +27,7 @@ public final class Tags { public static final TagKey SECURITY_MANAGERS = createTag("security_managers"); public static final TagKey RELAYS = createTag("relays"); public static final TagKey DISK_INTERFACES = createTag("disk_interfaces"); - public static final TagKey CRAFTERS = createTag("crafters"); + public static final TagKey AUTOCRAFTERS = createTag("autocrafters"); private Tags() { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index 30988fee3..b845dcf99 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -61,7 +61,7 @@ public List getResources(final Class act } @Override - public Set getCraftableResources() { + public Set getAutocraftableResources() { return requireNonNull(mainNetworkNode.getNetwork()) .getComponent(AutocraftingNetworkComponent.class) .getOutputs() diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 158af2302..68225b188 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -114,7 +114,7 @@ protected AbstractGridContainerMenu( resource.resourceAmount().amount(), resource.trackedResource().orElse(null) )); - gridData.craftableResources().forEach(viewBuilder::withCraftableResource); + gridData.autocraftableResources().forEach(viewBuilder::withAutocraftableResource); this.view = viewBuilder.build(); this.view.setSortingDirection(Platform.INSTANCE.getConfig().getGrid().getSortingDirection()); @@ -162,7 +162,8 @@ private BiPredicate createResourceTypeFilter() { } private BiPredicate createViewTypeFilter() { - return (v, resource) -> Platform.INSTANCE.getConfig().getGrid().getViewType().accepts(resource.isCraftable()); + return (v, resource) -> Platform.INSTANCE.getConfig().getGrid().getViewType() + .accepts(resource.isAutocraftable()); } private static GridViewBuilder createViewBuilder() { @@ -473,7 +474,7 @@ public final AutocraftableResourceHint getAutocraftableResourceHint(final Slot s @Nullable private AutocraftableResourceHint getAutocraftableResourceHint(final ResourceKey resource) { - if (view.isCraftable(resource)) { + if (view.isAutocraftable(resource)) { return AutocraftableResourceHint.AUTOCRAFTABLE; } if (playerInventoryPatterns.getOutputs().contains(resource)) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java index b6b086048..8dde3bc69 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/GridData.java @@ -19,7 +19,7 @@ import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -public record GridData(boolean active, List resources, Set craftableResources) { +public record GridData(boolean active, List resources, Set autocraftableResources) { public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.BOOL, GridData::active, ByteBufCodecs.collection(ArrayList::new, StreamCodec.composite( @@ -27,7 +27,7 @@ public record GridData(boolean active, List resources, Set true; - case CRAFTABLE -> craftable; - case NON_CRAFTABLE -> !craftable; + case AUTOCRAFTABLE -> autocraftable; + case NON_AUTOCRAFTABLE -> !autocraftable; }; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java index 765b3a92e..c9dbe75e0 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java @@ -82,7 +82,7 @@ public List getResources(final Class act } @Override - public Set getCraftableResources() { + public Set getAutocraftableResources() { return Collections.emptySet(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 9747967b0..9b6514190 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -292,7 +292,7 @@ private void renderResourceWithAmount(final GuiGraphics graphics, final int slotX, final int slotY, final GridResource resource) { - if (resource.isCraftable()) { + if (resource.isAutocraftable()) { renderCraftableBackground(graphics, slotX, slotY, false, AutocraftableResourceHint.AUTOCRAFTABLE.getColor()); } @@ -329,7 +329,7 @@ private void renderAmount(final GuiGraphics graphics, private int getAmountColor(final GridResource resource, final long amount) { if (amount == 0) { - if (resource.isCraftable()) { + if (resource.isAutocraftable()) { return 0xFFFFFF; } return 0xFF5555; @@ -340,7 +340,7 @@ private int getAmountColor(final GridResource resource, final long amount) { private String getAmountText(final GridResource resource, final PlatformGridResource platformResource, final long amount) { - if (amount == 0 && resource.isCraftable()) { + if (amount == 0 && resource.isAutocraftable()) { return I18n.get(createTranslationKey("gui", "grid.craft")); } return platformResource.getDisplayedAmount(getMenu().getView()); @@ -420,7 +420,7 @@ private void renderHoveredResourceTooltip(final GuiGraphics graphics, if (amount > 0 && Platform.INSTANCE.getConfig().getGrid().isDetailedTooltip()) { addDetailedTooltip(view, gridResource, processedLines); } - if (gridResource.isCraftable()) { + if (gridResource.isAutocraftable()) { processedLines.add(amount == 0 ? AutocraftableClientTooltipComponent.empty() : AutocraftableClientTooltipComponent.existing()); @@ -498,7 +498,7 @@ public boolean mouseClicked(final double mouseX, final double mouseY, final int if (resource.canExtract(carriedStack, getMenu().getView()) && !hasControlDown()) { mouseClickedInGrid(clickedButton, resource); return true; - } else if (resource.isCraftable() && tryStartAutocrafting(resource)) { + } else if (resource.isAutocraftable() && tryStartAutocrafting(resource)) { return true; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java index af148a083..16c7badf6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/ViewTypeSideButtonWidget.java @@ -36,9 +36,9 @@ private static OnPress createPressAction(final AbstractGridContainerMenu menu) { private static GridViewType toggle(final GridViewType sortingType) { return switch (sortingType) { - case ALL -> GridViewType.CRAFTABLE; - case CRAFTABLE -> GridViewType.NON_CRAFTABLE; - case NON_CRAFTABLE -> GridViewType.ALL; + case ALL -> GridViewType.AUTOCRAFTABLE; + case AUTOCRAFTABLE -> GridViewType.NON_AUTOCRAFTABLE; + case NON_AUTOCRAFTABLE -> GridViewType.ALL; }; } @@ -46,8 +46,8 @@ private static GridViewType toggle(final GridViewType sortingType) { protected ResourceLocation getSprite() { return switch (menu.getViewType()) { case ALL -> ALL; - case CRAFTABLE -> CRAFTABLE; - case NON_CRAFTABLE -> NON_CRAFTABLE; + case AUTOCRAFTABLE -> CRAFTABLE; + case NON_AUTOCRAFTABLE -> NON_CRAFTABLE; }; } @@ -60,8 +60,8 @@ protected MutableComponent getTitle() { protected MutableComponent getSubText() { return switch (menu.getViewType()) { case ALL -> SUBTEXT_ALL; - case CRAFTABLE -> SUBTEXT_AUTOCRAFTABLE; - case NON_CRAFTABLE -> SUBTEXT_NON_AUTOCRAFTABLE; + case AUTOCRAFTABLE -> SUBTEXT_AUTOCRAFTABLE; + case NON_AUTOCRAFTABLE -> SUBTEXT_NON_AUTOCRAFTABLE; }; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java index 1b0aad936..9405aeb53 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractFluidGridResourceFactory.java @@ -17,7 +17,7 @@ public abstract class AbstractFluidGridResourceFactory implements GridResourceFactory { @Override - public Optional apply(final ResourceKey resource, final boolean craftable) { + public Optional apply(final ResourceKey resource, final boolean autocraftable) { if (!(resource instanceof FluidResource fluidResource)) { return Optional.empty(); } @@ -35,7 +35,7 @@ public Optional apply(final ResourceKey resource, final boolean cr GridResourceAttributeKeys.TAGS, tags, GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) ), - craftable + autocraftable )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java index dfd58ebf2..ff7ccd50d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/AbstractItemGridResourceFactory.java @@ -20,7 +20,7 @@ public abstract class AbstractItemGridResourceFactory implements GridResourceFactory { @Override - public Optional apply(final ResourceKey resource, final boolean craftable) { + public Optional apply(final ResourceKey resource, final boolean autocraftable) { if (!(resource instanceof ItemResource itemResource)) { return Optional.empty(); } @@ -41,7 +41,7 @@ public Optional apply(final ResourceKey resource, final boolean cr GridResourceAttributeKeys.TAGS, tags, GridResourceAttributeKeys.TOOLTIP, Set.of(tooltip) ), - craftable + autocraftable )); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java index e73b6275b..630f1c264 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/CompositeGridResourceFactory.java @@ -16,10 +16,10 @@ public CompositeGridResourceFactory(final PlatformRegistry resourc } @Override - public Optional apply(final ResourceKey resource, final boolean craftable) { + public Optional apply(final ResourceKey resource, final boolean autocraftable) { return resourceTypeRegistry.getAll() .stream() - .flatMap(type -> type.toGridResource(resource, craftable).stream()) + .flatMap(type -> type.toGridResource(resource, autocraftable).stream()) .findFirst(); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java index 3b11cc868..b197dd9c6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/FluidGridResource.java @@ -40,8 +40,8 @@ public class FluidGridResource extends AbstractPlatformGridResource> attributes, - final boolean craftable) { - super(resource, name, attributes, craftable); + final boolean autocraftable) { + super(resource, name, attributes, autocraftable); this.id = BuiltInRegistries.FLUID.getId(resource.fluid()); this.rendering = RefinedStorageApi.INSTANCE.getResourceRendering(FluidResource.class); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java index dd56b2a55..912ef360d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/view/ItemGridResource.java @@ -41,8 +41,8 @@ public ItemGridResource(final ItemResource resource, final ItemStack itemStack, final String name, final Map> attributes, - final boolean craftable) { - super(resource, name, attributes, craftable); + final boolean autocraftable) { + super(resource, name, attributes, autocraftable); this.id = Item.getId(resource.item()); this.itemStack = itemStack; this.itemResource = resource; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java index f38d75ae6..90d45792b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java @@ -116,7 +116,7 @@ public List getResources(final Class act } @Override - public Set getCraftableResources() { + public Set getAutocraftableResources() { return Collections.emptySet(); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocrafterNameChangePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocrafterNameChangePacket.java new file mode 100644 index 000000000..04fc5454d --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocrafterNameChangePacket.java @@ -0,0 +1,33 @@ +package com.refinedmods.refinedstorage.common.support.packet.c2s; + +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterContainerMenu; +import com.refinedmods.refinedstorage.common.support.packet.PacketContext; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public record AutocrafterNameChangePacket(String name) implements CustomPacketPayload { + public static final Type PACKET_TYPE = new Type<>( + createIdentifier("autocrafter_name_change") + ); + public static final StreamCodec STREAM_CODEC = StreamCodec + .composite( + ByteBufCodecs.STRING_UTF8, AutocrafterNameChangePacket::name, + AutocrafterNameChangePacket::new + ); + + public static void handle(final AutocrafterNameChangePacket packet, final PacketContext ctx) { + if (ctx.getPlayer().containerMenu instanceof AutocrafterContainerMenu containerMenu) { + containerMenu.changeName(packet.name); + } + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java index bc20c2224..9737e798b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/C2SPackets.java @@ -128,8 +128,8 @@ public static void sendPatternGridSmithingTableRecipeTransfer(final List PACKET_TYPE = new Type<>( - createIdentifier("crafter_name_change") - ); - public static final StreamCodec STREAM_CODEC = StreamCodec - .composite( - ByteBufCodecs.STRING_UTF8, CrafterNameChangePacket::name, - CrafterNameChangePacket::new - ); - - public static void handle(final CrafterNameChangePacket packet, final PacketContext ctx) { - if (ctx.getPlayer().containerMenu instanceof CrafterContainerMenu containerMenu) { - containerMenu.changeName(packet.name); - } - } - - @Override - public Type type() { - return PACKET_TYPE; - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocrafterNameUpdatePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocrafterNameUpdatePacket.java new file mode 100644 index 000000000..3eb557d31 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/AutocrafterNameUpdatePacket.java @@ -0,0 +1,34 @@ +package com.refinedmods.refinedstorage.common.support.packet.s2c; + +import com.refinedmods.refinedstorage.common.autocrafting.AutocrafterContainerMenu; +import com.refinedmods.refinedstorage.common.support.packet.PacketContext; + +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; + +public record AutocrafterNameUpdatePacket(Component name) implements CustomPacketPayload { + public static final Type PACKET_TYPE = new Type<>( + createIdentifier("autocrafter_name_update") + ); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ComponentSerialization.STREAM_CODEC, AutocrafterNameUpdatePacket::name, + AutocrafterNameUpdatePacket::new + ); + + public static void handle(final AutocrafterNameUpdatePacket packet, final PacketContext ctx) { + if (ctx.getPlayer().containerMenu instanceof AutocrafterContainerMenu containerMenu) { + containerMenu.nameChanged(packet.name); + } + } + + @Override + public Type type() { + return PACKET_TYPE; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java deleted file mode 100644 index f681a22e9..000000000 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/CrafterNameUpdatePacket.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.refinedmods.refinedstorage.common.support.packet.s2c; - -import com.refinedmods.refinedstorage.common.autocrafting.CrafterContainerMenu; -import com.refinedmods.refinedstorage.common.support.packet.PacketContext; - -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.ComponentSerialization; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; - -import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; - -public record CrafterNameUpdatePacket(Component name) implements CustomPacketPayload { - public static final Type PACKET_TYPE = new Type<>( - createIdentifier("crafter_name_update") - ); - public static final StreamCodec STREAM_CODEC = - StreamCodec.composite( - ComponentSerialization.STREAM_CODEC, CrafterNameUpdatePacket::name, - CrafterNameUpdatePacket::new - ); - - public static void handle(final CrafterNameUpdatePacket packet, final PacketContext ctx) { - if (ctx.getPlayer().containerMenu instanceof CrafterContainerMenu containerMenu) { - containerMenu.nameChanged(packet.name); - } - } - - @Override - public Type type() { - return PACKET_TYPE; - } -} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java index 08b365c36..9ddd2e9c1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/s2c/S2CPackets.java @@ -83,8 +83,8 @@ public static void sendPatternGridAllowedAlternativesUpdate(final ServerPlayer p Platform.INSTANCE.sendPacketToClient(player, new PatternGridAllowedAlternativesUpdatePacket(index, ids)); } - public static void sendCrafterNameUpdate(final ServerPlayer player, final Component name) { - Platform.INSTANCE.sendPacketToClient(player, new CrafterNameUpdatePacket(name)); + public static void sendAutocrafterNameUpdate(final ServerPlayer player, final Component name) { + Platform.INSTANCE.sendPacketToClient(player, new AutocrafterNameUpdatePacket(name)); } public static void sendAutocraftingPreviewResponse(final ServerPlayer player, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java index 3d57926f7..d53db9d04 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/FluidResourceType.java @@ -26,8 +26,8 @@ class FluidResourceType implements ResourceType { private static final ResourceLocation SPRITE = createIdentifier("widget/side_button/resource_type/fluid"); @Override - public Optional toGridResource(final ResourceKey resource, final boolean craftable) { - return Platform.INSTANCE.getFluidGridResourceFactory().apply(resource, craftable); + public Optional toGridResource(final ResourceKey resource, final boolean autocraftable) { + return Platform.INSTANCE.getFluidGridResourceFactory().apply(resource, autocraftable); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java index 3cda9e40e..8a52dd578 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/resource/ItemResourceType.java @@ -26,8 +26,8 @@ class ItemResourceType implements ResourceType { private static final ResourceLocation SPRITE = createIdentifier("widget/side_button/resource_type/item"); @Override - public Optional toGridResource(final ResourceKey resource, final boolean craftable) { - return Platform.INSTANCE.getItemGridResourceFactory().apply(resource, craftable); + public Optional toGridResource(final ResourceKey resource, final boolean autocraftable) { + return Platform.INSTANCE.getItemGridResourceFactory().apply(resource, autocraftable); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java index 9e8514901..dd3697435 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeDestinations.java @@ -21,7 +21,7 @@ public enum UpgradeDestinations implements UpgradeDestination { DISK_INTERFACE(ContentNames.DISK_INTERFACE, () -> new ItemStack( Items.INSTANCE.getDiskInterfaces().getFirst().get() )), - CRAFTER(ContentNames.CRAFTER, () -> new ItemStack(Items.INSTANCE.getCrafters().getFirst().get())); + AUTOCRAFTER(ContentNames.AUTOCRAFTER, () -> new ItemStack(Items.INSTANCE.getAutocrafters().getFirst().get())); private final Component name; private final Supplier stackFactory; diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 23b21ddc2..aa062d858 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -37,7 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", - "block.refinedstorage.crafter": "Crafter", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", "gui.refinedstorage.disk_drive.disks": "Disks", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -126,7 +126,7 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Crafter with the highest priority.", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", "gui.refinedstorage.configure_amount": "Configure amount", "gui.refinedstorage.configure_amount.reset": "Reset", "gui.refinedstorage.configure_amount.set": "Set", @@ -192,20 +192,20 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", - "gui.refinedstorage.crafter.empty_pattern_slot": "Empty pattern slot", - "gui.refinedstorage.crafter.lock_mode": "Lock mode", - "gui.refinedstorage.crafter.lock_mode.never": "Never", - "gui.refinedstorage.crafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", - "gui.refinedstorage.crafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", - "gui.refinedstorage.crafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", - "gui.refinedstorage.crafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", - "gui.refinedstorage.crafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", - "gui.refinedstorage.crafter.edit_name": "Edit", - "gui.refinedstorage.crafter.chained": "Chained", - "gui.refinedstorage.crafter.chained.help": "This crafter is part of a chain.", - "gui.refinedstorage.crafter.chained.head_help": "This crafter is the head of the chain.", - "gui.refinedstorage.crafter.not_chained": "Not chained", - "gui.refinedstorage.crafter.not_chained.help": "If another crafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", "gui.refinedstorage.autocrafting_preview.start": "Start", "gui.refinedstorage.autocrafting_preview.pending": "Pending", @@ -228,7 +228,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", - "item.refinedstorage.crafter.help": "Accepts patterns to store autocraftable resources.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -589,10 +589,10 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", - "text.autoconfig.refinedstorage.option.crafter": "Crafter", - "text.autoconfig.refinedstorage.option.crafter.tooltip": "Configuration for the Crafter.", - "text.autoconfig.refinedstorage.option.crafter.energyUsage": "Energy usage", - "text.autoconfig.refinedstorage.option.crafter.energyUsage.tooltip": "The energy used by the Crafter.", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -637,5 +637,5 @@ "advancements.refinedstorage.conditional_connecting": "Conditional connecting", "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", "advancements.refinedstorage.autocrafting": "Autocrafting", - "advancements.refinedstorage.autocrafting.description": "Automate crafting with a Crafter by using patterns created in a Pattern Grid" + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/black.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/black.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/black.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/black.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/blue.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/blue.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/blue.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/brown.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/brown.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/brown.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/brown.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/cyan.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/cyan.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/cyan.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/cyan.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/gray.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/gray.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/gray.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/green.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/green.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/green.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/green.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/inactive.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/inactive.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/inactive.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/inactive.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/light_blue.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_blue.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/light_blue.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/light_gray.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/light_gray.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/light_gray.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/lime.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/lime.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/lime.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/lime.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/magenta.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/magenta.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/magenta.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/magenta.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/orange.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/orange.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/orange.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/orange.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/pink.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/pink.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/pink.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/pink.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/purple.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/purple.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/purple.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/purple.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/red.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/red.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/red.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/red.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/white.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/white.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/white.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/white.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/yellow.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/yellow.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/side/yellow.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/side/yellow.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/black.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/black.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/black.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/black.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/blue.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/blue.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/blue.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/brown.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/brown.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/brown.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/brown.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/cyan.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/cyan.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/cyan.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/cyan.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/gray.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/gray.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/gray.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/green.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/green.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/green.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/green.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/inactive.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/inactive.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/inactive.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/inactive.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_blue.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/light_blue.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_blue.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/light_blue.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_gray.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/light_gray.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/light_gray.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/light_gray.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/lime.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/lime.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/lime.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/lime.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/magenta.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/magenta.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/magenta.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/magenta.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/orange.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/orange.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/orange.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/orange.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/pink.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/pink.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/pink.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/pink.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/purple.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/purple.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/purple.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/purple.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/red.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/red.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/red.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/red.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/white.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/white.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/white.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/white.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/yellow.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/yellow.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/cutouts/top/yellow.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/cutouts/top/yellow.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/side.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/side.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/side.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/side.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/top.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/top.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/crafter/top.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/block/autocrafter/top.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/crafter_name.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/autocrafter_name.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/crafter_name.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/autocrafter_name.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_all_outputs_are_received.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_all_outputs_are_received.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_all_outputs_are_received.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_connected_machine_is_empty.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_connected_machine_is_empty.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_connected_machine_is_empty.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_high_redstone_signal.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_high_redstone_signal.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_high_redstone_signal.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_low_redstone_signal.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_low_redstone_signal.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_low_redstone_signal.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_redstone_pulse_is_received.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/lock_until_redstone_pulse_is_received.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/lock_until_redstone_pulse_is_received.png diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/never.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/never.png similarity index 100% rename from refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/crafter_lock_mode/never.png rename to refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/autocrafter_lock_mode/never.png diff --git a/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json b/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json index e8380dc4d..560bcebbc 100644 --- a/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json +++ b/refinedstorage-common/src/main/resources/data/refinedstorage/advancement/autocrafting.json @@ -1,7 +1,7 @@ { "display": { "icon": { - "id": "refinedstorage:crafter" + "id": "refinedstorage:autocrafter" }, "title": { "translate": "advancements.refinedstorage.autocrafting" @@ -12,7 +12,7 @@ }, "parent": "refinedstorage:root", "criteria": { - "crafter_in_inventory": { + "autocrafter_in_inventory": { "trigger": "minecraft:inventory_changed", "conditions": { "items": [ @@ -20,7 +20,7 @@ "items": "#refinedstorage:pattern_grids" }, { - "items": "#refinedstorage:crafters" + "items": "#refinedstorage:autocrafters" }, { "items": "refinedstorage:pattern" diff --git a/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json b/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/autocrafter.json similarity index 92% rename from refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json rename to refinedstorage-common/src/main/resources/data/refinedstorage/recipe/autocrafter.json index 28a5ec9fc..04f6c3a2e 100644 --- a/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/crafter.json +++ b/refinedstorage-common/src/main/resources/data/refinedstorage/recipe/autocrafter.json @@ -23,6 +23,6 @@ } }, "result": { - "id": "refinedstorage:crafter" + "id": "refinedstorage:autocrafter" } } \ No newline at end of file diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java index 37e89fd79..a795f8784 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ClientModInitializerImpl.java @@ -19,9 +19,9 @@ import com.refinedmods.refinedstorage.common.storagemonitor.StorageMonitorBlockEntityRenderer; import com.refinedmods.refinedstorage.common.support.network.item.NetworkItemPropertyFunction; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingResponsePacket; -import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridClearPacket; @@ -127,7 +127,7 @@ private void setRenderLayers() { setCutout(Blocks.INSTANCE.getSecurityManager()); setCutout(Blocks.INSTANCE.getRelay()); setCutout(Blocks.INSTANCE.getDiskInterface()); - setCutout(Blocks.INSTANCE.getCrafter()); + setCutout(Blocks.INSTANCE.getAutocrafter()); } private void setCutout(final BlockColorMap blockMap) { @@ -156,7 +156,7 @@ private void registerEmissiveModels() { (color, id, block) -> registerEmissiveSecurityManagerModels(color, id) ); Blocks.INSTANCE.getRelay().forEach((color, id, block) -> registerEmissiveRelayModels(color, id)); - Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> registerEmissiveCrafterModels(color, id)); + Blocks.INSTANCE.getAutocrafter().forEach((color, id, block) -> registerEmissiveAutocrafterModels(color, id)); } private void registerColoredEmissiveModels(final BlockColorMap blockMap, @@ -234,16 +234,16 @@ private void registerEmissiveRelayModels(final DyeColor color, final ResourceLoc ); } - private void registerEmissiveCrafterModels(final DyeColor color, final ResourceLocation id) { + private void registerEmissiveAutocrafterModels(final DyeColor color, final ResourceLocation id) { EmissiveModelRegistry.INSTANCE.register( - createIdentifier(BLOCK_PREFIX + "/crafter/" + color.getName()), - createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/side/" + color.getName()), - createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/top/" + color.getName()) + createIdentifier(BLOCK_PREFIX + "/autocrafter/" + color.getName()), + createIdentifier(BLOCK_PREFIX + "/autocrafter/cutouts/side/" + color.getName()), + createIdentifier(BLOCK_PREFIX + "/autocrafter/cutouts/top/" + color.getName()) ); EmissiveModelRegistry.INSTANCE.register( createIdentifier(ITEM_PREFIX + "/" + id.getPath()), - createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/side/" + color.getName()), - createIdentifier(BLOCK_PREFIX + "/crafter/cutouts/top/" + color.getName()) + createIdentifier(BLOCK_PREFIX + "/autocrafter/cutouts/side/" + color.getName()), + createIdentifier(BLOCK_PREFIX + "/autocrafter/cutouts/top/" + color.getName()) ); } @@ -289,8 +289,8 @@ private void registerPacketHandlers() { wrapHandler(PatternGridAllowedAlternativesUpdatePacket::handle) ); ClientPlayNetworking.registerGlobalReceiver( - CrafterNameUpdatePacket.PACKET_TYPE, - wrapHandler(CrafterNameUpdatePacket::handle) + AutocrafterNameUpdatePacket.PACKET_TYPE, + wrapHandler(AutocrafterNameUpdatePacket::handle) ); ClientPlayNetworking.registerGlobalReceiver( AutocraftingPreviewResponsePacket.PACKET_TYPE, diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java index 1ef490941..ed77c12bf 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java @@ -120,8 +120,8 @@ public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage.co private RelayEntryImpl relay = new RelayEntryImpl(); @ConfigEntry.Gui.CollapsibleObject - private SimpleEnergyUsageEntryImpl crafter = new SimpleEnergyUsageEntryImpl( - DefaultEnergyUsage.CRAFTER + private SimpleEnergyUsageEntryImpl autocrafter = new SimpleEnergyUsageEntryImpl( + DefaultEnergyUsage.AUTOCRAFTER ); public static ConfigImpl get() { @@ -285,8 +285,8 @@ public RelayEntry getRelay() { } @Override - public SimpleEnergyUsageEntry getCrafter() { - return crafter; + public SimpleEnergyUsageEntry getAutocrafter() { + return autocrafter; } private static class GridEntryImpl implements GridEntry { diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index dc3f23626..37d2390c8 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -29,9 +29,9 @@ import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingPreviewRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingRequestPacket; -import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.FilterSlotChangePacket; @@ -55,9 +55,9 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingResponsePacket; -import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridClearPacket; @@ -444,8 +444,8 @@ private void registerServerToClientPackets() { PatternGridAllowedAlternativesUpdatePacket.STREAM_CODEC ); PayloadTypeRegistry.playS2C().register( - CrafterNameUpdatePacket.PACKET_TYPE, - CrafterNameUpdatePacket.STREAM_CODEC + AutocrafterNameUpdatePacket.PACKET_TYPE, + AutocrafterNameUpdatePacket.STREAM_CODEC ); PayloadTypeRegistry.playS2C().register( AutocraftingPreviewResponsePacket.PACKET_TYPE, @@ -539,8 +539,8 @@ private void registerClientToServerPackets() { PatternGridSmithingTableRecipeTransferPacket.STREAM_CODEC ); PayloadTypeRegistry.playC2S().register( - CrafterNameChangePacket.PACKET_TYPE, - CrafterNameChangePacket.STREAM_CODEC + AutocrafterNameChangePacket.PACKET_TYPE, + AutocrafterNameChangePacket.STREAM_CODEC ); PayloadTypeRegistry.playC2S().register( AutocraftingPreviewRequestPacket.PACKET_TYPE, @@ -646,8 +646,8 @@ private void registerPacketHandlers() { wrapHandler(PatternGridSmithingTableRecipeTransferPacket::handle) ); ServerPlayNetworking.registerGlobalReceiver( - CrafterNameChangePacket.PACKET_TYPE, - wrapHandler(CrafterNameChangePacket::handle) + AutocrafterNameChangePacket.PACKET_TYPE, + wrapHandler(AutocrafterNameChangePacket::handle) ); ServerPlayNetworking.registerGlobalReceiver( AutocraftingPreviewRequestPacket.PACKET_TYPE, @@ -691,7 +691,7 @@ private void registerCapabilities() { registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getSecurityManager()); registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getStorageMonitor()); registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getWirelessTransmitter()); - registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getCrafter()); + registerNetworkNodeContainerProvider(BlockEntities.INSTANCE.getAutocrafter()); registerItemStorage( AbstractDiskDriveBlockEntity.class::isInstance, AbstractDiskDriveBlockEntity.class::cast, diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java index 8000b9bdb..c90be235a 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResource.java @@ -20,5 +20,5 @@ public interface GridResource { Set getAttribute(GridResourceAttributeKey key); - boolean isCraftable(); + boolean isAutocraftable(); } diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java index 55913ebe4..87e73bac7 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceFactory.java @@ -15,9 +15,9 @@ public interface GridResourceFactory { /** * Transforms a {@link com.refinedmods.refinedstorage.api.resource.ResourceKey} into a {@link GridResource}. * - * @param resource the resource - * @param craftable whether the resource is craftable + * @param resource the resource + * @param autocraftable whether the resource is autocraftable * @return the grid resource, if applicable */ - Optional apply(ResourceKey resource, boolean craftable); + Optional apply(ResourceKey resource, boolean autocraftable); } diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java index c29deb64c..ddfce8352 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridView.java @@ -72,9 +72,9 @@ public interface GridView { /** * @param resource the resource - * @return whether its craftable + * @return whether its autocraftable */ - boolean isCraftable(ResourceKey resource); + boolean isAutocraftable(ResourceKey resource); /** * Sorts the view list. diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java index 99ca4573f..fe2014157 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilder.java @@ -23,12 +23,12 @@ public interface GridViewBuilder { GridViewBuilder withResource(ResourceKey resource, long amount, @Nullable TrackedResource trackedResource); /** - * Adds a resource into the view and marks it as craftable. + * Adds a resource into the view and marks it as autocraftable. * * @param resource the resource * @return this builder */ - GridViewBuilder withCraftableResource(ResourceKey resource); + GridViewBuilder withAutocraftableResource(ResourceKey resource); /** * @return a {@link GridView} with the specified resources diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java index 8bc9c0b13..4744f4dc3 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewBuilderImpl.java @@ -17,7 +17,7 @@ public class GridViewBuilderImpl implements GridViewBuilder { private final GridResourceFactory resourceFactory; private final MutableResourceList backingList = MutableResourceListImpl.create(); - private final Set craftableResources = new HashSet<>(); + private final Set autocraftableResources = new HashSet<>(); private final Map trackedResources = new HashMap<>(); private final GridSortingType identitySortingType; private final GridSortingType defaultSortingType; @@ -40,8 +40,8 @@ public GridViewBuilder withResource(final ResourceKey resource, } @Override - public GridViewBuilder withCraftableResource(final ResourceKey resource) { - craftableResources.add(resource); + public GridViewBuilder withAutocraftableResource(final ResourceKey resource) { + autocraftableResources.add(resource); return this; } @@ -51,7 +51,7 @@ public GridView build() { resourceFactory, backingList, trackedResources, - craftableResources, + autocraftableResources, identitySortingType, defaultSortingType ); diff --git a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java index c4b0f4f7f..af9b066a1 100644 --- a/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java +++ b/refinedstorage-grid-api/src/main/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImpl.java @@ -28,7 +28,7 @@ public class GridViewImpl implements GridView { private final Comparator identitySort; private final GridResourceFactory resourceFactory; private final Map trackedResources = new HashMap<>(); - private final Set craftableResources; + private final Set autocraftableResources; private ViewList viewList = new ViewList(new ArrayList<>(), new HashMap<>()); private GridSortingType sortingType; @@ -44,12 +44,12 @@ public class GridViewImpl implements GridView { * @param initialTrackedResources initial tracked resources state * @param identitySortingType a sorting type required to keep a consistent sorting order with quantity sorting * @param defaultSortingType the default sorting type - * @param craftableResources resources which are craftable and must stay in the view list + * @param autocraftableResources resources which are autocraftable and must stay in the view list */ public GridViewImpl(final GridResourceFactory resourceFactory, final MutableResourceList backingList, final Map initialTrackedResources, - final Set craftableResources, + final Set autocraftableResources, final GridSortingType identitySortingType, final GridSortingType defaultSortingType) { this.resourceFactory = resourceFactory; @@ -57,7 +57,7 @@ public GridViewImpl(final GridResourceFactory resourceFactory, this.sortingType = defaultSortingType; this.backingList = backingList; this.trackedResources.putAll(initialTrackedResources); - this.craftableResources = craftableResources; + this.autocraftableResources = autocraftableResources; } @Override @@ -101,8 +101,8 @@ public long getAmount(final ResourceKey resource) { } @Override - public boolean isCraftable(final ResourceKey resource) { - return craftableResources.contains(resource); + public boolean isAutocraftable(final ResourceKey resource) { + return autocraftableResources.contains(resource); } @Override @@ -116,11 +116,11 @@ private ViewList createViewList() { final List list = new ArrayList<>(); final Map index = new HashMap<>(); for (final ResourceKey resource : backingList.getAll()) { - tryAddResourceIntoViewList(resource, list, index, craftableResources.contains(resource)); + tryAddResourceIntoViewList(resource, list, index, autocraftableResources.contains(resource)); } - for (final ResourceKey craftableResource : craftableResources) { - if (!index.containsKey(craftableResource)) { - tryAddResourceIntoViewList(craftableResource, list, index, true); + for (final ResourceKey autocraftableResource : autocraftableResources) { + if (!index.containsKey(autocraftableResource)) { + tryAddResourceIntoViewList(autocraftableResource, list, index, true); } } list.sort(getComparator()); @@ -130,12 +130,12 @@ private ViewList createViewList() { private void tryAddResourceIntoViewList(final ResourceKey resource, final List list, final Map index, - final boolean craftable) { + final boolean autocraftable) { final GridResource existingGridResource = viewList.index.get(resource); if (existingGridResource != null) { tryAddGridResourceIntoViewList(existingGridResource, list, index, resource); } else { - resourceFactory.apply(resource, craftable).ifPresent( + resourceFactory.apply(resource, autocraftable).ifPresent( gridResource -> tryAddGridResourceIntoViewList(gridResource, list, index, resource) ); } @@ -193,7 +193,7 @@ private void reinsertIntoViewList(final ResourceKey resource, final GridResource LOGGER.debug("{} was removed from backing list, reinserting now into the view list", resource); final GridResource newResource = resourceFactory.apply( resource, - craftableResources.contains(resource) + autocraftableResources.contains(resource) ).orElseThrow(); viewList.index.put(resource, newResource); final int index = CoreValidations.validateNotNegative( @@ -222,7 +222,7 @@ private void updateExistingResourceInViewList(final ResourceKey resource, final GridResource gridResource, final boolean noLongerAvailable) { viewList.list.remove(gridResource); - if (noLongerAvailable && !craftableResources.contains(resource)) { + if (noLongerAvailable && !autocraftableResources.contains(resource)) { viewList.index.remove(resource); notifyListener(); } else { diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java index 254269cfb..e2853833a 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java @@ -324,7 +324,7 @@ public Set getAttribute(final GridResourceAttributeKey key) { } @Override - public boolean isCraftable() { + public boolean isAutocraftable() { return false; } } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java index 71ff063dc..64d8c216a 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java @@ -11,23 +11,23 @@ public class GridResourceImpl implements GridResource { private final ResourceKey resource; private final Map> attributes; - private boolean craftable; + private boolean autocraftable; public GridResourceImpl(final ResourceKey resource) { this(resource, false); } - public GridResourceImpl(final ResourceKey resource, final boolean craftable) { + public GridResourceImpl(final ResourceKey resource, final boolean autocraftable) { this.resource = resource; this.attributes = Map.of( FakeGridResourceAttributeKeys.MOD_ID, Set.of(resource.toString()), FakeGridResourceAttributeKeys.MOD_NAME, Set.of(resource.toString()) ); - this.craftable = craftable; + this.autocraftable = autocraftable; } - public GridResourceImpl craftable() { - craftable = true; + public GridResourceImpl autocraftable() { + autocraftable = true; return this; } @@ -52,8 +52,8 @@ public Set getAttribute(final GridResourceAttributeKey key) { } @Override - public boolean isCraftable() { - return craftable; + public boolean isAutocraftable() { + return autocraftable; } @Override diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java index 67b253280..e907e4eff 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridViewImplTest.java @@ -657,11 +657,11 @@ void shouldClear() { } @Test - void shouldIncludeCraftableResourceInViewList() { + void shouldIncludeAutocraftableResourceInViewList() { // Arrange final GridView view = viewBuilder .withResource(A, 15, null) - .withCraftableResource(B) + .withAutocraftableResource(B) .build(); // Act @@ -670,10 +670,10 @@ void shouldIncludeCraftableResourceInViewList() { // Assert assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( new GridResourceImpl(A), - new GridResourceImpl(B).craftable() + new GridResourceImpl(B).autocraftable() ); - assertThat(view.isCraftable(A)).isFalse(); - assertThat(view.isCraftable(B)).isTrue(); + assertThat(view.isAutocraftable(A)).isFalse(); + assertThat(view.isAutocraftable(B)).isTrue(); assertThat(view.getAmount(A)).isEqualTo(15); assertThat(view.getAmount(B)).isZero(); assertThat(view.copyBackingList().copyState()).usingRecursiveFieldByFieldElementComparator() @@ -681,11 +681,11 @@ void shouldIncludeCraftableResourceInViewList() { } @Test - void shouldIncludeCraftableResourceInViewListEvenIfItIsInTheBackingList() { + void shouldIncludeAutocraftableResourceInViewListEvenIfItIsInTheBackingList() { // Arrange final GridView view = viewBuilder .withResource(A, 15, null) - .withCraftableResource(A) + .withAutocraftableResource(A) .build(); // Act @@ -693,9 +693,9 @@ void shouldIncludeCraftableResourceInViewListEvenIfItIsInTheBackingList() { // Assert assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( - new GridResourceImpl(A).craftable() + new GridResourceImpl(A).autocraftable() ); - assertThat(view.isCraftable(A)).isTrue(); + assertThat(view.isAutocraftable(A)).isTrue(); assertThat(view.getAmount(A)).isEqualTo(15); assertThat(view.copyBackingList().copyState()) .usingRecursiveFieldByFieldElementComparator() @@ -703,11 +703,11 @@ void shouldIncludeCraftableResourceInViewListEvenIfItIsInTheBackingList() { } @Test - void shouldNotRemoveCraftableResource() { + void shouldNotRemoveAutocraftableResource() { // Arrange final GridView view = viewBuilder .withResource(A, 15, null) - .withCraftableResource(A) + .withAutocraftableResource(A) .build(); view.sort(); @@ -717,19 +717,19 @@ void shouldNotRemoveCraftableResource() { // Assert assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( - new GridResourceImpl(A).craftable() + new GridResourceImpl(A).autocraftable() ); - assertThat(view.isCraftable(A)).isTrue(); + assertThat(view.isAutocraftable(A)).isTrue(); assertThat(view.getAmount(A)).isZero(); assertThat(view.copyBackingList().copyState()).isEmpty(); } @Test - void shouldNotRemoveCraftableResourceEvenWhenPreventingSorting() { + void shouldNotRemoveAutocraftableResourceEvenWhenPreventingSorting() { // Arrange final GridView view = viewBuilder .withResource(A, 15, null) - .withCraftableResource(A) + .withAutocraftableResource(A) .build(); view.sort(); @@ -739,18 +739,18 @@ void shouldNotRemoveCraftableResourceEvenWhenPreventingSorting() { view.onChange(A, -15, null); assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( - new GridResourceImpl(A).craftable() + new GridResourceImpl(A).autocraftable() ); - assertThat(view.isCraftable(A)).isTrue(); + assertThat(view.isAutocraftable(A)).isTrue(); assertThat(view.getAmount(A)).isZero(); assertThat(view.copyBackingList().copyState()).isEmpty(); view.onChange(A, 1, null); assertThat(view.getViewList()).usingRecursiveFieldByFieldElementComparator().containsExactly( - new GridResourceImpl(A).craftable() + new GridResourceImpl(A).autocraftable() ); - assertThat(view.isCraftable(A)).isTrue(); + assertThat(view.isAutocraftable(A)).isTrue(); assertThat(view.getAmount(A)).isEqualTo(1); assertThat(view.copyBackingList().copyState()).usingRecursiveFieldByFieldElementComparator().containsExactly( new ResourceAmount(A, 1) diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java index d92758624..ec2a356bc 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java @@ -52,7 +52,7 @@ public class ConfigImpl implements Config { private final SimpleEnergyUsageEntry fallbackSecurityCard; private final SimpleEnergyUsageEntry securityManager; private final RelayEntry relay; - private final SimpleEnergyUsageEntry crafter; + private final SimpleEnergyUsageEntry autocrafter; public ConfigImpl() { screenSize = builder @@ -97,7 +97,7 @@ public ConfigImpl() { ); securityManager = new SimpleEnergyUsageEntryImpl("securityManager", DefaultEnergyUsage.SECURITY_MANAGER); relay = new RelayEntryImpl(); - crafter = new SimpleEnergyUsageEntryImpl("crafter", DefaultEnergyUsage.CRAFTER); + autocrafter = new SimpleEnergyUsageEntryImpl("autocrafter", DefaultEnergyUsage.AUTOCRAFTER); spec = builder.build(); } @@ -264,8 +264,8 @@ public RelayEntry getRelay() { } @Override - public SimpleEnergyUsageEntry getCrafter() { - return crafter; + public SimpleEnergyUsageEntry getAutocrafter() { + return autocrafter; } private static String translationKey(final String value) { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index a8b9ebd5a..2964aed52 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -29,9 +29,9 @@ import com.refinedmods.refinedstorage.common.storage.portablegrid.PortableGridType; import com.refinedmods.refinedstorage.common.support.AbstractBaseBlock; import com.refinedmods.refinedstorage.common.support.packet.PacketHandler; +import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingPreviewRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.AutocraftingRequestPacket; -import com.refinedmods.refinedstorage.common.support.packet.c2s.CrafterNameChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridClearPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.CraftingGridRecipeTransferPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.FilterSlotChangePacket; @@ -55,9 +55,9 @@ import com.refinedmods.refinedstorage.common.support.packet.c2s.SingleAmountChangePacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.StorageInfoRequestPacket; import com.refinedmods.refinedstorage.common.support.packet.c2s.UseSlotReferencedItemPacket; +import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingPreviewResponsePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.AutocraftingResponsePacket; -import com.refinedmods.refinedstorage.common.support.packet.s2c.CrafterNameUpdatePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.EnergyInfoPacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridActivePacket; import com.refinedmods.refinedstorage.common.support.packet.s2c.GridClearPacket; @@ -429,7 +429,7 @@ private void registerCapabilities(final RegisterCapabilitiesEvent event) { registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getSecurityManager()); registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getStorageMonitor()); registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getWirelessTransmitter()); - registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getCrafter()); + registerNetworkNodeContainerProvider(event, BlockEntities.INSTANCE.getAutocrafter()); event.registerBlockEntity( Capabilities.ItemHandler.BLOCK, BlockEntities.INSTANCE.getDiskDrive(), @@ -631,9 +631,9 @@ private static void registerServerToClientPackets(final PayloadRegistrar registr wrapHandler(PatternGridAllowedAlternativesUpdatePacket::handle) ); registrar.playToClient( - CrafterNameUpdatePacket.PACKET_TYPE, - CrafterNameUpdatePacket.STREAM_CODEC, - wrapHandler(CrafterNameUpdatePacket::handle) + AutocrafterNameUpdatePacket.PACKET_TYPE, + AutocrafterNameUpdatePacket.STREAM_CODEC, + wrapHandler(AutocrafterNameUpdatePacket::handle) ); registrar.playToClient( AutocraftingPreviewResponsePacket.PACKET_TYPE, @@ -764,9 +764,9 @@ private static void registerClientToServerPackets(final PayloadRegistrar registr wrapHandler(PatternGridSmithingTableRecipeTransferPacket::handle) ); registrar.playToServer( - CrafterNameChangePacket.PACKET_TYPE, - CrafterNameChangePacket.STREAM_CODEC, - wrapHandler(CrafterNameChangePacket::handle) + AutocrafterNameChangePacket.PACKET_TYPE, + AutocrafterNameChangePacket.STREAM_CODEC, + wrapHandler(AutocrafterNameChangePacket::handle) ); registrar.playToServer( AutocraftingPreviewRequestPacket.PACKET_TYPE, diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java index 9149cea2f..042161937 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockModelProviderImpl.java @@ -58,7 +58,7 @@ protected void registerModels() { registerSecurityManagers(); registerRelays(); registerDiskInterfaces(); - registerCrafters(); + registerAutocrafters(); } private void registerCables() { @@ -294,13 +294,13 @@ private void registerDiskInterfaces() { }).end()); } - private void registerCrafters() { - final ResourceLocation side = createIdentifier("block/crafter/side"); - final ResourceLocation top = createIdentifier("block/crafter/top"); - Blocks.INSTANCE.getCrafter().forEach((color, id, crafter) -> { - final ResourceLocation cutoutSide = createIdentifier("block/crafter/cutouts/side/" + color.getName()); - final ResourceLocation cutoutTop = createIdentifier("block/crafter/cutouts/top/" + color.getName()); - withExistingParent("block/crafter/" + color.getName(), EMISSIVE_CUTOUT) + private void registerAutocrafters() { + final ResourceLocation side = createIdentifier("block/autocrafter/side"); + final ResourceLocation top = createIdentifier("block/autocrafter/top"); + Blocks.INSTANCE.getAutocrafter().forEach((color, id, autocrafter) -> { + final ResourceLocation cutoutSide = createIdentifier("block/autocrafter/cutouts/side/" + color.getName()); + final ResourceLocation cutoutTop = createIdentifier("block/autocrafter/cutouts/top/" + color.getName()); + withExistingParent("block/autocrafter/" + color.getName(), EMISSIVE_CUTOUT) .texture(PARTICLE_TEXTURE, side) .texture(NORTH, side) .texture(EAST, side) @@ -315,9 +315,9 @@ private void registerCrafters() { .texture(CUTOUT_UP, cutoutTop) .texture(CUTOUT_DOWN, BOTTOM_TEXTURE); }); - final ResourceLocation cutoutSide = createIdentifier("block/crafter/cutouts/side/inactive"); - final ResourceLocation cutoutTop = createIdentifier("block/crafter/cutouts/top/inactive"); - withExistingParent("block/crafter/inactive", CUTOUT) + final ResourceLocation cutoutSide = createIdentifier("block/autocrafter/cutouts/side/inactive"); + final ResourceLocation cutoutTop = createIdentifier("block/autocrafter/cutouts/top/inactive"); + withExistingParent("block/autocrafter/inactive", CUTOUT) .texture(PARTICLE_TEXTURE, side) .texture(NORTH, side) .texture(EAST, side) diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java index b65ef7032..23d382e0e 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/BlockStateProviderImpl.java @@ -58,7 +58,7 @@ protected void registerStatesAndModels() { registerSecurityManagers(); registerRelays(); registerDiskInterfaces(); - registerCrafters(); + registerAutocrafters(); } private void registerCables() { @@ -306,10 +306,10 @@ private void registerDiskInterfaces() { }); } - private void registerCrafters() { - final ModelFile inactive = modelFile(createIdentifier(BLOCK_PREFIX + "/crafter/inactive")); - Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> { - final ModelFile active = modelFile(createIdentifier(BLOCK_PREFIX + "/crafter/" + color.getName())); + private void registerAutocrafters() { + final ModelFile inactive = modelFile(createIdentifier(BLOCK_PREFIX + "/autocrafter/inactive")); + Blocks.INSTANCE.getAutocrafter().forEach((color, id, block) -> { + final ModelFile active = modelFile(createIdentifier(BLOCK_PREFIX + "/autocrafter/" + color.getName())); final var builder = getVariantBuilder(block.get()); builder.forAllStates(blockState -> { final ConfiguredModel.Builder model = ConfiguredModel.builder(); @@ -319,7 +319,7 @@ private void registerCrafters() { model.modelFile(inactive); } final Direction direction = blockState.getValue(DefaultDirectionType.FACE_PLAYER.getProperty()); - addCrafterRotation(model, direction); + addAutocrafterRotation(model, direction); return model.build(); }); }); @@ -368,7 +368,7 @@ private void addRotationFrontFacingNorth(final ConfiguredModel.Builder model, } } - private void addCrafterRotation(final ConfiguredModel.Builder model, final Direction direction) { + private void addAutocrafterRotation(final ConfiguredModel.Builder model, final Direction direction) { if (direction.getAxis().isHorizontal()) { model.rotationX(90); } else if (direction == Direction.DOWN) { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java index b6a8ab5a8..983a523ab 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/ItemModelProviderImpl.java @@ -51,7 +51,7 @@ protected void registerModels() { registerSecurityManagers(); registerRelays(); registerDiskInterfaces(); - registerCrafters(); + registerAutocrafters(); } private void registerCables() { @@ -219,11 +219,11 @@ private void registerDiskInterfaces() { }).end()); } - private void registerCrafters() { - final var blocks = Blocks.INSTANCE.getCrafter(); + private void registerAutocrafters() { + final var blocks = Blocks.INSTANCE.getAutocrafter(); blocks.forEach((color, id, block) -> withExistingParent( id.getPath(), - createIdentifier("block/crafter/" + color.getName()) + createIdentifier("block/autocrafter/" + color.getName()) )); } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java index ef6ecb06b..32b2fa6c4 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/loot/BlockDropProvider.java @@ -41,7 +41,7 @@ protected void generate() { Blocks.INSTANCE.getSecurityManager().forEach((color, id, block) -> drop(block.get())); Blocks.INSTANCE.getRelay().forEach((color, id, block) -> drop(block.get())); Blocks.INSTANCE.getDiskInterface().forEach((color, id, block) -> drop(block.get())); - Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> drop(block.get())); + Blocks.INSTANCE.getAutocrafter().forEach((color, id, block) -> drop(block.get())); } private void drop(final Block block) { @@ -72,7 +72,7 @@ protected Iterable getKnownBlocks() { blocks.addAll(Blocks.INSTANCE.getSecurityManager().values()); blocks.addAll(Blocks.INSTANCE.getRelay().values()); blocks.addAll(Blocks.INSTANCE.getDiskInterface().values()); - blocks.addAll(Blocks.INSTANCE.getCrafter().values()); + blocks.addAll(Blocks.INSTANCE.getAutocrafter().values()); return blocks; } } diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java index 4429b8bcb..ac3b84b27 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/recipe/RecoloringRecipeProvider.java @@ -77,9 +77,9 @@ protected void buildRecipes(final RecipeOutput output) { Blocks.INSTANCE.getDiskInterface().forEach((color, id, block) -> recipe(Tags.DISK_INTERFACES, block.get().asItem(), color) .save(output, recipeId(color, "disk_interface"))); - Blocks.INSTANCE.getCrafter().forEach((color, id, block) -> - recipe(Tags.CRAFTERS, block.get().asItem(), color) - .save(output, recipeId(color, "crafter"))); + Blocks.INSTANCE.getAutocrafter().forEach((color, id, block) -> + recipe(Tags.AUTOCRAFTERS, block.get().asItem(), color) + .save(output, recipeId(color, "autocrafter"))); } private ResourceLocation recipeId(final DyeColor color, final String suffix) { diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java index 21a10d74f..290721ca4 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/datagen/tag/ItemTagsProviderImpl.java @@ -20,10 +20,10 @@ import net.minecraft.world.level.block.Block; import net.neoforged.neoforge.common.data.ExistingFileHelper; +import static com.refinedmods.refinedstorage.common.content.Tags.AUTOCRAFTERS; import static com.refinedmods.refinedstorage.common.content.Tags.CABLES; import static com.refinedmods.refinedstorage.common.content.Tags.CONSTRUCTORS; import static com.refinedmods.refinedstorage.common.content.Tags.CONTROLLERS; -import static com.refinedmods.refinedstorage.common.content.Tags.CRAFTERS; import static com.refinedmods.refinedstorage.common.content.Tags.CRAFTING_GRIDS; import static com.refinedmods.refinedstorage.common.content.Tags.CREATIVE_CONTROLLERS; import static com.refinedmods.refinedstorage.common.content.Tags.DESTRUCTORS; @@ -131,8 +131,8 @@ protected void addTags(final HolderLookup.Provider provider) { Blocks.INSTANCE.getDiskInterface().values().stream() .map(block -> (Supplier) block::asItem) .toList()); - addAllToTag(CRAFTERS, - Blocks.INSTANCE.getCrafter().values().stream() + addAllToTag(AUTOCRAFTERS, + Blocks.INSTANCE.getAutocrafter().values().stream() .map(block -> (Supplier) block::asItem) .toList()); } From f44c58d18f328ed951758dafe0ac81c8442ffeae Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 5 Oct 2024 12:32:18 +0200 Subject: [PATCH 55/83] feat: necessary code to support autocrafting from recipe mods --- build.gradle.kts | 9 ++++ .../common/api/RefinedStorageApi.java | 2 +- .../common/api/RefinedStorageApiProxy.java | 4 +- .../common/RefinedStorageApiImpl.java | 18 ++------ .../autocrafting/AutocrafterScreen.java | 11 ----- .../ProcessingPatternGridRenderer.java | 2 +- .../AutocraftingPreviewContainerMenu.java | 37 ++++++++------- .../preview/AutocraftingPreviewListener.java | 2 +- .../preview/AutocraftingPreviewScreen.java | 15 +++---- .../preview/AutocraftingRequest.java | 32 ++++++------- .../grid/AbstractGridContainerMenu.java | 13 ++++++ .../grid/AutocraftableResourceHint.java | 4 +- .../grid/CraftingGridContainerMenu.java | 2 +- .../grid/screen/AbstractGridScreen.java | 45 +++++++++++++------ .../common/util/ClientPlatformUtil.java | 20 ++++++++- 15 files changed, 124 insertions(+), 92 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e7891180d..7ad772db3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,3 +21,12 @@ project.extensions.getByType().apply { ) } } + +allprojects { + apply(plugin = "publishing") + publishing { + repositories { + mavenLocal() + } + } +} diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index 73afb28de..12fc45d48 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -206,5 +206,5 @@ EnergyStorage asBlockItemEnergyStorage( Optional getPattern(ItemStack stack, Level level); - void openCraftingPreview(List requests); + void openCraftingPreview(List requests, @Nullable Object parentScreen); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java index 267910bd2..3f3ac500f 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java @@ -404,8 +404,8 @@ public Optional getPattern(final ItemStack stack, final Level level) { } @Override - public void openCraftingPreview(final List requests) { - ensureLoaded().openCraftingPreview(requests); + public void openCraftingPreview(final List requests, @Nullable final Object parentScreen) { + ensureLoaded().openCraftingPreview(requests, parentScreen); } private RefinedStorageApi ensureLoaded() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 1daca02e8..869e005f1 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -50,8 +50,6 @@ import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReferenceProvider; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; -import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingRequest; import com.refinedmods.refinedstorage.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage.common.grid.screen.hint.GridInsertionHintsImpl; import com.refinedmods.refinedstorage.common.grid.screen.hint.ItemGridInsertionHint; @@ -82,6 +80,7 @@ import com.refinedmods.refinedstorage.common.support.slotreference.CompositeSlotReferenceProvider; import com.refinedmods.refinedstorage.common.support.slotreference.InventorySlotReference; import com.refinedmods.refinedstorage.common.upgrade.UpgradeRegistryImpl; +import com.refinedmods.refinedstorage.common.util.ClientPlatformUtil; import com.refinedmods.refinedstorage.common.util.IdentifierUtil; import com.refinedmods.refinedstorage.common.util.ServerEventQueue; @@ -102,14 +101,12 @@ import java.util.stream.Collectors; import javax.annotation.Nullable; -import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.Item; @@ -602,19 +599,10 @@ public Optional getPattern(final ItemStack stack, final Level level) { } @Override - public void openCraftingPreview(final List requests) { + public void openCraftingPreview(final List requests, @Nullable final Object parentScreen) { if (requests.isEmpty()) { return; } - final Minecraft minecraft = Minecraft.getInstance(); - if (minecraft.screen == null || minecraft.player == null) { - return; - } - final Inventory inventory = minecraft.player.getInventory(); - minecraft.setScreen(new AutocraftingPreviewScreen( - minecraft.screen, - inventory, - requests.stream().map(AutocraftingRequest::of).toList() - )); + ClientPlatformUtil.openCraftingPreview(requests, parentScreen); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java index ab50b8f88..913f464e6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterScreen.java @@ -93,17 +93,6 @@ protected void renderBg(final GuiGraphics graphics, final float delta, final int } } - @Override - public boolean mouseClicked(final double mouseX, final double mouseY, final int clickedButton) { - if (!editName && getMenu().canChangeName() && isHovering( - titleLabelX, titleLabelY, titleMarquee.getEffectiveWidth(font), font.lineHeight, mouseX, mouseY - )) { - setEditName(true); - return true; - } - return super.mouseClicked(mouseX, mouseY, clickedButton); - } - @Override protected void init() { super.init(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java index 467b224d1..71ca95ca9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/ProcessingPatternGridRenderer.java @@ -252,7 +252,7 @@ private void renderMatrixSlot(final GuiGraphics graphics, final ResourceSlot resourceSlot, final ProcessingMatrixResourceSlot matrixSlot) { if (matrixSlot.getResource() != null && menu.getView().isAutocraftable(matrixSlot.getResource())) { - AbstractGridScreen.renderCraftableBackground( + AbstractGridScreen.renderSlotBackground( graphics, resourceSlot.x + leftPos, resourceSlot.y + topPos, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java index 2b9bc38d9..3534d49e5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewContainerMenu.java @@ -65,40 +65,43 @@ void setCurrentRequest(final AutocraftingRequest request) { } void amountChanged(final double amount) { - if (currentRequest.trySendRequest(amount) && listener != null) { + if (currentRequest.sendPreviewRequest(amount) && listener != null) { listener.previewChanged(null); } } public void previewResponseReceived(final UUID id, final AutocraftingPreview preview) { - if (currentRequest.previewReceived(id, preview) && listener != null) { + if (!currentRequest.getId().equals(id)) { + return; + } + currentRequest.previewResponseReceived(preview); + if (listener != null) { listener.previewChanged(preview); } } void loadCurrentRequest() { + currentRequest.clearPreview(); if (listener != null) { - currentRequest.clearPreview(); listener.requestChanged(currentRequest); } } - void startRequest(final double amount) { - currentRequest.start(amount); + void sendRequest(final double amount) { + currentRequest.sendRequest(amount); } - boolean requestStarted(final UUID id) { - if (currentRequest.isStarted(id)) { - if (listener != null) { - listener.requestRemoved(currentRequest); - } - requests.remove(currentRequest); - if (!requests.isEmpty()) { - setCurrentRequest(requests.getFirst()); - return false; - } - return true; + public void responseReceived(final UUID id, final boolean started) { + if (!currentRequest.getId().equals(id) || !started) { + return; + } + requests.remove(currentRequest); + final boolean last = requests.isEmpty(); + if (listener != null) { + listener.requestRemoved(currentRequest, last); + } + if (!last) { + setCurrentRequest(requests.getFirst()); } - return false; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java index 5ba959f4e..5b38d81e8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewListener.java @@ -9,5 +9,5 @@ interface AutocraftingPreviewListener { void previewChanged(@Nullable AutocraftingPreview preview); - void requestRemoved(AutocraftingRequest request); + void requestRemoved(AutocraftingRequest request, boolean last); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java index fabe0d70a..2aec4e0de 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingPreviewScreen.java @@ -13,7 +13,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.UUID; import javax.annotation.Nullable; import com.google.common.util.concurrent.RateLimiter; @@ -453,7 +452,7 @@ protected void reset() { @Override protected boolean confirm(final Double amount) { setPending(); - getMenu().startRequest(amount); + getMenu().sendRequest(amount); return false; } @@ -468,7 +467,11 @@ public void previewChanged(@Nullable final AutocraftingPreview preview) { } @Override - public void requestRemoved(final AutocraftingRequest request) { + public void requestRemoved(final AutocraftingRequest request, final boolean last) { + if (last) { + close(); + return; + } requestButtons.removeIf(requestButton -> requestButton.getRequest() == request); updateRequestsScrollbar(); for (int i = 0; i < requestButtons.size(); ++i) { @@ -490,10 +493,4 @@ private void updateRequestsScrollbar() { requestButtonsScrollbar.setEnabled(maxOffset > 0); requestButtonsScrollbar.setMaxOffset(maxOffset); } - - public void responseReceived(final UUID id, final boolean started) { - if (started && getMenu().requestStarted(id)) { - close(); - } - } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java index f93798dd7..d761a33bd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/preview/AutocraftingRequest.java @@ -30,11 +30,11 @@ public static AutocraftingRequest of(final ResourceAmount resourceAmount) { return new AutocraftingRequest(UUID.randomUUID(), resourceAmount.resource(), displayAmount); } - boolean trySendRequest(final double amountRequested) { + boolean sendPreviewRequest(final double previewAmount) { if (!(resource instanceof PlatformResourceKey resourceKey)) { return false; } - final long normalizedAmount = resourceKey.getResourceType().normalizeAmount(amountRequested); + final long normalizedAmount = resourceKey.getResourceType().normalizeAmount(previewAmount); if (normalizedAmount == pendingPreviewAmount) { return false; } @@ -44,7 +44,12 @@ boolean trySendRequest(final double amountRequested) { return true; } - void start(final double amountRequested) { + void previewResponseReceived(final AutocraftingPreview previewReceived) { + this.pendingPreviewAmount = 0; + this.preview = previewReceived; + } + + void sendRequest(final double amountRequested) { if (!(resource instanceof PlatformResourceKey resourceKey)) { return; } @@ -52,6 +57,10 @@ void start(final double amountRequested) { C2SPackets.sendAutocraftingRequest(id, resourceKey, normalizedAmount); } + UUID getId() { + return id; + } + ResourceKey getResource() { return resource; } @@ -65,21 +74,8 @@ AutocraftingPreview getPreview() { return preview; } - boolean previewReceived(final UUID idReceived, final AutocraftingPreview previewReceived) { - if (id.equals(idReceived)) { - pendingPreviewAmount = 0; - preview = previewReceived; - return true; - } - return false; - } - void clearPreview() { - pendingPreviewAmount = 0; - preview = null; - } - - boolean isStarted(final UUID startedId) { - return id.equals(startedId); + this.pendingPreviewAmount = 0; + this.preview = null; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 68225b188..d20a49d4d 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -95,6 +95,8 @@ public abstract class AbstractGridContainerMenu extends AbstractResourceContaine private boolean active; @Nullable private GridSearchBox searchBox; + @Nullable + private Object gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; protected AbstractGridContainerMenu( final MenuType menuType, @@ -147,6 +149,17 @@ protected AbstractGridContainerMenu( initStrategies((ServerPlayer) playerInventory.player); } + public void setGridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview( + @Nullable final Object gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview) { + this.gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview = + gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; + } + + @Nullable + public Object getGridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview() { + return gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; + } + private BiPredicate createBaseFilter() { return createResourceTypeFilter().and(createViewTypeFilter()); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java index 8760cce8d..363f1bdfc 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AutocraftableResourceHint.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.common.grid; public enum AutocraftableResourceHint { - AUTOCRAFTABLE(0xBF9F7F50), - PATTERN_IN_INVENTORY(0xBFFFD9A8); + AUTOCRAFTABLE(0x80FFA500), + PATTERN_IN_INVENTORY(0x7FFFFFFF); private final int color; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java index 880b98f84..72b5ef8ca 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java @@ -128,7 +128,7 @@ public void clear(final boolean toPlayerInventory) { } @API(status = API.Status.INTERNAL) - public ResourceList getAvailableListForRecipeTransfer() { + public MutableResourceList getAvailableListForRecipeTransfer() { final MutableResourceList available = getView().copyBackingList(); addContainerToList(craftingGrid.getCraftingMatrix(), available); addContainerToList(gridPlayer.getInventory(), available); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 9b6514190..60ab6c62b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -79,6 +79,7 @@ protected AbstractGridScreen(final T menu, final Component title, final int bottomHeight) { super(menu, playerInventory, new TextMarquee(title, 70)); + menu.setGridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview(this); this.bottomHeight = bottomHeight; } @@ -278,13 +279,13 @@ private void renderSlot(final GuiGraphics graphics, } } - private void tryRenderAutocraftableResourceHintBackground(final GuiGraphics guiGraphics, final Slot slot) { + private void tryRenderAutocraftableResourceHintBackground(final GuiGraphics graphics, final Slot slot) { if (!slot.isHighlightable() || !slot.isActive()) { return; } final AutocraftableResourceHint hint = getMenu().getAutocraftableResourceHint(slot); if (hint != null) { - renderCraftableBackground(guiGraphics, slot.x, slot.y, getMenu().isLargeSlot(slot), hint.getColor()); + renderSlotBackground(graphics, slot.x, slot.y, getMenu().isLargeSlot(slot), hint.getColor()); } } @@ -293,8 +294,21 @@ private void renderResourceWithAmount(final GuiGraphics graphics, final int slotY, final GridResource resource) { if (resource.isAutocraftable()) { - renderCraftableBackground(graphics, slotX, slotY, false, - AutocraftableResourceHint.AUTOCRAFTABLE.getColor()); + renderSlotBackground( + graphics, + slotX, + slotY, + false, + AutocraftableResourceHint.AUTOCRAFTABLE.getColor() + ); + } else if (resource.getAmount(getMenu().getView()) == 0) { + renderSlotBackground( + graphics, + slotX, + slotY, + false, + 0x66FF0000 + ); } if (resource instanceof PlatformGridResource platformResource) { platformResource.render(graphics, slotX, slotY); @@ -302,14 +316,19 @@ private void renderResourceWithAmount(final GuiGraphics graphics, renderAmount(graphics, slotX, slotY, resource); } - public static void renderCraftableBackground(final GuiGraphics graphics, - final int slotX, - final int slotY, - final boolean large, - final int color) { + public static void renderSlotBackground(final GuiGraphics graphics, + final int slotX, + final int slotY, + final boolean large, + final int color) { final int offset = large ? 4 : 0; - graphics.fill(slotX - offset, slotY - offset, slotX + 16 + offset, slotY + 16 + offset, - color); + graphics.fill( + slotX - offset, + slotY - offset, + slotX + 16 + offset, + slotY + 16 + offset, + color + ); } private void renderAmount(final GuiGraphics graphics, @@ -512,7 +531,7 @@ public boolean mouseClicked(final double mouseX, final double mouseY, final int return super.mouseClicked(mouseX, mouseY, clickedButton); } - private static boolean tryStartAutocrafting(final PlatformGridResource resource) { + private boolean tryStartAutocrafting(final PlatformGridResource resource) { final ResourceAmount request = resource.getAutocraftingRequest(); if (request == null) { return false; @@ -526,7 +545,7 @@ private static boolean tryStartAutocrafting(final PlatformGridResource resource) requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); } - RefinedStorageApi.INSTANCE.openCraftingPreview(requests); + RefinedStorageApi.INSTANCE.openCraftingPreview(requests, this); return true; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java index 8d3f95629..25b475b21 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/util/ClientPlatformUtil.java @@ -1,15 +1,20 @@ package com.refinedmods.refinedstorage.common.util; import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreview; +import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingPreviewScreen; +import com.refinedmods.refinedstorage.common.autocrafting.preview.AutocraftingRequest; +import java.util.List; import java.util.UUID; import javax.annotation.Nullable; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.toasts.SystemToast; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.level.Level; import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; @@ -43,7 +48,20 @@ public static void autocraftingPreviewResponseReceived(final UUID id, final Auto public static void autocraftingResponseReceived(final UUID id, final boolean started) { if (Minecraft.getInstance().screen instanceof AutocraftingPreviewScreen screen) { - screen.responseReceived(id, started); + screen.getMenu().responseReceived(id, started); } } + + public static void openCraftingPreview(final List requests, @Nullable final Object parentScreen) { + final Minecraft minecraft = Minecraft.getInstance(); + if ((!(parentScreen instanceof Screen) && minecraft.screen == null) || minecraft.player == null) { + return; + } + final Inventory inventory = minecraft.player.getInventory(); + minecraft.setScreen(new AutocraftingPreviewScreen( + parentScreen instanceof Screen castedParentScreen ? castedParentScreen : minecraft.screen, + inventory, + requests.stream().map(AutocraftingRequest::of).toList() + )); + } } From 33686595a6541b2f8e96a4dd19cf3ada7f3abeec Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 7 Oct 2024 15:50:00 +0200 Subject: [PATCH 56/83] feat: autocrafting support in the relay Supports propagating patterns to the child network. Behavior for starting tasks to be decided. --- .../AutocraftingPreviewProvider.java | 2 +- .../api/autocrafting/PatternRepository.java | 2 + .../autocrafting/PatternRepositoryImpl.java | 7 + .../common/api/RefinedStorageApi.java | 1 + .../common/AbstractModInitializer.java | 2 +- .../common/grid/AbstractGridBlockEntity.java | 4 +- .../grid/AbstractGridContainerMenu.java | 5 +- .../common/grid/WirelessGrid.java | 4 +- .../common/networking/RelayBlockEntity.java | 14 + .../common/networking/RelayContainerMenu.java | 30 +- ...RelayPassAutocraftingSideButtonWidget.java | 30 ++ .../common/networking/RelayPropertyTypes.java | 3 + .../common/networking/RelayScreen.java | 36 +- .../storage/portablegrid/PortableGrid.java | 2 +- ...tocraftingStorageMonitorContainerMenu.java | 4 +- .../StorageMonitorBlockEntity.java | 4 +- .../packet/c2s/AutocraftingRequestPacket.java | 2 +- .../assets/refinedstorage/lang/en_us.json | 4 +- .../relay/pass_autocrafting/no.png | Bin 0 -> 221 bytes .../relay/pass_autocrafting/yes.png | Bin 0 -> 208 bytes .../AutocraftingNetworkComponent.java | 16 +- .../network/autocrafting/ParentContainer.java | 12 + .../network/autocrafting/PatternListener.java | 12 + .../network/autocrafting/PatternProvider.java | 13 +- .../network/test/NetworkTestFixtures.java | 3 +- .../network/test/fake/FakeResources.java | 1 + .../AutocraftingNetworkComponentImpl.java | 45 ++- .../PatternProviderNetworkNode.java | 47 ++- .../impl/node/relay/RelayComponentType.java | 3 +- .../node/relay/RelayInputNetworkNode.java | 5 + .../node/relay/RelayOutputNetworkNode.java | 33 +- .../relay/RelayOutputPatternProvider.java | 107 ++++++ .../AutocraftingNetworkComponentImplTest.java | 7 +- .../PatternProviderNetworkNodeTest.java | 6 - .../RelayAutocraftingNetworkNodeTest.java | 326 ++++++++++++++++++ .../impl/node/relay/RelayNetworkNodeTest.java | 100 +++++- .../relay/RelayStorageNetworkNodeTest.java | 2 +- 37 files changed, 802 insertions(+), 92 deletions(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPassAutocraftingSideButtonWidget.java create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/relay/pass_autocrafting/no.png create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/relay/pass_autocrafting/yes.png create mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/ParentContainer.java create mode 100644 refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternListener.java create mode 100644 refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputPatternProvider.java create mode 100644 refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java index 207a0d2fd..29c7210b2 100644 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/AutocraftingPreviewProvider.java @@ -7,5 +7,5 @@ public interface AutocraftingPreviewProvider { Optional getPreview(ResourceKey resource, long amount); - boolean start(ResourceKey resource, long amount); + boolean startTask(ResourceKey resource, long amount); } diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java index 01433fc7f..9d6d174fa 100644 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepository.java @@ -13,4 +13,6 @@ public interface PatternRepository { void remove(Pattern pattern); Set getOutputs(); + + Set getAll(); } diff --git a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java index 27c2ec929..4f8139fc2 100644 --- a/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java +++ b/refinedstorage-autocrafting-api/src/main/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImpl.java @@ -2,11 +2,13 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import java.util.Collections; import java.util.HashSet; import java.util.Set; public class PatternRepositoryImpl implements PatternRepository { private final Set patterns = new HashSet<>(); + private final Set patternsView = Collections.unmodifiableSet(patterns); private final Set outputs = new HashSet<>(); @Override @@ -31,4 +33,9 @@ public void remove(final Pattern pattern) { public Set getOutputs() { return outputs; } + + @Override + public Set getAll() { + return patternsView; + } } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index 12fc45d48..747956041 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -206,5 +206,6 @@ EnergyStorage asBlockItemEnergyStorage( Optional getPattern(ItemStack stack, Level level); + // TODO: rename, openAutocraftingPreview void openCraftingPreview(List requests, @Nullable Object parentScreen); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index aeedd165b..c3347be1f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -271,7 +271,7 @@ private void registerNetworkComponents() { ); RefinedStorageApi.INSTANCE.getNetworkComponentMapFactory().addFactory( AutocraftingNetworkComponent.class, - network -> new AutocraftingNetworkComponentImpl(new PatternRepositoryImpl()) + network -> new AutocraftingNetworkComponentImpl() ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java index b845dcf99..ded8da906 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridBlockEntity.java @@ -108,12 +108,12 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { + public boolean startTask(final ResourceKey resource, final long amount) { final Network network = mainNetworkNode.getNetwork(); if (network == null) { return false; } - return network.getComponent(AutocraftingNetworkComponent.class).start(resource, amount); + return network.getComponent(AutocraftingNetworkComponent.class).startTask(resource, amount); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index d20a49d4d..956715c76 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -95,6 +95,7 @@ public abstract class AbstractGridContainerMenu extends AbstractResourceContaine private boolean active; @Nullable private GridSearchBox searchBox; + // TODO: remove this ;) @Nullable private Object gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; @@ -507,8 +508,8 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { - return requireNonNull(grid).start(resource, amount); + public boolean startTask(final ResourceKey resource, final long amount) { + return requireNonNull(grid).startTask(resource, amount); } public boolean isLargeSlot(final Slot slot) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java index c9dbe75e0..aea58f720 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/WirelessGrid.java @@ -112,9 +112,9 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { + public boolean startTask(final ResourceKey resource, final long amount) { return context.resolveNetwork() - .map(network -> network.getComponent(AutocraftingNetworkComponent.class).start(resource, amount)) + .map(network -> network.getComponent(AutocraftingNetworkComponent.class).startTask(resource, amount)) .orElse(false); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java index 7285521de..4b84e266c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java @@ -45,6 +45,7 @@ public class RelayBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntit private static final String TAG_PASS_ENERGY = "passenergy"; private static final String TAG_PASS_SECURITY = "passsecurity"; private static final String TAG_PASS_STORAGE = "passstorage"; + private static final String TAG_PASS_AUTOCRAFTING = "passautocrafting"; private static final String TAG_FILTER_MODE = "fim"; private static final String TAG_ACCESS_MODE = "am"; private static final String TAG_PRIORITY = "pri"; @@ -157,6 +158,15 @@ void setPassSecurity(final boolean passSecurity) { setChanged(); } + boolean isPassAutocrafting() { + return mainNetworkNode.hasComponentType(RelayComponentType.AUTOCRAFTING); + } + + void setPassAutocrafting(final boolean passAutocrafting) { + mainNetworkNode.updateComponentType(RelayComponentType.AUTOCRAFTING, passAutocrafting); + setChanged(); + } + boolean isPassThrough() { return passThrough; } @@ -221,6 +231,7 @@ public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provide tag.putBoolean(TAG_PASS_ENERGY, mainNetworkNode.hasComponentType(RelayComponentType.ENERGY)); tag.putBoolean(TAG_PASS_STORAGE, mainNetworkNode.hasComponentType(RelayComponentType.STORAGE)); tag.putBoolean(TAG_PASS_SECURITY, mainNetworkNode.hasComponentType(RelayComponentType.SECURITY)); + tag.putBoolean(TAG_PASS_AUTOCRAFTING, mainNetworkNode.hasComponentType(RelayComponentType.AUTOCRAFTING)); tag.putInt(TAG_ACCESS_MODE, AccessModeSettings.getAccessMode(accessMode)); tag.putInt(TAG_PRIORITY, priority); } @@ -258,6 +269,9 @@ private Set getComponentTypes(final CompoundTag tag) { if (tag.getBoolean(TAG_PASS_STORAGE)) { types.add(RelayComponentType.STORAGE); } + if (tag.getBoolean(TAG_PASS_AUTOCRAFTING)) { + types.add(RelayComponentType.AUTOCRAFTING); + } return types; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayContainerMenu.java index d56e2f116..cf0cf88e6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayContainerMenu.java @@ -64,7 +64,8 @@ protected void onChangedOnClient(final Boolean newValue) { if (passThroughListener != null) { passThroughListener.passThroughChanged( Boolean.TRUE.equals(newValue), - Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_STORAGE).getValue()) + Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_STORAGE).getValue()), + Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_AUTOCRAFTING).getValue()) ); } } @@ -77,12 +78,26 @@ protected void onChangedOnClient(final Boolean newValue) { if (passThroughListener != null) { passThroughListener.passThroughChanged( Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_THROUGH).getValue()), - Boolean.TRUE.equals(newValue) + Boolean.TRUE.equals(newValue), + Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_AUTOCRAFTING).getValue()) ); } } }); registerProperty(new ClientProperty<>(RelayPropertyTypes.PASS_SECURITY, false)); + registerProperty(new ClientProperty<>(RelayPropertyTypes.PASS_AUTOCRAFTING, false) { + @Override + protected void onChangedOnClient(final Boolean newValue) { + super.onChangedOnClient(newValue); + if (passThroughListener != null) { + passThroughListener.passThroughChanged( + Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_THROUGH).getValue()), + Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_STORAGE).getValue()), + Boolean.TRUE.equals(newValue) + ); + } + } + }); registerProperty(new ClientProperty<>(PropertyTypes.FILTER_MODE, FilterMode.BLOCK)); registerProperty(new ClientProperty<>(StoragePropertyTypes.ACCESS_MODE, AccessMode.INSERT_EXTRACT)); registerProperty(new ClientProperty<>(StoragePropertyTypes.PRIORITY, 0)); @@ -116,6 +131,11 @@ protected void registerServerProperties(final RelayBlockEntity blockEntity) { blockEntity::isPassSecurity, blockEntity::setPassSecurity )); + registerProperty(new ServerProperty<>( + RelayPropertyTypes.PASS_AUTOCRAFTING, + blockEntity::isPassAutocrafting, + blockEntity::setPassAutocrafting + )); registerProperty(new ServerProperty<>( PropertyTypes.FILTER_MODE, blockEntity::getFilterMode, @@ -146,11 +166,15 @@ boolean isPassStorage() { return Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_STORAGE).getValue()); } + boolean isPassAutocrafting() { + return Boolean.TRUE.equals(getProperty(RelayPropertyTypes.PASS_AUTOCRAFTING).getValue()); + } + void setPassThroughListener(final PassThroughListener passThroughListener) { this.passThroughListener = passThroughListener; } interface PassThroughListener { - void passThroughChanged(boolean passThrough, boolean passStorage); + void passThroughChanged(boolean passThrough, boolean passStorage, boolean passAutocrafting); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPassAutocraftingSideButtonWidget.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPassAutocraftingSideButtonWidget.java new file mode 100644 index 000000000..164b51815 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPassAutocraftingSideButtonWidget.java @@ -0,0 +1,30 @@ +package com.refinedmods.refinedstorage.common.networking; + +import com.refinedmods.refinedstorage.common.support.containermenu.ClientProperty; +import com.refinedmods.refinedstorage.common.support.widget.AbstractYesNoSideButtonWidget; + +import javax.annotation.Nullable; + +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceLocation; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createTranslation; + +class RelayPassAutocraftingSideButtonWidget extends AbstractYesNoSideButtonWidget { + private static final MutableComponent TITLE = createTranslation("gui", "relay.pass_autocrafting"); + private static final MutableComponent HELP = createTranslation("gui", "relay.pass_autocrafting.help"); + private static final ResourceLocation YES = createIdentifier("widget/side_button/relay/pass_autocrafting/yes"); + private static final ResourceLocation NO = createIdentifier("widget/side_button/relay/pass_autocrafting/no"); + + RelayPassAutocraftingSideButtonWidget(final ClientProperty property) { + super(property, TITLE, YES, NO); + } + + @Nullable + @Override + protected Component getHelpText() { + return HELP; + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPropertyTypes.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPropertyTypes.java index d39d23bd7..54ac381d8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPropertyTypes.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayPropertyTypes.java @@ -18,6 +18,9 @@ final class RelayPropertyTypes { static final PropertyType PASS_SECURITY = PropertyTypes.createBooleanProperty( createIdentifier("pass_security") ); + static final PropertyType PASS_AUTOCRAFTING = PropertyTypes.createBooleanProperty( + createIdentifier("pass_autocrafting") + ); private RelayPropertyTypes() { } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java index 18dc2aa37..918e9e804 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java @@ -37,6 +37,8 @@ public class RelayScreen extends AbstractFilterScreen @Nullable private AbstractSideButtonWidget passStorageButton; @Nullable + private AbstractSideButtonWidget passAutocraftingButton; + @Nullable private AbstractSideButtonWidget filterModeButton; @Nullable private AbstractSideButtonWidget fuzzyModeButton; @@ -62,6 +64,7 @@ protected void init() { addSideButton(new RelayPassThroughSideButtonWidget(getMenu().getProperty(RelayPropertyTypes.PASS_THROUGH))); final boolean visible = !getMenu().isPassThrough(); addPassButtons(visible); + addFilterButtons(visible && (getMenu().isPassStorage() || getMenu().isPassAutocrafting())); addStorageButtons(visible && getMenu().isPassStorage()); } @@ -76,6 +79,12 @@ private void addPassButtons(final boolean visible) { passSecurityButton.visible = visible; addSideButton(passSecurityButton); + passAutocraftingButton = new RelayPassAutocraftingSideButtonWidget( + getMenu().getProperty(RelayPropertyTypes.PASS_AUTOCRAFTING) + ); + passAutocraftingButton.visible = visible; + addSideButton(passAutocraftingButton); + passStorageButton = new RelayPassStorageSideButtonWidget( getMenu().getProperty(RelayPropertyTypes.PASS_STORAGE) ); @@ -83,7 +92,7 @@ private void addPassButtons(final boolean visible) { addSideButton(passStorageButton); } - private void addStorageButtons(final boolean visible) { + private void addFilterButtons(final boolean visible) { filterModeButton = new FilterModeSideButtonWidget( getMenu().getProperty(PropertyTypes.FILTER_MODE), ALLOW_FILTER_MODE_HELP, @@ -102,7 +111,9 @@ private void addStorageButtons(final boolean visible) { accessModeButton = new AccessModeSideButtonWidget(getMenu().getProperty(StoragePropertyTypes.ACCESS_MODE)); accessModeButton.visible = visible; addSideButton(accessModeButton); + } + private void addStorageButtons(final boolean visible) { priorityButton = PrioritySideButtonWidget.forStorage( getMenu().getProperty(StoragePropertyTypes.PRIORITY), playerInventory, @@ -113,9 +124,12 @@ private void addStorageButtons(final boolean visible) { } @Override - public void passThroughChanged(final boolean passThrough, final boolean passStorage) { + public void passThroughChanged(final boolean passThrough, + final boolean passStorage, + final boolean passAutocrafting) { updatePassButtons(passThrough); - updateStorageButtons(passThrough, passStorage); + updateFilterButtons(!passThrough && (passStorage || passAutocrafting)); + updateStorageButtons(!passThrough && passStorage); } private void updatePassButtons(final boolean passThrough) { @@ -128,20 +142,26 @@ private void updatePassButtons(final boolean passThrough) { if (passStorageButton != null) { passStorageButton.visible = !passThrough; } + if (passAutocraftingButton != null) { + passAutocraftingButton.visible = !passThrough; + } } - private void updateStorageButtons(final boolean passThrough, final boolean passStorage) { + private void updateFilterButtons(final boolean visible) { if (filterModeButton != null) { - filterModeButton.visible = !passThrough && passStorage; + filterModeButton.visible = visible; } if (fuzzyModeButton != null) { - fuzzyModeButton.visible = !passThrough && passStorage; + fuzzyModeButton.visible = visible; } if (accessModeButton != null) { - accessModeButton.visible = !passThrough && passStorage; + accessModeButton.visible = visible; } + } + + private void updateStorageButtons(final boolean visible) { if (priorityButton != null) { - priorityButton.visible = !passThrough && passStorage; + priorityButton.visible = visible; } } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java index 90d45792b..d636764ab 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/portablegrid/PortableGrid.java @@ -136,7 +136,7 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { + public boolean startTask(final ResourceKey resource, final long amount) { return false; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java index 5cb83aa86..156f18540 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/AutocraftingStorageMonitorContainerMenu.java @@ -44,7 +44,7 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { - return requireNonNull(storageMonitor).start(resource, amount); + public boolean startTask(final ResourceKey resource, final long amount) { + return requireNonNull(storageMonitor).startTask(resource, amount); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java index ec255feac..6018c945b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storagemonitor/StorageMonitorBlockEntity.java @@ -374,11 +374,11 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { + public boolean startTask(final ResourceKey resource, final long amount) { final Network network = mainNetworkNode.getNetwork(); if (network == null) { return false; } - return network.getComponent(AutocraftingNetworkComponent.class).start(resource, amount); + return network.getComponent(AutocraftingNetworkComponent.class).startTask(resource, amount); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java index 18ba3b302..f4fc8c825 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/support/packet/c2s/AutocraftingRequestPacket.java @@ -34,7 +34,7 @@ public record AutocraftingRequestPacket(UUID id, public static void handle(final AutocraftingRequestPacket packet, final PacketContext ctx) { if (ctx.getPlayer().containerMenu instanceof AutocraftingPreviewProvider provider) { - final boolean started = provider.start(packet.resource(), packet.amount()); + final boolean started = provider.startTask(packet.resource(), packet.amount()); S2CPackets.sendAutocraftingResponse((ServerPlayer) ctx.getPlayer(), packet.id, started); } } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index aa062d858..6797e19e1 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -171,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -180,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/relay/pass_autocrafting/no.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/relay/pass_autocrafting/no.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3202c0677104a25a370bb11e110fe844411a30 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0G|+7D=Vw=@^T=rJHCGzkYX+g@(cd|pW*r`UZ7eA&H|6fVg?4j!ywFf zJby(BP|(lQ#W6%9IQASP-vI><<^zZR%kK@k_UhUZ4tBLg^@a+p{;J%27H)`n5!JxB zp+Y&SLnLlPjI=h}v|AT@4EDy!CfLthpJlFC^y25U+oj)`SDG=pmd1Uk1Ded>>FVdQ I&MBb@05d8>*Z=?k literal 0 HcmV?d00001 diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/relay/pass_autocrafting/yes.png b/refinedstorage-common/src/main/resources/assets/refinedstorage/textures/gui/sprites/widget/side_button/relay/pass_autocrafting/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3740ef05d4b2a9d8c7baa0add96d8800213798 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}E0G|+7D=RA?v!qe=8IWQs3Gxg6&+v4+ffta+S>O>_%)r2R7=#&*=dVZs z3c7l_IEH8h$M$#%F(~jHdh_3YtwT%}pJ>wZ#dg~y)IaEW%vAgMO@j9o)5V^n*-G=Y uYn>gDGW`Mf9&fW-3T^jRWidsZWmpq^$7?arKn71&KbLh*2~7ZLB|Z%R literal 0 HcmV?d00001 diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java index 8bca0a60a..9cd137fc8 100644 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/AutocraftingNetworkComponent.java @@ -1,11 +1,23 @@ package com.refinedmods.refinedstorage.api.network.autocrafting; import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewProvider; -import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.network.NetworkComponent; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; + +import java.util.Set; import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") -public interface AutocraftingNetworkComponent extends NetworkComponent, PatternRepository, AutocraftingPreviewProvider { +public interface AutocraftingNetworkComponent extends NetworkComponent, AutocraftingPreviewProvider { + void addListener(PatternListener listener); + + void removeListener(PatternListener listener); + + Set getPatterns(); + + Set getOutputs(); + + boolean contains(AutocraftingNetworkComponent component); } diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/ParentContainer.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/ParentContainer.java new file mode 100644 index 000000000..0c8d73264 --- /dev/null +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/ParentContainer.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage.api.network.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") +public interface ParentContainer { + void add(Pattern pattern); + + void remove(Pattern pattern); +} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternListener.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternListener.java new file mode 100644 index 000000000..37e5f23c7 --- /dev/null +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternListener.java @@ -0,0 +1,12 @@ +package com.refinedmods.refinedstorage.api.network.autocrafting; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; + +import org.apiguardian.api.API; + +@API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") +public interface PatternListener { + void onAdded(Pattern pattern); + + void onRemoved(Pattern pattern); +} diff --git a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java index 0b229b584..0cfaa1052 100644 --- a/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java +++ b/refinedstorage-network-api/src/main/java/com/refinedmods/refinedstorage/api/network/autocrafting/PatternProvider.java @@ -1,13 +1,14 @@ package com.refinedmods.refinedstorage.api.network.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.Pattern; - -import java.util.Set; - import org.apiguardian.api.API; @API(status = API.Status.STABLE, since = "2.0.0-milestone.4.8") -@FunctionalInterface public interface PatternProvider { - Set getPatterns(); + void onAddedIntoContainer(ParentContainer parentContainer); + + void onRemovedFromContainer(ParentContainer parentContainer); + + default boolean contains(AutocraftingNetworkComponent component) { + return false; + } } diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java index 3d79eb28f..1d0f67f40 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.network.test; -import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; import com.refinedmods.refinedstorage.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage.api.network.Network; import com.refinedmods.refinedstorage.api.network.NetworkComponent; @@ -41,7 +40,7 @@ public final class NetworkTestFixtures { ); NETWORK_COMPONENT_MAP_FACTORY.addFactory( AutocraftingNetworkComponent.class, - network -> new AutocraftingNetworkComponentImpl(new PatternRepositoryImpl()) + network -> new AutocraftingNetworkComponentImpl() ); } diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java index ad0726c6f..8b927b9cc 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; +// TODO: rename to fixtures public enum FakeResources implements ResourceKey { A, A_ALTERNATIVE, diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java index 0e7fe1329..399e3ed9b 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImpl.java @@ -4,45 +4,50 @@ import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewItem; import com.refinedmods.refinedstorage.api.autocrafting.AutocraftingPreviewType; import com.refinedmods.refinedstorage.api.autocrafting.Pattern; -import com.refinedmods.refinedstorage.api.autocrafting.PatternRepository; +import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.ParentContainer; +import com.refinedmods.refinedstorage.api.network.autocrafting.PatternListener; import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; -public class AutocraftingNetworkComponentImpl implements AutocraftingNetworkComponent { - private final PatternRepository patternRepository; - - public AutocraftingNetworkComponentImpl(final PatternRepository patternRepository) { - this.patternRepository = patternRepository; - } +public class AutocraftingNetworkComponentImpl implements AutocraftingNetworkComponent, ParentContainer { + private final Set providers = new HashSet<>(); + private final Set listeners = new HashSet<>(); + private final PatternRepositoryImpl patternRepository = new PatternRepositoryImpl(); @Override public void onContainerAdded(final NetworkNodeContainer container) { if (container.getNode() instanceof PatternProvider provider) { - provider.getPatterns().forEach(patternRepository::add); + provider.onAddedIntoContainer(this); + providers.add(provider); } } @Override public void onContainerRemoved(final NetworkNodeContainer container) { if (container.getNode() instanceof PatternProvider provider) { - provider.getPatterns().forEach(patternRepository::remove); + provider.onRemovedFromContainer(this); + providers.remove(provider); } } @Override public void add(final Pattern pattern) { patternRepository.add(pattern); + listeners.forEach(listener -> listener.onAdded(pattern)); } @Override public void remove(final Pattern pattern) { + listeners.forEach(listener -> listener.onRemoved(pattern)); patternRepository.remove(pattern); } @@ -51,6 +56,11 @@ public Set getOutputs() { return patternRepository.getOutputs(); } + @Override + public boolean contains(final AutocraftingNetworkComponent component) { + return providers.stream().anyMatch(provider -> provider.contains(component)); + } + @Override public Optional getPreview(final ResourceKey resource, final long amount) { final List items = new ArrayList<>(); @@ -69,7 +79,22 @@ public Optional getPreview(final ResourceKey resource, fina } @Override - public boolean start(final ResourceKey resource, final long amount) { + public boolean startTask(final ResourceKey resource, final long amount) { return true; } + + @Override + public void addListener(final PatternListener listener) { + listeners.add(listener); + } + + @Override + public void removeListener(final PatternListener listener) { + listeners.remove(listener); + } + + @Override + public Set getPatterns() { + return patternRepository.getAll(); + } } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java index 7a74782a1..83664a049 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java @@ -1,11 +1,12 @@ package com.refinedmods.refinedstorage.api.network.impl.node.patternprovider; import com.refinedmods.refinedstorage.api.autocrafting.Pattern; -import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.ParentContainer; import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import java.util.Arrays; +import java.util.HashSet; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -13,6 +14,7 @@ public class PatternProviderNetworkNode extends SimpleNetworkNode implements PatternProvider { private final Pattern[] patterns; + private final Set parents = new HashSet<>(); public PatternProviderNetworkNode(final long energyUsage, final int patterns) { super(energyUsage); @@ -21,37 +23,50 @@ public PatternProviderNetworkNode(final long energyUsage, final int patterns) { public void setPattern(final int index, @Nullable final Pattern pattern) { final Pattern oldPattern = patterns[index]; - if (oldPattern != null && network != null) { - network.getComponent(AutocraftingNetworkComponent.class).remove(oldPattern); + if (oldPattern != null) { + parents.forEach(parent -> parent.remove(oldPattern)); } patterns[index] = pattern; - if (pattern != null && network != null) { - network.getComponent(AutocraftingNetworkComponent.class).add(pattern); + if (pattern != null) { + parents.forEach(parent -> parent.add(pattern)); } } @Override protected void onActiveChanged(final boolean newActive) { super.onActiveChanged(newActive); - if (!newActive && network != null) { - final AutocraftingNetworkComponent component = network.getComponent(AutocraftingNetworkComponent.class); + if (!newActive) { for (final Pattern pattern : patterns) { if (pattern != null) { - component.remove(pattern); + parents.forEach(parent -> parent.remove(pattern)); } } - } else if (newActive && network != null) { - final AutocraftingNetworkComponent component = network.getComponent(AutocraftingNetworkComponent.class); - for (final Pattern pattern : patterns) { - if (pattern != null) { - component.add(pattern); - } + return; + } + for (final Pattern pattern : patterns) { + if (pattern != null) { + parents.forEach(parent -> parent.add(pattern)); } } } @Override - public Set getPatterns() { - return Arrays.stream(patterns).filter(Objects::nonNull).collect(Collectors.toSet()); + public void onAddedIntoContainer(final ParentContainer parentContainer) { + parents.add(parentContainer); + for (final Pattern pattern : patterns) { + if (pattern != null) { + parentContainer.add(pattern); + } + } + } + + @Override + public void onRemovedFromContainer(final ParentContainer parentContainer) { + parents.remove(parentContainer); + for (final Pattern pattern : patterns) { + if (pattern != null) { + parentContainer.remove(pattern); + } + } } } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java index 5366e818d..508b3fb97 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java @@ -3,5 +3,6 @@ public enum RelayComponentType { ENERGY, SECURITY, - STORAGE + STORAGE, + AUTOCRAFTING } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java index cdca4d326..5d1d8b248 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.api.network.impl.node.relay; import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; @@ -73,6 +74,10 @@ private void updateComponents() { outputNode.setStorageDelegate(valid && hasStorage ? network.getComponent(StorageNetworkComponent.class) : null); + final boolean hasAutocrafting = componentTypes.contains(RelayComponentType.AUTOCRAFTING); + outputNode.setAutocraftingDelegate(valid && hasAutocrafting + ? network.getComponent(AutocraftingNetworkComponent.class) + : null); } public void setAccessMode(final AccessMode accessMode) { diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputNetworkNode.java index 6e7b6e7c1..a4ef2b8a2 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputNetworkNode.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputNetworkNode.java @@ -1,5 +1,8 @@ package com.refinedmods.refinedstorage.api.network.impl.node.relay; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.ParentContainer; +import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyProvider; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; @@ -20,9 +23,10 @@ import javax.annotation.Nullable; public class RelayOutputNetworkNode extends AbstractNetworkNode - implements EnergyProvider, SecurityDecisionProvider, StorageProvider { + implements EnergyProvider, SecurityDecisionProvider, StorageProvider, PatternProvider { private final long energyUsage; private final RelayOutputStorage storage = new RelayOutputStorage(); + private final RelayOutputPatternProvider patternProvider = new RelayOutputPatternProvider(); @Nullable private EnergyNetworkComponent energyDelegate; @@ -45,6 +49,10 @@ void setStorageDelegate(@Nullable final StorageNetworkComponent storageDelegate) this.storage.setDelegate(storageDelegate); } + void setAutocraftingDelegate(@Nullable final AutocraftingNetworkComponent autocraftingDelegate) { + this.patternProvider.setDelegate(autocraftingDelegate); + } + void setAccessMode(final AccessMode accessMode) { this.storage.setAccessMode(accessMode); } @@ -58,19 +66,25 @@ void setPriority(final int priority) { void setFilters(final Set filters) { this.storage.setFilters(filters); + this.patternProvider.setFilters(filters); } void setFilterMode(final FilterMode filterMode) { this.storage.setFilterMode(filterMode); + this.patternProvider.setFilterMode(filterMode); } void setFilterNormalizer(final UnaryOperator normalizer) { this.storage.setFilterNormalizer(normalizer); + this.patternProvider.setFilterNormalizer(normalizer); } @Override public long getEnergyUsage() { - if (energyDelegate != null || securityDelegate != null || storage.hasDelegate()) { + if (energyDelegate != null + || securityDelegate != null + || storage.hasDelegate() + || patternProvider.hasDelegate()) { return energyUsage; } return 0; @@ -103,6 +117,11 @@ public boolean contains(final SecurityNetworkComponent securityComponent) { || (securityDelegate != null && securityDelegate.contains(securityComponent)); } + @Override + public boolean contains(final AutocraftingNetworkComponent component) { + return patternProvider.contains(component); + } + @Override public SecurityDecision isAllowed(final Permission permission, final SecurityActor actor) { if (securityDelegate == null || securityDelegate.contains(securityDelegate)) { @@ -120,4 +139,14 @@ public boolean isProviderActive() { public Storage getStorage() { return storage; } + + @Override + public void onAddedIntoContainer(final ParentContainer parentContainer) { + patternProvider.onAddedIntoContainer(parentContainer); + } + + @Override + public void onRemovedFromContainer(final ParentContainer parentContainer) { + patternProvider.onRemovedFromContainer(parentContainer); + } } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputPatternProvider.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputPatternProvider.java new file mode 100644 index 000000000..83cd64107 --- /dev/null +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayOutputPatternProvider.java @@ -0,0 +1,107 @@ +package com.refinedmods.refinedstorage.api.network.impl.node.relay; + +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.autocrafting.ParentContainer; +import com.refinedmods.refinedstorage.api.network.autocrafting.PatternListener; +import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; +import com.refinedmods.refinedstorage.api.resource.filter.Filter; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.function.UnaryOperator; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + +class RelayOutputPatternProvider implements PatternProvider, PatternListener { + private final Filter filter = new Filter(); + private final Set parents = new HashSet<>(); + @Nullable + private AutocraftingNetworkComponent delegate; + + void setFilters(final Set filters) { + reset(() -> filter.setFilters(filters)); + } + + void setFilterMode(final FilterMode filterMode) { + reset(() -> filter.setMode(filterMode)); + } + + void setFilterNormalizer(final UnaryOperator normalizer) { + reset(() -> filter.setNormalizer(normalizer)); + } + + private void reset(final Runnable action) { + final AutocraftingNetworkComponent oldDelegate = delegate; + setDelegate(null); + action.run(); + setDelegate(oldDelegate); + } + + void setDelegate(@Nullable final AutocraftingNetworkComponent delegate) { + if (this.delegate != null) { + parents.forEach(parent -> getPatterns().forEach(parent::remove)); + this.delegate.removeListener(this); + } + this.delegate = delegate; + if (delegate != null) { + parents.forEach(parent -> getPatterns().forEach(parent::add)); + delegate.addListener(this); + } + } + + boolean hasDelegate() { + return delegate != null; + } + + private Set getPatterns() { + if (delegate == null) { + return Collections.emptySet(); + } + return delegate.getPatterns().stream().filter(this::isPatternAllowed).collect(Collectors.toSet()); + } + + private boolean isPatternAllowed(final Pattern pattern) { + return pattern.getOutputResources().stream().anyMatch(filter::isAllowed); + } + + @Override + public void onAdded(final Pattern pattern) { + if (delegate == null || !isPatternAllowed(pattern) || delegate.contains(delegate)) { + return; + } + parents.forEach(parent -> parent.add(pattern)); + } + + @Override + public void onRemoved(final Pattern pattern) { + if (delegate == null || !isPatternAllowed(pattern) || delegate.contains(delegate)) { + return; + } + parents.forEach(parent -> parent.remove(pattern)); + } + + @Override + public boolean contains(final AutocraftingNetworkComponent component) { + return component == delegate || (delegate != null && delegate.contains(component)); + } + + @Override + public void onAddedIntoContainer(final ParentContainer parentContainer) { + if (delegate != null) { + delegate.getPatterns().forEach(parentContainer::add); + } + parents.add(parentContainer); + } + + @Override + public void onRemovedFromContainer(final ParentContainer parentContainer) { + if (delegate != null) { + delegate.getPatterns().forEach(parentContainer::remove); + } + parents.remove(parentContainer); + } +} diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java index 791020b50..c7bdd3a11 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.api.network.impl.autocrafting; -import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage.network.test.fake.FakeResources; @@ -15,7 +14,7 @@ class AutocraftingNetworkComponentImplTest { @BeforeEach void setUp() { - sut = new AutocraftingNetworkComponentImpl(new PatternRepositoryImpl()); + sut = new AutocraftingNetworkComponentImpl(); } @Test @@ -75,8 +74,8 @@ void shouldRemovePatternManually() { } @Test - void shouldStart() { - sut.start(FakeResources.A, 10); + void shouldStartTask() { + sut.startTask(FakeResources.A, 10); } @Test diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java index 1c9412b48..696db08fb 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java @@ -26,7 +26,6 @@ void testDefaultState( @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting ) { // Assert - assertThat(sut.getPatterns()).isEmpty(); assertThat(autocrafting.getOutputs()).isEmpty(); } @@ -39,7 +38,6 @@ void shouldSetPatternAndNotifyNetwork( sut.setPattern(0, pattern); // Assert - assertThat(sut.getPatterns()).containsExactly(pattern); assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); } @@ -55,7 +53,6 @@ void shouldRemovePatternAndNotifyNetwork( sut.setPattern(0, null); // Assert - assertThat(sut.getPatterns()).isEmpty(); assertThat(autocrafting.getOutputs()).isEmpty(); } @@ -72,7 +69,6 @@ void shouldReplacePatternAndNotifyNetwork( sut.setPattern(0, replacedPattern); // Assert - assertThat(sut.getPatterns()).containsExactly(replacedPattern); assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.B); } @@ -88,7 +84,6 @@ void shouldRemovePatternsFromNetworkWhenInactive( sut.setActive(false); // Assert - assertThat(sut.getPatterns()).containsExactly(pattern); assertThat(autocrafting.getOutputs()).isEmpty(); } @@ -105,7 +100,6 @@ void shouldAddPatternsFromNetworkWhenActive( sut.setActive(true); // Assert - assertThat(sut.getPatterns()).containsExactly(pattern); assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java new file mode 100644 index 000000000..787f6933c --- /dev/null +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java @@ -0,0 +1,326 @@ +package com.refinedmods.refinedstorage.api.network.impl.node.relay; + +import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; +import com.refinedmods.refinedstorage.network.test.AddNetworkNode; +import com.refinedmods.refinedstorage.network.test.InjectNetwork; +import com.refinedmods.refinedstorage.network.test.InjectNetworkAutocraftingComponent; +import com.refinedmods.refinedstorage.network.test.NetworkTest; +import com.refinedmods.refinedstorage.network.test.SetupNetwork; +import com.refinedmods.refinedstorage.network.test.fake.FakeResources; + +import java.util.Set; + +import org.junit.jupiter.api.Test; + +import static com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayNetworkNodeTest.addPattern; +import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.D; +import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ACTIVE; +import static org.assertj.core.api.Assertions.assertThat; + +@NetworkTest +@SetupNetwork(id = "input") +@SetupNetwork(id = "output", setupEnergy = false) +class RelayAutocraftingNetworkNodeTest { + @SuppressWarnings("DefaultAnnotationParam") + @AddNetworkNode(properties = { + @AddNetworkNode.Property(key = PROPERTY_ACTIVE, boolValue = false) + }, networkId = "input") + private RelayInputNetworkNode input; + + @AddNetworkNode(networkId = "output") + private RelayOutputNetworkNode output; + + @Test + void shouldPassAutocraftingComponent( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + + addPattern(inputAutocrafting, A); + + // Act + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + + final var removeB = addPattern(inputAutocrafting, FakeResources.B); + removeB.run(); + + addPattern(inputAutocrafting, C); + + // Assert + assertThat(inputAutocrafting.getOutputs()).containsExactlyInAnyOrder(A, C); + assertThat(outputAutocrafting.getOutputs()).containsExactlyInAnyOrder(A, C); + assertThat(input.hasComponentType(RelayComponentType.AUTOCRAFTING)).isTrue(); + } + + @Test + void shouldRemovePatternsWhenNetworkIsRemoved( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + + addPattern(inputAutocrafting, A); + + // Act + input.setNetwork(null); + + addPattern(inputAutocrafting, FakeResources.B); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + } + + @Test + @SetupNetwork(id = "input_alt") + void shouldNoLongerReceiveNotificationsFromOldInputNetwork( + @InjectNetwork("input") final Network inputNetwork, + @InjectNetwork("input_alt") final Network inputAlternativeNetwork, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "input_alt") + final AutocraftingNetworkComponent inputAlternativeAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + + addPattern(inputAutocrafting, A); + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + + // Act + inputNetwork.removeContainer(() -> input); + inputAlternativeNetwork.addContainer(() -> input); + input.setNetwork(inputAlternativeNetwork); + + addPattern(inputAlternativeAutocrafting, B); + addPattern(inputAutocrafting, C); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, C); + assertThat(inputAlternativeAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(B); + assertThat(outputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(B); + } + + @Test + @SetupNetwork(id = "output_alt") + void shouldNotNotifyOldOutputNetworkWhenOutputNetworkHasChanged( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetwork("output") final Network outputNetwork, + @InjectNetworkAutocraftingComponent(networkId = "output_alt") + final AutocraftingNetworkComponent outputAlternativeAutocrafting, + @InjectNetwork("output_alt") final Network outputAlternativeNetwork, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + + addPattern(inputAutocrafting, A); + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + + // Act + outputNetwork.removeContainer(() -> output); + outputAlternativeNetwork.addContainer(() -> output); + output.setNetwork(outputAlternativeNetwork); + + addPattern(inputAutocrafting, FakeResources.B); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B); + assertThat(outputAlternativeAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + } + + @Test + @SetupNetwork(id = "output_alt") + void shouldAddPatternsToNewOutputNetworkIfTheOutputNetworkChanges( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetwork("output") final Network outputNetwork, + @InjectNetworkAutocraftingComponent(networkId = "output_alt") + final AutocraftingNetworkComponent outputAlternativeAutocrafting, + @InjectNetwork("output_alt") final Network outputAlternativeNetwork, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + + addPattern(inputAutocrafting, A); + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + + // Act + outputNetwork.removeContainer(() -> output); + outputAlternativeNetwork.addContainer(() -> output); + output.setNetwork(outputAlternativeNetwork); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(A); + assertThat(outputAlternativeAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(A); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + } + + @Test + void shouldRespectAllowlistFilter( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + input.setFilters(Set.of(A, C)); + input.setFilterMode(FilterMode.ALLOW); + + addPattern(inputAutocrafting, A); + addPattern(inputAutocrafting, B); + + // Act + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + + // This update should arrive. + addPattern(inputAutocrafting, C); + // This one shouldn't. + addPattern(inputAutocrafting, D); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B, C, D); + assertThat(outputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, C); + } + + @Test + void shouldRespectFilterNormalizer( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + input.setFilters(Set.of(A, B)); + input.setFilterMode(FilterMode.ALLOW); + input.setFilterNormalizer(resource -> { + if (resource == A_ALTERNATIVE) { + return A; + } + return resource; + }); + + addPattern(inputAutocrafting, A); + addPattern(inputAutocrafting, C); + + // Act + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + + // These updates should arrive. + addPattern(inputAutocrafting, A_ALTERNATIVE); + addPattern(inputAutocrafting, B); + // This one shouldn't. + addPattern(inputAutocrafting, D); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B, C, A_ALTERNATIVE, D); + assertThat(outputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, A_ALTERNATIVE, B); + } + + @Test + void shouldUpdateOutputPatternsWhenFiltersAreChanged( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + input.setFilters(Set.of(A)); + input.setFilterMode(FilterMode.BLOCK); + + addPattern(inputAutocrafting, A); + addPattern(inputAutocrafting, B); + + // Act + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + input.setFilters(Set.of(B)); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B); + assertThat(outputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(A); + } + + @Test + void shouldUpdateOutputPatternsWhenFilterModeIsChanged( + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting + ) { + // Arrange + input.setActive(true); + input.setOutputNode(output); + input.setFilters(Set.of(A)); + input.setFilterMode(FilterMode.BLOCK); + + addPattern(inputAutocrafting, A); + addPattern(inputAutocrafting, B); + + // Act + input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); + input.setFilterMode(FilterMode.ALLOW); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactlyInAnyOrder(A, B); + assertThat(outputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() + .containsExactly(A); + } + + @Test + @SetupNetwork(id = "cycle_input", energyStored = 1, energyCapacity = 2) + @SetupNetwork(id = "cycle_input_alt", energyStored = 3, energyCapacity = 4) + void shouldDetectCycles( + @InjectNetwork("cycle_input") final Network inputNetwork, + @InjectNetworkAutocraftingComponent(networkId = "cycle_input") + final AutocraftingNetworkComponent inputAutocrafting, + @InjectNetwork("cycle_input_alt") final Network inputAlternativeNetwork, + @InjectNetworkAutocraftingComponent(networkId = "cycle_input_alt") + final AutocraftingNetworkComponent inputAlternativeAutocrafting + ) { + // Act + final RelayOutputNetworkNode cycleOutput = new RelayOutputNetworkNode(0); + cycleOutput.setAutocraftingDelegate(inputAlternativeAutocrafting); + cycleOutput.setNetwork(inputNetwork); + inputNetwork.addContainer(() -> cycleOutput); + + final RelayOutputNetworkNode cycleOutputAlternative = new RelayOutputNetworkNode(0); + cycleOutputAlternative.setAutocraftingDelegate(inputAutocrafting); + cycleOutputAlternative.setNetwork(inputAlternativeNetwork); + inputAlternativeNetwork.addContainer(() -> cycleOutputAlternative); + + addPattern(inputAutocrafting, A); + final Runnable removeB = addPattern(inputAutocrafting, B); + removeB.run(); + + // Assert + assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(A); + assertThat(inputAlternativeAutocrafting.getOutputs()).isEmpty(); + } +} diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java index 7a396353a..cba7292cb 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java @@ -1,18 +1,25 @@ package com.refinedmods.refinedstorage.api.network.impl.node.relay; +import com.refinedmods.refinedstorage.api.autocrafting.Pattern; import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage.api.network.impl.autocrafting.SimplePattern; +import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; import com.refinedmods.refinedstorage.api.network.impl.security.SecurityDecisionProviderImpl; +import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; +import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.AccessMode; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.StorageImpl; import com.refinedmods.refinedstorage.network.test.AddNetworkNode; import com.refinedmods.refinedstorage.network.test.InjectNetwork; +import com.refinedmods.refinedstorage.network.test.InjectNetworkAutocraftingComponent; import com.refinedmods.refinedstorage.network.test.InjectNetworkEnergyComponent; import com.refinedmods.refinedstorage.network.test.InjectNetworkSecurityComponent; import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; @@ -64,15 +71,18 @@ void testInitialState() { void shouldNotPassComponentsIfOutputNodeIsNotSet( @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); input.setAccessMode(AccessMode.INSERT_EXTRACT); input.setPriority(5); @@ -82,7 +92,8 @@ void shouldNotPassComponentsIfOutputNodeIsNotSet( input.setComponentTypes(Set.of( RelayComponentType.ENERGY, RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); // Assert @@ -94,6 +105,8 @@ void shouldNotPassComponentsIfOutputNodeIsNotSet( assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + assertThat(outputAutocrafting.getPatterns()).isEmpty(); assertThat(output.getEnergyUsage()).isZero(); } @@ -101,21 +114,25 @@ void shouldNotPassComponentsIfOutputNodeIsNotSet( void shouldNotPassComponentsIfInactive( @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setOutputNode(output); addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); // Act input.setComponentTypes(Set.of( RelayComponentType.ENERGY, RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); // Assert @@ -127,6 +144,8 @@ void shouldNotPassComponentsIfInactive( assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + assertThat(outputAutocrafting.getPatterns()).isEmpty(); assertThat(output.getEnergyUsage()).isZero(); } @@ -134,9 +153,11 @@ void shouldNotPassComponentsIfInactive( void shouldNotPassComponentsIfNoNetworkIsSet( @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); @@ -145,12 +166,14 @@ void shouldNotPassComponentsIfNoNetworkIsSet( addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); // Act input.setComponentTypes(Set.of( RelayComponentType.ENERGY, RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); // Assert @@ -162,6 +185,8 @@ void shouldNotPassComponentsIfNoNetworkIsSet( assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + assertThat(outputAutocrafting.getPatterns()).isEmpty(); assertThat(output.getEnergyUsage()).isZero(); } @@ -169,9 +194,11 @@ void shouldNotPassComponentsIfNoNetworkIsSet( void shouldResetComponentsIfBecomingInactive( @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); @@ -179,11 +206,13 @@ void shouldResetComponentsIfBecomingInactive( input.setComponentTypes(Set.of( RelayComponentType.ENERGY, RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); // Act input.setActive(false); @@ -197,6 +226,8 @@ void shouldResetComponentsIfBecomingInactive( assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + assertThat(outputAutocrafting.getPatterns()).isEmpty(); assertThat(output.getEnergyUsage()).isZero(); } @@ -204,9 +235,11 @@ void shouldResetComponentsIfBecomingInactive( void shouldResetComponentsIfNetworkIsRemoved( @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); @@ -214,11 +247,13 @@ void shouldResetComponentsIfNetworkIsRemoved( input.setComponentTypes(Set.of( RelayComponentType.ENERGY, RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); // Act input.setNetwork(null); @@ -232,6 +267,8 @@ void shouldResetComponentsIfNetworkIsRemoved( assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); + assertThat(outputAutocrafting.getOutputs()).isEmpty(); + assertThat(outputAutocrafting.getPatterns()).isEmpty(); assertThat(output.getEnergyUsage()).isZero(); } @@ -241,14 +278,18 @@ void shouldResetComponentsIfNetworkIsChanged( @InjectNetwork("input") final Network inputNetwork, @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetwork("input_alt") final Network inputAlternativeNetwork, @InjectNetworkEnergyComponent(networkId = "input_alt") final EnergyNetworkComponent inputAlternativeEnergy, @InjectNetworkSecurityComponent(networkId = "input_alt") final SecurityNetworkComponent inputAlternativeSecurity, @InjectNetworkStorageComponent(networkId = "input_alt") final StorageNetworkComponent inputAlternativeStorage, + @InjectNetworkAutocraftingComponent(networkId = "input_alt") + final AutocraftingNetworkComponent inputAlternativeAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); @@ -256,7 +297,8 @@ void shouldResetComponentsIfNetworkIsChanged( input.setComponentTypes(Set.of( RelayComponentType.ENERGY, RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); inputStorage.addSource(new StorageImpl()); @@ -270,6 +312,9 @@ void shouldResetComponentsIfNetworkIsChanged( addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addSecurityPolicy(inputAlternativeSecurity, FakePermissions.OTHER2); + addPattern(inputAutocrafting, A); + addPattern(inputAlternativeAutocrafting, B); + // Act inputNetwork.removeContainer(() -> input); input.setNetwork(inputAlternativeNetwork); @@ -296,6 +341,8 @@ void shouldResetComponentsIfNetworkIsChanged( new ResourceAmount(A, 32), new ResourceAmount(C, 1) ); + assertThat(outputAutocrafting.getOutputs()).containsExactly(B); + assertThat(outputAutocrafting.getPatterns()).allMatch(p -> p.getOutputResources().contains(B)); assertThat(inputAlternativeStorage.getAll()).usingRecursiveFieldByFieldElementComparator() .containsExactlyInAnyOrder(new ResourceAmount(A, 32), new ResourceAmount(C, 1)); assertThat(inputStorage.getAll()).usingRecursiveFieldByFieldElementComparator() @@ -308,20 +355,24 @@ void shouldResetComponentsWhenComponentTypeIsEnabled( @InjectNetworkEnergyComponent(networkId = "input") final EnergyNetworkComponent inputEnergy, @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); input.setOutputNode(output); input.setComponentTypes(Set.of( RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); // Act final long originalStored = inputEnergy.getStored(); @@ -339,6 +390,8 @@ void shouldResetComponentsWhenComponentTypeIsEnabled( ); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isEqualTo(1); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isEqualTo(1); + assertThat(outputAutocrafting.getOutputs()).containsExactly(A); + assertThat(outputAutocrafting.getPatterns()).allMatch(p -> p.getOutputResources().contains(A)); assertThat(output.getEnergyUsage()).isEqualTo(OUTPUT_ENERGY_USAGE); } @@ -346,20 +399,24 @@ void shouldResetComponentsWhenComponentTypeIsEnabled( void shouldResetComponentsWhenComponentTypeIsDisabled( @InjectNetworkSecurityComponent(networkId = "input") final SecurityNetworkComponent inputSecurity, @InjectNetworkStorageComponent(networkId = "input") final StorageNetworkComponent inputStorage, + @InjectNetworkAutocraftingComponent(networkId = "input") final AutocraftingNetworkComponent inputAutocrafting, @InjectNetworkEnergyComponent(networkId = "output") final EnergyNetworkComponent outputEnergy, @InjectNetworkSecurityComponent(networkId = "output") final SecurityNetworkComponent outputSecurity, - @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage + @InjectNetworkStorageComponent(networkId = "output") final StorageNetworkComponent outputStorage, + @InjectNetworkAutocraftingComponent(networkId = "output") final AutocraftingNetworkComponent outputAutocrafting ) { // Arrange input.setActive(true); input.setOutputNode(output); input.setComponentTypes(Set.of( RelayComponentType.SECURITY, - RelayComponentType.STORAGE + RelayComponentType.STORAGE, + RelayComponentType.AUTOCRAFTING )); addSecurityPolicy(inputSecurity, FakePermissions.OTHER); addStorageSource(inputStorage); + addPattern(inputAutocrafting, A); // Act input.updateComponentType(RelayComponentType.ENERGY, false); @@ -376,6 +433,8 @@ void shouldResetComponentsWhenComponentTypeIsDisabled( ); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isEqualTo(1); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isEqualTo(1); + assertThat(outputAutocrafting.getOutputs()).containsExactly(A); + assertThat(outputAutocrafting.getPatterns()).allMatch(p -> p.getOutputResources().contains(A)); assertThat(output.getEnergyUsage()).isEqualTo(OUTPUT_ENERGY_USAGE); } @@ -403,4 +462,13 @@ static void addStorageSource(final StorageNetworkComponent storage) { storage.addSource(new StorageImpl()); storage.insert(A, 10, Action.EXECUTE, EmptyActor.INSTANCE); } + + static Runnable addPattern(final AutocraftingNetworkComponent component, final ResourceKey output) { + final Pattern pattern = new SimplePattern(output); + final PatternProviderNetworkNode patternProvider = new PatternProviderNetworkNode(0, 1); + patternProvider.setPattern(0, pattern); + final NetworkNodeContainer container = () -> patternProvider; + component.onContainerAdded(container); + return () -> component.onContainerRemoved(container); + } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java index f7f095ff8..f3e64b307 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java @@ -591,7 +591,7 @@ void shouldUpdateOutputStorageWhenFilterModeIsChanged( @Test @SetupNetwork(id = "cycle_input", energyStored = 1, energyCapacity = 2) @SetupNetwork(id = "cycle_input_alt", energyStored = 3, energyCapacity = 4) - void shouldDetectStorageCycles( + void shouldDetectCycles( @InjectNetwork("cycle_input") final Network inputNetwork, @InjectNetworkStorageComponent(networkId = "cycle_input") final StorageNetworkComponent inputStorage, @InjectNetwork("cycle_input_alt") final Network inputAlternativeNetwork, From c99fd104ed79cf8184963cafcdf5d5a19a41ef02 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 10 Oct 2024 11:36:47 +0200 Subject: [PATCH 57/83] chore: cleanup recipe mod helper code --- .../common/api/RefinedStorageApi.java | 3 +-- .../common/api/RefinedStorageApiProxy.java | 4 ++-- .../common/RefinedStorageApiImpl.java | 2 +- .../autocrafting/AutocrafterBlockEntity.java | 4 ++-- .../common/grid/AbstractGridContainerMenu.java | 14 -------------- .../common/grid/screen/AbstractGridScreen.java | 12 +----------- 6 files changed, 7 insertions(+), 32 deletions(-) diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index 747956041..95b3116cc 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -206,6 +206,5 @@ EnergyStorage asBlockItemEnergyStorage( Optional getPattern(ItemStack stack, Level level); - // TODO: rename, openAutocraftingPreview - void openCraftingPreview(List requests, @Nullable Object parentScreen); + void openAutocraftingPreview(List requests, @Nullable Object parentScreen); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java index 3f3ac500f..cd6065445 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java @@ -404,8 +404,8 @@ public Optional getPattern(final ItemStack stack, final Level level) { } @Override - public void openCraftingPreview(final List requests, @Nullable final Object parentScreen) { - ensureLoaded().openCraftingPreview(requests, parentScreen); + public void openAutocraftingPreview(final List requests, @Nullable final Object parentScreen) { + ensureLoaded().openAutocraftingPreview(requests, parentScreen); } private RefinedStorageApi ensureLoaded() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 869e005f1..71589c077 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -599,7 +599,7 @@ public Optional getPattern(final ItemStack stack, final Level level) { } @Override - public void openCraftingPreview(final List requests, @Nullable final Object parentScreen) { + public void openAutocraftingPreview(final List requests, @Nullable final Object parentScreen) { if (requests.isEmpty()) { return; } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java index 0bd4f665d..37faee307 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java @@ -45,7 +45,7 @@ public class AutocrafterBlockEntity extends AbstractBaseNetworkNodeContainerBloc implements ExtendedMenuProvider, BlockEntityWithDrops, PatternInventory.Listener { static final int PATTERNS = 9; - private static final int MAX_CHAINED_CRAFTERS = 8; + private static final int MAX_CHAINED_AUTOCRAFTERS = 8; private static final String TAG_UPGRADES = "upgr"; private static final String TAG_PATTERNS = "patterns"; private static final String TAG_LOCK_MODE = "lm"; @@ -119,7 +119,7 @@ private AutocrafterBlockEntity getChainingRoot() { private AutocrafterBlockEntity getChainingRoot(final int depth, final AutocrafterBlockEntity origin) { final Direction direction = tryExtractDirection(getBlockState()); - if (level == null || direction == null || depth >= MAX_CHAINED_CRAFTERS) { + if (level == null || direction == null || depth >= MAX_CHAINED_AUTOCRAFTERS) { return origin; } final BlockEntity neighbor = getConnectedMachine(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java index 956715c76..a89a4178f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/AbstractGridContainerMenu.java @@ -95,9 +95,6 @@ public abstract class AbstractGridContainerMenu extends AbstractResourceContaine private boolean active; @Nullable private GridSearchBox searchBox; - // TODO: remove this ;) - @Nullable - private Object gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; protected AbstractGridContainerMenu( final MenuType menuType, @@ -150,17 +147,6 @@ protected AbstractGridContainerMenu( initStrategies((ServerPlayer) playerInventory.player); } - public void setGridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview( - @Nullable final Object gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview) { - this.gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview = - gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; - } - - @Nullable - public Object getGridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview() { - return gridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview; - } - private BiPredicate createBaseFilter() { return createResourceTypeFilter().and(createViewTypeFilter()); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java index 60ab6c62b..633d7a46e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/screen/AbstractGridScreen.java @@ -79,7 +79,6 @@ protected AbstractGridScreen(final T menu, final Component title, final int bottomHeight) { super(menu, playerInventory, new TextMarquee(title, 70)); - menu.setGridScreenForRecipeModsThatDontProvideEnoughContextToReturnToAfterCraftingPreview(this); this.bottomHeight = bottomHeight; } @@ -536,16 +535,7 @@ private boolean tryStartAutocrafting(final PlatformGridResource resource) { if (request == null) { return false; } - final List requests = new ArrayList<>(); - requests.add(request); - // TODO: Remove - temporary code - if (hasShiftDown()) { - requests.add(new ResourceAmount(request.resource(), request.amount() * 2)); - requests.add(new ResourceAmount(request.resource(), request.amount() * 3)); - requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); - requests.add(new ResourceAmount(request.resource(), request.amount() * 4)); - } - RefinedStorageApi.INSTANCE.openCraftingPreview(requests, this); + RefinedStorageApi.INSTANCE.openAutocraftingPreview(List.of(request), this); return true; } From 30d00dc0f2cab4f22bc51ae0e02a5319c0b9fa11 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 10 Oct 2024 11:40:10 +0200 Subject: [PATCH 58/83] refactor: dedicated package for fixtures Rename some "fakes" to "fixtures" --- .../network/test/NetworkTestExtension.java | 1 + .../network/test/fake/FakeActor.java | 15 --- .../network/test/fake/FakePermissions.java | 7 - .../network/test/fake/FakeSecurityActors.java | 7 - .../network/test/fixtures/ActorFixture.java | 15 +++ .../{ => fixtures}/NetworkTestFixtures.java | 5 +- .../test/fixtures/PermissionFixtures.java | 7 + .../ResourceFixtures.java} | 5 +- .../test/fixtures/SecurityActorFixtures.java | 7 + .../test/{fake => fixtures}/package-info.java | 2 +- .../impl/AbstractNetworkBuilderImplTest.java | 2 +- .../impl/PriorityNetworkBuilderImplTest.java | 4 +- .../AutocraftingNetworkComponentImplTest.java | 18 +-- .../node/GraphNetworkComponentImplTest.java | 2 +- .../detector/DetectorNetworkNodeTest.java | 2 +- .../AbstractExporterNetworkNodeTest.java | 6 +- .../DefaultExporterNetworkNodeTest.java | 6 +- .../RandomExporterNetworkNodeTest.java | 4 +- .../RoundRobinExporterNetworkNodeTest.java | 8 +- .../ExternalStorageNetworkNodeTest.java | 36 +++--- .../impl/node/grid/GridNetworkNodeTest.java | 30 ++--- .../ClearSlotInterfaceNetworkNodeTest.java | 4 +- ...rtToEmptySlotInterfaceNetworkNodeTest.java | 8 +- .../node/iface/InterfaceExportStateImpl.java | 6 +- .../node/iface/InterfaceNetworkNodeTest.java | 2 +- ...KeepExportingInterfaceNetworkNodeTest.java | 8 +- ...erfaceExternalStorageProviderImplTest.java | 4 +- ...erfaceExternalStorageProviderImplTest.java | 2 +- ...erfaceExternalStorageProviderImplTest.java | 2 +- .../importer/ImporterNetworkNodeTest.java | 10 +- .../PatternProviderNetworkNodeTest.java | 21 +-- .../RelayAutocraftingNetworkNodeTest.java | 17 ++- .../relay/RelayEnergyNetworkNodeTest.java | 12 +- .../impl/node/relay/RelayNetworkNodeTest.java | 66 +++++----- .../relay/RelaySecurityNetworkNodeTest.java | 42 +++--- .../relay/RelayStorageNetworkNodeTest.java | 18 +-- .../PriorityStorageNetworkNodeTest.java | 2 +- .../node/storage/StorageNetworkNodeTest.java | 20 +-- .../StorageTransferNetworkNodeTest.java | 10 +- .../SecurityNetworkComponentImplTest.java | 122 +++++++++--------- .../StorageNetworkComponentImplTest.java | 6 +- 41 files changed, 285 insertions(+), 286 deletions(-) delete mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeActor.java delete mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakePermissions.java delete mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeSecurityActors.java create mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ActorFixture.java rename refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/{ => fixtures}/NetworkTestFixtures.java (93%) create mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/PermissionFixtures.java rename refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/{fake/FakeResources.java => fixtures/ResourceFixtures.java} (52%) create mode 100644 refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/SecurityActorFixtures.java rename refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/{fake => fixtures}/package-info.java (77%) diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java index 916b06bc0..17e9b8e0e 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestExtension.java @@ -11,6 +11,7 @@ import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; +import com.refinedmods.refinedstorage.network.test.fixtures.NetworkTestFixtures; import com.refinedmods.refinedstorage.network.test.nodefactory.NetworkNodeFactory; import java.lang.annotation.Annotation; diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeActor.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeActor.java deleted file mode 100644 index 8cc2bb82a..000000000 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeActor.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.refinedmods.refinedstorage.network.test.fake; - -import com.refinedmods.refinedstorage.api.storage.Actor; - -public final class FakeActor implements Actor { - public static final FakeActor INSTANCE = new FakeActor(); - - private FakeActor() { - } - - @Override - public String getName() { - return "Fake"; - } -} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakePermissions.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakePermissions.java deleted file mode 100644 index ce1cd2fbf..000000000 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakePermissions.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.refinedmods.refinedstorage.network.test.fake; - -import com.refinedmods.refinedstorage.api.network.security.Permission; - -public enum FakePermissions implements Permission { - ALLOW_BY_DEFAULT, OTHER, OTHER2 -} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeSecurityActors.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeSecurityActors.java deleted file mode 100644 index cff73542a..000000000 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeSecurityActors.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.refinedmods.refinedstorage.network.test.fake; - -import com.refinedmods.refinedstorage.api.network.security.SecurityActor; - -public enum FakeSecurityActors implements SecurityActor { - A, B, C -} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ActorFixture.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ActorFixture.java new file mode 100644 index 000000000..6523160cf --- /dev/null +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ActorFixture.java @@ -0,0 +1,15 @@ +package com.refinedmods.refinedstorage.network.test.fixtures; + +import com.refinedmods.refinedstorage.api.storage.Actor; + +public final class ActorFixture implements Actor { + public static final ActorFixture INSTANCE = new ActorFixture(); + + private ActorFixture() { + } + + @Override + public String getName() { + return "Fake"; + } +} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/NetworkTestFixtures.java similarity index 93% rename from refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java rename to refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/NetworkTestFixtures.java index 1d0f67f40..7be2b7176 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/NetworkTestFixtures.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/NetworkTestFixtures.java @@ -1,4 +1,4 @@ -package com.refinedmods.refinedstorage.network.test; +package com.refinedmods.refinedstorage.network.test.fixtures; import com.refinedmods.refinedstorage.api.core.component.ComponentMapFactory; import com.refinedmods.refinedstorage.api.network.Network; @@ -15,7 +15,6 @@ import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; -import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; public final class NetworkTestFixtures { public static final ComponentMapFactory NETWORK_COMPONENT_MAP_FACTORY = @@ -36,7 +35,7 @@ public final class NetworkTestFixtures { ); NETWORK_COMPONENT_MAP_FACTORY.addFactory( SecurityNetworkComponent.class, - network -> new SecurityNetworkComponentImpl(SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)) + network -> new SecurityNetworkComponentImpl(SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT)) ); NETWORK_COMPONENT_MAP_FACTORY.addFactory( AutocraftingNetworkComponent.class, diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/PermissionFixtures.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/PermissionFixtures.java new file mode 100644 index 000000000..f31ec81cd --- /dev/null +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/PermissionFixtures.java @@ -0,0 +1,7 @@ +package com.refinedmods.refinedstorage.network.test.fixtures; + +import com.refinedmods.refinedstorage.api.network.security.Permission; + +public enum PermissionFixtures implements Permission { + ALLOW_BY_DEFAULT, OTHER, OTHER2 +} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ResourceFixtures.java similarity index 52% rename from refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java rename to refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ResourceFixtures.java index 8b927b9cc..2c72110d7 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/FakeResources.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/ResourceFixtures.java @@ -1,9 +1,8 @@ -package com.refinedmods.refinedstorage.network.test.fake; +package com.refinedmods.refinedstorage.network.test.fixtures; import com.refinedmods.refinedstorage.api.resource.ResourceKey; -// TODO: rename to fixtures -public enum FakeResources implements ResourceKey { +public enum ResourceFixtures implements ResourceKey { A, A_ALTERNATIVE, A_ALTERNATIVE2, diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/SecurityActorFixtures.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/SecurityActorFixtures.java new file mode 100644 index 000000000..8a5eccf7d --- /dev/null +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/SecurityActorFixtures.java @@ -0,0 +1,7 @@ +package com.refinedmods.refinedstorage.network.test.fixtures; + +import com.refinedmods.refinedstorage.api.network.security.SecurityActor; + +public enum SecurityActorFixtures implements SecurityActor { + A, B, C +} diff --git a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/package-info.java b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/package-info.java similarity index 77% rename from refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/package-info.java rename to refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/package-info.java index 99740d1a9..0eab2d668 100644 --- a/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fake/package-info.java +++ b/refinedstorage-network-test/src/main/java/com/refinedmods/refinedstorage/network/test/fixtures/package-info.java @@ -1,6 +1,6 @@ @ParametersAreNonnullByDefault @FieldsAndMethodsAreNonnullByDefault -package com.refinedmods.refinedstorage.network.test.fake; +package com.refinedmods.refinedstorage.network.test.fixtures; import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/AbstractNetworkBuilderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/AbstractNetworkBuilderImplTest.java index b1baf2c3f..3dd8cb2de 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/AbstractNetworkBuilderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/AbstractNetworkBuilderImplTest.java @@ -7,7 +7,7 @@ import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; -import com.refinedmods.refinedstorage.network.test.NetworkTestFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.NetworkTestFixtures; import java.util.ArrayList; import java.util.List; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java index 7b1ef3c53..4e8ef79f3 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java @@ -11,7 +11,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.EmptyActor; import com.refinedmods.refinedstorage.api.storage.StorageImpl; -import com.refinedmods.refinedstorage.network.test.fake.FakeActor; +import com.refinedmods.refinedstorage.network.test.fixtures.ActorFixture; import java.util.Optional; import java.util.function.Supplier; @@ -118,7 +118,7 @@ private NetworkSide createNetworkSide(final MasterSlave side, final Supplier networkFactory) { final StorageNetworkNode nodeA = new StorageNetworkNode(0, 0, 1); final StorageImpl storage = new StorageImpl(); - storage.insert(side, 10, Action.EXECUTE, FakeActor.INSTANCE); + storage.insert(side, 10, Action.EXECUTE, ActorFixture.INSTANCE); nodeA.setProvider(index -> Optional.of(storage)); final NetworkNodeContainer a = createContainerWithNetwork( nodeA, diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java index c7bdd3a11..cebdb63ee 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/autocrafting/AutocraftingNetworkComponentImplTest.java @@ -2,11 +2,11 @@ import com.refinedmods.refinedstorage.api.network.impl.node.patternprovider.PatternProviderNetworkNode; import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; -import com.refinedmods.refinedstorage.network.test.fake.FakeResources; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static org.assertj.core.api.Assertions.assertThat; class AutocraftingNetworkComponentImplTest { @@ -21,7 +21,7 @@ void setUp() { void shouldAddPatternsFromPatternProvider() { // Arrange final PatternProviderNetworkNode provider = new PatternProviderNetworkNode(0, 5); - provider.setPattern(1, new SimplePattern(FakeResources.A)); + provider.setPattern(1, new SimplePattern(A)); final NetworkNodeContainer container = () -> provider; @@ -29,14 +29,14 @@ void shouldAddPatternsFromPatternProvider() { sut.onContainerAdded(container); // Assert - assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.A); + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(A); } @Test void shouldRemovePatternsFromPatternProvider() { // Arrange final PatternProviderNetworkNode provider = new PatternProviderNetworkNode(0, 5); - provider.setPattern(1, new SimplePattern(FakeResources.A)); + provider.setPattern(1, new SimplePattern(A)); final NetworkNodeContainer container = () -> provider; sut.onContainerAdded(container); @@ -51,19 +51,19 @@ void shouldRemovePatternsFromPatternProvider() { @Test void shouldAddPatternManually() { // Arrange - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); // Act sut.add(pattern); // Assert - assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.A); + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(A); } @Test void shouldRemovePatternManually() { // Arrange - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); sut.add(pattern); // Act @@ -75,11 +75,11 @@ void shouldRemovePatternManually() { @Test void shouldStartTask() { - sut.startTask(FakeResources.A, 10); + sut.startTask(A, 10); } @Test void shouldGetPreview() { - sut.getPreview(FakeResources.A, 10); + sut.getPreview(A, 10); } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/GraphNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/GraphNetworkComponentImplTest.java index a8432d265..41235a4b6 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/GraphNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/GraphNetworkComponentImplTest.java @@ -4,7 +4,7 @@ import com.refinedmods.refinedstorage.api.network.node.GraphNetworkComponent; import com.refinedmods.refinedstorage.api.network.node.NetworkNode; import com.refinedmods.refinedstorage.api.network.node.container.NetworkNodeContainer; -import com.refinedmods.refinedstorage.network.test.NetworkTestFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.NetworkTestFixtures; import java.util.Set; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/detector/DetectorNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/detector/DetectorNetworkNodeTest.java index bce2d6535..685efa5a9 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/detector/DetectorNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/detector/DetectorNetworkNodeTest.java @@ -19,7 +19,7 @@ import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java index 83c5c4023..c0d5f8ede 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/AbstractExporterNetworkNodeTest.java @@ -24,9 +24,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java index aefed2b8b..cc1ee51ab 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/DefaultExporterNetworkNodeTest.java @@ -20,9 +20,9 @@ import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static org.assertj.core.api.Assertions.assertThat; class DefaultExporterNetworkNodeTest extends AbstractExporterNetworkNodeTest { diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java index e83190d85..e7b312bae 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RandomExporterNetworkNodeTest.java @@ -15,8 +15,8 @@ import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; class RandomExporterNetworkNodeTest extends AbstractExporterNetworkNodeTest { diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java index 30c056623..a7f2f3b5c 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/exporter/RoundRobinExporterNetworkNodeTest.java @@ -16,10 +16,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.D; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.D; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/externalstorage/ExternalStorageNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/externalstorage/ExternalStorageNetworkNodeTest.java index 1f52e431f..f0cbd3de8 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/externalstorage/ExternalStorageNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/externalstorage/ExternalStorageNetworkNodeTest.java @@ -18,7 +18,7 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakeActor; +import com.refinedmods.refinedstorage.network.test.fixtures.ActorFixture; import java.util.Optional; import java.util.Set; @@ -30,9 +30,9 @@ import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ENERGY_USAGE; import static org.assertj.core.api.Assertions.assertThat; @@ -50,8 +50,8 @@ class ExternalStorageNetworkNodeTest { @Test void testInitialState(@InjectNetworkStorageComponent final StorageNetworkComponent networkStorage) { // Act - final long inserted = networkStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); - final long extracted = networkStorage.extract(A, 10, Action.EXECUTE, FakeActor.INSTANCE); + final long inserted = networkStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); + final long extracted = networkStorage.extract(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); // Assert assertThat(inserted).isZero(); @@ -62,7 +62,7 @@ void testInitialState(@InjectNetworkStorageComponent final StorageNetworkCompone assertThat(sut.getStorageConfiguration().getFilterMode()).isEqualTo(FilterMode.BLOCK); assertThat(networkStorage.getAll()).isEmpty(); assertThat(networkStorage.getStored()).isZero(); - assertThat(networkStorage.findTrackedResourceByActorType(A, FakeActor.class)).isEmpty(); + assertThat(networkStorage.findTrackedResourceByActorType(A, ActorFixture.class)).isEmpty(); } @Test @@ -484,17 +484,17 @@ void shouldTrackChangesWhenExtracting( ); // Act - final long extracted = networkStorage.extract(A, 7, action, FakeActor.INSTANCE); + final long extracted = networkStorage.extract(A, 7, action, ActorFixture.INSTANCE); // Assert assertThat(extracted).isEqualTo(7); final Optional trackedResource = networkStorage.findTrackedResourceByActorType( A, - FakeActor.class + ActorFixture.class ); if (action == Action.EXECUTE) { assertThat(trackedResource).get().usingRecursiveComparison().isEqualTo(new TrackedResource( - FakeActor.INSTANCE.getName(), + ActorFixture.INSTANCE.getName(), 0 )); assertThat(trackedResourceWasPresent).describedAs("tracked resource was present").isTrue(); @@ -516,13 +516,13 @@ void shouldNotTrackChangesWhenExtractionFailed( sut.initialize(new ExternalStorageProviderFactoryImpl(provider)); // Act - final long extracted = networkStorage.extract(A, 7, action, FakeActor.INSTANCE); + final long extracted = networkStorage.extract(A, 7, action, ActorFixture.INSTANCE); // Assert assertThat(extracted).isZero(); final Optional trackedResource = networkStorage.findTrackedResourceByActorType( A, - FakeActor.class + ActorFixture.class ); assertThat(trackedResource).isEmpty(); } @@ -544,17 +544,17 @@ void shouldTrackChangesWhenInserting( ); // Act - final long inserted = networkStorage.insert(A, 10, action, FakeActor.INSTANCE); + final long inserted = networkStorage.insert(A, 10, action, ActorFixture.INSTANCE); // Assert assertThat(inserted).isEqualTo(10); final Optional trackedResource = networkStorage.findTrackedResourceByActorType( A, - FakeActor.class + ActorFixture.class ); if (action == Action.EXECUTE) { assertThat(trackedResource).get().usingRecursiveComparison().isEqualTo(new TrackedResource( - FakeActor.INSTANCE.getName(), + ActorFixture.INSTANCE.getName(), 0 )); assertThat(trackedResourceWasPresent).describedAs("tracked resource was present").isTrue(); @@ -576,13 +576,13 @@ void shouldNotTrackChangesWhenInsertionFailed( sut.initialize(new ExternalStorageProviderFactoryImpl(provider)); // Act - final long inserted = networkStorage.insert(A, 10, action, FakeActor.INSTANCE); + final long inserted = networkStorage.insert(A, 10, action, ActorFixture.INSTANCE); // Assert assertThat(inserted).isZero(); final Optional trackedResource = networkStorage.findTrackedResourceByActorType( A, - FakeActor.class + ActorFixture.class ); assertThat(trackedResource).isEmpty(); } @@ -593,7 +593,7 @@ private AtomicBoolean trackWhetherResourceHasChangedAndTrackedResourceIsAvailabl final AtomicBoolean found = new AtomicBoolean(); networkStorage.addListener(change -> { if (change.resource().equals(A)) { - found.set(networkStorage.findTrackedResourceByActorType(A, FakeActor.class).isPresent()); + found.set(networkStorage.findTrackedResourceByActorType(A, ActorFixture.class).isPresent()); } }); return found; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/grid/GridNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/grid/GridNetworkNodeTest.java index 9223a2105..a25f7cbde 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/grid/GridNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/grid/GridNetworkNodeTest.java @@ -16,17 +16,17 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakeActor; +import com.refinedmods.refinedstorage.network.test.fixtures.ActorFixture; import com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.D; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.D; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyLong; @@ -89,13 +89,13 @@ void shouldNotifyWatchersOfStorageChanges( ) { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - sut.addWatcher(watcher, FakeActor.class); + sut.addWatcher(watcher, ActorFixture.class); // Act networkStorage.insert(A, 10, Action.EXECUTE, EmptyActor.INSTANCE); - networkStorage.insert(A, 1, Action.EXECUTE, FakeActor.INSTANCE); + networkStorage.insert(A, 1, Action.EXECUTE, ActorFixture.INSTANCE); sut.removeWatcher(watcher); - networkStorage.insert(A, 1, Action.EXECUTE, FakeActor.INSTANCE); + networkStorage.insert(A, 1, Action.EXECUTE, ActorFixture.INSTANCE); // Assert final ArgumentCaptor resources = ArgumentCaptor.forClass(ResourceKey.class); @@ -128,7 +128,7 @@ void shouldNotBeAbleToAddDuplicateWatcher() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); final Class actorType1 = EmptyActor.class; - final Class actorType2 = FakeActor.class; + final Class actorType2 = ActorFixture.class; sut.addWatcher(watcher, actorType1); @@ -146,22 +146,22 @@ void shouldDetachWatchersFromOldNetworkAndReattachToNewNetwork( ) { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - sut.addWatcher(watcher, FakeActor.class); + sut.addWatcher(watcher, ActorFixture.class); // Act // This one shouldn't be ignored! - otherStorage.insert(C, 10, Action.EXECUTE, FakeActor.INSTANCE); + otherStorage.insert(C, 10, Action.EXECUTE, ActorFixture.INSTANCE); sut.setNetwork(otherNetwork); network.removeContainer(() -> sut); otherNetwork.addContainer(() -> sut); // these one shouldn't be ignored either - otherStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); + otherStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); otherStorage.insert(D, 10, Action.EXECUTE, EmptyActor.INSTANCE); // these should be ignored - storage.insert(B, 10, Action.EXECUTE, FakeActor.INSTANCE); + storage.insert(B, 10, Action.EXECUTE, ActorFixture.INSTANCE); storage.insert(D, 10, Action.EXECUTE, EmptyActor.INSTANCE); // Assert @@ -175,7 +175,7 @@ void shouldDetachWatchersFromOldNetworkAndReattachToNewNetwork( ); assertThat(trackedResources1.getAllValues()) .hasSize(1) - .allMatch(t -> FakeActor.INSTANCE.getName().equals(t.getSourceName())); + .allMatch(t -> ActorFixture.INSTANCE.getName().equals(t.getSourceName())); final ArgumentCaptor trackedResources2 = ArgumentCaptor.forClass(TrackedResource.class); verify(watcher, times(1)).onChanged( @@ -185,7 +185,7 @@ void shouldDetachWatchersFromOldNetworkAndReattachToNewNetwork( ); assertThat(trackedResources2.getAllValues()) .hasSize(1) - .allMatch(t -> FakeActor.INSTANCE.getName().equals(t.getSourceName())); + .allMatch(t -> ActorFixture.INSTANCE.getName().equals(t.getSourceName())); verify(watcher, times(1)).onChanged( eq(D), diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ClearSlotInterfaceNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ClearSlotInterfaceNetworkNodeTest.java index 39c114372..ae9fe2b33 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ClearSlotInterfaceNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ClearSlotInterfaceNetworkNodeTest.java @@ -12,8 +12,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ExportToEmptySlotInterfaceNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ExportToEmptySlotInterfaceNetworkNodeTest.java index 73200d251..bbe45befb 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ExportToEmptySlotInterfaceNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/ExportToEmptySlotInterfaceNetworkNodeTest.java @@ -13,10 +13,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE2; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE2; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceExportStateImpl.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceExportStateImpl.java index 115fd22b2..ed872ff95 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceExportStateImpl.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceExportStateImpl.java @@ -13,9 +13,9 @@ import java.util.Map; import javax.annotation.Nullable; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE2; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE2; public class InterfaceExportStateImpl implements InterfaceExportState { private final Map requested = new HashMap<>(); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceNetworkNodeTest.java index 365c23c95..d6241274b 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/InterfaceNetworkNodeTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/KeepExportingInterfaceNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/KeepExportingInterfaceNetworkNodeTest.java index f9f4b7540..6ac9f30e4 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/KeepExportingInterfaceNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/KeepExportingInterfaceNetworkNodeTest.java @@ -14,10 +14,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE2; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE2; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/InterfaceExternalStorageProviderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/InterfaceExternalStorageProviderImplTest.java index 17e285368..f0283bc69 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/InterfaceExternalStorageProviderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/InterfaceExternalStorageProviderImplTest.java @@ -18,8 +18,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/IoLoopInterfaceExternalStorageProviderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/IoLoopInterfaceExternalStorageProviderImplTest.java index 2119d07e7..e3f07a268 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/IoLoopInterfaceExternalStorageProviderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/IoLoopInterfaceExternalStorageProviderImplTest.java @@ -21,7 +21,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/SelfIoInterfaceExternalStorageProviderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/SelfIoInterfaceExternalStorageProviderImplTest.java index 441fb5c0b..8bb892d8a 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/SelfIoInterfaceExternalStorageProviderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/iface/externalstorage/SelfIoInterfaceExternalStorageProviderImplTest.java @@ -14,7 +14,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java index c37a31d61..3eb7ce89f 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java @@ -23,11 +23,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE2; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE2; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java index 696db08fb..a8c39a174 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNodeTest.java @@ -6,11 +6,12 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkAutocraftingComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakeResources; import com.refinedmods.refinedstorage.network.test.nodefactory.PatternProviderNetworkNodeFactory; import org.junit.jupiter.api.Test; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest @@ -34,11 +35,11 @@ void shouldSetPatternAndNotifyNetwork( @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting ) { // Act - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); sut.setPattern(0, pattern); // Assert - assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); + assertThat(autocrafting.getOutputs()).containsExactly(A); } @Test @@ -46,7 +47,7 @@ void shouldRemovePatternAndNotifyNetwork( @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting ) { // Arrange - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); sut.setPattern(0, pattern); // Act @@ -61,15 +62,15 @@ void shouldReplacePatternAndNotifyNetwork( @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting ) { // Arrange - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); sut.setPattern(0, pattern); // Act - final SimplePattern replacedPattern = new SimplePattern(FakeResources.B); + final SimplePattern replacedPattern = new SimplePattern(B); sut.setPattern(0, replacedPattern); // Assert - assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.B); + assertThat(autocrafting.getOutputs()).containsExactly(B); } @Test @@ -77,7 +78,7 @@ void shouldRemovePatternsFromNetworkWhenInactive( @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting ) { // Arrange - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); sut.setPattern(0, pattern); // Act @@ -92,7 +93,7 @@ void shouldAddPatternsFromNetworkWhenActive( @InjectNetworkAutocraftingComponent final AutocraftingNetworkComponent autocrafting ) { // Arrange - final SimplePattern pattern = new SimplePattern(FakeResources.A); + final SimplePattern pattern = new SimplePattern(A); sut.setPattern(0, pattern); sut.setActive(false); @@ -100,6 +101,6 @@ void shouldAddPatternsFromNetworkWhenActive( sut.setActive(true); // Assert - assertThat(autocrafting.getOutputs()).containsExactly(FakeResources.A); + assertThat(autocrafting.getOutputs()).containsExactly(A); } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java index 787f6933c..0aebeaab4 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayAutocraftingNetworkNodeTest.java @@ -8,18 +8,17 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkAutocraftingComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakeResources; import java.util.Set; import org.junit.jupiter.api.Test; import static com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayNetworkNodeTest.addPattern; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.D; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.D; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ACTIVE; import static org.assertj.core.api.Assertions.assertThat; @@ -50,7 +49,7 @@ void shouldPassAutocraftingComponent( // Act input.setComponentTypes(Set.of(RelayComponentType.AUTOCRAFTING)); - final var removeB = addPattern(inputAutocrafting, FakeResources.B); + final var removeB = addPattern(inputAutocrafting, B); removeB.run(); addPattern(inputAutocrafting, C); @@ -75,7 +74,7 @@ void shouldRemovePatternsWhenNetworkIsRemoved( // Act input.setNetwork(null); - addPattern(inputAutocrafting, FakeResources.B); + addPattern(inputAutocrafting, B); // Assert assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() @@ -138,7 +137,7 @@ void shouldNotNotifyOldOutputNetworkWhenOutputNetworkHasChanged( outputAlternativeNetwork.addContainer(() -> output); output.setNetwork(outputAlternativeNetwork); - addPattern(inputAutocrafting, FakeResources.B); + addPattern(inputAutocrafting, B); // Assert assertThat(inputAutocrafting.getOutputs()).usingRecursiveFieldByFieldElementComparator() diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayEnergyNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayEnergyNetworkNodeTest.java index 99c619d3e..15705f567 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayEnergyNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayEnergyNetworkNodeTest.java @@ -13,8 +13,8 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; -import com.refinedmods.refinedstorage.network.test.fake.FakeSecurityActors; +import com.refinedmods.refinedstorage.network.test.fixtures.PermissionFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.SecurityActorFixtures; import java.util.Set; @@ -22,7 +22,7 @@ import static com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayNetworkNodeTest.addSecurityPolicy; import static com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayNetworkNodeTest.addStorageSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ACTIVE; import static org.assertj.core.api.Assertions.assertThat; @@ -52,7 +52,7 @@ void shouldPassEnergyComponent( input.setActive(true); input.setOutputNode(output); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); final long originalStored = inputEnergy.getStored(); @@ -65,8 +65,8 @@ void shouldPassEnergyComponent( assertThat(extracted).isEqualTo(10); assertThat(outputEnergy.getCapacity()).isEqualTo(inputEnergy.getCapacity()); assertThat(outputEnergy.getStored()).isEqualTo(originalStored - 10); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(input.hasComponentType(RelayComponentType.ENERGY)).isTrue(); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java index cba7292cb..c2cfaa6a9 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java @@ -25,8 +25,8 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; -import com.refinedmods.refinedstorage.network.test.fake.FakeSecurityActors; +import com.refinedmods.refinedstorage.network.test.fixtures.PermissionFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.SecurityActorFixtures; import java.util.Set; @@ -35,9 +35,9 @@ import org.junit.jupiter.params.provider.EnumSource; import static com.refinedmods.refinedstorage.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode.activeSecurityDecisionProvider; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ACTIVE; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ENERGY_USAGE; import static org.assertj.core.api.Assertions.assertThat; @@ -80,7 +80,7 @@ void shouldNotPassComponentsIfOutputNodeIsNotSet( // Arrange input.setActive(true); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -100,8 +100,8 @@ void shouldNotPassComponentsIfOutputNodeIsNotSet( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(outputEnergy.extract(1)).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); @@ -123,7 +123,7 @@ void shouldNotPassComponentsIfInactive( // Arrange input.setOutputNode(output); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -139,8 +139,8 @@ void shouldNotPassComponentsIfInactive( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(outputEnergy.extract(1)).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); @@ -164,7 +164,7 @@ void shouldNotPassComponentsIfNoNetworkIsSet( input.setNetwork(null); input.setOutputNode(output); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -180,8 +180,8 @@ void shouldNotPassComponentsIfNoNetworkIsSet( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(outputEnergy.extract(1)).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); @@ -210,7 +210,7 @@ void shouldResetComponentsIfBecomingInactive( RelayComponentType.AUTOCRAFTING )); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -221,8 +221,8 @@ void shouldResetComponentsIfBecomingInactive( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(outputEnergy.extract(1)).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); @@ -251,7 +251,7 @@ void shouldResetComponentsIfNetworkIsRemoved( RelayComponentType.AUTOCRAFTING )); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -262,8 +262,8 @@ void shouldResetComponentsIfNetworkIsRemoved( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(outputEnergy.extract(1)).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); @@ -309,8 +309,8 @@ void shouldResetComponentsIfNetworkIsChanged( inputAlternativeStorage.addSource(new StorageImpl()); inputAlternativeStorage.insert(A, 33, Action.EXECUTE, EmptyActor.INSTANCE); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); - addSecurityPolicy(inputAlternativeSecurity, FakePermissions.OTHER2); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); + addSecurityPolicy(inputAlternativeSecurity, PermissionFixtures.OTHER2); addPattern(inputAutocrafting, A); addPattern(inputAlternativeAutocrafting, B); @@ -333,9 +333,9 @@ void shouldResetComponentsIfNetworkIsChanged( assertThat(outputEnergy.getCapacity()).isEqualTo(inputAlternativeEnergy.getCapacity()); assertThat(outputEnergy.getStored()).isEqualTo(originalStored - 1); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isFalse(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isTrue(); assertThat(outputStorage.getStored()).isEqualTo(33); assertThat(outputStorage.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( new ResourceAmount(A, 32), @@ -370,7 +370,7 @@ void shouldResetComponentsWhenComponentTypeIsEnabled( RelayComponentType.AUTOCRAFTING )); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -383,8 +383,8 @@ void shouldResetComponentsWhenComponentTypeIsEnabled( assertThat(outputEnergy.getCapacity()).isEqualTo(inputEnergy.getCapacity()); assertThat(outputEnergy.getStored()).isEqualTo(originalStored - 10); assertThat(extracted).isEqualTo(10); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isFalse(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isTrue(); assertThat(outputStorage.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactly( new ResourceAmount(A, 10) ); @@ -414,7 +414,7 @@ void shouldResetComponentsWhenComponentTypeIsDisabled( RelayComponentType.AUTOCRAFTING )); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); addStorageSource(inputStorage); addPattern(inputAutocrafting, A); @@ -426,8 +426,8 @@ void shouldResetComponentsWhenComponentTypeIsDisabled( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(extracted).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isFalse(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isTrue(); assertThat(outputStorage.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactly( new ResourceAmount(A, 10) ); @@ -452,9 +452,9 @@ void shouldUseEnergyWhenAtLeastOneComponentIsActive(final RelayComponentType typ assertThat(output.getEnergyUsage()).isEqualTo(OUTPUT_ENERGY_USAGE); } - static void addSecurityPolicy(final SecurityNetworkComponent security, final FakePermissions permission) { + static void addSecurityPolicy(final SecurityNetworkComponent security, final PermissionFixtures permission) { security.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(permission)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(permission)) )); } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelaySecurityNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelaySecurityNetworkNodeTest.java index c07572fb3..52c69c6d4 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelaySecurityNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelaySecurityNetworkNodeTest.java @@ -15,8 +15,8 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; -import com.refinedmods.refinedstorage.network.test.fake.FakeSecurityActors; +import com.refinedmods.refinedstorage.network.test.fixtures.PermissionFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.SecurityActorFixtures; import java.util.Set; @@ -24,7 +24,7 @@ import static com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayNetworkNodeTest.addStorageSource; import static com.refinedmods.refinedstorage.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode.activeSecurityDecisionProvider; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ACTIVE; import static org.assertj.core.api.Assertions.assertThat; @@ -55,8 +55,8 @@ void shouldPassSecurityComponent( inputSecurity.onContainerAdded(() -> activeSecurityDecisionProvider( new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)) - .setPolicy(FakeSecurityActors.B, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT)) + .setPolicy(SecurityActorFixtures.B, SecurityPolicy.of(PermissionFixtures.OTHER)) )); addStorageSource(inputStorage); @@ -68,10 +68,10 @@ void shouldPassSecurityComponent( assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); assertThat(outputEnergy.extract(1)).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.B)).isFalse(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.B)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isTrue(); assertThat(outputStorage.getAll()).isEmpty(); assertThat(outputStorage.insert(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); assertThat(outputStorage.extract(A, 1, Action.EXECUTE, EmptyActor.INSTANCE)).isZero(); @@ -90,7 +90,7 @@ void shouldNotActAsSecurityDecisionProviderIfOutputIsDisabled( input.setOutputNode(output); inputSecurity.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)) )); input.setComponentTypes(Set.of(RelayComponentType.SECURITY)); @@ -99,8 +99,8 @@ void shouldNotActAsSecurityDecisionProviderIfOutputIsDisabled( output.setActive(false); // Assert - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); } @Test @@ -113,15 +113,15 @@ void shouldNotActAsSecurityDecisionProviderIfSecurityIsNotPassed( input.setOutputNode(output); inputSecurity.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)) )); // Act input.setComponentTypes(Set.of()); // Assert - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); } @Test @@ -137,12 +137,12 @@ void shouldDetectSecurityCycles( // Arrange inputSecurity.onContainerAdded(() -> activeSecurityDecisionProvider( new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)) )); inputAlternativeSecurity.onContainerAdded(() -> activeSecurityDecisionProvider( new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER2)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER2)) )); // Act @@ -157,10 +157,10 @@ void shouldDetectSecurityCycles( inputAlternativeNetwork.addContainer(() -> cycleOutputAlternative); // Assert - assertThat(inputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isTrue(); - assertThat(inputSecurity.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(inputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isTrue(); + assertThat(inputSecurity.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(inputAlternativeSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(inputAlternativeSecurity.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isTrue(); + assertThat(inputAlternativeSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(inputAlternativeSecurity.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isTrue(); } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java index f3e64b307..538df1919 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayStorageNetworkNodeTest.java @@ -20,18 +20,18 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; -import com.refinedmods.refinedstorage.network.test.fake.FakeSecurityActors; +import com.refinedmods.refinedstorage.network.test.fixtures.PermissionFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.SecurityActorFixtures; import java.util.Set; import org.junit.jupiter.api.Test; import static com.refinedmods.refinedstorage.api.network.impl.node.relay.RelayNetworkNodeTest.addSecurityPolicy; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ACTIVE; import static org.assertj.core.api.Assertions.assertThat; @@ -60,7 +60,7 @@ void shouldPassStorageComponent( input.setActive(true); input.setOutputNode(output); - addSecurityPolicy(inputSecurity, FakePermissions.OTHER); + addSecurityPolicy(inputSecurity, PermissionFixtures.OTHER); inputStorage.addSource(new StorageImpl()); inputStorage.insert(A, 10, Action.EXECUTE, EmptyActor.INSTANCE); @@ -74,8 +74,8 @@ void shouldPassStorageComponent( // Assert assertThat(outputEnergy.getCapacity()).isZero(); assertThat(outputEnergy.getStored()).isZero(); - assertThat(outputSecurity.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(outputSecurity.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(outputSecurity.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); assertThat(inputStorage.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( new ResourceAmount(A, 10), diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/PriorityStorageNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/PriorityStorageNetworkNodeTest.java index b2ec65662..63ddf20b3 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/PriorityStorageNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/PriorityStorageNetworkNodeTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; import static org.assertj.core.api.Assertions.assertThat; @NetworkTest diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/StorageNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/StorageNetworkNodeTest.java index 7e21a3da7..f89ea30f5 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/StorageNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storage/StorageNetworkNodeTest.java @@ -19,7 +19,7 @@ import com.refinedmods.refinedstorage.network.test.InjectNetworkStorageComponent; import com.refinedmods.refinedstorage.network.test.NetworkTest; import com.refinedmods.refinedstorage.network.test.SetupNetwork; -import com.refinedmods.refinedstorage.network.test.fake.FakeActor; +import com.refinedmods.refinedstorage.network.test.fixtures.ActorFixture; import java.util.Collection; import java.util.HashSet; @@ -31,12 +31,12 @@ import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE2; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE2; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; import static com.refinedmods.refinedstorage.network.test.nodefactory.AbstractNetworkNodeFactory.PROPERTY_ENERGY_USAGE; import static com.refinedmods.refinedstorage.network.test.nodefactory.StorageNetworkNodeFactory.PROPERTY_ENERGY_USAGE_PER_STORAGE; import static org.assertj.core.api.Assertions.assertThat; @@ -666,11 +666,11 @@ void shouldTrackChanges(@InjectNetworkStorageComponent final StorageNetworkCompo initializeAndActivate(); // Act - final long inserted = networkStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); + final long inserted = networkStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); // Assert assertThat(inserted).isEqualTo(10); - assertThat(networkStorage.findTrackedResourceByActorType(A, FakeActor.class)).isNotEmpty(); + assertThat(networkStorage.findTrackedResourceByActorType(A, ActorFixture.class)).isNotEmpty(); } @Test @@ -686,7 +686,7 @@ void shouldNotifyListenerWhenStateChanges( initializeAndActivate(); // Act - networkStorage.insert(A, 75, Action.EXECUTE, FakeActor.INSTANCE); + networkStorage.insert(A, 75, Action.EXECUTE, ActorFixture.INSTANCE); // Assert verify(listener, times(1)).onStorageStateChanged(); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java index 782b0d833..67aef880c 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/storagetransfer/StorageTransferNetworkNodeTest.java @@ -24,11 +24,11 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A_ALTERNATIVE; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.C; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.D; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A_ALTERNATIVE; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.C; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.D; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/security/SecurityNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/security/SecurityNetworkComponentImplTest.java index 9a1ffdb86..933726352 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/security/SecurityNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/security/SecurityNetworkComponentImplTest.java @@ -3,8 +3,8 @@ import com.refinedmods.refinedstorage.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode; import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; import com.refinedmods.refinedstorage.api.network.security.SecurityPolicy; -import com.refinedmods.refinedstorage.network.test.fake.FakePermissions; -import com.refinedmods.refinedstorage.network.test.fake.FakeSecurityActors; +import com.refinedmods.refinedstorage.network.test.fixtures.PermissionFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.SecurityActorFixtures; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,7 +19,7 @@ class SecurityNetworkComponentImplTest { @BeforeEach void setUp() { - sut = new SecurityNetworkComponentImpl(SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)); + sut = new SecurityNetworkComponentImpl(SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT)); securityDecisionProvider = new SecurityDecisionProviderImpl(); node = activeSecurityDecisionProvider(securityDecisionProvider); } @@ -27,13 +27,13 @@ void setUp() { @Test void shouldUseDefaultPolicyIfNoSecurityDecisionProvidersArePresent() { // Act & assert - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.B)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.B)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.B)).isFalse(); } @Test @@ -42,138 +42,138 @@ void shouldDenyAllIfAtLeastOneSecurityDecisionProviderIsPresent() { sut.onContainerAdded(() -> node); // Act & assert - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.B)).isFalse(); } @Test void shouldUseDefaultPolicyIfAllSecurityDecisionProvidersAreInactive() { // Arrange sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() - .setDefaultPolicy(SecurityPolicy.of(FakePermissions.OTHER)))); + .setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.OTHER)))); // Act & assert - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.B)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.B)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.B)).isFalse(); } @Test void shouldAllowOrDeny() { // Arrange - securityDecisionProvider.setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)); + securityDecisionProvider.setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)); sut.onContainerAdded(() -> node); // Act & assert - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.B)).isFalse(); } @Test void shouldOnlyAllowIfAllSecurityDecisionProvidersAllow() { // Arrange sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)) )); sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER2)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER2)) )); sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.B, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.B, SecurityPolicy.of(PermissionFixtures.OTHER)) )); sut.onContainerAdded(() -> new SecurityDecisionProviderProxyNetworkNode(0, new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)) - .setDefaultPolicy(SecurityPolicy.of(FakePermissions.OTHER, FakePermissions.OTHER2)))); + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT)) + .setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.OTHER, PermissionFixtures.OTHER2)))); // Act & assert - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.C)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.C)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.C)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.C)).isFalse(); } @Test void shouldUseDefaultPolicyOfSecurityDecisionProviderIfAllProvidersPassDecision() { // Arrange sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)) - .setDefaultPolicy(SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)) + .setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT)) )); sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)) - .setDefaultPolicy(SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT, FakePermissions.OTHER2)) + .setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)) + .setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT, PermissionFixtures.OTHER2)) )); sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setPolicy(FakeSecurityActors.C, SecurityPolicy.of(FakePermissions.OTHER)) + .setPolicy(SecurityActorFixtures.C, SecurityPolicy.of(PermissionFixtures.OTHER)) )); // Act & assert - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.B)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.B)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.B)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.B)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.C)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.C)).isTrue(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.C)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.C)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.C)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.C)).isFalse(); } @Test void shouldRemoveContainer() { // Arrange sut.onContainerAdded(() -> activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setDefaultPolicy(SecurityPolicy.of(FakePermissions.ALLOW_BY_DEFAULT)) + .setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.ALLOW_BY_DEFAULT)) )); final var removedNode = activeSecurityDecisionProvider(new SecurityDecisionProviderImpl() - .setDefaultPolicy(SecurityPolicy.of(FakePermissions.OTHER))); + .setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.OTHER))); sut.onContainerAdded(() -> removedNode); // Act sut.onContainerRemoved(() -> removedNode); // Assert - assertThat(sut.isAllowed(FakePermissions.ALLOW_BY_DEFAULT, FakeSecurityActors.A)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.ALLOW_BY_DEFAULT, SecurityActorFixtures.A)).isTrue(); } @Test void shouldClearPolicies() { // Arrange sut.onContainerAdded(() -> node); - securityDecisionProvider.setPolicy(FakeSecurityActors.A, SecurityPolicy.of(FakePermissions.OTHER)); - securityDecisionProvider.setDefaultPolicy(SecurityPolicy.of(FakePermissions.OTHER2)); + securityDecisionProvider.setPolicy(SecurityActorFixtures.A, SecurityPolicy.of(PermissionFixtures.OTHER)); + securityDecisionProvider.setDefaultPolicy(SecurityPolicy.of(PermissionFixtures.OTHER2)); // Act securityDecisionProvider.clearPolicies(); // Assert - assertThat(sut.isAllowed(FakePermissions.OTHER, FakeSecurityActors.A)).isFalse(); - assertThat(sut.isAllowed(FakePermissions.OTHER2, FakeSecurityActors.A)).isTrue(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER, SecurityActorFixtures.A)).isFalse(); + assertThat(sut.isAllowed(PermissionFixtures.OTHER2, SecurityActorFixtures.A)).isTrue(); } } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java index 4e5784a06..60ac5c247 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/storage/StorageNetworkComponentImplTest.java @@ -12,7 +12,7 @@ import com.refinedmods.refinedstorage.api.storage.limited.LimitedStorageImpl; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedResource; import com.refinedmods.refinedstorage.api.storage.tracked.TrackedStorageImpl; -import com.refinedmods.refinedstorage.network.test.NetworkTestFixtures; +import com.refinedmods.refinedstorage.network.test.fixtures.NetworkTestFixtures; import java.util.Collection; import java.util.HashSet; @@ -22,8 +22,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.A; -import static com.refinedmods.refinedstorage.network.test.fake.FakeResources.B; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; +import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.B; import static org.assertj.core.api.Assertions.assertThat; class StorageNetworkComponentImplTest { From 51209f54b654b35f8d384fe78b303c6d28e51c08 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 10 Oct 2024 15:50:36 +0200 Subject: [PATCH 59/83] feat: additional energy usage for patterns in the autocrafter --- CHANGELOG.md | 1 + .../PatternRepositoryImplTest.java | 45 ++++++++---- ...keResources.java => ResourceFixtures.java} | 2 +- .../api/autocrafting/SimplePattern.java | 4 +- .../common/AbstractModInitializer.java | 1 - .../refinedstorage/common/Config.java | 6 +- .../autocrafting/AutocrafterBlockEntity.java | 16 +++-- .../common/autocrafting/PatternInventory.java | 12 ++++ .../common/content/DefaultEnergyUsage.java | 1 + .../grid/CraftingGridContainerMenu.java | 1 - .../common/networking/RelayBlockEntity.java | 4 +- .../common/networking/RelayScreen.java | 10 +-- .../assets/refinedstorage/lang/en_us.json | 2 + .../refinedstorage/fabric/ConfigImpl.java | 22 ++++-- .../grid/query/GridQueryParserImplTest.java | 10 +-- ...ys.java => GridResourceAttributeKeys.java} | 2 +- .../api/grid/view/GridResourceImpl.java | 4 +- .../watcher/GridWatcherManagerImplTest.java | 52 +++++++------- .../refinedstorage/neoforge/ConfigImpl.java | 32 ++++++++- .../PatternProviderNetworkNode.java | 3 - .../impl/node/relay/RelayComponentType.java | 52 ++++++++++++-- .../node/relay/RelayInputNetworkNode.java | 35 +++------ ...vider.java => ConnectionProviderImpl.java} | 8 +-- .../InitializeNetworkBuilderImplTest.java | 10 +-- .../impl/PriorityNetworkBuilderImplTest.java | 4 +- .../impl/RemoveNetworkBuilderImplTest.java | 10 +-- .../impl/UpdateNetworkBuilderImplTest.java | 12 ++-- .../importer/ImporterNetworkNodeTest.java | 34 ++++----- ...terSource.java => ImporterSourceImpl.java} | 8 +-- .../impl/node/relay/RelayNetworkNodeTest.java | 11 ++- .../ListenableResourceListTest.java | 6 +- .../api/storage/ActorFixtures.java | 24 +++++++ .../api/storage/FakeActors.java | 24 ------- .../composite/CompositeStorageImplTest.java | 18 ++--- .../tracked/TrackedStorageImplTest.java | 72 +++++++++---------- 35 files changed, 334 insertions(+), 224 deletions(-) rename refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/{FakeResources.java => ResourceFixtures.java} (73%) rename refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/{FakeGridResourceAttributeKeys.java => GridResourceAttributeKeys.java} (80%) rename refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/{FakeConnectionProvider.java => ConnectionProviderImpl.java} (91%) rename refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/{FakeImporterSource.java => ImporterSourceImpl.java} (85%) create mode 100644 refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/ActorFixtures.java delete mode 100644 refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/FakeActors.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac637d70..b670f9698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added - Autocrafter +- The Relay now has support for propagating autocrafting when not in pass-through mode. ### Changed diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java index e357b796f..8567892e4 100644 --- a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/PatternRepositoryImplTest.java @@ -17,35 +17,43 @@ void setUp() { void testDefaultState() { // Assert assertThat(sut.getOutputs()).isEmpty(); + assertThat(sut.getAll()).isEmpty(); } @Test void shouldAddPattern() { // Act - sut.add(new SimplePattern(FakeResources.A)); + sut.add(new SimplePattern(ResourceFixtures.A)); // Assert - assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.A); + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(ResourceFixtures.A); + assertThat(sut.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new SimplePattern(ResourceFixtures.A) + ); } @Test void shouldAddMultiplePatterns() { // Act - sut.add(new SimplePattern(FakeResources.A)); - sut.add(new SimplePattern(FakeResources.B)); + sut.add(new SimplePattern(ResourceFixtures.A)); + sut.add(new SimplePattern(ResourceFixtures.B)); // Assert assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( - FakeResources.A, - FakeResources.B + ResourceFixtures.A, + ResourceFixtures.B + ); + assertThat(sut.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( + new SimplePattern(ResourceFixtures.A), + new SimplePattern(ResourceFixtures.B) ); } @Test void shouldRemovePattern() { // Arrange - final SimplePattern a = new SimplePattern(FakeResources.A); - final SimplePattern b = new SimplePattern(FakeResources.B); + final SimplePattern a = new SimplePattern(ResourceFixtures.A); + final SimplePattern b = new SimplePattern(ResourceFixtures.B); sut.add(a); sut.add(b); @@ -54,14 +62,17 @@ void shouldRemovePattern() { sut.remove(a); // Assert - assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(FakeResources.B); + assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactly(ResourceFixtures.B); + assertThat(sut.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new SimplePattern(ResourceFixtures.B) + ); } @Test void shouldRemoveMultiplePatterns() { // Arrange - final SimplePattern a = new SimplePattern(FakeResources.A); - final SimplePattern b = new SimplePattern(FakeResources.B); + final SimplePattern a = new SimplePattern(ResourceFixtures.A); + final SimplePattern b = new SimplePattern(ResourceFixtures.B); sut.add(a); sut.add(b); @@ -72,13 +83,14 @@ void shouldRemoveMultiplePatterns() { // Assert assertThat(sut.getOutputs()).isEmpty(); + assertThat(sut.getAll()).isEmpty(); } @Test void shouldRemovePatternButNotRemoveOutputIfAnotherPatternStillHasThatOutput() { // Arrange - final SimplePattern a = new SimplePattern(FakeResources.A); - final SimplePattern b = new SimplePattern(FakeResources.B, FakeResources.A); + final SimplePattern a = new SimplePattern(ResourceFixtures.A); + final SimplePattern b = new SimplePattern(ResourceFixtures.B, ResourceFixtures.A); sut.add(a); sut.add(b); @@ -88,8 +100,11 @@ void shouldRemovePatternButNotRemoveOutputIfAnotherPatternStillHasThatOutput() { // Assert assertThat(sut.getOutputs()).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder( - FakeResources.A, - FakeResources.B + ResourceFixtures.A, + ResourceFixtures.B + ); + assertThat(sut.getAll()).usingRecursiveFieldByFieldElementComparator().containsExactly( + new SimplePattern(ResourceFixtures.B, ResourceFixtures.A) ); } } diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/ResourceFixtures.java similarity index 73% rename from refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java rename to refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/ResourceFixtures.java index e7a9b3a4c..6ecf50222 100644 --- a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/FakeResources.java +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/ResourceFixtures.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceKey; -public enum FakeResources implements ResourceKey { +enum ResourceFixtures implements ResourceKey { A, B, C diff --git a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java index 3d43c06b4..c77a80e77 100644 --- a/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java +++ b/refinedstorage-autocrafting-api/src/test/java/com/refinedmods/refinedstorage/api/autocrafting/SimplePattern.java @@ -4,10 +4,10 @@ import java.util.Set; -public class SimplePattern implements Pattern { +class SimplePattern implements Pattern { private final Set outputs; - public SimplePattern(final ResourceKey... outputs) { + SimplePattern(final ResourceKey... outputs) { this.outputs = Set.of(outputs); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java index c3347be1f..c67803c40 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/AbstractModInitializer.java @@ -1,6 +1,5 @@ package com.refinedmods.refinedstorage.common; -import com.refinedmods.refinedstorage.api.autocrafting.PatternRepositoryImpl; import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.autocrafting.AutocraftingNetworkComponentImpl; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java index 4954b9077..3daa6a815 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/Config.java @@ -73,7 +73,7 @@ public interface Config { RelayEntry getRelay(); - SimpleEnergyUsageEntry getAutocrafter(); + AutocrafterEntry getAutocrafter(); interface SimpleEnergyUsageEntry { long getEnergyUsage(); @@ -208,4 +208,8 @@ interface RelayEntry { long getOutputNetworkEnergyUsage(); } + + interface AutocrafterEntry extends SimpleEnergyUsageEntry { + long getEnergyUsagePerPattern(); + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java index 37faee307..2bc3d18c5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java @@ -40,7 +40,6 @@ import static com.refinedmods.refinedstorage.common.support.AbstractDirectionalBlock.tryExtractDirection; -// TODO: More energy usage for more patterns. public class AutocrafterBlockEntity extends AbstractBaseNetworkNodeContainerBlockEntity implements ExtendedMenuProvider, BlockEntityWithDrops, PatternInventory.Listener { static final int PATTERNS = 9; @@ -65,11 +64,18 @@ public AutocrafterBlockEntity(final BlockPos pos, final BlockState state) { ); this.upgradeContainer = new UpgradeContainer(UpgradeDestinations.AUTOCRAFTER, upgradeEnergyUsage -> { final long baseEnergyUsage = Platform.INSTANCE.getConfig().getAutocrafter().getEnergyUsage(); - mainNetworkNode.setEnergyUsage(baseEnergyUsage + upgradeEnergyUsage); + final long patternEnergyUsage = patternContainer.getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + patternEnergyUsage + upgradeEnergyUsage); setChanged(); }); - patternContainer.addListener(container -> setChanged()); - patternContainer.setListener(this); + this.patternContainer.addListener(container -> { + final long upgradeEnergyUsage = upgradeContainer.getEnergyUsage(); + final long baseEnergyUsage = Platform.INSTANCE.getConfig().getAutocrafter().getEnergyUsage(); + final long patternEnergyUsage = patternContainer.getEnergyUsage(); + mainNetworkNode.setEnergyUsage(baseEnergyUsage + patternEnergyUsage + upgradeEnergyUsage); + setChanged(); + }); + this.patternContainer.setListener(this); } @Override @@ -91,7 +97,7 @@ private boolean isPartOfChain() { return getChainingRoot() != this; } - // if there is another autocrafter next to us, that is pointing in our direction, + // If there is another autocrafter next to us, that is pointing in our direction, // and we are not part of a chain, we are the head of the chain private boolean isHeadOfChain() { if (level == null || isPartOfChain()) { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java index d094ad103..cbb2cfcc7 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternInventory.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.common.autocrafting; import com.refinedmods.refinedstorage.api.core.NullableType; +import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.support.FilteredContainer; import java.util.Optional; @@ -44,6 +45,17 @@ public void setItem(final int slot, final ItemStack stack) { } } + long getEnergyUsage() { + long patterns = 0; + for (int i = 0; i < getContainerSize(); i++) { + final ItemStack stack = getItem(i); + if (!stack.isEmpty()) { + patterns++; + } + } + return patterns * Platform.INSTANCE.getConfig().getAutocrafter().getEnergyUsagePerPattern(); + } + interface Listener { void patternChanged(int slot); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java index 594b16f5b..300aa23a8 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/DefaultEnergyUsage.java @@ -23,6 +23,7 @@ public final class DefaultEnergyUsage { public static final long RELAY_INPUT_NETWORK = 8; public static final long RELAY_OUTPUT_NETWORK = 8; public static final long AUTOCRAFTER = 4; + public static final long AUTOCRAFTER_PER_PATTERN = 2; public static final long CONTROLLER_CAPACITY = 1000; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java index 72b5ef8ca..0473d87b6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/grid/CraftingGridContainerMenu.java @@ -4,7 +4,6 @@ import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.resource.list.MutableResourceList; -import com.refinedmods.refinedstorage.api.resource.list.ResourceList; import com.refinedmods.refinedstorage.common.content.Menus; import com.refinedmods.refinedstorage.common.grid.view.ItemGridResource; import com.refinedmods.refinedstorage.common.support.RedstoneMode; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java index 4b84e266c..24a84c0ef 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayBlockEntity.java @@ -258,8 +258,8 @@ public void readConfiguration(final CompoundTag tag, final HolderLookup.Provider mainNetworkNode.setPriority(priority); } - private Set getComponentTypes(final CompoundTag tag) { - final Set types = new HashSet<>(); + private Set> getComponentTypes(final CompoundTag tag) { + final Set> types = new HashSet<>(); if (tag.getBoolean(TAG_PASS_ENERGY)) { types.add(RelayComponentType.ENERGY); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java index 918e9e804..848997dca 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/RelayScreen.java @@ -107,13 +107,13 @@ private void addFilterButtons(final boolean visible) { ); fuzzyModeButton.visible = visible; addSideButton(fuzzyModeButton); + } + private void addStorageButtons(final boolean visible) { accessModeButton = new AccessModeSideButtonWidget(getMenu().getProperty(StoragePropertyTypes.ACCESS_MODE)); accessModeButton.visible = visible; addSideButton(accessModeButton); - } - private void addStorageButtons(final boolean visible) { priorityButton = PrioritySideButtonWidget.forStorage( getMenu().getProperty(StoragePropertyTypes.PRIORITY), playerInventory, @@ -154,12 +154,12 @@ private void updateFilterButtons(final boolean visible) { if (fuzzyModeButton != null) { fuzzyModeButton.visible = visible; } - if (accessModeButton != null) { - accessModeButton.visible = visible; - } } private void updateStorageButtons(final boolean visible) { + if (accessModeButton != null) { + accessModeButton.visible = visible; + } if (priorityButton != null) { priorityButton.visible = visible; } diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json index 6797e19e1..df57807b1 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -595,6 +595,8 @@ "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java index ed77c12bf..91d5d7024 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ConfigImpl.java @@ -120,9 +120,7 @@ public class ConfigImpl implements ConfigData, com.refinedmods.refinedstorage.co private RelayEntryImpl relay = new RelayEntryImpl(); @ConfigEntry.Gui.CollapsibleObject - private SimpleEnergyUsageEntryImpl autocrafter = new SimpleEnergyUsageEntryImpl( - DefaultEnergyUsage.AUTOCRAFTER - ); + private AutocrafterEntryImpl autocrafter = new AutocrafterEntryImpl(); public static ConfigImpl get() { return AutoConfig.getConfigHolder(ConfigImpl.class).getConfig(); @@ -285,7 +283,7 @@ public RelayEntry getRelay() { } @Override - public SimpleEnergyUsageEntry getAutocrafter() { + public AutocrafterEntry getAutocrafter() { return autocrafter; } @@ -725,4 +723,20 @@ public long getOutputNetworkEnergyUsage() { return outputNetworkEnergyUsage; } } + + private static class AutocrafterEntryImpl implements AutocrafterEntry { + private long energyUsage = DefaultEnergyUsage.AUTOCRAFTER; + + private long energyUsagePerPattern = DefaultEnergyUsage.AUTOCRAFTER_PER_PATTERN; + + @Override + public long getEnergyUsagePerPattern() { + return energyUsagePerPattern; + } + + @Override + public long getEnergyUsage() { + return energyUsage; + } + } } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java index e2853833a..7ec393bf3 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/query/GridQueryParserImplTest.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.api.grid.query; -import com.refinedmods.refinedstorage.api.grid.view.FakeGridResourceAttributeKeys; import com.refinedmods.refinedstorage.api.grid.view.GridResource; import com.refinedmods.refinedstorage.api.grid.view.GridResourceAttributeKey; +import com.refinedmods.refinedstorage.api.grid.view.GridResourceAttributeKeys; import com.refinedmods.refinedstorage.api.grid.view.GridResourceImpl; import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.api.grid.view.GridViewImpl; @@ -30,7 +30,7 @@ class GridQueryParserImplTest { private final GridQueryParser queryParser = new GridQueryParserImpl( LexerTokenMappings.DEFAULT_MAPPINGS, ParserOperatorMappings.DEFAULT_MAPPINGS, - FakeGridResourceAttributeKeys.UNARY_OPERATOR_TO_ATTRIBUTE_KEY_MAPPING + GridResourceAttributeKeys.UNARY_OPERATOR_TO_ATTRIBUTE_KEY_MAPPING ); private final GridView view = new GridViewImpl( @@ -297,9 +297,9 @@ private static class R implements GridResource { this.name = name; this.amount = amount; this.attributes = Map.of( - FakeGridResourceAttributeKeys.MOD_ID, Set.of(modId), - FakeGridResourceAttributeKeys.MOD_NAME, Set.of(modName), - FakeGridResourceAttributeKeys.TAGS, tags + GridResourceAttributeKeys.MOD_ID, Set.of(modId), + GridResourceAttributeKeys.MOD_NAME, Set.of(modName), + GridResourceAttributeKeys.TAGS, tags ); } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/FakeGridResourceAttributeKeys.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceAttributeKeys.java similarity index 80% rename from refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/FakeGridResourceAttributeKeys.java rename to refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceAttributeKeys.java index 4a8b7a59e..63c69d395 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/FakeGridResourceAttributeKeys.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceAttributeKeys.java @@ -3,7 +3,7 @@ import java.util.Map; import java.util.Set; -public enum FakeGridResourceAttributeKeys implements GridResourceAttributeKey { +public enum GridResourceAttributeKeys implements GridResourceAttributeKey { MOD_ID, MOD_NAME, TAGS; diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java index 64d8c216a..d7ca8774b 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/view/GridResourceImpl.java @@ -20,8 +20,8 @@ public GridResourceImpl(final ResourceKey resource) { public GridResourceImpl(final ResourceKey resource, final boolean autocraftable) { this.resource = resource; this.attributes = Map.of( - FakeGridResourceAttributeKeys.MOD_ID, Set.of(resource.toString()), - FakeGridResourceAttributeKeys.MOD_NAME, Set.of(resource.toString()) + GridResourceAttributeKeys.MOD_ID, Set.of(resource.toString()), + GridResourceAttributeKeys.MOD_NAME, Set.of(resource.toString()) ); this.autocraftable = autocraftable; } diff --git a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/watcher/GridWatcherManagerImplTest.java b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/watcher/GridWatcherManagerImplTest.java index c7c8ecb91..e6bae7f70 100644 --- a/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/watcher/GridWatcherManagerImplTest.java +++ b/refinedstorage-grid-api/src/test/java/com/refinedmods/refinedstorage/api/grid/watcher/GridWatcherManagerImplTest.java @@ -37,11 +37,11 @@ void setUp() { void shouldAddWatcherAndNotifyOfChanges() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - rootStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); // Act - sut.addWatcher(watcher, FakeActor.class, rootStorage); - rootStorage.insert(B, 5, Action.EXECUTE, FakeActor.INSTANCE); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); + rootStorage.insert(B, 5, Action.EXECUTE, ActorFixture.INSTANCE); // Assert verify(watcher, times(1)).onChanged(B, 5, null); @@ -52,12 +52,12 @@ void shouldAddWatcherAndNotifyOfChanges() { void shouldNotAddDuplicateWatcher() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - sut.addWatcher(watcher, FakeActor.class, rootStorage); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); // Act & assert assertThrows( IllegalArgumentException.class, - () -> sut.addWatcher(watcher, FakeActor.class, rootStorage), + () -> sut.addWatcher(watcher, ActorFixture.class, rootStorage), "Watcher is already registered" ); } @@ -66,12 +66,12 @@ void shouldNotAddDuplicateWatcher() { void shouldRemoveWatcher() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - rootStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); - sut.addWatcher(watcher, FakeActor.class, rootStorage); + rootStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); // Act sut.removeWatcher(watcher, rootStorage); - rootStorage.insert(B, 5, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(B, 5, Action.EXECUTE, ActorFixture.INSTANCE); // Assert verifyNoInteractions(watcher); @@ -94,15 +94,15 @@ void shouldNotRemoveWatcherThatIsNotRegistered() { void shouldAddAndRemoveAndAddWatcherAgain() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - rootStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); // Act - sut.addWatcher(watcher, FakeActor.class, rootStorage); - rootStorage.insert(B, 5, Action.EXECUTE, FakeActor.INSTANCE); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); + rootStorage.insert(B, 5, Action.EXECUTE, ActorFixture.INSTANCE); sut.removeWatcher(watcher, rootStorage); - rootStorage.insert(C, 4, Action.EXECUTE, FakeActor.INSTANCE); - sut.addWatcher(watcher, FakeActor.class, rootStorage); - rootStorage.insert(D, 3, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(C, 4, Action.EXECUTE, ActorFixture.INSTANCE); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); + rootStorage.insert(D, 3, Action.EXECUTE, ActorFixture.INSTANCE); // Assert verify(watcher, times(1)).onChanged(B, 5, null); @@ -114,15 +114,15 @@ void shouldAddAndRemoveAndAddWatcherAgain() { void shouldDetachAll() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - rootStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); - sut.addWatcher(watcher, FakeActor.class, rootStorage); + rootStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); // Act sut.detachAll(rootStorage); - rootStorage.insert(B, 10, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(B, 10, Action.EXECUTE, ActorFixture.INSTANCE); assertThrows(IllegalArgumentException.class, () -> sut.addWatcher( watcher, - FakeActor.class, + ActorFixture.class, rootStorage ), "Watcher is already registered"); @@ -134,14 +134,14 @@ void shouldDetachAll() { void shouldAttachAll() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); - rootStorage.insert(A, 10, Action.EXECUTE, FakeActor.INSTANCE); - sut.addWatcher(watcher, FakeActor.class, rootStorage); + rootStorage.insert(A, 10, Action.EXECUTE, ActorFixture.INSTANCE); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); sut.detachAll(rootStorage); - rootStorage.insert(B, 5, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(B, 5, Action.EXECUTE, ActorFixture.INSTANCE); // Act sut.attachAll(rootStorage); - rootStorage.insert(C, 4, Action.EXECUTE, FakeActor.INSTANCE); + rootStorage.insert(C, 4, Action.EXECUTE, ActorFixture.INSTANCE); // Assert final InOrder inOrder = inOrder(watcher); @@ -157,7 +157,7 @@ void shouldNotifyAboutActivenessChange() { // Arrange final GridWatcher watcher = mock(GridWatcher.class); sut.activeChanged(true); - sut.addWatcher(watcher, FakeActor.class, rootStorage); + sut.addWatcher(watcher, ActorFixture.class, rootStorage); // Act sut.activeChanged(false); @@ -170,10 +170,10 @@ void shouldNotifyAboutActivenessChange() { inOrder.verifyNoMoreInteractions(); } - private static class FakeActor implements Actor { - public static final FakeActor INSTANCE = new FakeActor(); + private static class ActorFixture implements Actor { + public static final ActorFixture INSTANCE = new ActorFixture(); - private FakeActor() { + private ActorFixture() { } @Override diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java index ec2a356bc..96fa0e471 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ConfigImpl.java @@ -52,7 +52,7 @@ public class ConfigImpl implements Config { private final SimpleEnergyUsageEntry fallbackSecurityCard; private final SimpleEnergyUsageEntry securityManager; private final RelayEntry relay; - private final SimpleEnergyUsageEntry autocrafter; + private final AutocrafterEntryImpl autocrafter; public ConfigImpl() { screenSize = builder @@ -97,7 +97,7 @@ public ConfigImpl() { ); securityManager = new SimpleEnergyUsageEntryImpl("securityManager", DefaultEnergyUsage.SECURITY_MANAGER); relay = new RelayEntryImpl(); - autocrafter = new SimpleEnergyUsageEntryImpl("autocrafter", DefaultEnergyUsage.AUTOCRAFTER); + autocrafter = new AutocrafterEntryImpl(); spec = builder.build(); } @@ -264,7 +264,7 @@ public RelayEntry getRelay() { } @Override - public SimpleEnergyUsageEntry getAutocrafter() { + public AutocrafterEntryImpl getAutocrafter() { return autocrafter; } @@ -925,4 +925,30 @@ public long getOutputNetworkEnergyUsage() { return outputNetworkEnergyUsage.get(); } } + + private class AutocrafterEntryImpl implements AutocrafterEntry { + private final ModConfigSpec.LongValue energyUsage; + private final ModConfigSpec.LongValue energyUsagePerPattern; + + AutocrafterEntryImpl() { + builder.translation(translationKey("autocrafter")).push("autocrafter"); + energyUsage = builder + .translation(translationKey("autocrafter." + ENERGY_USAGE)) + .defineInRange(ENERGY_USAGE, DefaultEnergyUsage.AUTOCRAFTER, 0, Long.MAX_VALUE); + energyUsagePerPattern = builder + .translation(translationKey("autocrafter.energyUsagePerPattern")) + .defineInRange("energyUsagePerPattern", DefaultEnergyUsage.AUTOCRAFTER_PER_PATTERN, 0, Long.MAX_VALUE); + builder.pop(); + } + + @Override + public long getEnergyUsagePerPattern() { + return energyUsagePerPattern.get(); + } + + @Override + public long getEnergyUsage() { + return energyUsage.get(); + } + } } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java index 83664a049..ef2f103db 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/patternprovider/PatternProviderNetworkNode.java @@ -5,11 +5,8 @@ import com.refinedmods.refinedstorage.api.network.autocrafting.PatternProvider; import com.refinedmods.refinedstorage.api.network.impl.node.SimpleNetworkNode; -import java.util.Arrays; import java.util.HashSet; -import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; import javax.annotation.Nullable; public class PatternProviderNetworkNode extends SimpleNetworkNode implements PatternProvider { diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java index 508b3fb97..4e6751d22 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayComponentType.java @@ -1,8 +1,50 @@ package com.refinedmods.refinedstorage.api.network.impl.node.relay; -public enum RelayComponentType { - ENERGY, - SECURITY, - STORAGE, - AUTOCRAFTING +import com.refinedmods.refinedstorage.api.core.NullableType; +import com.refinedmods.refinedstorage.api.network.Network; +import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; +import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; +import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; +import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; + +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Function; + +public class RelayComponentType { + public static final RelayComponentType ENERGY = new RelayComponentType<>( + network -> network.getComponent(EnergyNetworkComponent.class), + output -> output::setEnergyDelegate + ); + public static final RelayComponentType SECURITY = new RelayComponentType<>( + network -> network.getComponent(SecurityNetworkComponent.class), + output -> output::setSecurityDelegate + ); + public static final RelayComponentType STORAGE = new RelayComponentType<>( + network -> network.getComponent(StorageNetworkComponent.class), + output -> output::setStorageDelegate + ); + public static final RelayComponentType AUTOCRAFTING = new RelayComponentType<>( + network -> network.getComponent(AutocraftingNetworkComponent.class), + output -> output::setAutocraftingDelegate + ); + public static final Set> ALL = Set.of(ENERGY, SECURITY, STORAGE, AUTOCRAFTING); + + private final Function componentProvider; + private final Function> componentApplier; + + private RelayComponentType(final Function componentProvider, + final Function> componentApplier) { + this.componentProvider = componentProvider; + this.componentApplier = componentApplier; + } + + void apply(final Network network, final RelayOutputNetworkNode output) { + final T component = componentProvider.apply(network); + componentApplier.apply(output).accept(component); + } + + void remove(final RelayOutputNetworkNode output) { + componentApplier.apply(output).accept(null); + } } diff --git a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java index 5d1d8b248..734b82bff 100644 --- a/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java +++ b/refinedstorage-network/src/main/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayInputNetworkNode.java @@ -1,11 +1,7 @@ package com.refinedmods.refinedstorage.api.network.impl.node.relay; import com.refinedmods.refinedstorage.api.network.Network; -import com.refinedmods.refinedstorage.api.network.autocrafting.AutocraftingNetworkComponent; -import com.refinedmods.refinedstorage.api.network.energy.EnergyNetworkComponent; import com.refinedmods.refinedstorage.api.network.impl.node.AbstractNetworkNode; -import com.refinedmods.refinedstorage.api.network.security.SecurityNetworkComponent; -import com.refinedmods.refinedstorage.api.network.storage.StorageNetworkComponent; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; import com.refinedmods.refinedstorage.api.storage.AccessMode; @@ -17,7 +13,7 @@ public class RelayInputNetworkNode extends AbstractNetworkNode { private final long energyUsage; - private final Set componentTypes = new HashSet<>(); + private final Set> componentTypes = new HashSet<>(); @Nullable private RelayOutputNetworkNode outputNode; @@ -42,13 +38,13 @@ public void setOutputNode(@Nullable final RelayOutputNetworkNode outputNode) { this.outputNode = outputNode; } - public void setComponentTypes(final Set componentTypes) { + public void setComponentTypes(final Set> componentTypes) { this.componentTypes.clear(); this.componentTypes.addAll(componentTypes); updateComponents(); } - public void updateComponentType(final RelayComponentType componentType, final boolean enabled) { + public void updateComponentType(final RelayComponentType componentType, final boolean enabled) { if (enabled) { componentTypes.add(componentType); } else { @@ -62,22 +58,13 @@ private void updateComponents() { return; } final boolean valid = network != null && isActive(); - final boolean hasEnergy = componentTypes.contains(RelayComponentType.ENERGY); - outputNode.setEnergyDelegate(valid && hasEnergy - ? network.getComponent(EnergyNetworkComponent.class) - : null); - final boolean hasSecurity = componentTypes.contains(RelayComponentType.SECURITY); - outputNode.setSecurityDelegate(valid && hasSecurity - ? network.getComponent(SecurityNetworkComponent.class) - : null); - final boolean hasStorage = componentTypes.contains(RelayComponentType.STORAGE); - outputNode.setStorageDelegate(valid && hasStorage - ? network.getComponent(StorageNetworkComponent.class) - : null); - final boolean hasAutocrafting = componentTypes.contains(RelayComponentType.AUTOCRAFTING); - outputNode.setAutocraftingDelegate(valid && hasAutocrafting - ? network.getComponent(AutocraftingNetworkComponent.class) - : null); + for (final RelayComponentType componentType : RelayComponentType.ALL) { + if (!componentTypes.contains(componentType) || !valid) { + componentType.remove(outputNode); + } else { + componentType.apply(network, outputNode); + } + } } public void setAccessMode(final AccessMode accessMode) { @@ -110,7 +97,7 @@ public void setFilterNormalizer(final UnaryOperator normalizer) { } } - public boolean hasComponentType(final RelayComponentType componentType) { + public boolean hasComponentType(final RelayComponentType componentType) { return componentTypes.contains(componentType); } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/FakeConnectionProvider.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/ConnectionProviderImpl.java similarity index 91% rename from refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/FakeConnectionProvider.java rename to refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/ConnectionProviderImpl.java index 7d946a673..bcf97dfa5 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/FakeConnectionProvider.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/ConnectionProviderImpl.java @@ -14,18 +14,18 @@ import java.util.Set; import java.util.stream.Collectors; -public class FakeConnectionProvider implements ConnectionProvider { +public class ConnectionProviderImpl implements ConnectionProvider { private final Map> connections = new HashMap<>(); private final List allowed = new ArrayList<>(); - public FakeConnectionProvider with(final NetworkNodeContainer... containers) { + public ConnectionProviderImpl with(final NetworkNodeContainer... containers) { for (final NetworkNodeContainer container : containers) { with(container); } return this; } - public FakeConnectionProvider with(final NetworkNodeContainer container) { + public ConnectionProviderImpl with(final NetworkNodeContainer container) { if (allowed.contains(container)) { throw new IllegalArgumentException(); } @@ -33,7 +33,7 @@ public FakeConnectionProvider with(final NetworkNodeContainer container) { return this; } - public FakeConnectionProvider connect(final NetworkNodeContainer from, final NetworkNodeContainer to) { + public ConnectionProviderImpl connect(final NetworkNodeContainer from, final NetworkNodeContainer to) { if (!allowed.contains(from) || !allowed.contains(to)) { throw new IllegalArgumentException(); } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/InitializeNetworkBuilderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/InitializeNetworkBuilderImplTest.java index 71356d4df..b04e0eb5b 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/InitializeNetworkBuilderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/InitializeNetworkBuilderImplTest.java @@ -12,7 +12,7 @@ class InitializeNetworkBuilderImplTest extends AbstractNetworkBuilderImplTest { @Test void shouldNotFormNetworkIfAlreadyFormed() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container = createContainerWithNetwork(); // Act @@ -25,7 +25,7 @@ void shouldNotFormNetworkIfAlreadyFormed() { @Test void shouldFormNetwork() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container = createContainer(); final NetworkNodeContainer unrelatedContainer = createContainerWithNetwork(); @@ -58,7 +58,7 @@ void shouldFormNetwork() { @Test void shouldJoinExistingNetwork() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer existingContainer1 = createContainerWithNetwork(); final NetworkNodeContainer existingContainer2 = @@ -111,7 +111,7 @@ void shouldJoinExistingNetwork() { @Test void shouldMergeWithExistingNetworks() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer existingContainer0 = createContainerWithNetwork(); final NetworkNodeContainer existingContainer1 = @@ -166,7 +166,7 @@ void shouldMergeWithExistingNetworks() { @Test void shouldFormNetworkIfThereAreNeighborsWithoutNetwork() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer unrelatedContainer = createContainerWithNetwork(); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java index 4e8ef79f3..65e1f920b 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/PriorityNetworkBuilderImplTest.java @@ -39,7 +39,7 @@ void shouldRespectPriorityWhenSplitting() { final NetworkSide slave = createNetworkSide(SLAVE, () -> originalNetwork); clearInvocations(master.watcher); - final ConnectionProvider connectionProvider = new FakeConnectionProvider() + final ConnectionProvider connectionProvider = new ConnectionProviderImpl() .with(master.a, master.b, slave.a, slave.b) .connect(master.a, master.b) .connect(slave.a, slave.b); @@ -78,7 +78,7 @@ void shouldRespectPriorityWhenMerging() { final NetworkNodeContainer connector = createContainer(); final NetworkSide slave = createNetworkSide(SLAVE, () -> new NetworkImpl(componentMapFactory)); - final ConnectionProvider connectionProvider = new FakeConnectionProvider() + final ConnectionProvider connectionProvider = new ConnectionProviderImpl() .with(master.a, master.b, connector, slave.a, slave.b) .connect(master.a, master.b) .connect(master.b, connector) diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/RemoveNetworkBuilderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/RemoveNetworkBuilderImplTest.java index de75b6b9b..5b92977a9 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/RemoveNetworkBuilderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/RemoveNetworkBuilderImplTest.java @@ -20,7 +20,7 @@ void shouldNotBeAbleToRemoveWithoutNetworkAssigned() { final NetworkNodeContainer container = createContainer(); // Act - final Executable action = () -> sut.remove(container, new FakeConnectionProvider()); + final Executable action = () -> sut.remove(container, new ConnectionProviderImpl()); // Assert assertThrows(IllegalStateException.class, action); @@ -29,7 +29,7 @@ void shouldNotBeAbleToRemoveWithoutNetworkAssigned() { @Test void shouldSplitNetwork() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); final NetworkNodeContainer container2 = @@ -70,7 +70,7 @@ void shouldSplitNetwork() { @Test void shouldSplitNetworkInTwo() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); final NetworkNodeContainer container2 = @@ -137,7 +137,7 @@ void shouldSplitNetworkInTwo() { @Test void shouldSplitNetworkInThree() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); @@ -219,7 +219,7 @@ void shouldSplitNetworkInThree() { @Test void shouldRemoveNetwork() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container = createContainerWithNetwork(); final NetworkNodeContainer unrelatedContainer = createContainerWithNetwork(); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/UpdateNetworkBuilderImplTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/UpdateNetworkBuilderImplTest.java index 429409722..bf521a6b5 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/UpdateNetworkBuilderImplTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/UpdateNetworkBuilderImplTest.java @@ -19,7 +19,7 @@ void shouldNotBeAbleToUpdateWithoutNetworkAssigned() { final NetworkNodeContainer container = createContainer(); // Act - final Executable action = () -> sut.update(container, new FakeConnectionProvider()); + final Executable action = () -> sut.update(container, new ConnectionProviderImpl()); // Assert assertThrows(IllegalStateException.class, action); @@ -28,7 +28,7 @@ void shouldNotBeAbleToUpdateWithoutNetworkAssigned() { @Test void shouldUpdateWithSoleContainer() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); @@ -62,7 +62,7 @@ void shouldUpdateWithSoleContainer() { @Test void shouldSplitNetworkWhenUpdatingWithSoleContainerOnLeftSide() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); final NetworkNodeContainer container2 = @@ -123,7 +123,7 @@ void shouldSplitNetworkWhenUpdatingWithSoleContainerOnLeftSide() { @Test void shouldSplitNetworkWhenUpdatingWithTwoContainersOnBothSides() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); final NetworkNodeContainer container2 = @@ -187,7 +187,7 @@ void shouldSplitNetworkWhenUpdatingWithTwoContainersOnBothSides() { @Test void shouldSplitNetworkAndMergeAdditionalContainerWhenUpdating() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); final NetworkNodeContainer container2 = createContainerWithNetwork(); @@ -257,7 +257,7 @@ void shouldSplitNetworkAndMergeAdditionalContainerWhenUpdating() { @Test void shouldNotUpdateAnythingWhenStateIsTheSame() { // Arrange - final FakeConnectionProvider connectionProvider = new FakeConnectionProvider(); + final ConnectionProviderImpl connectionProvider = new ConnectionProviderImpl(); final NetworkNodeContainer container1 = createContainerWithNetwork(); final NetworkNodeContainer container2 = diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java index 3eb7ce89f..ad776e235 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterNetworkNodeTest.java @@ -91,7 +91,7 @@ void shouldNotWorkOrExtractEnergyWithoutBeingActive( // Arrange storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B) .add(A, 100) .add(B, 100); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 1); @@ -115,7 +115,7 @@ void testTransfer(@InjectNetworkStorageComponent final StorageNetworkComponent s // Arrange storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A, B, A) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B, A) .add(A, 100) .add(B, 100); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 1); @@ -141,10 +141,10 @@ void shouldUseFirstSuccessfulTransferStrategy( // Arrange storage.addSource(new StorageImpl()); - final FakeImporterSource emptySource = new FakeImporterSource(); - final FakeImporterSource outdatedSource = new FakeImporterSource(C) + final ImporterSourceImpl emptySource = new ImporterSourceImpl(); + final ImporterSourceImpl outdatedSource = new ImporterSourceImpl(C) .add(C, 100); - final FakeImporterSource source = new FakeImporterSource(A, B, A) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B, A) .add(A, 100) .add(B, 100); @@ -178,7 +178,7 @@ void shouldNotTransferIfThereIsNoSpaceInTheNetwork( storage.addSource(new LimitedStorageImpl(100)); storage.insert(C, 100, Action.EXECUTE, EmptyActor.INSTANCE); - final FakeImporterSource source = new FakeImporterSource(A, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B) .add(A, 100) .add(B, 100); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 1); @@ -204,7 +204,7 @@ void testTransferDifferentResourceOverMultipleSlots( // Arrange storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A, B, A, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B, A, B) .add(A, 11) .add(B, 6); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 10); @@ -230,7 +230,7 @@ void testTransferSameResourceOverMultipleSlots( // Arrange storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A, A, A, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, A, A, B) .add(A, 20) .add(B, 5); @@ -265,7 +265,7 @@ public long insert(final ResourceKey resource, final long amount, final Action a } }); - final FakeImporterSource source = new FakeImporterSource(A, B, B, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B, B, B) .add(A, 8) .add(B, 11); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 10); @@ -291,7 +291,7 @@ void testTransferWithoutAnyResourcesInSource( // Arrange storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(); + final ImporterSourceImpl source = new ImporterSourceImpl(); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 10); sut.setTransferStrategies(List.of(strategy)); @@ -311,7 +311,7 @@ void shouldRespectAllowlist(@InjectNetworkStorageComponent final StorageNetworkC storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(B, A) + final ImporterSourceImpl source = new ImporterSourceImpl(B, A) .add(B, 10) .add(A, 10); @@ -347,7 +347,7 @@ void shouldRespectAllowlistWithNormalizer( storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(B, A_ALTERNATIVE, A_ALTERNATIVE2) + final ImporterSourceImpl source = new ImporterSourceImpl(B, A_ALTERNATIVE, A_ALTERNATIVE2) .add(B, 10) .add(A_ALTERNATIVE, 1) .add(A_ALTERNATIVE2, 1); @@ -379,7 +379,7 @@ void shouldRespectAllowlistWithoutAlternative( storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(B) + final ImporterSourceImpl source = new ImporterSourceImpl(B) .add(B, 10); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 1); @@ -403,7 +403,7 @@ void shouldRespectEmptyAllowlist(@InjectNetworkStorageComponent final StorageNet storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(B, A) + final ImporterSourceImpl source = new ImporterSourceImpl(B, A) .add(B, 10) .add(A, 10); @@ -429,7 +429,7 @@ void shouldRespectBlocklist(@InjectNetworkStorageComponent final StorageNetworkC storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B) .add(A, 10) .add(B, 10); @@ -459,7 +459,7 @@ void shouldRespectBlocklistWithoutAlternative( storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A) + final ImporterSourceImpl source = new ImporterSourceImpl(A) .add(A, 10); final ImporterTransferStrategy strategy = new ImporterTransferStrategyImpl(source, 1); @@ -483,7 +483,7 @@ void shouldRespectEmptyBlocklist(@InjectNetworkStorageComponent final StorageNet storage.addSource(new StorageImpl()); - final FakeImporterSource source = new FakeImporterSource(A, B) + final ImporterSourceImpl source = new ImporterSourceImpl(A, B) .add(A, 10) .add(B, 10); diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/FakeImporterSource.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterSourceImpl.java similarity index 85% rename from refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/FakeImporterSource.java rename to refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterSourceImpl.java index 4a2f4419b..b35fdd166 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/FakeImporterSource.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/importer/ImporterSourceImpl.java @@ -12,15 +12,15 @@ import java.util.Iterator; import java.util.List; -public class FakeImporterSource implements ImporterSource { +class ImporterSourceImpl implements ImporterSource { private final List resources; private final StorageImpl storage = new StorageImpl(); - public FakeImporterSource(final ResourceKey... resources) { + ImporterSourceImpl(final ResourceKey... resources) { this.resources = Arrays.stream(resources).toList(); } - public FakeImporterSource add(final ResourceKey resource, final long amount) { + ImporterSourceImpl add(final ResourceKey resource, final long amount) { storage.insert(resource, amount, Action.EXECUTE, EmptyActor.INSTANCE); return this; } @@ -36,7 +36,7 @@ public long extract(final ResourceKey resource, final long amount, final Action return storage.extract(resource, Math.min(amount, 5), action, actor); } - public Collection getAll() { + Collection getAll() { return storage.getAll(); } diff --git a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java index c2cfaa6a9..133a1c205 100644 --- a/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java +++ b/refinedstorage-network/src/test/java/com/refinedmods/refinedstorage/api/network/impl/node/relay/RelayNetworkNodeTest.java @@ -29,10 +29,11 @@ import com.refinedmods.refinedstorage.network.test.fixtures.SecurityActorFixtures; import java.util.Set; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.MethodSource; import static com.refinedmods.refinedstorage.api.network.impl.node.security.SecurityDecisionProviderProxyNetworkNode.activeSecurityDecisionProvider; import static com.refinedmods.refinedstorage.network.test.fixtures.ResourceFixtures.A; @@ -438,9 +439,13 @@ void shouldResetComponentsWhenComponentTypeIsDisabled( assertThat(output.getEnergyUsage()).isEqualTo(OUTPUT_ENERGY_USAGE); } + private static Stream> provideComponentTypes() { + return RelayComponentType.ALL.stream(); + } + @ParameterizedTest - @EnumSource(RelayComponentType.class) - void shouldUseEnergyWhenAtLeastOneComponentIsActive(final RelayComponentType type) { + @MethodSource("provideComponentTypes") + void shouldUseEnergyWhenAtLeastOneComponentIsActive(final RelayComponentType type) { // Arrange input.setActive(true); input.setOutputNode(output); diff --git a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java index 2f4094cae..ab930fa0e 100644 --- a/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java +++ b/refinedstorage-resource-api/src/test/java/com/refinedmods/refinedstorage/api/resource/list/listenable/ListenableResourceListTest.java @@ -14,13 +14,13 @@ import static org.assertj.core.api.Assertions.assertThat; class ListenableResourceListTest { - private FakeResourceListListener listener; + private ResourceListListenerStub listener; private MutableResourceListImpl list; private ListenableResourceList sut; @BeforeEach void setUp() { - listener = new FakeResourceListListener(); + listener = new ResourceListListenerStub(); list = MutableResourceListImpl.create(); sut = new ListenableResourceList(list); } @@ -129,7 +129,7 @@ void shouldBeAbleToRemoveListener() { assertThat(listener.changes).hasSize(1); } - private static class FakeResourceListListener implements ResourceListListener { + private static class ResourceListListenerStub implements ResourceListListener { private final List changes = new ArrayList<>(); @Override diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/ActorFixtures.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/ActorFixtures.java new file mode 100644 index 000000000..420c04a91 --- /dev/null +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/ActorFixtures.java @@ -0,0 +1,24 @@ +package com.refinedmods.refinedstorage.api.storage; + +public final class ActorFixtures { + private ActorFixtures() { + } + + public static final class ActorFixture1 implements Actor { + public static final Actor INSTANCE = new ActorFixture1(); + + @Override + public String getName() { + return "Source1"; + } + } + + public static final class ActorFixture2 implements Actor { + public static final Actor INSTANCE = new ActorFixture2(); + + @Override + public String getName() { + return "Source2"; + } + } +} diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/FakeActors.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/FakeActors.java deleted file mode 100644 index 914cde273..000000000 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/FakeActors.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.refinedmods.refinedstorage.api.storage; - -public final class FakeActors { - private FakeActors() { - } - - public static final class FakeActor1 implements Actor { - public static final Actor INSTANCE = new FakeActor1(); - - @Override - public String getName() { - return "Source1"; - } - } - - public static final class FakeActor2 implements Actor { - public static final Actor INSTANCE = new FakeActor2(); - - @Override - public String getName() { - return "Source2"; - } - } -} diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java index a3875a85e..638b30d27 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/composite/CompositeStorageImplTest.java @@ -3,8 +3,8 @@ import com.refinedmods.refinedstorage.api.core.Action; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.list.MutableResourceListImpl; +import com.refinedmods.refinedstorage.api.storage.ActorFixtures; import com.refinedmods.refinedstorage.api.storage.EmptyActor; -import com.refinedmods.refinedstorage.api.storage.FakeActors; import com.refinedmods.refinedstorage.api.storage.Storage; import com.refinedmods.refinedstorage.api.storage.StorageImpl; import com.refinedmods.refinedstorage.api.storage.limited.LimitedStorageImpl; @@ -214,24 +214,24 @@ void shouldFindMostRecentChange() { final TrackedStorage b = new TrackedStorageImpl(new StorageImpl(), clock::get); // Test if it uses the latest across 2 different storages - a.insert(A, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + a.insert(A, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(1L); - b.insert(A, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + b.insert(A, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); // Test if it differentiates between source types properly clock.set(2L); - b.insert(B, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + b.insert(B, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(3L); - b.insert(B, 1, Action.EXECUTE, FakeActors.FakeActor2.INSTANCE); + b.insert(B, 1, Action.EXECUTE, ActorFixtures.ActorFixture2.INSTANCE); sut.addSource(a); sut.addSource(b); // Act - final var oneOne = sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); - final var oneTwo = sut.findTrackedResourceByActorType(A, FakeActors.FakeActor2.class); - final var twoOne = sut.findTrackedResourceByActorType(B, FakeActors.FakeActor1.class); - final var twoTwo = sut.findTrackedResourceByActorType(B, FakeActors.FakeActor2.class); + final var oneOne = sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); + final var oneTwo = sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture2.class); + final var twoOne = sut.findTrackedResourceByActorType(B, ActorFixtures.ActorFixture1.class); + final var twoTwo = sut.findTrackedResourceByActorType(B, ActorFixtures.ActorFixture2.class); // Assert assertThat(oneOne).get().usingRecursiveComparison().isEqualTo(new TrackedResource("Source1", 1L)); diff --git a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/tracked/TrackedStorageImplTest.java b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/tracked/TrackedStorageImplTest.java index c876a5500..a4e88bcc5 100644 --- a/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/tracked/TrackedStorageImplTest.java +++ b/refinedstorage-storage-api/src/test/java/com/refinedmods/refinedstorage/api/storage/tracked/TrackedStorageImplTest.java @@ -1,8 +1,8 @@ package com.refinedmods.refinedstorage.api.storage.tracked; import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.storage.ActorFixtures; import com.refinedmods.refinedstorage.api.storage.EmptyActor; -import com.refinedmods.refinedstorage.api.storage.FakeActors; import com.refinedmods.refinedstorage.api.storage.limited.LimitedStorageImpl; import java.util.Optional; @@ -73,15 +73,15 @@ class InitialTrackTest { @Test void shouldNotFindUntrackedResource() { // Act - sut.insert(B, 100, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(B, 100, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); // Assert final Optional resourceA1 = sut.findTrackedResourceByActorType(A, EmptyActor.class); final Optional resourceA2 = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); final Optional resourceB1 = sut.findTrackedResourceByActorType(B, EmptyActor.class); final Optional resourceB2 = - sut.findTrackedResourceByActorType(B, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(B, ActorFixtures.ActorFixture1.class); assertThat(resourceA1).isEmpty(); assertThat(resourceA2).isEmpty(); @@ -96,13 +96,13 @@ void shouldTrackResourceByInserting(final Action action) { clock.set(1L); // Act - final long inserted = sut.insert(A, 100, action, FakeActors.FakeActor1.INSTANCE); + final long inserted = sut.insert(A, 100, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert assertThat(inserted).isEqualTo(100); final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); if (action == Action.EXECUTE) { assertThat(trackedResource).isPresent(); @@ -124,13 +124,13 @@ void shouldNotTrackResourceByInsertingToAlreadyFullStorage(final Action action) backed.insert(A, 100, Action.EXECUTE, EmptyActor.INSTANCE); // Act - final long inserted = sut.insert(A, 1, action, FakeActors.FakeActor1.INSTANCE); + final long inserted = sut.insert(A, 1, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert assertThat(inserted).isZero(); final Optional resource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); assertThat(resource).isEmpty(); } @@ -142,13 +142,13 @@ void shouldTrackResourceByExtracting(final Action action) { backed.insert(A, 100, Action.EXECUTE, EmptyActor.INSTANCE); // Act - final long extracted = sut.extract(A, 10, action, FakeActors.FakeActor1.INSTANCE); + final long extracted = sut.extract(A, 10, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert assertThat(extracted).isEqualTo(10); final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); if (action == Action.EXECUTE) { assertThat(trackedResource).get().usingRecursiveComparison() @@ -162,13 +162,13 @@ void shouldTrackResourceByExtracting(final Action action) { @EnumSource(Action.class) void shouldNotTrackResourceByExtractingNothing(final Action action) { // Act - final long extracted = sut.extract(A, 1, action, FakeActors.FakeActor1.INSTANCE); + final long extracted = sut.extract(A, 1, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert assertThat(extracted).isZero(); final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); assertThat(trackedResource).isEmpty(); } @@ -176,15 +176,15 @@ void shouldNotTrackResourceByExtractingNothing(final Action action) { @SuppressWarnings("AssertBetweenInconvertibleTypes") void shouldTrackMultipleResources() { // Act - sut.insert(A, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(1); - sut.insert(B, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(B, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); // Assert final Optional resourceA = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); final Optional resourceB = - sut.findTrackedResourceByActorType(B, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(B, ActorFixtures.ActorFixture1.class); assertThat(resourceA).get().usingRecursiveComparison().isEqualTo(new TrackedResource("Source1", 0)); assertThat(resourceB).get().usingRecursiveComparison().isEqualTo(new TrackedResource("Source1", 1)); @@ -198,13 +198,13 @@ class UpdateTrackedResourceTest { @SuppressWarnings("AssertBetweenInconvertibleTypes") void shouldUpdateTrackedResourceByInserting(final Action action) { // Act - sut.insert(A, 50, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 50, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(10); - sut.insert(A, 60, action, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 60, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); if (action == Action.EXECUTE) { assertThat(trackedResource).get().usingRecursiveComparison() @@ -220,13 +220,13 @@ void shouldUpdateTrackedResourceByInserting(final Action action) { @SuppressWarnings("AssertBetweenInconvertibleTypes") void shouldNotUpdateTrackedResourceByInsertingToAnAlreadyFullStorage(final Action action) { // Act - sut.insert(A, 100, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 100, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(10); - sut.insert(A, 1, action, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 1, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); assertThat(trackedResource).get().usingRecursiveComparison().isEqualTo(new TrackedResource("Source1", 0)); } @@ -238,13 +238,13 @@ void shouldUpdateTrackedResourceByExtracting(final Action action) { backed.insert(A, 100, Action.EXECUTE, EmptyActor.INSTANCE); // Act - sut.extract(A, 50, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.extract(A, 50, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(10); - sut.extract(A, 60, action, FakeActors.FakeActor1.INSTANCE); + sut.extract(A, 60, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); if (action == Action.EXECUTE) { assertThat(trackedResource).get().usingRecursiveComparison() @@ -263,13 +263,13 @@ void shouldNotUpdateTrackedResourceByExtractingNothing(final Action action) { backed.insert(A, 100, Action.EXECUTE, EmptyActor.INSTANCE); // Act - sut.extract(A, 100, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.extract(A, 100, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(10); - sut.extract(A, 1, action, FakeActors.FakeActor1.INSTANCE); + sut.extract(A, 1, action, ActorFixtures.ActorFixture1.INSTANCE); // Assert final Optional trackedResource = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); assertThat(trackedResource).get().usingRecursiveComparison().isEqualTo(new TrackedResource("Source1", 0)); } @@ -277,26 +277,26 @@ void shouldNotUpdateTrackedResourceByExtractingNothing(final Action action) { @SuppressWarnings("AssertBetweenInconvertibleTypes") void shouldBeAbleToUpdateMultipleTrackedResources() { // Act - sut.insert(A, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(1); - sut.insert(B, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(B, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(2); - sut.insert(A, 1, Action.EXECUTE, FakeActors.FakeActor1.INSTANCE); + sut.insert(A, 1, Action.EXECUTE, ActorFixtures.ActorFixture1.INSTANCE); clock.set(3); - sut.insert(B, 1, Action.EXECUTE, FakeActors.FakeActor2.INSTANCE); + sut.insert(B, 1, Action.EXECUTE, ActorFixtures.ActorFixture2.INSTANCE); // Assert final Optional resourceAWithSource1 = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture1.class); final Optional resourceAWithSource2 = - sut.findTrackedResourceByActorType(A, FakeActors.FakeActor2.class); + sut.findTrackedResourceByActorType(A, ActorFixtures.ActorFixture2.class); final Optional resourceBWithSource1 = - sut.findTrackedResourceByActorType(B, FakeActors.FakeActor1.class); + sut.findTrackedResourceByActorType(B, ActorFixtures.ActorFixture1.class); final Optional resourceBWithSource2 = - sut.findTrackedResourceByActorType(B, FakeActors.FakeActor2.class); + sut.findTrackedResourceByActorType(B, ActorFixtures.ActorFixture2.class); assertThat(resourceAWithSource1).get().usingRecursiveComparison() .isEqualTo(new TrackedResource("Source1", 2)); From 4b2981ba13b7225005421eef88116b0bffc5381f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 11 Oct 2024 16:35:24 +0200 Subject: [PATCH 60/83] fix: resources with changed data format or id causing load error --- CHANGELOG.md | 1 + .../storage/ErrorHandlingListCodec.java | 76 +++++++++++++++++++ .../common/storage/StorageCodecs.java | 2 +- 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/ErrorHandlingListCodec.java diff --git a/CHANGELOG.md b/CHANGELOG.md index b670f9698..607f44f6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed mouse keybindings not working on NeoForge. - Fixed upgrade destinations not being shown on upgrades. +- Fixed resources with changed data format or ID causing entire storage to fail to load. ## [2.0.0-milestone.4.7] - 2024-08-11 diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/ErrorHandlingListCodec.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/ErrorHandlingListCodec.java new file mode 100644 index 000000000..51c464ac9 --- /dev/null +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/ErrorHandlingListCodec.java @@ -0,0 +1,76 @@ +package com.refinedmods.refinedstorage.common.storage; + +import java.util.ArrayList; +import java.util.List; + +import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.DynamicOps; +import com.mojang.serialization.Lifecycle; +import com.mojang.serialization.ListBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class ErrorHandlingListCodec implements Codec> { + private static final String ERROR_MESSAGE = """ + Refined Storage could not load a resource in storage. + This could be because the resource no longer exists after a mod update, or if the data format of the + resource has changed. In any case, this is NOT caused by Refined Storage. + Refined Storage will try to gracefully handle this problem and continue to load the storage data. + The problematic resource might end up being removed from storage, or may no longer have any additional data + associated with it. + Error message:"""; + + private static final Logger LOGGER = LoggerFactory.getLogger(ErrorHandlingListCodec.class); + + private final Codec elementCodec; + + ErrorHandlingListCodec(final Codec elementCodec) { + this.elementCodec = elementCodec; + } + + @Override + public DataResult encode(final List input, final DynamicOps ops, final T prefix) { + final ListBuilder builder = ops.listBuilder(); + for (final E element : input) { + builder.add(elementCodec.encodeStart(ops, element)); + } + return builder.build(prefix); + } + + @Override + public DataResult, T>> decode(final DynamicOps ops, final T input) { + return ops.getList(input).setLifecycle(Lifecycle.stable()).flatMap(stream -> { + final DecoderState decoder = new DecoderState<>(ops); + stream.accept(decoder::accept); + return decoder.build(); + }); + } + + @Override + public String toString() { + return "ErrorHandlingListCodec[" + elementCodec + ']'; + } + + private class DecoderState { + private final DynamicOps ops; + private final List elements = new ArrayList<>(); + + private DecoderState(final DynamicOps ops) { + this.ops = ops; + } + + private void accept(final T value) { + final DataResult> elementResult = elementCodec.decode(ops, value); + elementResult.error().ifPresent( + error -> LOGGER.warn("{} {}", ERROR_MESSAGE, error.message()) + ); + elementResult.resultOrPartial().ifPresent(pair -> elements.add(pair.getFirst())); + } + + private DataResult, T>> build() { + return DataResult.success(Pair.of(elements, ops.empty())); + } + } +} diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageCodecs.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageCodecs.java index cfd0c8031..c19707385 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageCodecs.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/StorageCodecs.java @@ -49,7 +49,7 @@ static MapCodec> sameTypeStorageData(fina return RecordCodecBuilder.mapCodec(instance -> instance.group( Codec.optionalField("capacity", Codec.LONG, false).forGetter(StorageData::capacity), - Codec.list(storageResourceCodec).fieldOf("resources").forGetter(StorageData::resources) + new ErrorHandlingListCodec<>(storageResourceCodec).fieldOf("resources").forGetter(StorageData::resources) ).apply(instance, StorageData::new)); } From f679bee4f10b7d078e4f5474e06fcca9d43c36e8 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 11 Oct 2024 16:55:02 +0200 Subject: [PATCH 61/83] fix: crash when trying to export fluids on Fabric via external storage Related: 22e08a9e That commit only solved it when using the exporter straight away. Exporter uses FabricStorageInsertableStorage But External Utorage uses FabricStorageExtractableStorage so also patch it there. --- CHANGELOG.md | 3 ++- .../FabricStorageExporterTransferStrategyFactory.java | 5 +++-- .../fabric/importer/FabricStorageImporterSource.java | 3 ++- .../FabricStorageImporterTransferStrategyFactory.java | 5 +++-- .../fabric/storage/FabricStorageExtractableStorage.java | 8 ++++++-- .../fabric/storage/FabricStorageInsertableStorage.java | 5 +++-- .../FabricStorageExternalStorageProvider.java | 3 ++- ...bricStoragePlatformExternalStorageProviderFactory.java | 6 ++++-- 8 files changed, 25 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 607f44f6d..1d13088e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,7 +39,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed mouse keybindings not working on NeoForge. - Fixed upgrade destinations not being shown on upgrades. -- Fixed resources with changed data format or ID causing entire storage to fail to load. +- Fixed resources with changed data format or ID causing entire storage to fail to load. +- Fixed crash when trying to export fluids from an External Storage on Fabric. ## [2.0.0-milestone.4.7] - 2024-08-11 diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricStorageExporterTransferStrategyFactory.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricStorageExporterTransferStrategyFactory.java index 21cdd0551..82f029de3 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricStorageExporterTransferStrategyFactory.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/exporter/FabricStorageExporterTransferStrategyFactory.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.fabric.exporter; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.network.impl.node.exporter.ExporterTransferStrategyImpl; import com.refinedmods.refinedstorage.api.network.node.exporter.ExporterTransferStrategy; import com.refinedmods.refinedstorage.api.resource.ResourceKey; @@ -20,11 +21,11 @@ public class FabricStorageExporterTransferStrategyFactory implements ExporterTransferStrategyFactory { private final BlockApiLookup, Direction> lookup; - private final Function toPlatformMapper; + private final Function toPlatformMapper; private final long singleAmount; public FabricStorageExporterTransferStrategyFactory(final BlockApiLookup, Direction> lookup, - final Function toPlatformMapper, + final Function toPlatformMapper, final long singleAmount) { this.lookup = lookup; this.toPlatformMapper = toPlatformMapper; diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterSource.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterSource.java index 046d711b8..9a285606c 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterSource.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterSource.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.fabric.importer; import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.network.impl.node.importer.ImporterSource; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; @@ -32,7 +33,7 @@ class FabricStorageImporterSource implements ImporterSource { FabricStorageImporterSource(final BlockApiLookup, Direction> lookup, final Function fromPlatformMapper, - final Function toPlatformMapper, + @NullableType final Function toPlatformMapper, final ServerLevel serverLevel, final BlockPos pos, final Direction direction, diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterTransferStrategyFactory.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterTransferStrategyFactory.java index b3ecf4120..1d7c86c80 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterTransferStrategyFactory.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/importer/FabricStorageImporterTransferStrategyFactory.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.fabric.importer; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.network.impl.node.importer.ImporterSource; import com.refinedmods.refinedstorage.api.network.impl.node.importer.ImporterTransferStrategyImpl; import com.refinedmods.refinedstorage.api.network.node.importer.ImporterTransferStrategy; @@ -20,12 +21,12 @@ public class FabricStorageImporterTransferStrategyFactory

implements ImporterTransferStrategyFactory { private final BlockApiLookup, Direction> lookup; private final Function fromPlatformMapper; - private final Function toPlatformMapper; + private final Function toPlatformMapper; private final long singleAmount; public FabricStorageImporterTransferStrategyFactory(final BlockApiLookup, Direction> lookup, final Function fromPlatformMapper, - final Function toPlatformMapper, + final Function toPlatformMapper, final long singleAmount) { this.lookup = lookup; this.fromPlatformMapper = fromPlatformMapper; diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageExtractableStorage.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageExtractableStorage.java index 5fae1ec64..b533cb41c 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageExtractableStorage.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageExtractableStorage.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.fabric.storage; import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.ExtractableStorage; @@ -18,12 +19,12 @@ public class FabricStorageExtractableStorage

implements ExtractableStorage { private final BlockApiCache, Direction> cache; - private final Function toPlatformMapper; + private final Function toPlatformMapper; private final Direction direction; private final AmountOverride amountOverride; public FabricStorageExtractableStorage(final BlockApiLookup, Direction> lookup, - final Function toPlatformMapper, + final Function toPlatformMapper, final ServerLevel serverLevel, final BlockPos pos, final Direction direction, @@ -41,6 +42,9 @@ public long extract(final ResourceKey resource, final long amount, final Action return 0L; } final P platformResource = toPlatformMapper.apply(resource); + if (platformResource == null) { + return 0L; + } final long correctedAmount = amountOverride.overrideAmount( resource, amount, diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageInsertableStorage.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageInsertableStorage.java index 2c3aa9342..9976f3fd7 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageInsertableStorage.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/FabricStorageInsertableStorage.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.fabric.storage; import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; import com.refinedmods.refinedstorage.api.storage.InsertableStorage; @@ -18,12 +19,12 @@ public class FabricStorageInsertableStorage implements InsertableStorage { private final BlockApiCache, Direction> cache; - private final Function toPlatformMapper; + private final Function toPlatformMapper; private final Direction direction; private final AmountOverride amountOverride; public FabricStorageInsertableStorage(final BlockApiLookup, Direction> lookup, - final Function toPlatformMapper, + final Function toPlatformMapper, final ServerLevel serverLevel, final BlockPos pos, final Direction direction, diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStorageExternalStorageProvider.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStorageExternalStorageProvider.java index 939ef2f40..08ba7beae 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStorageExternalStorageProvider.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStorageExternalStorageProvider.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.fabric.storage.externalstorage; import com.refinedmods.refinedstorage.api.core.Action; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.Actor; @@ -33,7 +34,7 @@ class FabricStorageExternalStorageProvider

implements ExternalStorageProvider FabricStorageExternalStorageProvider(final BlockApiLookup, Direction> lookup, final Function fromPlatformMapper, - final Function toPlatformMapper, + final Function toPlatformMapper, final ServerLevel serverLevel, final BlockPos pos, final Direction direction) { diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStoragePlatformExternalStorageProviderFactory.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStoragePlatformExternalStorageProviderFactory.java index 825cbdec2..5d2f82e4c 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStoragePlatformExternalStorageProviderFactory.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/storage/externalstorage/FabricStoragePlatformExternalStorageProviderFactory.java @@ -1,5 +1,6 @@ package com.refinedmods.refinedstorage.fabric.storage.externalstorage; +import com.refinedmods.refinedstorage.api.core.NullableType; import com.refinedmods.refinedstorage.api.resource.ResourceKey; import com.refinedmods.refinedstorage.api.storage.external.ExternalStorageProvider; import com.refinedmods.refinedstorage.common.api.storage.externalstorage.PlatformExternalStorageProviderFactory; @@ -17,11 +18,12 @@ public class FabricStoragePlatformExternalStorageProviderFactory implements PlatformExternalStorageProviderFactory { private final BlockApiLookup, Direction> lookup; private final Function fromPlatformMapper; - private final Function toPlatformMapper; + private final Function toPlatformMapper; public FabricStoragePlatformExternalStorageProviderFactory(final BlockApiLookup, Direction> lookup, final Function fromPlatformMapper, - final Function toPlatformMapper) { + @NullableType final Function + toPlatformMapper) { this.lookup = lookup; this.fromPlatformMapper = fromPlatformMapper; this.toPlatformMapper = toPlatformMapper; From ff63e868e0b21bd725d5c294468fef6035479eb3 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Fri, 11 Oct 2024 16:55:17 +0200 Subject: [PATCH 62/83] docs: remove mastodon link from readme anvil.social no longer works --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 72f6f77af..36620222b 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,6 @@ this mod that allow the player to set up auto-crafting, allowing the crafting of - [Javadoc](https://refinedmods.com/javadoc/refinedstorage2) - [Discord](https://discordapp.com/invite/VYzsydb) - [Twitter](https://twitter.com/refinedmods) -- [Mastodon](https://anvil.social/@refinedmods) ## Building From 984bb6c6d81ba3891c39683f1c76d085ac510f5c Mon Sep 17 00:00:00 2001 From: Starforcraft Date: Sat, 14 Sep 2024 13:54:00 +0200 Subject: [PATCH 63/83] feat: regulator upgrade gametest --- .../ConfigurationCardTarget.java | 3 +- .../autocrafting/AutocrafterBlockEntity.java | 4 +- .../ConfigurationCardItem.java | 7 ++- .../AbstractConstructorBlockEntity.java | 4 +- .../AbstractDestructorBlockEntity.java | 4 +- .../exporter/AbstractExporterBlockEntity.java | 4 +- .../importer/AbstractImporterBlockEntity.java | 4 +- .../WirelessTransmitterBlockEntity.java | 4 +- .../AbstractDiskInterfaceBlockEntity.java | 4 +- .../common/upgrade/RegulatorUpgradeItem.java | 8 +++ .../common/upgrade/UpgradeContainer.java | 4 +- .../ConstructorTest.java | 2 +- .../constructordestructor/DestructorTest.java | 2 +- .../common/exporter/ExporterTest.java | 41 +++++++++++++++- .../common/importer/ImporterTest.java | 49 +++++++++++++++++-- .../diskinterface/DiskInterfaceTest.java | 4 +- 16 files changed, 118 insertions(+), 30 deletions(-) diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java index efdacae3c..5d246efaf 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java @@ -6,6 +6,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import org.apiguardian.api.API; /** @@ -21,7 +22,7 @@ default List getUpgradeItems() { return Collections.emptyList(); } - default boolean addUpgradeItem(Item upgradeItem) { + default boolean addUpgradeItem(ItemStack upgradeStack) { return false; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java index 2bc3d18c5..df3cadde9 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java @@ -235,8 +235,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java index d34df1ed5..7b78ff02f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java @@ -84,10 +84,9 @@ private void tryTransferUpgrades(final Player player, final ConfigurationCardTarget target, final List upgradeItems) { for (final Item upgradeItem : upgradeItems) { - final int upgradeIndexInPlayerInventory = player.getInventory().findSlotMatchingItem( - new ItemStack(upgradeItem) - ); - if (upgradeIndexInPlayerInventory >= 0 && target.addUpgradeItem(upgradeItem)) { + final ItemStack upgradeStack = new ItemStack(upgradeItem); + final int upgradeIndexInPlayerInventory = player.getInventory().findSlotMatchingItem(upgradeStack); + if (upgradeIndexInPlayerInventory >= 0 && target.addUpgradeItem(upgradeStack)) { player.getInventory().removeItem(upgradeIndexInPlayerInventory, 1); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java index 4a8272858..75c15737e 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java @@ -89,8 +89,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java index 6a8cb2814..d94e3709b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java @@ -80,8 +80,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } public boolean isPickupItems() { diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java index 437f5f4b9..628263c20 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java @@ -92,8 +92,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java index 66962b3d7..a19995600 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java @@ -86,8 +86,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 8384ebe92..199d7649f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -79,8 +79,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 3329c13b1..792f0751a 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -114,8 +114,8 @@ public List getUpgradeItems() { } @Override - public boolean addUpgradeItem(final Item upgradeItem) { - return upgradeContainer.addUpgradeItem(upgradeItem); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return upgradeContainer.addUpgradeItem(upgradeStack); } @Override diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java index 029860f71..1e7aa6657 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/RegulatorUpgradeItem.java @@ -93,6 +93,14 @@ private void setAmount(final ItemStack stack, final double amount) { stack.set(DataComponents.INSTANCE.getRegulatorUpgradeState(), state.withAmount(amount)); } + public void setAmount(final ItemStack regulatorStack, final PlatformResourceKey resource, final double amount) { + final RegulatorUpgradeState state = regulatorStack.getOrDefault( + DataComponents.INSTANCE.getRegulatorUpgradeState(), + new RegulatorUpgradeState(amount, Optional.of(resource)) + ); + regulatorStack.set(DataComponents.INSTANCE.getRegulatorUpgradeState(), state); + } + @Override public long getEnergyUsage() { return Platform.INSTANCE.getConfig().getUpgrade().getRegulatorUpgradeEnergyUsage(); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index 24c8c6d68..671a654aa 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -157,8 +157,8 @@ public List getUpgradeItems() { return upgradeItems; } - public boolean addUpgradeItem(final Item upgradeItem) { - return addItem(new ItemStack(upgradeItem)).isEmpty(); + public boolean addUpgradeItem(final ItemStack upgradeStack) { + return addItem(upgradeStack).isEmpty(); } public NonNullList getDrops() { diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java index 50ce50207..b51cb42c3 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java @@ -129,7 +129,7 @@ public static void shouldDropItemWithStackUpgrade(final GameTestHelper helper) { // Act constructor.setDropItems(true); constructor.setFilters(List.of(asResource(DIRT))); - constructor.addUpgradeItem(RSITEMS.getStackUpgrade()); + constructor.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java index 4db21526c..a1eb71777 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java @@ -139,7 +139,7 @@ public static void shouldBreakBlockWithSilkTouchUpgrade(final GameTestHelper hel // Act helper.setBlock(pos.east(), Blocks.DIAMOND_ORE); - destructor.addUpgradeItem(RSITEMS.getSilkTouchUpgrade()); + destructor.addUpgradeItem(RSITEMS.getSilkTouchUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java index db7a2808c..b8d3d7e7c 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java @@ -2,6 +2,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.upgrade.RegulatorUpgradeItem; import com.refinedmods.refinedstorage.common.util.IdentifierUtil; import java.util.List; @@ -79,7 +80,7 @@ public static void shouldExportItemWithStackUpgrade(final GameTestHelper helper) // Act exporter.setFilters(List.of(asResource(DIRT))); - exporter.addUpgradeItem(RSITEMS.getStackUpgrade()); + exporter.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence @@ -112,6 +113,42 @@ public static void shouldExportItemWithStackUpgrade(final GameTestHelper helper) }); } + @GameTest(template = "empty_15x15") + public static void shouldExportItemWithRegulatorUpgrade(final GameTestHelper helper) { + ExporterTestPlots.preparePlot(helper, Blocks.CHEST, Direction.EAST, (exporter, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 15); + insert(helper, network, STONE, 15); + })); + + // Act + exporter.setFilters(List.of(asResource(DIRT.getDefaultInstance()))); + + final ItemStack upgrade = RSITEMS.getRegulatorUpgrade().getDefaultInstance(); + if (upgrade.getItem() instanceof RegulatorUpgradeItem upgradeItem) { + upgradeItem.setAmount(upgrade, asResource(DIRT.getDefaultInstance()), 10); + } + exporter.addUpgradeItem(upgrade); + + // Assert + sequence + .thenIdle(95) + .thenExecute(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10) + )) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 5), + new ResourceAmount(asResource(STONE), 15) + )) + .thenSucceed(); + }); + } + @GameTest(template = "empty_15x15") public static void shouldExportItemFuzzy(final GameTestHelper helper) { ExporterTestPlots.preparePlot(helper, Blocks.CHEST, Direction.EAST, (exporter, pos, sequence) -> { @@ -187,7 +224,7 @@ public static void shouldExportFluidWithStackUpgrade(final GameTestHelper helper // Act exporter.setFilters(List.of(asResource(WATER))); - exporter.addUpgradeItem(RSITEMS.getStackUpgrade()); + exporter.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java index f620e86e2..a6eefe1a1 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java @@ -3,6 +3,7 @@ import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.api.resource.filter.FilterMode; import com.refinedmods.refinedstorage.common.Platform; +import com.refinedmods.refinedstorage.common.upgrade.RegulatorUpgradeItem; import com.refinedmods.refinedstorage.common.util.IdentifierUtil; import java.util.Set; @@ -89,11 +90,11 @@ public static void shouldImportItemWithStackUpgrade(final GameTestHelper helper) DIRT.getDefaultInstance() ); - importer.addUpgradeItem(RSITEMS.getStackUpgrade()); + importer.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence - .thenExecute(() -> containerContainsExactly( + .thenExecute(containerContainsExactly( helper, pos.east(), new ResourceAmount(asResource(DIRT), 1) @@ -118,6 +119,48 @@ public static void shouldImportItemWithStackUpgrade(final GameTestHelper helper) }); } + @GameTest(template = "empty_15x15") + public static void shouldImportItemWithRegulatorUpgrade(final GameTestHelper helper) { + preparePlot(helper, Direction.EAST, (importer, pos, sequence) -> { + // Arrange + sequence.thenWaitUntil(networkIsAvailable(helper, pos, network -> { + insert(helper, network, DIRT, 10); + insert(helper, network, STONE, 15); + })); + + // Act + prepareChest( + helper, + pos.east(), + COBBLESTONE.getDefaultInstance(), + DIRT.getDefaultInstance().copyWithCount(15) + ); + + final ItemStack upgrade = RSITEMS.getRegulatorUpgrade().getDefaultInstance(); + if (upgrade.getItem() instanceof RegulatorUpgradeItem upgradeItem) { + upgradeItem.setAmount(upgrade, asResource(DIRT.getDefaultInstance()), 10); + } + importer.addUpgradeItem(upgrade); + + // Assert + sequence + .thenIdle(95) + .thenExecute(containerContainsExactly( + helper, + pos.east(), + new ResourceAmount(asResource(DIRT), 10) + )) + .thenExecute(storageContainsExactly( + helper, + pos, + new ResourceAmount(asResource(DIRT), 15), + new ResourceAmount(asResource(STONE), 15), + new ResourceAmount(asResource(COBBLESTONE), 1) + )) + .thenSucceed(); + }); + } + @GameTest(template = "empty_15x15") public static void shouldImportItemBlocklist(final GameTestHelper helper) { preparePlot(helper, Direction.EAST, (importer, pos, sequence) -> { @@ -328,7 +371,7 @@ public static void shouldImportFluidWithStackUpgrade(final GameTestHelper helper new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 15), new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) ); - importer.addUpgradeItem(RSITEMS.getStackUpgrade()); + importer.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java index 4618f6bd4..1b89c4589 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java @@ -76,7 +76,7 @@ public static void shouldInsertItemsIntoNetworkWithStackUpgrade(final GameTestHe // Act diskInterface.setTransferMode(StorageTransferMode.INSERT_INTO_NETWORK); - diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade()); + diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence @@ -217,7 +217,7 @@ public static void shouldExtractItemsFromNetworkWithStackUpgrade(final GameTestH // Act diskInterface.setTransferMode(StorageTransferMode.EXTRACT_FROM_NETWORK); - diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade()); + diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence From 739252eb2f88c604962f69a1c98d4e7a54d9065b Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:00 +0200 Subject: [PATCH 64/83] chore: update translation Russian from crowdin --- .../assets/refinedstorage/lang/ru_ru.json | 132 ++++++++++++++---- 1 file changed, 104 insertions(+), 28 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ru_ru.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ru_ru.json index 7b074251b..121a58f0c 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ru_ru.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ru_ru.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Дисковый привод", "block.refinedstorage.machine_casing": "Корпус механизма", "block.refinedstorage.grid": "Терминал", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Терминал создания", "block.refinedstorage.controller": "Контроллер", "block.refinedstorage.creative_controller": "Творческий контроллер", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "Когда это устройство активно, оно по умолчанию защищает сеть и блокирует все операции. Начните добавлять карты безопасности, чтобы разрешить или запретить определённые операции для игрока.", "block.refinedstorage.relay": "Реле", "block.refinedstorage.disk_interface": "Интерфейс диска", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Когда это устройство неактивно, сеть хранения не сможет использовать это устройство в качестве источника энергии.", "gui.refinedstorage.disk_drive.disks": "Диски", "gui.refinedstorage.storage.redstone_mode_help": "Когда это устройство неактивно, автономное хранилище больше не будет доступно из сети хранения данных.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Без каких-либо настроенных фильтров ресурсы не будут приниматься в этом хранилище.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Порядок сортировки", "gui.refinedstorage.grid.sorting.direction.ascending": "По возрастанию", "gui.refinedstorage.grid.sorting.direction.descending": "По убыванию", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Последнее изменение", "gui.refinedstorage.grid.auto_selected": "Auto-selected", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Режим синхронизации", - "gui.refinedstorage.grid.synchronizer.off": "Выкл.", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "Все", - "gui.refinedstorage.grid.resource_type.help": "Фильтр конкретных типов ресурсов.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Переместить предметы в сеть", "gui.refinedstorage.crafting_grid.move.inventory": "Переместить предметы в инвентарь", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Размер экрана", "gui.refinedstorage.screen_size.stretch": "Растянуть", "gui.refinedstorage.screen_size.small": "Маленький", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "Режим красного камня", "gui.refinedstorage.redstone_mode.ignore": "Игнорировать", @@ -95,29 +120,30 @@ "gui.refinedstorage.scheduling_mode": "Scheduling mode", "gui.refinedstorage.scheduling_mode.default": "По умолчанию", "gui.refinedstorage.scheduling_mode.default.help": "Use the first available filter.", - "gui.refinedstorage.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage.scheduling_mode.round_robin": "По кругу", "gui.refinedstorage.scheduling_mode.round_robin.help": "Use each filter in turn.", "gui.refinedstorage.scheduling_mode.random": "Random", "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Amount", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Set", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Режим фильтрации", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", "gui.refinedstorage.fuzzy_mode.on": "On", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Выкл.", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Должно ли это устройство передавать весь сигнал входящей сети как есть. Выключите это, чтобы выборочно дать доступ к компонентам в выходной сети.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,13 +230,14 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", - "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", - "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", + "item.refinedstorage.quartz_enriched_iron": "Обогащённое кварцем железо", + "item.refinedstorage.quartz_enriched_copper": "Обогащённая кварцем медь", "item.refinedstorage.processor_binding": "Processor Binding", - "item.refinedstorage.silicon": "Silicon", - "item.refinedstorage.raw_basic_processor": "Raw Basic Processor", - "item.refinedstorage.raw_improved_processor": "Raw Improved Processor", - "item.refinedstorage.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage.silicon": "Кремний", + "item.refinedstorage.raw_basic_processor": "Необработанный Базовый Процессор", + "item.refinedstorage.raw_improved_processor": "Необработанный Улучшенный Процессор", + "item.refinedstorage.raw_advanced_processor": "Необработанный Продвинутый Процессор", "item.refinedstorage.basic_processor": "Базовый процессор", "item.refinedstorage.improved_processor": "Улучшенный процессор", "item.refinedstorage.advanced_processor": "Продвинутый процессор", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "Диск хранения на 4 Кбайт", "item.refinedstorage.16k_storage_disk": "Диск хранения на 16 Кбайт", "item.refinedstorage.64k_storage_disk": "Диск хранения на 64 Кбайт", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Диск хранения творческого режима", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From 1703b59cdee0df4a12e454e01cdc3021d175e302 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:01 +0200 Subject: [PATCH 65/83] chore: update translation French from crowdin --- .../assets/refinedstorage/lang/fr_fr.json | 120 ++++++++++++++---- 1 file changed, 98 insertions(+), 22 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/fr_fr.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/fr_fr.json index 7f499f6a0..fe39c4d01 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/fr_fr.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/fr_fr.json @@ -1,11 +1,12 @@ { - "mod.refinedstorage": "Refined Storage", + "mod.refinedstorage": "Stockage raffiné", "block.refinedstorage.cable": "Câble", "block.refinedstorage.quartz_enriched_iron_block": "Bloc de Fer Enrichi en Quartz", "block.refinedstorage.quartz_enriched_copper_block": "Bloc de Cuivre enrichi en Quartz", "block.refinedstorage.disk_drive": "Lecteur de Disque", "block.refinedstorage.machine_casing": "Boitier de Machine", "block.refinedstorage.grid": "Grille", + "block.refinedstorage.pattern_grid": "Grille de paterne", "block.refinedstorage.crafting_grid": "Grille d’Artisanat", "block.refinedstorage.controller": "Contrôleur", "block.refinedstorage.creative_controller": "Contrôleur créatif", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "Lorsque ce périphérique est actif, il protège le réseau par défaut et bloque toutes les opérations. Commencez à ajouter des Cartes de Sécurité pour permettre ou refuser des opérations spécifiques pour un joueur.", "block.refinedstorage.relay": "Relais", "block.refinedstorage.disk_interface": "Interface Disque", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Lorsque ce périphérique est inactif, le réseau de stockage ne peut pas utiliser ce périphérique comme source d'énergie.", "gui.refinedstorage.disk_drive.disks": "Disques", "gui.refinedstorage.storage.redstone_mode_help": "Lorsque ce périphérique est inactif, le stockage contenu ne sera plus accessible depuis le réseau de stockage.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Sans filtre configuré, aucune ressource ne sera accepté dans ce stockage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Autorise dans ce stockage uniquement les ressources configurées dans les filtres.", "gui.refinedstorage.storage.filter_mode.block.help": "Interdis dans ce stockage les ressources configurées dans les filtres.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Direction du tri", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascendant", "gui.refinedstorage.grid.sorting.direction.descending": "Descendant", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Dernière modification", "gui.refinedstorage.grid.auto_selected": "Sélection automatique", "gui.refinedstorage.grid.auto_selected.help": "Si la barre de recherche doit être sélectionnée automatique à l'ouverture de la grille.", - "gui.refinedstorage.grid.synchronizer": "Mode de synchronisation", - "gui.refinedstorage.grid.synchronizer.off": "Éteint", - "gui.refinedstorage.grid.synchronizer.off.help": "Ne pas synchroniser la recherche.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Type de ressource", "gui.refinedstorage.grid.resource_type.all": "Toutes", - "gui.refinedstorage.grid.resource_type.help": "Filtrer un type de ressources spécifique.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Déplacer les objets dans le réseau", "gui.refinedstorage.crafting_grid.move.inventory": "Déplacer les objets dans l'inventaire", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Taille de l'écran", "gui.refinedstorage.screen_size.stretch": "Etiré", "gui.refinedstorage.screen_size.small": "Petit", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Autorise dans le réseau de stockage uniquement les ressources configurées dans les filtres.", "gui.refinedstorage.importer.filter_mode.block.help": "Interdit dans le réseau de stockage les ressources configurées dans les filtres.", "gui.refinedstorage.wireless_transmitter.distance": "%d bloc(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "La ressource à afficher.", "gui.refinedstorage.redstone_mode": "Mode redstone", "gui.refinedstorage.redstone_mode.ignore": "Ignoré", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Utiliser un filtre aléatoire.", "gui.refinedstorage.priority": "Priorité", "gui.refinedstorage.priority.storage_help": "L'ordre dans lequel le réseau de stockage va insérer ou extraire les ressources, le plus élevé en premier.", - "gui.refinedstorage.amount": "Quantité", - "gui.refinedstorage.amount.reset": "Réinitialiser", - "gui.refinedstorage.amount.set": "Définir", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Mode de filtrage", "gui.refinedstorage.filter_mode.allow": "Liste blanche", "gui.refinedstorage.filter_mode.block": "Liste noire", "gui.refinedstorage.fuzzy_mode": "Mode flou", "gui.refinedstorage.fuzzy_mode.on": "Activé", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Faire correspondre exactement les filtres pour la liste d'autorisation ou de blocage.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Faire correspondre exactement le filtre.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Faire correspondre exactement les filtres du réseau de stockage.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Faire correspondre exactement les filtres lors de l'extraction depuis la source.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Désactivé", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Faire correspondre exactement les filtres pour la liste d'autorisation ou de blocage sans comparer les tags NBT.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Faire correspondre le filtre sans comparer les tags NBT.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Faire correspondre les filtres lors de l'extraction depuis le réseau de stockage sans comparer les tags NBT.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Mode d'accès", "gui.refinedstorage.access_mode.insert_extract": "Insertion et extraction", "gui.refinedstorage.access_mode.insert_extract.help": "Le réseau de stockage pourra insérer et extraire depuis ce stockage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Anéantir les ressources en excès", "gui.refinedstorage.void_excess.help": "Quand le mode anéantir les ressources en excès est allumé et que le stockage est plein, il continuera d'accepter les ressources mais les détruira.", "gui.refinedstorage.void_excess.allowlist_warning": "Le mode anéantir les ressources en excès ne fonction que lorsque le stockage est en mode liste blanche.", - "gui.refinedstorage.upgrade_slot": "Emplacement d'amélioration vide", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Filtre vide", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "La ressource qui doit être régulée dans la cible.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactif", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Carte réseau manquante", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "Lorsque ce périphérique est inactif, le réseau ne sera pas protégé.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Emplacement pour une carte de sécurité de repli.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Ajoutez une Carte de sécurité de repli à cet emplacement pour définir les permissions de tous les joueurs sans Carte de sécurité. Par défaut, toutes les actions sont interdites.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Alimente le réseau de stockage en énergie. Plusieurs sont autorisés dans un seul réseau de stockage. ", "item.refinedstorage.creative_controller.help": "Alimente le réseau de stockage avec une source d'énergie infinie. ", "item.refinedstorage.disk_drive.help": "Accepte des disques de stockage pour fournir de l'espace de stockage au réseau.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Permet d'interagir avec le réseau de stockage.", "item.refinedstorage.crafting_grid.help": "Permet d'interagir avec le réseau de stockage, avec les capacités d'artisanat.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Importe des ressources depuis une source externe vers le réseau de stockage.", "item.refinedstorage.exporter.help": "Exporte les ressources du réseau de stockage vers une destination externe.", "item.refinedstorage.interface.help": "Agit comme la combinaison d'un importateur et d'un exportateur.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Place des blocs du réseau de stockage dans le monde.", "item.refinedstorage.destructor.help": "Détruit les blocs du monde et les met dans le réseau de stockage.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Fer enrichi en quartz", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Liant pour processeur", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "Disque de stockage 4k", "item.refinedstorage.16k_storage_disk": "Disque de stockage 16k", "item.refinedstorage.64k_storage_disk": "Disque de stockage 64k", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Disque de stockage créatif", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stocké : %s", "misc.refinedstorage.stored_with_capacity": "Stocké : %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "Vous n'êtes pas autorisé à casser %s.", "misc.refinedstorage.no_permission.build.rotate": "Vous n'êtes pas autorisé à faire pivoter %s.", "misc.refinedstorage.no_permission.build.dismantle": "Vous n'êtes pas autorisé à démonter %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Vider la matrice d'artisanat dans le réseau", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Vider la matrice d'artisanat dans l'inventaire", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Type de tri", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connexion en cours", "advancements.refinedstorage.connecting.description": "Utiliser un câble pour connecter pour connecter des périphériques ensembles, ou placer les périphériques l'un contre l'autre", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From 61e51999550db92738f80ce467eb908c56bfe604 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:02 +0200 Subject: [PATCH 66/83] chore: update translation Spanish from crowdin --- .../assets/refinedstorage/lang/es_es.json | 118 ++++++++++++++---- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/es_es.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/es_es.json index 7b07c2b4f..e2357af06 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/es_es.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/es_es.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Unidad de Disco", "block.refinedstorage.machine_casing": "Carcasa de la Máquina", "block.refinedstorage.grid": "Rejilla", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Rejilla de Fabricación", "block.refinedstorage.controller": "Controlador", "block.refinedstorage.creative_controller": "Controlador Creativo", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "Cuando este dispositivo está activo, protegerá la red por defecto y bloqueará todas las operaciones. Empieza a añadir tarjetas de seguridad para permitir o denegar operaciones específicas para un jugador.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Cuando este dispositivo está inactivo, la red de almacenamiento no podrá utilizar este dispositivo como fuente de energía.", "gui.refinedstorage.disk_drive.disks": "Discos", "gui.refinedstorage.storage.redstone_mode_help": "Cuando este dispositivo está inactivo, ya no se podrá acceder al almacenamiento contenido desde la red de almacenamiento.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Sin filtros configurados, no se aceptarán recursos en este almacenamiento.", "gui.refinedstorage.storage.filter_mode.allow.help": "Sólo permitir recursos en este almacenamiento que estén configurados en los filtros.", "gui.refinedstorage.storage.filter_mode.block.help": "No permitir recursos en este almacenamiento que están configurados en los filtros.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Dirección de ordenación", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascendente", "gui.refinedstorage.grid.sorting.direction.descending": "Descendente", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Última modificación", "gui.refinedstorage.grid.auto_selected": "Auto-seleccionado", "gui.refinedstorage.grid.auto_selected.help": "Si seleccionar automáticamente el cuadro de búsqueda al abrir el cuadrículo.", - "gui.refinedstorage.grid.synchronizer": "Modo de sincronización", - "gui.refinedstorage.grid.synchronizer.off": "Apagado", - "gui.refinedstorage.grid.synchronizer.off.help": "No sincronizar el texto del cuadro de búsqueda.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Tipo de Recurso", "gui.refinedstorage.grid.resource_type.all": "Todo", - "gui.refinedstorage.grid.resource_type.help": "Filtrar tipos de recurso específicos.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Mover objetos a la red", "gui.refinedstorage.crafting_grid.move.inventory": "Mover objetos al inventario", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Tamaño de pantalla", "gui.refinedstorage.screen_size.stretch": "Estirar", "gui.refinedstorage.screen_size.small": "Pequeño", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d bloque(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "El recurso a mostrar.", "gui.refinedstorage.redstone_mode": "Modo Redstone", "gui.refinedstorage.redstone_mode.ignore": "Ignorar", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Usar un filtro aleatorio.", "gui.refinedstorage.priority": "Prioridad", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Cantidad", - "gui.refinedstorage.amount.reset": "Reiniciar", - "gui.refinedstorage.amount.set": "Establecer", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Modo de filtro", "gui.refinedstorage.filter_mode.allow": "Lista blanca", "gui.refinedstorage.filter_mode.block": "Lista negra", "gui.refinedstorage.fuzzy_mode": "Modo Fuzzy", "gui.refinedstorage.fuzzy_mode.on": "Encendido", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Coincidir exactamente con el filtro.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Apagado", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Coincide los filtros al extraer de la red de almacenamiento sin comparar las etiquetas NBT.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Coincide los filtros al extraer de la fuente sin comparar las etiquetas NBT.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Modo de acceso", "gui.refinedstorage.access_mode.insert_extract": "Insertar y extraer", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Eliminar recursos excedentes", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Ranura de mejora vacía", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Filtro vacío", "gui.refinedstorage.filter_slot.left_click_for": "Clic izquierdo para", "gui.refinedstorage.filter_slot.right_click_for": "Clic derecho para", "gui.refinedstorage.filter_slot.click_to_clear": "Clic para limpiar", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Falta tarjeta de red", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exporta recursos de la red de almacenamiento a un destino externo.", "item.refinedstorage.interface.help": "Actúa como la combinación de un importador y exportador.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Hierro enriquecido con cuarzo", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "Disco de almacenamiento de 4K", "item.refinedstorage.16k_storage_disk": "Disco de almacenamiento de 16K", "item.refinedstorage.64k_storage_disk": "Disco de almacenamiento de 64K", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Disco de almacenamiento creativo", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Tarjeta de Seguridad", "item.refinedstorage.security_card.cleared_configuration": "Configuración limpiada.", "item.refinedstorage.security_card.unbound": "Desvinculado.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Almacenado: %s", "misc.refinedstorage.stored_with_capacity": "Almacenado: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Enfocar la barra de búsqueda", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Tipo de ordenación", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Utilice uno o varios controladores en una red de almacenamiento para proporcionar energía a su red", "advancements.refinedstorage.connecting": "Conectando", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Seguridad", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From e0835805ad590670005c9d202fbecd00497a529e Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:04 +0200 Subject: [PATCH 67/83] chore: update translation Danish from crowdin --- .../assets/refinedstorage/lang/da_dk.json | 645 ++++++++++++++++++ 1 file changed, 645 insertions(+) create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/lang/da_dk.json diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/da_dk.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/da_dk.json new file mode 100644 index 000000000..303150398 --- /dev/null +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/da_dk.json @@ -0,0 +1,645 @@ +{ + "mod.refinedstorage": "Raffineret Opbevaring", + "block.refinedstorage.cable": "Kabel", + "block.refinedstorage.quartz_enriched_iron_block": "Blok af Kvarts Beriget Jern", + "block.refinedstorage.quartz_enriched_copper_block": "Blok af Kvarts Beriget Kobber", + "block.refinedstorage.disk_drive": "Disk Drev", + "block.refinedstorage.machine_casing": "Maskinhus", + "block.refinedstorage.grid": "Gitter", + "block.refinedstorage.pattern_grid": "Mønstergitter", + "block.refinedstorage.crafting_grid": "Crafting gitter", + "block.refinedstorage.controller": "Controller", + "block.refinedstorage.creative_controller": "Kreativ Controller", + "block.refinedstorage.1k_storage_block": "1K lagerblok", + "block.refinedstorage.4k_storage_block": "4K lagerblok", + "block.refinedstorage.16k_storage_block": "16K lagerblok", + "block.refinedstorage.64k_storage_block": "64K lagerblok", + "block.refinedstorage.creative_storage_block": "Kreativ lagerblok", + "block.refinedstorage.64b_fluid_storage_block": "64B Væske lagerblok", + "block.refinedstorage.256b_fluid_storage_block": "256B Væske lagerblok", + "block.refinedstorage.1024b_fluid_storage_block": "1024B Væske lagerblok", + "block.refinedstorage.4096b_fluid_storage_block": "4096B Væske lagerblok", + "block.refinedstorage.creative_fluid_storage_block": " Kreativ Væske lagerblok", + "block.refinedstorage.importer": "Importør", + "block.refinedstorage.exporter": "Eksportør", + "block.refinedstorage.interface": "Interface", + "block.refinedstorage.external_storage": "Eksternt Lager", + "block.refinedstorage.detector": "Detektor", + "block.refinedstorage.constructor": "Konstruktør", + "block.refinedstorage.destructor": "Ødelægger", + "block.refinedstorage.wireless_transmitter": "Trådløs Sender", + "block.refinedstorage.storage_monitor": "Opbevaringsmonitor", + "block.refinedstorage.network_receiver": "Netværksmodtager", + "block.refinedstorage.network_transmitter": "Netværkssender", + "block.refinedstorage.portable_grid": "Bærbart Gitter", + "block.refinedstorage.creative_portable_grid": "Kreativt Bærbart Gitter", + "block.refinedstorage.security_manager": "Sikkerheds Manager", + "block.refinedstorage.security_manager.help": "Når denne enhed er aktiv, vil den beskytte netværket som standard og blokerer alle handlinger. Begynd at tilføje sikkerhedskort for at tillade eller afvise specifikke handlinger for en spiller.", + "block.refinedstorage.relay": "Relæ", + "block.refinedstorage.disk_interface": "Disk Grænseflade", + "block.refinedstorage.autocrafter": "Autocrafter", + "gui.refinedstorage.controller.redstone_mode_help": "Når denne enhed er inaktiv, vil lagernetværket ikke være i stand til at bruge denne enhed som energikilde.", + "gui.refinedstorage.disk_drive.disks": "Diske", + "gui.refinedstorage.storage.redstone_mode_help": "Når denne enhed er inaktiv, vil det indeholdte lager ikke længere være tilgængeligt på lagernetværket.", + "gui.refinedstorage.storage.filter_help": "De ressourcer, der muligvis eller måske ikke er tilladt i dette lager, afhængigt af om enheden er i tilstanden tilladelsesliste eller blokeringsliste.", + "gui.refinedstorage.storage.filter_mode.empty_warning": "Uden nogen konfigurerede filtre vil ingen ressourcer blive accepteret i dette lager.\n", + "gui.refinedstorage.storage.filter_mode.allow.help": "Tillad kunde ressourcer der er konfigureret i filtrene i dette lager.", + "gui.refinedstorage.storage.filter_mode.block.help": "Tillad ikke de ressourcer der er konfigureret i filtrene i dette lager.", + "gui.refinedstorage.grid.view_type": "Vis type", + "gui.refinedstorage.grid.view_type.all": "Alle", + "gui.refinedstorage.grid.view_type.autocraftable": "Kan laves automatisk", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Kan Ikke laves automatisk", + "gui.refinedstorage.grid.sorting.direction": "Sorteringsretning", + "gui.refinedstorage.grid.sorting.direction.ascending": "Stigende", + "gui.refinedstorage.grid.sorting.direction.descending": "Faldende", + "gui.refinedstorage.grid.sorting.type": "Sorteringstype", + "gui.refinedstorage.grid.sorting.type.quantity": "Mængde", + "gui.refinedstorage.grid.sorting.type.name": "Name", + "gui.refinedstorage.grid.sorting.type.id": "ID", + "gui.refinedstorage.grid.sorting.type.last_modified": "Sidst ændret", + "gui.refinedstorage.grid.auto_selected": "Automatisk valgt", + "gui.refinedstorage.grid.auto_selected.help": "Om søgefeltet skal vælges automatisk, når gitteret åbnes.", + "gui.refinedstorage.grid.synchronization_mode": "Synkroniserings tilstand", + "gui.refinedstorage.grid.synchronization_mode.off": "Slukket", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Synkroniser ikke søgefeltets tekst.", + "gui.refinedstorage.grid.resource_type": "Ressourcetype", + "gui.refinedstorage.grid.resource_type.all": "Alle", + "gui.refinedstorage.grid.craft": "Lav", + "gui.refinedstorage.grid.autocraftable": "Denne ressource kan laves automatisk", + "gui.refinedstorage.grid.pattern_in_inventory": "Denne ressource har et mønster i din beholdning.", + "gui.refinedstorage.grid.click_to_autocraft": "Klik for at lave automatisk", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + klik for at lave automatisk", + "gui.refinedstorage.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", + "gui.refinedstorage.screen_size": "Screen size", + "gui.refinedstorage.screen_size.stretch": "Stretch", + "gui.refinedstorage.screen_size.small": "Small", + "gui.refinedstorage.screen_size.medium": "Medium", + "gui.refinedstorage.screen_size.large": "Large", + "gui.refinedstorage.screen_size.extra_large": "Extra large", + "gui.refinedstorage.detector.mode": "Mode", + "gui.refinedstorage.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", + "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage.redstone_mode": "Redstone mode", + "gui.refinedstorage.redstone_mode.ignore": "Ignore", + "gui.refinedstorage.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage.redstone_mode.high": "High", + "gui.refinedstorage.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage.redstone_mode.low": "Low", + "gui.refinedstorage.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage.scheduling_mode": "Planlægnings tilstand", + "gui.refinedstorage.scheduling_mode.default": "Default", + "gui.refinedstorage.scheduling_mode.default.help": "Brug det første tilgængelige filter.", + "gui.refinedstorage.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage.scheduling_mode.round_robin.help": "Brug hvert filter i rækkefølge", + "gui.refinedstorage.scheduling_mode.random": "Tilfældig", + "gui.refinedstorage.scheduling_mode.random.help": "Brug et tilfældigt filter.", + "gui.refinedstorage.priority": "Prioritet", + "gui.refinedstorage.priority.storage_help": "Den rækkefølge, som lagernetværket vil indsætte eller udtrække ressourcer i, det højeste først.", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Konfigurer beløb", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Sæt", + "gui.refinedstorage.filter_mode": "Filtrerings tilstand", + "gui.refinedstorage.filter_mode.allow": "Tilladelsesliste", + "gui.refinedstorage.filter_mode.block": "Blokeringsliste", + "gui.refinedstorage.fuzzy_mode": "Fuzzy tilstand", + "gui.refinedstorage.fuzzy_mode.on": "Slået til", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match filtrene for tilladelseslisten eller blokeringslisten, og ignorer komponenter.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match filteret, ignorer komponenter.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match filtrene, når du udvinder fra lagernetværket, og ignorer komponenter.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": ".", + "gui.refinedstorage.fuzzy_mode.off": "Off", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.access_mode": "Access mode", + "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage.access_mode.insert": "Insert only", + "gui.refinedstorage.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage.access_mode.extract": "Extract only", + "gui.refinedstorage.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage.void_excess": "Void excess resources", + "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", + "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage.network_transmitter.status.receiver_unreachable": "Unreachable", + "gui.refinedstorage.security_card.permission.reset": "Reset", + "gui.refinedstorage.security_card.permission.modified": "Modified", + "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", + "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", + "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.pass_through": "Pass-through", + "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", + "gui.refinedstorage.relay.pass_energy": "Pass energy", + "gui.refinedstorage.relay.pass_energy.help": "Whether this device should pass the energy buffer from the input network to the output network.", + "gui.refinedstorage.relay.pass_storage": "Pass storage", + "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", + "gui.refinedstorage.relay.pass_security": "Pass security", + "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", + "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", + "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", + "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", + "gui.refinedstorage.disk_interface.filter_mode.block.help": "Disallow resources into the storage disks or into the network that are configured in the filters.", + "gui.refinedstorage.disk_interface.in": "In", + "gui.refinedstorage.disk_interface.out": "Out", + "gui.refinedstorage.disk_interface.filter_help": "The resources that may or may not be allowed transferred from or into the provided storage disks, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage.disk_interface.transfer_mode": "Transfer mode", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network": "Insert into network", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", + "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", + "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", + "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", + "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", + "item.refinedstorage.processor_binding": "Processor Binding", + "item.refinedstorage.silicon": "Silicon", + "item.refinedstorage.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage.basic_processor": "Basic Processor", + "item.refinedstorage.improved_processor": "Improved Processor", + "item.refinedstorage.advanced_processor": "Advanced Processor", + "item.refinedstorage.1k_storage_part": "1K Storage Part", + "item.refinedstorage.4k_storage_part": "4K Storage Part", + "item.refinedstorage.16k_storage_part": "16K Storage Part", + "item.refinedstorage.64k_storage_part": "64K Storage Part", + "item.refinedstorage.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", + "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", + "item.refinedstorage.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage.fluid_storage_disk.help": "Stores %s buckets.", + "item.refinedstorage.fluid_storage_block.help": "Stores %s buckets.", + "item.refinedstorage.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage.creative_fluid_storage_disk.help": "Stores an infinite amount of buckets.", + "item.refinedstorage.creative_fluid_storage_block.help": "Stores an infinite amount of buckets.", + "item.refinedstorage.storage_housing": "Storage Housing", + "item.refinedstorage.construction_core": "Construction Core", + "item.refinedstorage.destruction_core": "Destruction Core", + "item.refinedstorage.wrench": "Wrench", + "item.refinedstorage.wrench.help": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage.upgrade": "Upgrade", + "item.refinedstorage.speed_upgrade": "Speed Upgrade", + "item.refinedstorage.speed_upgrade.help": "Increases the operation speed of a storage network device.", + "item.refinedstorage.stack_upgrade": "Stack Upgrade", + "item.refinedstorage.stack_upgrade.help": "Increases the amount of resources that the storage network device handles per operation.", + "item.refinedstorage.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage.silk_touch_upgrade.help": "Acts like the Silk Touch enchantment on a pickaxe.", + "item.refinedstorage.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage.fortune_upgrade.help": "Yields more resources when breaking a block. Acts like the Fortune enchantment on a pickaxe.", + "item.refinedstorage.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage.range_upgrade": "Range Upgrade", + "item.refinedstorage.range_upgrade.help": "Increases the range of the Wireless Transmitter.", + "item.refinedstorage.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage.creative_range_upgrade.help": "Provides infinite range for the Wireless Transmitter. Does not work cross-dimensionally.", + "item.refinedstorage.wireless_grid": "Wireless Grid", + "item.refinedstorage.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage.network_item.unbound": "Unbound.", + "item.refinedstorage.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage.configuration_card": "Configuration Card", + "item.refinedstorage.configuration_card.empty": "Empty.", + "item.refinedstorage.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage.network_card": "Network Card", + "item.refinedstorage.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage.network_card.unbound": "Unbound.", + "item.refinedstorage.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", + "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", + "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", + "item.refinedstorage.security_card": "Security Card", + "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage.security_card.unbound": "Unbound.", + "item.refinedstorage.security_card.unbound.help": "Right click to configure and bind to the current player.", + "item.refinedstorage.security_card.bound": "Bound to %s.", + "item.refinedstorage.security_card.bound.help": "Right click to configure. Use while crouching to clear configuration and binding.", + "item.refinedstorage.fallback_security_card": "Fallback Security Card", + "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", + "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", + "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", + "misc.refinedstorage.stored": "Stored: %s", + "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage.total": "%d total", + "misc.refinedstorage.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage.resource_type.item": "Item", + "misc.refinedstorage.resource_type.fluid": "Fluid", + "misc.refinedstorage.press_shift_for_help": "Press SHIFT for help", + "misc.refinedstorage.no_permission": "No permission", + "misc.refinedstorage.no_permission.open": "You are not allowed to open the %s.", + "misc.refinedstorage.no_permission.insert": "You are not allowed to insert.", + "misc.refinedstorage.no_permission.extract": "You are not allowed to extract.", + "misc.refinedstorage.no_permission.build.place": "You are not allowed to place a %s here.", + "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", + "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", + "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", + "key.refinedstorage.focus_search_bar": "Focus search bar", + "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage.open_wireless_grid": "Open Wireless Grid", + "key.refinedstorage.open_portable_grid": "Open Portable Grid", + "refinedstorage.subtitle.wrench": "Wrench used", + "permission.refinedstorage.insert": "Insert", + "permission.refinedstorage.insert.description": "Whether the player can insert resources in a network.", + "permission.refinedstorage.extract": "Extract", + "permission.refinedstorage.extract.description": "Whether the player can extract resources from a network.", + "permission.refinedstorage.autocrafting": "Autocrafting", + "permission.refinedstorage.autocrafting.description": "Whether the player can start, cancel or view an autocrafting task.", + "permission.refinedstorage.open": "Open", + "permission.refinedstorage.open.description": "Whether the player can open network device GUIs.", + "permission.refinedstorage.build": "Build", + "permission.refinedstorage.build.description": "Whether the player can add or remove network devices.", + "permission.refinedstorage.security": "Security", + "permission.refinedstorage.security.description": "Whether the player can manage the security options for a network.", + "tag.item.refinedstorage.cables": "Cables", + "tag.item.refinedstorage.constructors": "Constructors", + "tag.item.refinedstorage.controllers": "Controllers", + "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", + "tag.item.refinedstorage.creative_controllers": "Creative Controllers", + "tag.item.refinedstorage.destructors": "Destructors", + "tag.item.refinedstorage.detectors": "Detectors", + "tag.item.refinedstorage.exporters": "Exporters", + "tag.item.refinedstorage.external_storages": "External Storages", + "tag.item.refinedstorage.fluid_storage_disks": "Fluid Storage Disks", + "tag.item.refinedstorage.grids": "Grids", + "tag.item.refinedstorage.importers": "Importers", + "tag.item.refinedstorage.network_receivers": "Network Receivers", + "tag.item.refinedstorage.network_transmitters": "Network Transmitters", + "tag.item.refinedstorage.relays": "Relays", + "tag.item.refinedstorage.security_managers": "Security Managers", + "tag.item.refinedstorage.storage_disks": "Storage Disks", + "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", + "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", + "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", + "refinedstorage.configuration.title": "Refined Storage Configuration", + "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", + "refinedstorage.configuration.section.refinedstorage.common.toml.title": "Refined Storage Configuration", + "text.autoconfig.refinedstorage.option.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "Whether scrollbars should use smooth scrolling.", + "text.autoconfig.refinedstorage.option.screenSize": "Screen size", + "text.autoconfig.refinedstorage.option.screenSize.tooltip": "The screen size.", + "text.autoconfig.refinedstorage.option.maxRowsStretch": "Maximum amount of rows when screen size is stretched", + "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "The maximum amount of rows that can be displayed when the screen size is stretched.", + "text.autoconfig.refinedstorage.option.grid": "Grid", + "text.autoconfig.refinedstorage.option.grid.tooltip": "Configuration for the Grid.", + "text.autoconfig.refinedstorage.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage.option.grid.largeFont.tooltip": "Whether the Grid should use a large font for quantities.", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown.tooltip": "Whether the Grid should avoid sorting when shift is held down.", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip.tooltip": "Whether the Grid should show a detailed tooltip.", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery.tooltip": "Whether the search query should persist when closing and re-opening the Grid.", + "text.autoconfig.refinedstorage.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.grid.energyUsage.tooltip": "The energy used by the Grid.", + "text.autoconfig.refinedstorage.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage.option.grid.autoSelected.tooltip": "Whether the search box should be auto-selected when opening the Grid.", + "text.autoconfig.refinedstorage.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage.option.grid.synchronizer.tooltip": "The synchronization type of the Grid search box.", + "text.autoconfig.refinedstorage.option.grid.resourceType": "Resource type", + "text.autoconfig.refinedstorage.option.grid.resourceType.tooltip": "The resource type to be shown.", + "text.autoconfig.refinedstorage.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", + "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", + "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", + "text.autoconfig.refinedstorage.option.controller": "Controller", + "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", + "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "The energy capacity of the Controller.", + "text.autoconfig.refinedstorage.option.cable": "Cable", + "text.autoconfig.refinedstorage.option.cable.tooltip": "Configuration for the Cable.", + "text.autoconfig.refinedstorage.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.cable.energyUsage.tooltip": "The energy used by the Cable.", + "text.autoconfig.refinedstorage.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage.option.diskDrive.tooltip": "Configuration for the Disk Drive.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage.tooltip": "The energy used by the Disk Drive.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk.tooltip": "The energy used per disk.", + "text.autoconfig.refinedstorage.option.diskInterface": "Disk Interface", + "text.autoconfig.refinedstorage.option.diskInterface.tooltip": "Configuration for the Disk Interface.", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage.tooltip": "The energy used by the Disk Interface.", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk.tooltip": "The energy used per disk.", + "text.autoconfig.refinedstorage.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage.option.storageBlock.tooltip": "Configuration for the Storage Blocks.", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage.tooltip": "The energy used by the 1K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage.tooltip": "The energy used by the 4K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage.tooltip": "The energy used by the 16K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage.tooltip": "The energy used by the 64K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.tooltip": "Configuration for the Fluid Storage Blocks.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage.tooltip": "The energy used by the 64B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage.tooltip": "The energy used by the 256B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage.tooltip": "The energy used by the 1024B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage.tooltip": "The energy used by the 4096B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.importer": "Importer", + "text.autoconfig.refinedstorage.option.importer.tooltip": "Configuration for the Importer.", + "text.autoconfig.refinedstorage.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.importer.energyUsage.tooltip": "The energy used by the Importer.", + "text.autoconfig.refinedstorage.option.exporter": "Exporter", + "text.autoconfig.refinedstorage.option.exporter.tooltip": "Configuration for the Exporter.", + "text.autoconfig.refinedstorage.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.exporter.energyUsage.tooltip": "The energy used by the Exporter.", + "text.autoconfig.refinedstorage.option.detector": "Detector", + "text.autoconfig.refinedstorage.option.detector.tooltip": "Configuration for the Detector.", + "text.autoconfig.refinedstorage.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.detector.energyUsage.tooltip": "The energy used by the Detector.", + "text.autoconfig.refinedstorage.option.constructor": "Constructor", + "text.autoconfig.refinedstorage.option.constructor.tooltip": "Configuration for the Constructor.", + "text.autoconfig.refinedstorage.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.constructor.energyUsage.tooltip": "The energy used by the Constructor.", + "text.autoconfig.refinedstorage.option.destructor": "Destructor", + "text.autoconfig.refinedstorage.option.destructor.tooltip": "Configuration for the Destructor.", + "text.autoconfig.refinedstorage.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.destructor.energyUsage.tooltip": "The energy used by the Destructor.", + "text.autoconfig.refinedstorage.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage.option.upgrade.tooltip": "Configuration for the Upgrades.", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage.tooltip": "The additional energy used per Speed Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage.tooltip": "The additional energy used by the Stack Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 1 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 2 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 3 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage.tooltip": "The additional energy used by the Silk Touch Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage.tooltip": "The additional energy used by the Regulator Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage.tooltip": "The additional energy used per Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage.tooltip": "The additional energy used by the Creative Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange.tooltip": "The additional range provided by the Range Upgrade.", + "text.autoconfig.refinedstorage.option.iface": "Interface", + "text.autoconfig.refinedstorage.option.iface.tooltip": "Configuration for the Interface.", + "text.autoconfig.refinedstorage.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.iface.energyUsage.tooltip": "The energy used by the Interface.", + "text.autoconfig.refinedstorage.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage.option.externalStorage.tooltip": "Configuration for the External Storage.", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage.tooltip": "The energy used by the External Storage.", + "text.autoconfig.refinedstorage.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage.option.wirelessGrid.tooltip": "Configuration for the Wireless Grid.", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity.tooltip": "The energy capacity of the Wireless Grid.", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage.tooltip": "The energy used by the Wireless Grid to open.", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage.tooltip": "The energy used by the Wireless Grid to insert resources.", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage.tooltip": "The energy used by the Wireless Grid to extract resources.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.tooltip": "Configuration for the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage.tooltip": "The energy used by the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange.tooltip": "The base range of the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage.option.storageMonitor.tooltip": "Configuration for the Storage Monitor.", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage.tooltip": "The energy used by the Storage Monitor.", + "text.autoconfig.refinedstorage.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage.option.networkReceiver.tooltip": "Configuration for the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage.tooltip": "The energy used by the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage.option.networkTransmitter.tooltip": "Configuration for the Network Transmitter.", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage.tooltip": "The energy used by the Network Transmitter.", + "text.autoconfig.refinedstorage.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage.option.portableGrid.tooltip": "Configuration for the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity.tooltip": "The energy capacity of the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage.tooltip": "The energy used by the Portable Grid to open.", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage.tooltip": "The energy used by the Portable Grid to insert resources.", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage.tooltip": "The energy used by the Portable Grid to extract resources.", + "text.autoconfig.refinedstorage.option.securityCard": "Security Card", + "text.autoconfig.refinedstorage.option.securityCard.tooltip": "Configuration for the Security Card.", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage.tooltip": "The energy used by the Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard": "Fallback Security Card", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.tooltip": "Configuration for the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage.tooltip": "The energy used by the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.securityManager": "Security Manager", + "text.autoconfig.refinedstorage.option.securityManager.tooltip": "Configuration for the Security Manager.", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage.tooltip": "The energy used by the Security Manager.", + "text.autoconfig.refinedstorage.option.relay": "Relay", + "text.autoconfig.refinedstorage.option.relay.tooltip": "Configuration for the Relay.", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage": "Input network energy usage", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", + "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", + "advancements.refinedstorage.connecting": "Connecting", + "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage.drives": "Drives", + "advancements.refinedstorage.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage.interfacing_with_disks": "Interfacing with disks", + "advancements.refinedstorage.interfacing_with_disks.description": "Craft a Disk Interface to transfer resources between the storage network and storage disks", + "advancements.refinedstorage.storing_items": "Storing items", + "advancements.refinedstorage.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage.storing_fluids": "Storing fluids", + "advancements.refinedstorage.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage.importing": "Importing", + "advancements.refinedstorage.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage.exporting": "Exporting", + "advancements.refinedstorage.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage.upgrading": "Upgrading", + "advancements.refinedstorage.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage.storing_externally": "Storing externally", + "advancements.refinedstorage.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage.detecting": "Detecting", + "advancements.refinedstorage.detecting.description": "Use redstone to check resources stored in the storage network", + "advancements.refinedstorage.construction": "Construction", + "advancements.refinedstorage.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage.destruction": "Destruction", + "advancements.refinedstorage.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage.wireless": "Wireless", + "advancements.refinedstorage.wireless.description": "Access your resources wirelessly with a Wireless Grid", + "advancements.refinedstorage.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage.no_cables_required": "No cables required", + "advancements.refinedstorage.no_cables_required.description": "Add extra components to your storage network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage.portable_storage": "Portable storage", + "advancements.refinedstorage.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network", + "advancements.refinedstorage.security": "Security", + "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", + "advancements.refinedstorage.conditional_connecting": "Conditional connecting", + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" +} From cd2a6d6cfb3df91d18c49c7f5023a32b81c3e357 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:05 +0200 Subject: [PATCH 68/83] chore: update translation German from crowdin --- .../assets/refinedstorage/lang/de_de.json | 246 ++++++++++++------ 1 file changed, 161 insertions(+), 85 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/de_de.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/de_de.json index b86cf97e8..b995fc01a 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/de_de.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/de_de.json @@ -1,11 +1,12 @@ { "mod.refinedstorage": "Refined Storage", "block.refinedstorage.cable": "Kabel", - "block.refinedstorage.quartz_enriched_iron_block": "Quarz angereichertes Eisenblock", - "block.refinedstorage.quartz_enriched_copper_block": "Block of Quartz Enriched Copper", + "block.refinedstorage.quartz_enriched_iron_block": "Quarzangereicherter Eisenblock", + "block.refinedstorage.quartz_enriched_copper_block": "Quarzangereichertes Kupfer", "block.refinedstorage.disk_drive": "Laufwerk", "block.refinedstorage.machine_casing": "Maschinengehäuse", "block.refinedstorage.grid": "Konsole", + "block.refinedstorage.pattern_grid": "Vorlagenkonsole", "block.refinedstorage.crafting_grid": "Herstellungskonsole", "block.refinedstorage.controller": "Kontrollblock", "block.refinedstorage.creative_controller": "Kreativer Kontrollblock", @@ -19,8 +20,8 @@ "block.refinedstorage.1024b_fluid_storage_block": "1024B Flüssigspeicherblock", "block.refinedstorage.4096b_fluid_storage_block": "4096B Flüssigspeicherblock", "block.refinedstorage.creative_fluid_storage_block": "Kreativer Flüssigspeicherblock", - "block.refinedstorage.importer": "Importierer", - "block.refinedstorage.exporter": "Exportierer", + "block.refinedstorage.importer": "Importeur", + "block.refinedstorage.exporter": "Exporteur", "block.refinedstorage.interface": "Schnittstelle", "block.refinedstorage.external_storage": "Externer Speicher", "block.refinedstorage.detector": "Detektor", @@ -31,11 +32,12 @@ "block.refinedstorage.network_receiver": "Netzwerkempfänger", "block.refinedstorage.network_transmitter": "Netzwerksender", "block.refinedstorage.portable_grid": "Mobile Konsole", - "block.refinedstorage.creative_portable_grid": "Mobile Kreative Konsole", + "block.refinedstorage.creative_portable_grid": "Mobile kreative Konsole", "block.refinedstorage.security_manager": "Sicherheits-Manager", "block.refinedstorage.security_manager.help": "Während aktivem Betrieb ist das Netzwerk geschützt und es werden alle Zugriffe blockiert. Füge Sicherheits-Karten hinzu, um spezifische Zugriffe für Spieler zuzulassen.", "block.refinedstorage.relay": "Relais", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Falls dieses Gerät inaktiv ist, kann das Speichernetzwerk dieses Gerät nicht als Energiequelle nutzen.", "gui.refinedstorage.disk_drive.disks": "Speicherplatten", "gui.refinedstorage.storage.redstone_mode_help": "Falls dieses Gerät inaktiv ist, ist der enthaltene Speicher nicht mehr über das Speichernetzwerk zugänglich.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Ohne konfigurierte Filter werden keine Ressourcen in diesem Speicher akzeptiert.", "gui.refinedstorage.storage.filter_mode.allow.help": "Erlaube nur Ressourcen in diesen Speicher, die in den Filtern konfiguriert sind.", "gui.refinedstorage.storage.filter_mode.block.help": "Erlaube nur Ressourcen in diesen Speicher, die in den Filtern konfiguriert sind.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "Alles", + "gui.refinedstorage.grid.view_type.autocraftable": "Automatisch Herstellbar", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Nicht automatisch Herstellbar", "gui.refinedstorage.grid.sorting.direction": "Sortierrichtung", "gui.refinedstorage.grid.sorting.direction.ascending": "Aufsteigend", "gui.refinedstorage.grid.sorting.direction.descending": "Absteigend", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Zuletzt geändert", "gui.refinedstorage.grid.auto_selected": "Automatisch ausgewählt", "gui.refinedstorage.grid.auto_selected.help": "Gibt an, ob das Suchfeld beim Öffnen der Konsole automatisch ausgewählt werden soll.", - "gui.refinedstorage.grid.synchronizer": "Synchronisierungsmodus", - "gui.refinedstorage.grid.synchronizer.off": "Aus", - "gui.refinedstorage.grid.synchronizer.off.help": "Suchfeldtext nicht synchronisieren.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronisationsmodus", + "gui.refinedstorage.grid.synchronization_mode.off": "Aus", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Nicht mit der Suchleiste synchronisieren.", "gui.refinedstorage.grid.resource_type": "Ressourcentyp", "gui.refinedstorage.grid.resource_type.all": "Alle", - "gui.refinedstorage.grid.resource_type.help": "Spezifische Ressourcentypen filtern.", + "gui.refinedstorage.grid.craft": "Herstellen", + "gui.refinedstorage.grid.autocraftable": "Diese Ressource ist automatisch Herstellbar", + "gui.refinedstorage.grid.pattern_in_inventory": "Diese Ressource hat eine Vorlage im Inventar.", + "gui.refinedstorage.grid.click_to_autocraft": "Klicken zum automatische Herstellen ", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "STRG + klicken zum automatischen Herstellen ", "gui.refinedstorage.crafting_grid.move.network": "Items ins Netzwerk verschieben", "gui.refinedstorage.crafting_grid.move.inventory": "Items ins Inventar verschieben", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "SHIFT + STRG um nur die im Rezept verwendeten Gegenstände zu zeigen.", + "gui.refinedstorage.pattern_grid.create_pattern": "Vorlage herstellen", + "gui.refinedstorage.pattern_grid.clear": "Vorlage leeren (?)", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Eingabe", + "gui.refinedstorage.pattern_grid.processing.outputs": "Ausgabe", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Zum Konfigurieren der Menge und der Alternativen klicken", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Erlaube Alternativen", + "gui.refinedstorage.pattern_grid.alternatives": "Alternativen", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Bildschirmgröße", "gui.refinedstorage.screen_size.stretch": "Strecken", "gui.refinedstorage.screen_size.small": "Klein", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Erlaube nur Ressourcen in das Speichernetzwerk, die in den Filtern konfiguriert sind.", "gui.refinedstorage.importer.filter_mode.block.help": "Erlaube keine Ressourcen in das Speichernetzwerk, die in den Filtern konfiguriert sind.", "gui.refinedstorage.wireless_transmitter.distance": "%d Block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inaktiv", "gui.refinedstorage.storage_monitor.filter_help": "Die anzuzeigende Ressource.", "gui.refinedstorage.redstone_mode": "Redstone-Modus", "gui.refinedstorage.redstone_mode.ignore": "Ignorieren", @@ -98,26 +123,27 @@ "gui.refinedstorage.scheduling_mode.round_robin": "Rundlaufverfahren", "gui.refinedstorage.scheduling_mode.round_robin.help": "Verwenden Sie jeden Filter nacheinander.", "gui.refinedstorage.scheduling_mode.random": "Zufällig", - "gui.refinedstorage.scheduling_mode.random.help": "Benutze einen zufälligen Filter.", + "gui.refinedstorage.scheduling_mode.random.help": "Verwende einen zufälligen Filter.", "gui.refinedstorage.priority": "Priorität", "gui.refinedstorage.priority.storage_help": "Die Reihenfolge, in der das Speichernetzwerk Ressourcen einfügen oder extrahieren soll, das höchste zuerst.", - "gui.refinedstorage.amount": "Anzahl", - "gui.refinedstorage.amount.reset": "Zurücksetzen", - "gui.refinedstorage.amount.set": "Setzen", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Menge konfigurieren", + "gui.refinedstorage.configure_amount.reset": "Zurücksetzen", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Filtermodus", "gui.refinedstorage.filter_mode.allow": "Erlaubnisliste", "gui.refinedstorage.filter_mode.block": "Sperrliste", "gui.refinedstorage.fuzzy_mode": "Unscharfer Modus", "gui.refinedstorage.fuzzy_mode.on": "An", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Passen Sie die Filter exakt auf die Erlaubnis- oder Sperrliste an.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Passen Sie den Filter exakt an.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Passen Sie die Filter beim Extrahieren aus dem Speichernetzwerk genau an.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Passen Sie die Filter beim Extrahieren aus der Quelle genau an.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Aus", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Passen Sie die Filter für die Erlaubnisliste oder die Sperrliste an, ohne NBT-Tags zu vergleichen.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Passen Sie den Filter an, ohne NBT-Tags zu vergleichen.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Passen Sie die Filter beim Extrahieren aus dem Speichernetzwerk an, ohne NBT-Tags zu vergleichen.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Passen Sie die Filter an, wenn Sie aus der Quelle extrahieren, ohne NBT-Tags zu vergleichen.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Zugriffsmodus", "gui.refinedstorage.access_mode.insert_extract": "Importieren und exportieren", "gui.refinedstorage.access_mode.insert_extract.help": "Das Speichernetzwerk kann von diesem Speicher importieren oder exportieren.", @@ -128,22 +154,24 @@ "gui.refinedstorage.void_excess": "Überschüssige Ressourcen löschen", "gui.refinedstorage.void_excess.help": "Wenn der überschüssige Modus eingeschaltet ist und die Speicherung voll ist, akzeptiert er weiterhin Ressourcen, löscht sie jedoch.", "gui.refinedstorage.void_excess.allowlist_warning": "Der überschüssige Modus funktioniert nur, wenn der Speicher im Erlaubnisliste Modus ist.", - "gui.refinedstorage.upgrade_slot": "Leerer Upgrade-Slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Leerer Filter", "gui.refinedstorage.filter_slot.left_click_for": "Linksklick für", "gui.refinedstorage.filter_slot.right_click_for": "Rechtsklick für", "gui.refinedstorage.filter_slot.click_to_clear": "Klicke zum Löschen", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Klicken um die Menge einzustellen", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift + klicken zum leeren", "gui.refinedstorage.regulator_upgrade.filter_help": "Die Ressource, die im Ziel reguliert werden sollte.", "gui.refinedstorage.network_transmitter.status.inactive": "Inaktiv", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Fehlende Netzwerkkarte", - "gui.refinedstorage.network_transmitter.status.transmitting": "%d Block(s)", + "gui.refinedstorage.network_transmitter.status.transmitting": "%d Block/Blöcke", "gui.refinedstorage.network_transmitter.status.receiver_unreachable": "Unerreichbar", "gui.refinedstorage.security_card.permission.reset": "Zurücksetzen", "gui.refinedstorage.security_card.permission.modified": "Modifiziert", "gui.refinedstorage.security_manager.redstone_mode_help": "Wenn dieses Gerät inaktiv ist, wird das Netzwerk nicht geschützt.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot für eine Standard-Sicherheitskarte.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Fügen Sie diesem Slot eine Standard-Sicherheitskarte hinzu, um Berechtigungen für jeden Spieler ohne Sicherheitskarte festzulegen. Standardmäßig werden alle Aktionen verweigert.", - "gui.refinedstorage.relay.filter_help": "Ressourcen, die vom Eingabenetzwerk dem Ausgabenetz ausgesetzt werden sollen, wenn das Relais nicht im Durchlaufmodus ist.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Durchlaufen", "gui.refinedstorage.relay.pass_through.help": "Ob dieses Gerät das gesamte Eingangsnetzsignal so durchlaufen soll, wie es ist. Schalten Sie dies aus, um Komponenten selektiv dem Ausgangsnetz anzuzeigen.", "gui.refinedstorage.relay.pass_energy": "Energie weitergeben", @@ -152,36 +180,61 @@ "gui.refinedstorage.relay.pass_storage.help": "Gibt an, ob dieses Gerät den Speicher aus dem Eingangsnetzwerk an das Ausgangsnetz übergeben soll.", "gui.refinedstorage.relay.pass_security": "Sicherheit weitergeben", "gui.refinedstorage.relay.pass_security.help": "Gibt an, ob dieses Gerät die Sicherheitseinstellungen vom Eingangsnetzwerk an das Ausgangsnetz übergeben soll.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Stellen Sie nur Ressourcen aus dem Eingabenetzwerk dem Ausgabenetzwerk aus, die in den Filtern konfiguriert sind.", "gui.refinedstorage.relay.filter_mode.block.help": "Stellen Sie keine Ressourcen aus dem Eingabenetzwerk dem Ausgabenetzwerk aus, die in den Filtern konfiguriert sind.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.block.help": "Disallow resources into the storage disks or into the network that are configured in the filters.", - "gui.refinedstorage.disk_interface.in": "In", - "gui.refinedstorage.disk_interface.out": "Out", + "gui.refinedstorage.disk_interface.in": "Eingabe", + "gui.refinedstorage.disk_interface.out": "Ausgabe", "gui.refinedstorage.disk_interface.filter_help": "The resources that may or may not be allowed transferred from or into the provided storage disks, depending if the device is in allowlist or blocklist mode.", "gui.refinedstorage.disk_interface.transfer_mode": "Transfer mode", "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network": "Insert into network", "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Stellt das Speichernetzwerk mit Energie zur Verfügung. Mehrere sind in einem einzigen Speichernetzwerk erlaubt.", "item.refinedstorage.creative_controller.help": "Stellt dem Speichernetzwerk eine unendliche Energiequelle zur Verfügung.", "item.refinedstorage.disk_drive.help": "Akzeptiert Speicherplatten, um dem Speichernetz Speicherplatz zur Verfügung zu stellen.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Ermöglicht die Interaktion mit dem Speichernetzwerk.", "item.refinedstorage.crafting_grid.help": "Ermöglicht die Interaktion mit dem Speichernetzwerk, mit Herstellungsfähigkeiten.", + "item.refinedstorage.pattern_grid.help": "Erlaubt die Herstellung von Vorlagen zur Nutzung in der automatischen Fertigung", "item.refinedstorage.importer.help": "Importiert Ressourcen von einer externen Quelle in das Speichernetzwerk.", "item.refinedstorage.exporter.help": "Exportiert Ressourcen aus dem Speichernetzwerk an ein externes Ziel.", - "item.refinedstorage.interface.help": "Funktioniert als die Kombination von Importierer und Exportierer.", + "item.refinedstorage.interface.help": "Funktioniert als die Kombination von Importeur und Exporteur.", "item.refinedstorage.external_storage.help": "Stellt dem Speichernetzwerk Speicher von einer externen Quelle zur Verfügung.", "item.refinedstorage.detector.help": "Sendet ein Redstone Signal, wenn das Speichernetzwerk eine Ressource enthält, die gleich über oder unter einer bestimmten Menge ist.", "item.refinedstorage.constructor.help": "Platziert Blöcke aus dem Speichernetzwerk in der Welt.", - "item.refinedstorage.destructor.help": "Zerstört Blöcke aus der Welt und setzt sie in das Speichernetzwerk.", + "item.refinedstorage.destructor.help": "Zerstört Blöcke aus der Welt und speichert diese im Speichernetzwerk.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", - "item.refinedstorage.quartz_enriched_iron": "Quarz angereichertes Eisen", - "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", - "item.refinedstorage.processor_binding": "Prozessor Rohmaterial", - "item.refinedstorage.silicon": "Silikon", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", + "item.refinedstorage.quartz_enriched_iron": "Quarzangereichertes Eisen", + "item.refinedstorage.quartz_enriched_copper": "Quarzangereicherter Kupferblock", + "item.refinedstorage.processor_binding": "Prozessor Rohmaterial (?)", + "item.refinedstorage.silicon": "Silizium", "item.refinedstorage.raw_basic_processor": "Basisrohprozessor", "item.refinedstorage.raw_improved_processor": "Verbesserter Rohprozessor", "item.refinedstorage.raw_advanced_processor": "Fortschrittlicher Rohprozessor", @@ -192,28 +245,28 @@ "item.refinedstorage.4k_storage_part": "4k Speicherkern", "item.refinedstorage.16k_storage_part": "16k Speicherkern", "item.refinedstorage.64k_storage_part": "64k Speicherkern", - "item.refinedstorage.1k_storage_disk": "1k Speicherplatte", - "item.refinedstorage.4k_storage_disk": "4k Speicherplatte", - "item.refinedstorage.16k_storage_disk": "16k Speicherplatte", - "item.refinedstorage.64k_storage_disk": "64k Speicherplatte", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", - "item.refinedstorage.creative_storage_disk": "Kreative Speicherplatte", - "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", - "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", + "item.refinedstorage.1k_storage_disk": "1k Speicherzelle", + "item.refinedstorage.4k_storage_disk": "4k Speicherzelle", + "item.refinedstorage.16k_storage_disk": "16k Speicherzelle", + "item.refinedstorage.64k_storage_disk": "64k Speicherzelle", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.creative_storage_disk": "Kreative Speicherzelle", + "item.refinedstorage.creative_storage_disk.help": "Speichert eine unendliche Menge an Gegenständen", + "item.refinedstorage.creative_storage_block.help": "Speichert eine unendliche Menge an Gegenständen", "item.refinedstorage.64b_fluid_storage_part": "64B Flüssigspeicherkern", "item.refinedstorage.256b_fluid_storage_part": "256B Flüssigspeicherkern", "item.refinedstorage.1024b_fluid_storage_part": "1024B Flüssigspeicherkern", "item.refinedstorage.4096b_fluid_storage_part": "4096B Flüssigspeicherkern", - "item.refinedstorage.64b_fluid_storage_disk": "64B Flüssigspeicherplatte", - "item.refinedstorage.256b_fluid_storage_disk": "256B Flüssigspeicherplatte", - "item.refinedstorage.1024b_fluid_storage_disk": "1024B Flüssigspeicherplatte", - "item.refinedstorage.4096b_fluid_storage_disk": "4096B Flüssigspeicherplatte", + "item.refinedstorage.64b_fluid_storage_disk": "64B Flüssigspeicherzelle", + "item.refinedstorage.256b_fluid_storage_disk": "256B Flüssigspeicherzelle", + "item.refinedstorage.1024b_fluid_storage_disk": "1024B Flüssigspeicherzelle", + "item.refinedstorage.4096b_fluid_storage_disk": "4096B Flüssigspeicherzelle", "item.refinedstorage.fluid_storage_disk.help": "Stores %s buckets.", "item.refinedstorage.fluid_storage_block.help": "Stores %s buckets.", - "item.refinedstorage.creative_fluid_storage_disk": "Kreative Flüssigspeicherplatte", - "item.refinedstorage.creative_fluid_storage_disk.help": "Stores an infinite amount of buckets.", - "item.refinedstorage.creative_fluid_storage_block.help": "Stores an infinite amount of buckets.", + "item.refinedstorage.creative_fluid_storage_disk": "Kreative Flüssigspeicherzelle", + "item.refinedstorage.creative_fluid_storage_disk.help": "Speichert eine unendliche Menge an Eimern", + "item.refinedstorage.creative_fluid_storage_block.help": "Speichert eine unendliche Menge an Eimern", "item.refinedstorage.storage_housing": "Speichergehäuse", "item.refinedstorage.construction_core": "Konstruktionskern", "item.refinedstorage.destruction_core": "Zerstörungskern", @@ -231,14 +284,14 @@ "item.refinedstorage.fortune_upgrade.3": "Glück III Upgrade", "item.refinedstorage.fortune_upgrade.help": "Yields more resources when breaking a block. Acts like the Fortune enchantment on a pickaxe.", "item.refinedstorage.regulator_upgrade": "Regulator Upgrade", - "item.refinedstorage.regulator_upgrade.help": "In einem Exportierer wird nur dann exportiert, wenn der Betrag im Ziel geringer als im Upgrade konfiguriert ist. In einem Importierer wird nur importiert, wenn der Betrag im Ziel mehr als im Upgrade konfiguriert ist. Benutzen Sie das Item zur Konfiguration.", + "item.refinedstorage.regulator_upgrade.help": "In einem Exporteur wird nur dann exportiert, wenn der Betrag im Ziel geringer als im Upgrade konfiguriert ist. In einem Importeur wird nur importiert, wenn der Betrag im Ziel mehr als im Upgrade konfiguriert ist. Benutze das Item zur Konfiguration.", "item.refinedstorage.range_upgrade": "Reichweitenupgrade", - "item.refinedstorage.range_upgrade.help": "Increases the range of the Wireless Transmitter.", - "item.refinedstorage.creative_range_upgrade": "Kreativer Reichweitenupgrade", - "item.refinedstorage.creative_range_upgrade.help": "Provides infinite range for the Wireless Transmitter. Does not work cross-dimensionally.", + "item.refinedstorage.range_upgrade.help": "Erhöht die Reichweite den drahtlosen Sender.", + "item.refinedstorage.creative_range_upgrade": "Kreatives Reichweitenupgrade", + "item.refinedstorage.creative_range_upgrade.help": "Bietet unendliche Reichweite für den drahtlosen Sender. Wirkt nicht Dimensionsübergreifend", "item.refinedstorage.wireless_grid": "Drahtlose Konsole", "item.refinedstorage.creative_wireless_grid": "Kreative drahtlose Konsole", - "item.refinedstorage.wireless_transmitter.help": "Stellt drahtlosen Netzwerkzugang für Items wie die drahtlose Konsole zur Verfügung. Mehrere sind in einem Bereich für eine breitere Abdeckung erlaubt.", + "item.refinedstorage.wireless_transmitter.help": "Stellt drahtlosen Netzwerkzugang für Gegenstände wie die drahtlose Konsole zur Verfügung. Mehrere sind in einem Bereich für eine breitere Abdeckung erlaubt.", "item.refinedstorage.network_item.unbound": "Ungebunden.", "item.refinedstorage.network_item.unbound.help": "Auf irgendeinem Speichernetzwerk verwenden, um es zu verbinden.", "item.refinedstorage.network_item.bound_to": "Verbunden zu %d, %d, %d.", @@ -258,9 +311,9 @@ "item.refinedstorage.network_card.unbound": "Ungebunden.", "item.refinedstorage.network_card.bound_help": "Einfügen in einen Netzwerksender. Benutzen beim Schleichen um die Verbindung zu löschen.", "item.refinedstorage.network_card.bound": "Verbunden zu %d, %d, %d in %s.", - "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", - "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.network_transmitter.help": "Sendet ein Netzwerksignal drahtlos. Benötigt eine mit einem Netzwerkempfänger verknüpfte Netzwerkkarte.", + "item.refinedstorage.network_receiver.help": "Empfängt ein Netzwerksignal drahtlos. Verknüpfe eine Netzwerkkarte mit diesem Block", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Sicherheitskarte", "item.refinedstorage.security_card.cleared_configuration": "Konfiguration gelöscht.", "item.refinedstorage.security_card.unbound": "Nicht zugewiesen.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Funktioniert als Standard, wenn keine passende Sicherheitskarte für einen Spieler gefunden wurde. Rechtsklick zum Konfigurieren. Benutze während Schleichen, um die Konfiguration zu löschen.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Vorlage", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Gespeichert: %s", "misc.refinedstorage.stored_with_capacity": "Gespeichert: %s / %s (%d%%)", "misc.refinedstorage.total": "%d Gesamt", @@ -298,11 +354,15 @@ "misc.refinedstorage.no_permission.build.break": "Du hast keine Berechtigung die %s zu brechen.", "misc.refinedstorage.no_permission.build.rotate": "Sie haben keine Berechtigung die %s zu drehen.", "misc.refinedstorage.no_permission.build.dismantle": "Sie haben keine Berechtigung die %s abzubauen.", + "misc.refinedstorage.pattern.crafting": "Herstellungsvorlage", + "misc.refinedstorage.pattern.processing": "Verarbeitungsvorlage", + "misc.refinedstorage.pattern.stonecutter": "Steinsägenvorlage", + "misc.refinedstorage.pattern.smithing_table": "Schmiedetischvorlage", "key.refinedstorage.focus_search_bar": "Suchleiste Selektieren", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Werkbank in der Konsole zum Netzwerk leeren", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Werkbank in der Konsole zum Inventar leeren", "key.refinedstorage.open_wireless_grid": "Drahtlose Konsole öffnen", - "key.refinedstorage.open_portable_grid": "Open Portable Grid", + "key.refinedstorage.open_portable_grid": "Öffne tragbare Konsole", "refinedstorage.subtitle.wrench": "Schraubenschlüssel benutzt", "permission.refinedstorage.insert": "Einfügen", "permission.refinedstorage.insert.description": "Gibt an, ob der Spieler Ressourcen in ein Netzwerk einfügen kann.", @@ -316,33 +376,35 @@ "permission.refinedstorage.build.description": "Gibt an, ob der Player Netzwerkgeräte hinzufügen oder entfernen kann.", "permission.refinedstorage.security": "Sicherheit", "permission.refinedstorage.security.description": "Ob der Spieler die Sicherheitsoptionen für ein Netzwerk verwalten kann.", - "tag.item.refinedstorage.cables": "Cables", + "tag.item.refinedstorage.cables": "Kabel", "tag.item.refinedstorage.constructors": "Constructors", - "tag.item.refinedstorage.controllers": "Controllers", - "tag.item.refinedstorage.crafting_grids": "Crafting Grids", - "tag.item.refinedstorage.creative_controllers": "Creative Controllers", + "tag.item.refinedstorage.controllers": "Kontrollblöcke", + "tag.item.refinedstorage.crafting_grids": "Herstellungskonsolen", + "tag.item.refinedstorage.pattern_grids": "Vorlagenkonsolen", + "tag.item.refinedstorage.creative_controllers": "Kreative Kontrollblöcke", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", - "tag.item.refinedstorage.exporters": "Exporters", + "tag.item.refinedstorage.exporters": "Exporteure", "tag.item.refinedstorage.external_storages": "External Storages", "tag.item.refinedstorage.fluid_storage_disks": "Fluid Storage Disks", - "tag.item.refinedstorage.grids": "Grids", - "tag.item.refinedstorage.importers": "Importers", - "tag.item.refinedstorage.network_receivers": "Network Receivers", - "tag.item.refinedstorage.network_transmitters": "Network Transmitters", - "tag.item.refinedstorage.relays": "Relays", + "tag.item.refinedstorage.grids": "Konsolen", + "tag.item.refinedstorage.importers": "Importeure", + "tag.item.refinedstorage.network_receivers": "Netzwerkempfänger", + "tag.item.refinedstorage.network_transmitters": "Netzwerksender", + "tag.item.refinedstorage.relays": "Relais", "tag.item.refinedstorage.security_managers": "Security Managers", "tag.item.refinedstorage.storage_disks": "Storage Disks", - "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", + "tag.item.refinedstorage.wireless_transmitters": "Drahtlose Sender", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", - "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", - "refinedstorage.configuration.title": "Refined Storage Configuration", - "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", - "refinedstorage.configuration.section.refinedstorage.common.toml.title": "Refined Storage Configuration", + "tag.item.refinedstorage.crafters": "Fertiger", + "text.autoconfig.refinedstorage.title": "Refined Storage Konfiguration", + "refinedstorage.configuration.title": "Refined Storage Konfiguration", + "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Konfiguration", + "refinedstorage.configuration.section.refinedstorage.common.toml.title": "Refined Storage Konfiguration", "text.autoconfig.refinedstorage.option.smoothScrolling": "Flüssiges Scrollen", "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "Whether scrollbars should use smooth scrolling.", "text.autoconfig.refinedstorage.option.screenSize": "Bildschirmgröße", - "text.autoconfig.refinedstorage.option.screenSize.tooltip": "The screen size.", + "text.autoconfig.refinedstorage.option.screenSize.tooltip": "Bildschirmgröße.", "text.autoconfig.refinedstorage.option.maxRowsStretch": "Maximale Anzahl von Zeilen, wenn Bildschirmgröße gestreckt ist", "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "The maximum amount of rows that can be displayed when the screen size is stretched.", "text.autoconfig.refinedstorage.option.grid": "Konsole", @@ -367,16 +429,22 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sortierart", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Herstellungskonsole", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energieverbrauch", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Werkbank Schließverhalten", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Vorlagenkonsole", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Konfiguration für die Vorlagenkonsole", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energienutzung", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "Die Energienutzung der Vorlagenkonsole", "text.autoconfig.refinedstorage.option.controller": "Kontrollblock", - "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", + "text.autoconfig.refinedstorage.option.controller.tooltip": "Konfiguration für den Kontrollblock", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energiekapazität", - "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "The energy capacity of the Controller.", + "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "Die Energiekapazität des Kontrollblocks", "text.autoconfig.refinedstorage.option.cable": "Kabel", "text.autoconfig.refinedstorage.option.cable.tooltip": "Configuration for the Cable.", "text.autoconfig.refinedstorage.option.cable.energyUsage": "Energieverbrauch", @@ -417,11 +485,11 @@ "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage.tooltip": "The energy used by the 4096B Fluid Storage Block.", "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage": "Kreativer Energieverbrauch", "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Fluid Storage Block.", - "text.autoconfig.refinedstorage.option.importer": "Importierer", + "text.autoconfig.refinedstorage.option.importer": "Importeur", "text.autoconfig.refinedstorage.option.importer.tooltip": "Configuration for the Importer.", "text.autoconfig.refinedstorage.option.importer.energyUsage": "Energieverbrauch", "text.autoconfig.refinedstorage.option.importer.energyUsage.tooltip": "The energy used by the Importer.", - "text.autoconfig.refinedstorage.option.exporter": "Exportierer", + "text.autoconfig.refinedstorage.option.exporter": "Exporteur", "text.autoconfig.refinedstorage.option.exporter.tooltip": "Configuration for the Exporter.", "text.autoconfig.refinedstorage.option.exporter.energyUsage": "Energieverbrauch", "text.autoconfig.refinedstorage.option.exporter.energyUsage.tooltip": "The energy used by the Exporter.", @@ -523,15 +591,21 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Ausgangsnetzwerk Energieverbrauch (wenn nicht im Durchlauf-Modus)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Nutzen Sie einen oder mehrere Kontrollblöcke in einem Speichernetzwerk, um das Netzwerk mit Energie zu versorgen", "advancements.refinedstorage.connecting": "Verbinden", - "advancements.refinedstorage.connecting.description": "Benutze Kabel um Geräte miteinander zu verbinden, oder platziere Geräte nebeneinander", - "advancements.refinedstorage.drives": "Festplatten", - "advancements.refinedstorage.drives.description": "Erstellen Sie ein Laufwerk, um Ihre Speicherplatten einsetzen zu können", + "advancements.refinedstorage.connecting.description": "Benutze Kabel, um Geräte miteinander zu verbinden, oder platziere Geräte nebeneinander", + "advancements.refinedstorage.drives": "Laufwerke", + "advancements.refinedstorage.drives.description": "Erstellen Sie ein Laufwerk, um Ihre Speicherzellen einsetzen zu können", "advancements.refinedstorage.interfacing_with_disks": "Interfacing with disks", "advancements.refinedstorage.interfacing_with_disks.description": "Craft a Disk Interface to transfer resources between the storage network and storage disks", "advancements.refinedstorage.storing_items": "Items speichern", - "advancements.refinedstorage.storing_items.description": "Erstelle eine Speicherplatte und stecke sie in dein Laufwerk", + "advancements.refinedstorage.storing_items.description": "Erstelle eine Speicherzelle und stecke sie in dein Laufwerk", "advancements.refinedstorage.viewing_your_storage": "Ihren Speicher anzeigen", "advancements.refinedstorage.viewing_your_storage.description": "Stelle eine Konsole her, um mit deinem Speicher zu interagieren", "advancements.refinedstorage.upgrading_your_grid": "Konsole verbessern", @@ -539,9 +613,9 @@ "advancements.refinedstorage.storing_fluids": "Flüssigkeiten speichern", "advancements.refinedstorage.storing_fluids.description": "Erstelle eine Flüssigspeicherplatte und stecke sie in dein Laufwerk", "advancements.refinedstorage.importing": "Importieren", - "advancements.refinedstorage.importing.description": "Holen Sie sich Ressourcen in das Speichernetzwerk mit einem Importierer", + "advancements.refinedstorage.importing.description": "Holen Sie sich Ressourcen in das Speichernetzwerk mit einem Importeur", "advancements.refinedstorage.exporting": "Exportieren", - "advancements.refinedstorage.exporting.description": "Holen Sie Ressourcen aus dem Speichernetzwerk mit einem Exportierer", + "advancements.refinedstorage.exporting.description": "Holen Sie Ressourcen aus dem Speichernetzwerk mit einem Exporteur", "advancements.refinedstorage.upgrading": "Verbessern", "advancements.refinedstorage.upgrading.description": "Bau ein Upgrade um verschiedene Geräte zu verbessern", "advancements.refinedstorage.interface_to_the_world": "Schnittstelle zur Welt", @@ -561,9 +635,11 @@ "advancements.refinedstorage.no_cables_required": "Keine Kabel erforderlich", "advancements.refinedstorage.no_cables_required.description": "Fügen Sie Ihrem Speichernetzwerk zusätzliche Komponenten hinzu, ohne Kabel zu verwenden, indem Sie einen Netzwerkübermittler, Netzwerkempfänger und Netzwerkkarte verwenden", "advancements.refinedstorage.portable_storage": "Tragbarer Speicher", - "advancements.refinedstorage.portable_storage.description": "Erstelle eine mobile Konsole um auf den Inhalt von Speicherplatten zuzugreifen, ohne ein Speichernetzwerk zu benötigen", + "advancements.refinedstorage.portable_storage.description": "Erstelle eine mobile Konsole, um auf den Inhalt von Speicherplatten zuzugreifen, ohne ein Speichernetzwerk zu benötigen", "advancements.refinedstorage.security": "Sicherheit", "advancements.refinedstorage.security.description": "Sichern Sie Ihr Speichernetzwerk mit einem Security-Manager und einer Sicherheitskarte", "advancements.refinedstorage.conditional_connecting": "Bedingte Verbindung", - "advancements.refinedstorage.conditional_connecting.description": "Schalten Sie ganze Abschnitte eines Speichernetzwerks ein oder aus und erstellen Sie neue Zweige Ihres Netzwerks mit einem Relais" + "advancements.refinedstorage.conditional_connecting.description": "Schalten Sie ganze Abschnitte eines Speichernetzwerks ein oder aus und erstellen Sie neue Zweige Ihres Netzwerks mit einem Relais", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From d97402700f830208f4451210b29a2e1cc5a8a58e Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:06 +0200 Subject: [PATCH 69/83] chore: update translation Hungarian from crowdin --- .../assets/refinedstorage/lang/hu_hu.json | 200 ++++++++++++------ 1 file changed, 138 insertions(+), 62 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/hu_hu.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/hu_hu.json index adf9fc563..b0b4aacc9 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/hu_hu.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/hu_hu.json @@ -1,48 +1,54 @@ { - "mod.refinedstorage": "Refined Storage", - "block.refinedstorage.cable": "Cable", - "block.refinedstorage.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", - "block.refinedstorage.quartz_enriched_copper_block": "Block of Quartz Enriched Copper", - "block.refinedstorage.disk_drive": "Disk Drive", - "block.refinedstorage.machine_casing": "Machine Casing", - "block.refinedstorage.grid": "Grid", - "block.refinedstorage.crafting_grid": "Crafting Grid", - "block.refinedstorage.controller": "Controller", - "block.refinedstorage.creative_controller": "Creative Controller", - "block.refinedstorage.1k_storage_block": "1K Storage Block", - "block.refinedstorage.4k_storage_block": "4K Storage Block", - "block.refinedstorage.16k_storage_block": "16K Storage Block", - "block.refinedstorage.64k_storage_block": "64K Storage Block", - "block.refinedstorage.creative_storage_block": "Creative Storage Block", - "block.refinedstorage.64b_fluid_storage_block": "64B Fluid Storage Block", - "block.refinedstorage.256b_fluid_storage_block": "256B Fluid Storage Block", - "block.refinedstorage.1024b_fluid_storage_block": "1024B Fluid Storage Block", - "block.refinedstorage.4096b_fluid_storage_block": "4096B Fluid Storage Block", - "block.refinedstorage.creative_fluid_storage_block": "Creative Fluid Storage Block", - "block.refinedstorage.importer": "Importer", - "block.refinedstorage.exporter": "Exporter", - "block.refinedstorage.interface": "Interface", - "block.refinedstorage.external_storage": "External Storage", - "block.refinedstorage.detector": "Detector", - "block.refinedstorage.constructor": "Constructor", - "block.refinedstorage.destructor": "Destructor", - "block.refinedstorage.wireless_transmitter": "Wireless Transmitter", - "block.refinedstorage.storage_monitor": "Storage Monitor", - "block.refinedstorage.network_receiver": "Network Receiver", - "block.refinedstorage.network_transmitter": "Network Transmitter", - "block.refinedstorage.portable_grid": "Portable Grid", - "block.refinedstorage.creative_portable_grid": "Creative Portable Grid", - "block.refinedstorage.security_manager": "Security Manager", - "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", - "block.refinedstorage.relay": "Relay", - "block.refinedstorage.disk_interface": "Disk Interface", - "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", - "gui.refinedstorage.disk_drive.disks": "Disks", - "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", - "gui.refinedstorage.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "mod.refinedstorage": "Kifinomult Tárhely", + "block.refinedstorage.cable": "Kábel", + "block.refinedstorage.quartz_enriched_iron_block": "Kvarcdúsított Vasblokk", + "block.refinedstorage.quartz_enriched_copper_block": "Kvarcdúsított Rézblokk", + "block.refinedstorage.disk_drive": "Lemezmeghajtó", + "block.refinedstorage.machine_casing": "Gépváz", + "block.refinedstorage.grid": "Háló", + "block.refinedstorage.pattern_grid": "Mintaháló", + "block.refinedstorage.crafting_grid": "Barkácsháló", + "block.refinedstorage.controller": "Vezérlő", + "block.refinedstorage.creative_controller": "Kreatív Vezérlő", + "block.refinedstorage.1k_storage_block": "1K-s Tárolóblokk", + "block.refinedstorage.4k_storage_block": "4K-s Tárolóblokk", + "block.refinedstorage.16k_storage_block": "16K-s Tárolóblokk", + "block.refinedstorage.64k_storage_block": "64K-s Tárolóblokk", + "block.refinedstorage.creative_storage_block": "Kreatív Tárolóblokk", + "block.refinedstorage.64b_fluid_storage_block": "64B-es Folyadéktárolóblokk", + "block.refinedstorage.256b_fluid_storage_block": "256B-es Folyadéktárolóblokk", + "block.refinedstorage.1024b_fluid_storage_block": "1024B-es Folyadéktárolóblokk", + "block.refinedstorage.4096b_fluid_storage_block": "4096-es Folyadéktárolóblokk", + "block.refinedstorage.creative_fluid_storage_block": "Kreatív Folyadéktárolóblokk", + "block.refinedstorage.importer": "Importáló", + "block.refinedstorage.exporter": "Expotáló", + "block.refinedstorage.interface": "Interfész", + "block.refinedstorage.external_storage": "Külső Tárhely", + "block.refinedstorage.detector": "Detektor", + "block.refinedstorage.constructor": "Konstruktor", + "block.refinedstorage.destructor": "Destruktor", + "block.refinedstorage.wireless_transmitter": "Vezeték Nélküli Jeladó", + "block.refinedstorage.storage_monitor": "Tárhely Monitor", + "block.refinedstorage.network_receiver": "Hálózati Jelvevő", + "block.refinedstorage.network_transmitter": "Hálózati Jeladó", + "block.refinedstorage.portable_grid": "Hordozható Háló", + "block.refinedstorage.creative_portable_grid": "Kreatív Hordozható Háló", + "block.refinedstorage.security_manager": "Biztonságkezelő", + "block.refinedstorage.security_manager.help": "Ha ez a készülék aktív, védelmet nyújt a teljes hálózatnak, hogy csak a tulajdonosa tudja használni. Biztonsági kártyák hozzáadásával más játékosoknak is lehet jogosultságokat adni.", + "block.refinedstorage.relay": "Relé", + "block.refinedstorage.disk_interface": "Lemezinterfész", + "block.refinedstorage.autocrafter": "Autocrafter", + "gui.refinedstorage.controller.redstone_mode_help": "Ha ez a készülék inaktív, a tárhely hálózat nem tudja enegiaforrásként használni.", + "gui.refinedstorage.disk_drive.disks": "Lemezek", + "gui.refinedstorage.storage.redstone_mode_help": "Ha ez a készülék inaktív, a tartalmazott tárhelye nem elérhető a hálózat számára.", + "gui.refinedstorage.storage.filter_help": "Az engedélyezett vagy tiltott nyersanyagok, attól függően hogy milyen módban van az eszköz.", "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Sorting direction", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", "gui.refinedstorage.grid.sorting.direction.descending": "Descending", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Last modified", "gui.refinedstorage.grid.auto_selected": "Auto-selected", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Synchronization mode", - "gui.refinedstorage.grid.synchronizer.off": "Off", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "All", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Screen size", "gui.refinedstorage.screen_size.stretch": "Stretch", "gui.refinedstorage.screen_size.small": "Small", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "Redstone mode", "gui.refinedstorage.redstone_mode.ignore": "Ignore", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Amount", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Set", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Filter mode", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", "gui.refinedstorage.fuzzy_mode.on": "On", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Off", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "4K Storage Disk", "item.refinedstorage.16k_storage_disk": "16K Storage Disk", "item.refinedstorage.64k_storage_disk": "64K Storage Disk", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From 715857e52ea811e8c83008c8723ff9fb7fcec688 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:07 +0200 Subject: [PATCH 70/83] chore: update translation Italian from crowdin --- .../assets/refinedstorage/lang/it_it.json | 118 ++++++++++++++---- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/it_it.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/it_it.json index adf9fc563..df57807b1 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/it_it.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/it_it.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Disk Drive", "block.refinedstorage.machine_casing": "Machine Casing", "block.refinedstorage.grid": "Grid", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Crafting Grid", "block.refinedstorage.controller": "Controller", "block.refinedstorage.creative_controller": "Creative Controller", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", "gui.refinedstorage.disk_drive.disks": "Disks", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Sorting direction", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", "gui.refinedstorage.grid.sorting.direction.descending": "Descending", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Last modified", "gui.refinedstorage.grid.auto_selected": "Auto-selected", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Synchronization mode", - "gui.refinedstorage.grid.synchronizer.off": "Off", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "All", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Screen size", "gui.refinedstorage.screen_size.stretch": "Stretch", "gui.refinedstorage.screen_size.small": "Small", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "Redstone mode", "gui.refinedstorage.redstone_mode.ignore": "Ignore", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Amount", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Set", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Filter mode", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", "gui.refinedstorage.fuzzy_mode.on": "On", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Off", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "4K Storage Disk", "item.refinedstorage.16k_storage_disk": "16K Storage Disk", "item.refinedstorage.64k_storage_disk": "64K Storage Disk", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From f30d9ad83803f6b8d565173900398cc2e02c88ea Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:09 +0200 Subject: [PATCH 71/83] chore: update translation Japanese from crowdin --- .../assets/refinedstorage/lang/ja_jp.json | 118 ++++++++++++++---- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ja_jp.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ja_jp.json index 4c45dde42..4136c2188 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ja_jp.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ja_jp.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "ディスクドライブ", "block.refinedstorage.machine_casing": "マシンケーシング", "block.refinedstorage.grid": "グリッド", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "クラフトグリッド", "block.refinedstorage.controller": "コントローラー", "block.refinedstorage.creative_controller": "クリエイティブコントローラー", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "リレー", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", "gui.refinedstorage.disk_drive.disks": "ディスク", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "並び順", "gui.refinedstorage.grid.sorting.direction.ascending": "昇順", "gui.refinedstorage.grid.sorting.direction.descending": "降順", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "最終変更時間", "gui.refinedstorage.grid.auto_selected": "自動選択", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "同期モード", - "gui.refinedstorage.grid.synchronizer.off": "オフ", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "リソースの種類", "gui.refinedstorage.grid.resource_type.all": "すべて", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "アイテムをネットワークに移動", "gui.refinedstorage.crafting_grid.move.inventory": "アイテムをインベントリに移動", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "画面サイズ", "gui.refinedstorage.screen_size.stretch": "連動", "gui.refinedstorage.screen_size.small": "小", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%dブロック", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "レッドストーン", "gui.refinedstorage.redstone_mode.ignore": "無視", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "優先度", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "量", - "gui.refinedstorage.amount.reset": "リセット", - "gui.refinedstorage.amount.set": "設定", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "フィルターモード", "gui.refinedstorage.filter_mode.allow": "ホワイトリスト", "gui.refinedstorage.filter_mode.block": "ブラックリスト", "gui.refinedstorage.fuzzy_mode": "曖昧モード", "gui.refinedstorage.fuzzy_mode.on": "オン", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "オフ", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "アクセスモード", "gui.refinedstorage.access_mode.insert_extract": "搬入・搬出", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "余分なリソースを破棄", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "通過", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "エネルギーを通過", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "セキュリティを通過", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "クォーツ濃縮鉄", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "プロセッサ接合材", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "4Kストレージディスク", "item.refinedstorage.16k_storage_disk": "16Kストレージディスク", "item.refinedstorage.64k_storage_disk": "64Kストレージディスク", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "クリエイティブストレージディスク", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From 3d79ee18c64753148a8e52617569d14da630766b Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:10 +0200 Subject: [PATCH 72/83] chore: update translation Korean from crowdin --- .../assets/refinedstorage/lang/ko_kr.json | 118 ++++++++++++++---- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ko_kr.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ko_kr.json index adf9fc563..df57807b1 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ko_kr.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/ko_kr.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Disk Drive", "block.refinedstorage.machine_casing": "Machine Casing", "block.refinedstorage.grid": "Grid", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Crafting Grid", "block.refinedstorage.controller": "Controller", "block.refinedstorage.creative_controller": "Creative Controller", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", "gui.refinedstorage.disk_drive.disks": "Disks", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Sorting direction", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", "gui.refinedstorage.grid.sorting.direction.descending": "Descending", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Last modified", "gui.refinedstorage.grid.auto_selected": "Auto-selected", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Synchronization mode", - "gui.refinedstorage.grid.synchronizer.off": "Off", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "All", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Screen size", "gui.refinedstorage.screen_size.stretch": "Stretch", "gui.refinedstorage.screen_size.small": "Small", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "Redstone mode", "gui.refinedstorage.redstone_mode.ignore": "Ignore", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Amount", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Set", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Filter mode", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", "gui.refinedstorage.fuzzy_mode.on": "On", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Off", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "4K Storage Disk", "item.refinedstorage.16k_storage_disk": "16K Storage Disk", "item.refinedstorage.64k_storage_disk": "64K Storage Disk", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From b35a8496c6d622d4ffbe3b537b98d9f37d52d858 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:11 +0200 Subject: [PATCH 73/83] chore: update translation Polish from crowdin --- .../assets/refinedstorage/lang/pl_pl.json | 120 ++++++++++++++---- 1 file changed, 98 insertions(+), 22 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pl_pl.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pl_pl.json index a4280a4c7..9a0a231e4 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pl_pl.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pl_pl.json @@ -2,10 +2,11 @@ "mod.refinedstorage": "Refined Storage", "block.refinedstorage.cable": "Kabel", "block.refinedstorage.quartz_enriched_iron_block": "Blok kwarcowego żelaza", - "block.refinedstorage.quartz_enriched_copper_block": "Block of Quartz Enriched Copper", + "block.refinedstorage.quartz_enriched_copper_block": "Blok kwarcowej miedzi", "block.refinedstorage.disk_drive": "Napęd dysku", "block.refinedstorage.machine_casing": "Osłona maszyny", "block.refinedstorage.grid": "Terminal", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Terminal rzemieślniczy", "block.refinedstorage.controller": "Kontroler", "block.refinedstorage.creative_controller": "Kontroler kreatywny", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Gdy to urządzenie jest nieaktywne, sieć magazynowa nie będzie w stanie używać tego urządzenia jako źródła energii.", "gui.refinedstorage.disk_drive.disks": "Dyski", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Możliwość automatycznego tworzenia", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Automatycznego tworzenie niemożliwe", "gui.refinedstorage.grid.sorting.direction": "Kierunek sortowania", "gui.refinedstorage.grid.sorting.direction.ascending": "Rosnąco", "gui.refinedstorage.grid.sorting.direction.descending": "Malejąco", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Ostatnia modyfikacja", "gui.refinedstorage.grid.auto_selected": "Automatycznie zaznaczone", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Tryb synchronizacji", - "gui.refinedstorage.grid.synchronizer.off": "Wyłączone", - "gui.refinedstorage.grid.synchronizer.off.help": "Nie synchronizuj tekstu pola wyszukiwania.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Wyłączone", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Typ zasobu", "gui.refinedstorage.grid.resource_type.all": "Wszystko", - "gui.refinedstorage.grid.resource_type.help": "Filtruj określone typy zasobów.", + "gui.refinedstorage.grid.craft": "Stwórz", + "gui.refinedstorage.grid.autocraftable": "Ten zasób może być stworzony automatycznie", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Kliknij, aby automatycznie stworzyć", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Przenieś przedmioty do sieci", "gui.refinedstorage.crafting_grid.move.inventory": "Przenieś przedmioty do ekwipunku", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Screen size", "gui.refinedstorage.screen_size.stretch": "Stretch", "gui.refinedstorage.screen_size.small": "Small", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Zezwalaj tylko na zasoby do sieci magazynowej, które są skonfigurowane w filtrach.", "gui.refinedstorage.importer.filter_mode.block.help": "Nie zezwalaj na zasoby do sieci magazynowej, które są skonfigurowane w filtrach.", "gui.refinedstorage.wireless_transmitter.distance": "%d blok(ów)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "Zasób do wyświetlenia.", "gui.refinedstorage.redstone_mode": "Tryb redstone", "gui.refinedstorage.redstone_mode.ignore": "Ignoruj", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Użyj filtru losowego.", "gui.refinedstorage.priority": "Priorytet", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Ilość", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Ustaw", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Tryb filtrowania", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Tryb nieprecyzyjny", "gui.refinedstorage.fuzzy_mode.on": "Włączono", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Off", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Brak karty sieci", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Zapewnia sieć magazynowania w energie. Sieć może mieć ich kilka.", "item.refinedstorage.creative_controller.help": "Zapewnia sieć magazynowania w nieskończoną energię.", "item.refinedstorage.disk_drive.help": "Akceptuje dyski do zapewnienia przestrzeni dyskowej dla sieci magazynowania.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Umożliwia interakcję z siecią magazynowania.", "item.refinedstorage.crafting_grid.help": "Umożliwia interakcję z siecią magazynowania, z możliwością tworzenia.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Importuj zasoby ze źródła zewnętrznego do sieci magazynowej.", "item.refinedstorage.exporter.help": "Eksport zasobów z sieci magazynowej do zewnętrznego miejsca przeznaczenia.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "4K Storage Disk", "item.refinedstorage.16k_storage_disk": "16K Storage Disk", "item.refinedstorage.64k_storage_disk": "64K Storage Disk", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From aa3a86f5bab540f65c88cc30838ae5bd9d49f689 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:12 +0200 Subject: [PATCH 74/83] chore: update translation Swedish from crowdin --- .../assets/refinedstorage/lang/sv_se.json | 645 ++++++++++++++++++ 1 file changed, 645 insertions(+) create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/lang/sv_se.json diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/sv_se.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/sv_se.json new file mode 100644 index 000000000..fac4f8499 --- /dev/null +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/sv_se.json @@ -0,0 +1,645 @@ +{ + "mod.refinedstorage": "Refined Storage", + "block.refinedstorage.cable": "Kabel", + "block.refinedstorage.quartz_enriched_iron_block": "Block av kvarts berikat järn", + "block.refinedstorage.quartz_enriched_copper_block": "Block av kvarts berikat koppar", + "block.refinedstorage.disk_drive": "Diskenhet", + "block.refinedstorage.machine_casing": "Maskinhölje", + "block.refinedstorage.grid": "Rutnät", + "block.refinedstorage.pattern_grid": "Mall-rutnät", + "block.refinedstorage.crafting_grid": "Tillverkningsrutnät", + "block.refinedstorage.controller": "Huvudenhet", + "block.refinedstorage.creative_controller": "Kreativ Huvudenhet", + "block.refinedstorage.1k_storage_block": "1K Lagringsblock", + "block.refinedstorage.4k_storage_block": "4K Lagringsblock", + "block.refinedstorage.16k_storage_block": "16K Lagringsblock", + "block.refinedstorage.64k_storage_block": "64K Lagringsblock", + "block.refinedstorage.creative_storage_block": "Kreativt Lagringsblock", + "block.refinedstorage.64b_fluid_storage_block": "64B Block för vätskelagring", + "block.refinedstorage.256b_fluid_storage_block": "256B Block för vätskelagring", + "block.refinedstorage.1024b_fluid_storage_block": "1024B Block för vätskelagring", + "block.refinedstorage.4096b_fluid_storage_block": "4096B Block för vätskelagring", + "block.refinedstorage.creative_fluid_storage_block": "Kreativt Block för vätskelagring", + "block.refinedstorage.importer": "Importör", + "block.refinedstorage.exporter": "Exportör", + "block.refinedstorage.interface": "Gränssnitt", + "block.refinedstorage.external_storage": "Externt lagringsutrymme", + "block.refinedstorage.detector": "Detektor", + "block.refinedstorage.constructor": "Konstruktör", + "block.refinedstorage.destructor": "Nerbrytare", + "block.refinedstorage.wireless_transmitter": "Trådlös sändare", + "block.refinedstorage.storage_monitor": "Lagringöversikt", + "block.refinedstorage.network_receiver": "Nätverksmottagare", + "block.refinedstorage.network_transmitter": "Nätverkssändare", + "block.refinedstorage.portable_grid": "Bärbart rutnät", + "block.refinedstorage.creative_portable_grid": "Kreativt bärbartrutnät", + "block.refinedstorage.security_manager": "Säkerhets Manager", + "block.refinedstorage.security_manager.help": "När denna enhet är aktiv, kommer att skydda nätverket som standard och blockera alla uppgifter. Lägg till säkerhetskort för att tillåta eller neka specifika uppgifter för en spelare.", + "block.refinedstorage.relay": "Relä", + "block.refinedstorage.disk_interface": "Diskgränssnitt", + "block.refinedstorage.autocrafter": "Autocrafter", + "gui.refinedstorage.controller.redstone_mode_help": "När den här enheten är inaktiv kommer nätverket inte att kunna använda den här enheten som energikälla.", + "gui.refinedstorage.disk_drive.disks": "Diskar", + "gui.refinedstorage.storage.redstone_mode_help": "När den här enheten är inaktiv kommer lagringsutrymmet inte längre att vara tillgängligt från nätverket.", + "gui.refinedstorage.storage.filter_help": "Resurserna som kanske tillåts eller inte tillåts i detta system, beror på om enheten är i läget för vitlista eller svartlista.", + "gui.refinedstorage.storage.filter_mode.empty_warning": "Utan några konfigurerade filter kommer inga resurser att accepteras i denna lagring.", + "gui.refinedstorage.storage.filter_mode.allow.help": "Tillåt bara resurser till denna lagring som är konfigurerad i filter.", + "gui.refinedstorage.storage.filter_mode.block.help": "Godkänn inte resurser till den här lagringsenheten som är konfigurerad i filter.", + "gui.refinedstorage.grid.view_type": "Se typ", + "gui.refinedstorage.grid.view_type.all": "Allt", + "gui.refinedstorage.grid.view_type.autocraftable": "Auto-tillverkningsbar", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Inte auto-tillverkningsbar", + "gui.refinedstorage.grid.sorting.direction": "Sorteringsriktning", + "gui.refinedstorage.grid.sorting.direction.ascending": "Stigande", + "gui.refinedstorage.grid.sorting.direction.descending": "Fallande", + "gui.refinedstorage.grid.sorting.type": "Sorteringstyp", + "gui.refinedstorage.grid.sorting.type.quantity": "Antal", + "gui.refinedstorage.grid.sorting.type.name": "Namn", + "gui.refinedstorage.grid.sorting.type.id": "ID", + "gui.refinedstorage.grid.sorting.type.last_modified": "Senast ändrad", + "gui.refinedstorage.grid.auto_selected": "Automatiskt vald", + "gui.refinedstorage.grid.auto_selected.help": "Om du vill automatiskt markera sökfältet när rutnätet öppnas.", + "gui.refinedstorage.grid.synchronization_mode": "Synkroniseringsläge", + "gui.refinedstorage.grid.synchronization_mode.off": "Av", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Synkronisera inte sökrutans text.", + "gui.refinedstorage.grid.resource_type": "Resurstyp", + "gui.refinedstorage.grid.resource_type.all": "Allt", + "gui.refinedstorage.grid.craft": "Crafta", + "gui.refinedstorage.grid.autocraftable": "Denna resurs är auto-tillverkningsbar", + "gui.refinedstorage.grid.pattern_in_inventory": "Denna resurs har ett mönster i ditt inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Klicka för att automatiskt tillverka", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + klicka för att automatiskt tillverka", + "gui.refinedstorage.crafting_grid.move.network": "Flytta saker till nätverk", + "gui.refinedstorage.crafting_grid.move.inventory": "Flytta saker till förråd", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Tryck SHIFT + CTRL för att visa endast objekt som används i receptet.", + "gui.refinedstorage.pattern_grid.create_pattern": "Skapa design", + "gui.refinedstorage.pattern_grid.clear": "Radera", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Luddigt läge", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Matcha designen, strunta i komponenterna.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Matcha designen exakt.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Indata", + "gui.refinedstorage.pattern_grid.processing.outputs": "Resultat", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "Resurserna kommer att plockas ut från nätverket för att skickas in i mål förrådet.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "Resurserna förväntas återkomma till förrådet för att nätverket ska anse att tillverkningen är klar.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Klicka för att konfigurera antal och alternativ", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Tillåtna alternativ:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternativ", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expandera", + "gui.refinedstorage.screen_size": "Skärmstorlek", + "gui.refinedstorage.screen_size.stretch": "Utvidga", + "gui.refinedstorage.screen_size.small": "Liten", + "gui.refinedstorage.screen_size.medium": "Medium", + "gui.refinedstorage.screen_size.large": "Stor", + "gui.refinedstorage.screen_size.extra_large": "Extra stor", + "gui.refinedstorage.detector.mode": "Läge", + "gui.refinedstorage.detector.mode.under": "Avge rödstenssignal när antalet är lägre", + "gui.refinedstorage.detector.mode.equal": "Avge rödstenssignal när antalet är samma", + "gui.refinedstorage.detector.mode.above": "Avge rödstenssignal när antalet är högre", + "gui.refinedstorage.detector.filter_help": "Resursen som ska hittas i nätverket.", + "gui.refinedstorage.destructor.pickup_items": "Plocka upp sak istället för att ha i sönder", + "gui.refinedstorage.destructor.filter_help": "Blocken som kanske förstörs eller inte, beror på om enheten är i läget för vitlista eller svartlista.", + "gui.refinedstorage.destructor.filter_mode.allow.help": "Tillåt bara block till detta nätverk som är konfigurerat i filter.", + "gui.refinedstorage.destructor.filter_mode.block.help": "Tillåt inte block till detta nätverk som är konfigurerat i filter.", + "gui.refinedstorage.constructor.drop_items": "Släpp saker istället för att placera block", + "gui.refinedstorage.constructor.filter_help": "Resurserna som ska placeras från nätverket.", + "gui.refinedstorage.interface.filter_help": "Resurserna som ska exporteras från nätverket.", + "gui.refinedstorage.exporter.filter_help": "Resurserna som ska exporteras från nätverket.", + "gui.refinedstorage.importer.filter_help": "Resurserna som ska importeras från målförrådet.", + "gui.refinedstorage.importer.filter_mode.allow.help": "Tillåt bara resurser in i nätverket som är konfigurerat i filter.", + "gui.refinedstorage.importer.filter_mode.block.help": "Tillåt inte resurser i nätverket som är konfigurerat i filter.", + "gui.refinedstorage.wireless_transmitter.distance": "%d block", + "gui.refinedstorage.wireless_transmitter.inactive": "Inaktiv", + "gui.refinedstorage.storage_monitor.filter_help": "Resurser att visa.", + "gui.refinedstorage.redstone_mode": "Rödstensläge", + "gui.refinedstorage.redstone_mode.ignore": "Ignorera", + "gui.refinedstorage.redstone_mode.ignore.help": "Denna enhet kommer alltid att vara aktiv, oavsett rödstenssignal.", + "gui.refinedstorage.redstone_mode.high": "Hög", + "gui.refinedstorage.redstone_mode.high.help": "Denna enhet kommer bara att vara aktiv med en rödstenssignal.", + "gui.refinedstorage.redstone_mode.low": "Låg", + "gui.refinedstorage.redstone_mode.low.help": "Denna enhet kommer bara att vara aktiv utan en rödstenssignal.", + "gui.refinedstorage.scheduling_mode": "Schemaläge", + "gui.refinedstorage.scheduling_mode.default": "Standard", + "gui.refinedstorage.scheduling_mode.default.help": "Använd det första tillgängliga filtret.", + "gui.refinedstorage.scheduling_mode.round_robin": "Rundan runt", + "gui.refinedstorage.scheduling_mode.round_robin.help": "Använd varje filter i tur och ordning.", + "gui.refinedstorage.scheduling_mode.random": "Slumpmässig", + "gui.refinedstorage.scheduling_mode.random.help": "Använda ett slumpmässigt filter.", + "gui.refinedstorage.priority": "Prioritet", + "gui.refinedstorage.priority.storage_help": "Ordningen i vilken nätverket kommer att lägga till eller plocka ut resurser, högst först.", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Konfigurera summa", + "gui.refinedstorage.configure_amount.reset": "Återställ", + "gui.refinedstorage.configure_amount.set": "Välj", + "gui.refinedstorage.filter_mode": "Filterläge", + "gui.refinedstorage.filter_mode.allow": "Godkännandelista", + "gui.refinedstorage.filter_mode.block": "Blockeringslista", + "gui.refinedstorage.fuzzy_mode": "Luddigt läge", + "gui.refinedstorage.fuzzy_mode.on": "På", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Matcha filter för vitlista eller svartlista, ignorera komponenter.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Matcha filtret, ignorera komponenter.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Matcha filter vid utplockning från nätverket och ignorera komponenter.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Matcha filter vid utplockning från källan, ignorera komponenter.", + "gui.refinedstorage.fuzzy_mode.off": "Av", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Matcha exakt efter filter för vitlista eller svartlista.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Matcha filter exakt.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Matcha filter exakt, när du plockar ut från nätverket.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Matcha filter exakt, när du plockar ut från källan.", + "gui.refinedstorage.access_mode": "Åtkomstläge", + "gui.refinedstorage.access_mode.insert_extract": "Infoga och plocka ut", + "gui.refinedstorage.access_mode.insert_extract.help": "Nätverket kommer att kunna infoga eller plocka ut från denna lagring.", + "gui.refinedstorage.access_mode.insert": "Infoga bara", + "gui.refinedstorage.access_mode.insert.help": "Nätverket kommer bara att kunna infoga i denna lagring. Inneslutna resurser kommer fortfarande att ses i ett rutnät.", + "gui.refinedstorage.access_mode.extract": "Endast plocka ut", + "gui.refinedstorage.access_mode.extract.help": "Nätverket kommer endast att kunna infoga eller plocka ut från denna lagring.", + "gui.refinedstorage.void_excess": "Kasta bort överflödiga resurser", + "gui.refinedstorage.void_excess.help": "När släng läge är påslaget och utrymmet är fullt, kommer den att fortsätta att acceptera resurser men kasta bort dom.", + "gui.refinedstorage.void_excess.allowlist_warning": "Släng överskott fungerar bara när lagringen är i vitlisteläge.", + "gui.refinedstorage.empty_upgrade_slot": "Rensa uppgradering-slot", + "gui.refinedstorage.filter_slot.empty_filter": "Rensa filter", + "gui.refinedstorage.filter_slot.left_click_for": "Vänsterklicka för", + "gui.refinedstorage.filter_slot.right_click_for": "Högerklicka för", + "gui.refinedstorage.filter_slot.click_to_clear": "Klicka för att rensa", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Klicka för att konfigurera antal", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Skift-klicka för att rensa", + "gui.refinedstorage.regulator_upgrade.filter_help": "Resursen som ska regleras i målet.", + "gui.refinedstorage.network_transmitter.status.inactive": "Inaktiv", + "gui.refinedstorage.network_transmitter.status.missing_network_card": "Nätverkskort saknas", + "gui.refinedstorage.network_transmitter.status.transmitting": "%d block", + "gui.refinedstorage.network_transmitter.status.receiver_unreachable": "Kan ej nås", + "gui.refinedstorage.security_card.permission.reset": "Återställ", + "gui.refinedstorage.security_card.permission.modified": "Modifierad", + "gui.refinedstorage.security_manager.redstone_mode_help": "När den här enheten är inaktiv kommer nätverket inte att skyddas.", + "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Plats för ett reserv säkerhetskort.", + "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Lägg till ett reservsäkerhetskort till denna plats för att sätta behörigheter för varje spelare utan ett säkerhetskort. Som standard nekas alla åtgärder.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.pass_through": "Passera-igenom", + "gui.refinedstorage.relay.pass_through.help": "Om den här enheten ska passera-igenom hela indata-nätverkets signal som det är. Stäng av detta för att selektivt exponera komponenter för utdatanätverket.", + "gui.refinedstorage.relay.pass_energy": "Genomgående energi", + "gui.refinedstorage.relay.pass_energy.help": "Om denna enhet ska skicka sin energi-buffert från indata-nätverket till utdatanätverket.", + "gui.refinedstorage.relay.pass_storage": "Passera lagring", + "gui.refinedstorage.relay.pass_storage.help": "Om denna enhet ska passera lagring från indata-nätverket till utdatanätverket.", + "gui.refinedstorage.relay.pass_security": "Passera säkerhet", + "gui.refinedstorage.relay.pass_security.help": "Om denna enhet ska skicka säkerhetsinställningarna från indata-nätverket till utdatanätverket.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", + "gui.refinedstorage.relay.filter_mode.allow.help": "Visa endast resurser från indata-nätverket till utdatanätverket som är konfigurerat i filter.", + "gui.refinedstorage.relay.filter_mode.block.help": "Visa inte resurser från indata-nätverket till utdatanätverket som är konfigurerat i filter.", + "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Tillåt bara resurser på nätverkets lagring eller nätverket som är konfigurerat i filter.", + "gui.refinedstorage.disk_interface.filter_mode.block.help": "Tillåt inte resurser på nätverkets lagring eller nätverket som är konfigurerat i filter.", + "gui.refinedstorage.disk_interface.in": "In", + "gui.refinedstorage.disk_interface.out": "Ut", + "gui.refinedstorage.disk_interface.filter_help": "De resurser som får eller inte får överföras från eller till de angivna lagringsenheterna, beroende på om enheten är i vitliste eller svartlista läge.", + "gui.refinedstorage.disk_interface.transfer_mode": "Överföringsläge", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network": "Överför till nätverket", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Överför resurserna från lagringsdiskarna till nätverket.", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Plocka ut från nätverket", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Överför resurserna från nätverket till lagringsdiskarna.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", + "item.refinedstorage.controller.help": "Förser nätverket med energi. Kan ha flera i samma nätverk.", + "item.refinedstorage.creative_controller.help": "Förser nätverket med obegränsad energi.", + "item.refinedstorage.disk_drive.help": "Accepterar lagringsdiskar för att förse nätverket med lagringsutrymme.", + "item.refinedstorage.disk_interface.help": "Överför resurser mellan nätverket och tillhandahållna lagringsdiskar.", + "item.refinedstorage.grid.help": "Gör det möjligt att interagera med nätverket.", + "item.refinedstorage.crafting_grid.help": "Gör det möjligt att interagera med nätverket och möjlighet att \"crafta\".", + "item.refinedstorage.pattern_grid.help": "Gör det möjligt skapa mallar som använder vid \"auto-crafting\".", + "item.refinedstorage.importer.help": "Importera resurser från en extern källa till nätverket.", + "item.refinedstorage.exporter.help": "Exporterar resurser från nätverket till en extern destination.", + "item.refinedstorage.interface.help": "Fungerar som en kombinerad importör och exportör.", + "item.refinedstorage.external_storage.help": "Förser nätverket med lagring från en extern källa.", + "item.refinedstorage.detector.help": "Avger en rödstenssignal om nätverket innehåller en resurs som är lika med, över eller under ett visst antal.", + "item.refinedstorage.constructor.help": "Placerar block från nätverket i världen.", + "item.refinedstorage.destructor.help": "Förstör block från världen och placerar dem i nätverket.", + "item.refinedstorage.relay.help": "Slå på eller stäng av en hel sektion av ett nätverk och skapa en ny del av ditt nätverk.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", + "item.refinedstorage.quartz_enriched_iron": "Kvartsberikat järn", + "item.refinedstorage.quartz_enriched_copper": "Kvartsberikad koppar", + "item.refinedstorage.processor_binding": "Processor-fog", + "item.refinedstorage.silicon": "Silikon", + "item.refinedstorage.raw_basic_processor": "Obearbetad primär processor", + "item.refinedstorage.raw_improved_processor": "Rå förbättrad processor", + "item.refinedstorage.raw_advanced_processor": "Obearbetad avancerad processor", + "item.refinedstorage.basic_processor": "Primär processor", + "item.refinedstorage.improved_processor": "Förbättrad processor", + "item.refinedstorage.advanced_processor": "Avancerad processor", + "item.refinedstorage.1k_storage_part": "1K Lagringsdel", + "item.refinedstorage.4k_storage_part": "4K Lagringsdel", + "item.refinedstorage.16k_storage_part": "16K Lagringsdel", + "item.refinedstorage.64k_storage_part": "64K Lagringsdel", + "item.refinedstorage.1k_storage_disk": "1K Lagringsenhet", + "item.refinedstorage.4k_storage_disk": "4K Lagringsenhet", + "item.refinedstorage.16k_storage_disk": "16K Lagringsenhet", + "item.refinedstorage.64k_storage_disk": "64K Lagringsenhet", + "item.refinedstorage.storage_disk.help": "Lagrar %s objekt. När enheten är tom, kan du få tillbaka lagrinsdelen genom att använda den. Kan uppgraderas genom att kombineras lagringsdel av högre klass.", + "item.refinedstorage.storage_block.help": "Lagrar %s objekt. När enheten är tom, kan du få tillbaka lagrinsdelen och höljet genom att använda den. Kan uppgraderas genom att kombineras lagringsdel av högre klass.", + "item.refinedstorage.creative_storage_disk": "Kreativ lagringsdisk", + "item.refinedstorage.creative_storage_disk.help": "Lagrar ett oändligt antal föremål.", + "item.refinedstorage.creative_storage_block.help": "Lagrar ett oändligt antal föremål.", + "item.refinedstorage.64b_fluid_storage_part": "64B Enhet för vätska", + "item.refinedstorage.256b_fluid_storage_part": "256B Enhet för vätska", + "item.refinedstorage.1024b_fluid_storage_part": "1024B Enhet för vätska", + "item.refinedstorage.4096b_fluid_storage_part": "4096B Enhet för vätska", + "item.refinedstorage.64b_fluid_storage_disk": "64B lagringsdisk för vätska", + "item.refinedstorage.256b_fluid_storage_disk": "256B lagringsdisk för vätska", + "item.refinedstorage.1024b_fluid_storage_disk": "1024B lagringsdisk för vätska", + "item.refinedstorage.4096b_fluid_storage_disk": "4096B lagringsdisk för vätska", + "item.refinedstorage.fluid_storage_disk.help": "Lagrar %s hinkar.", + "item.refinedstorage.fluid_storage_block.help": "Lagrar %s hinkar.", + "item.refinedstorage.creative_fluid_storage_disk": "Kreativ lagringsdisk för vätska", + "item.refinedstorage.creative_fluid_storage_disk.help": "Lagrar ett oändligt antal hinkar.", + "item.refinedstorage.creative_fluid_storage_block.help": "Lagrar ett oändligt antal hinkar.", + "item.refinedstorage.storage_housing": "Skyddshölje till lagring", + "item.refinedstorage.construction_core": "Konstruktionskärna", + "item.refinedstorage.destruction_core": "Destruktionskärna", + "item.refinedstorage.wrench": "Skiftnyckel", + "item.refinedstorage.wrench.help": "Använd för att rotera block eller tryck SHIFT för att ta isär Refined Storage block.", + "item.refinedstorage.upgrade": "Uppgradering", + "item.refinedstorage.speed_upgrade": "Hastighetsuppgradering", + "item.refinedstorage.speed_upgrade.help": "Ökar driftshastigheten för en nätverksenhet.", + "item.refinedstorage.stack_upgrade": "Uppgradering till trave", + "item.refinedstorage.stack_upgrade.help": "Ökar kapaciteten för antalet resurser som nätverket hanterar per operation.", + "item.refinedstorage.silk_touch_upgrade": "Silk Touch uppgradering", + "item.refinedstorage.silk_touch_upgrade.help": "Fungerar som \"Silk Touch\" förtrollning på en hacka.", + "item.refinedstorage.fortune_upgrade.1": "Fortune I uppgradering", + "item.refinedstorage.fortune_upgrade.2": "Fortune II uppgradering", + "item.refinedstorage.fortune_upgrade.3": "Fortune III uppgradering", + "item.refinedstorage.fortune_upgrade.help": "Utvinner mer resurser när du bryter sönder block. Fungera som \"Fortune\" förtrollning på en hacka.", + "item.refinedstorage.regulator_upgrade": "Regulator uppgradering", + "item.refinedstorage.regulator_upgrade.help": "Kommer endast exportera/importera om antalet är mindre/mer än konfigurerat i uppgraderingen på målet. Mindre gäller för exportör och mer för importör. Använd för att konfigurera.", + "item.refinedstorage.range_upgrade": "Uppgradering av räckvidd", + "item.refinedstorage.range_upgrade.help": "Ökar räckvidden för den trådlösa sändaren.", + "item.refinedstorage.creative_range_upgrade": "Uppgradering till \"kreativ\" räckvidd.", + "item.refinedstorage.creative_range_upgrade.help": "Ger oändlig räckvidd för den trådlösa sändaren. Fungerar inte över dimensioner.", + "item.refinedstorage.wireless_grid": "Trådlöst rutnät", + "item.refinedstorage.creative_wireless_grid": "Kreativt trådlöst rutnät", + "item.refinedstorage.wireless_transmitter.help": "Ger trådlöst access till nätverket för objekt som det trådlösa rutnätet. Flera enheter är tillåtet och ger en bredare täckning.", + "item.refinedstorage.network_item.unbound": "Obunden.", + "item.refinedstorage.network_item.unbound.help": "Använd på vilken nätverksenhet som helst för att ansluta.", + "item.refinedstorage.network_item.bound_to": "Ansluten till %d, %d, %d.", + "item.refinedstorage.network_item.cannot_open_with_shortcut_due_to_duplicate": "Det finns mer än en %s i ditt förråd.", + "item.refinedstorage.network_item.cannot_open_because_not_found": "Det finns ingen %s i ditt förråd.", + "item.refinedstorage.configuration_card": "Konfigurationskort", + "item.refinedstorage.configuration_card.empty": "Tomt.", + "item.refinedstorage.configuration_card.configured": "Innehåller konfiguration för %s.", + "item.refinedstorage.configuration_card.copied_configuration": "Kopierad konfiguration för %s.", + "item.refinedstorage.configuration_card.cleared_configuration": "Återställd konfiguration.", + "item.refinedstorage.configuration_card.cannot_apply_configuration": "Kan inte använda konfigurationskort för olika typer av enhet. Det är konfigurerat för %s.", + "item.refinedstorage.configuration_card.applied_configuration": "Konfiguration tillämpad.", + "item.refinedstorage.configuration_card.empty_help": "Använd på en nätverksenhet medan du hukar för att kopiera konfiguration och uppgraderingar till kortet.", + "item.refinedstorage.configuration_card.configured_help": "Använd på mål-nätverksenhet medan du hukar för att överföra konfiguration och uppgraderingar. Använd medan du hukar för att tömma.", + "item.refinedstorage.network_card": "Nätverkskort", + "item.refinedstorage.network_card.unbound_help": "Använd medan du hukar på en nätverksmottagare.", + "item.refinedstorage.network_card.unbound": "Ej knuten till något.", + "item.refinedstorage.network_card.bound_help": "Placera i en nätverkssändare. Använd medan du hukar för att rensa knytning.", + "item.refinedstorage.network_card.bound": "Knuten till %d, %d, %d i %s.", + "item.refinedstorage.network_transmitter.help": "Sänder en nätverkssignal trådlöst. Behöver ett nätverkskort som är ihopparad med en nätverksmottagare.", + "item.refinedstorage.network_receiver.help": "Tar emot en nätverkssignal trådlöst. Knyt ett nätverkskort till detta block.", + "item.refinedstorage.cable.help": "Ansluter nätverksenheter med varandra. Block, kommer att anslutas till vilken färg som. Kablar, kommer endast ansluta till samma färg eller till standardfärg (grå).", + "item.refinedstorage.security_card": "Säkerhetskort", + "item.refinedstorage.security_card.cleared_configuration": "Ingen konfiguration.", + "item.refinedstorage.security_card.unbound": "Ej knuten till något.", + "item.refinedstorage.security_card.unbound.help": "Högerklicka för att konfigurera och knyta till nuvarande spelare.", + "item.refinedstorage.security_card.bound": "Knuten till %s.", + "item.refinedstorage.security_card.bound.help": "Högerklicka för att konfigurera. Använd medan du hukar för att ta bort konfiguration och sammanknutning.", + "item.refinedstorage.fallback_security_card": "Reserv säkerhetskort", + "item.refinedstorage.fallback_security_card.help": "Fungerar som reserv om inget annat säkerhetskort för spelaren hittas. Högerklicka för att konfigurera. Huka och använd för att rensa.", + "item.refinedstorage.portable_grid.help": "Tillåter att interagera med en lagringsdisk när den inte är ansluten till ett nätverket. Kan användas som ett block i världen, eller från ditt inventory.", + "item.refinedstorage.storage_monitor.help": "Ett block som visar det aktuella antalet av en viss resurs i ditt nätverk. SHIFT + högerklicka för att konfigurera. Vänsterklicka för att plocka ut en stack, SHIFT + vänsterklicka för att plocka ut andast en resurs, högerklicka för att infoga en resurs, högerklicka flera gånger för att infoga flera resurser i bulk.", + "item.refinedstorage.pattern": "Mall", + "item.refinedstorage.pattern.fuzzy_mode": "Luddigt läge", + "item.refinedstorage.pattern.help": "Används vid auto-tillverkning för att lagra receptet som ska craftas. Använd medan du hukar för att rensa.", + "misc.refinedstorage.stored": "Lager: %s", + "misc.refinedstorage.stored_with_capacity": "Lager: %s / %s (%d%%)", + "misc.refinedstorage.total": "%d totalt", + "misc.refinedstorage.last_modified.just_now": "Senast ändrad just nu av %s", + "misc.refinedstorage.last_modified.second": "Senast ändrad %d sekund sedan av %s", + "misc.refinedstorage.last_modified.seconds": "Senast ändrad %d sekunder sedan av %s", + "misc.refinedstorage.last_modified.minute": "Senast ändrad %d minut sedan av %s", + "misc.refinedstorage.last_modified.minutes": "Senast ändrad %d minuter sedan av %s", + "misc.refinedstorage.last_modified.hour": "Senast ändrad %d timme sedan av %s", + "misc.refinedstorage.last_modified.hours": "Senast ändrad %d timmar sedan av %s", + "misc.refinedstorage.last_modified.day": "Senast ändrad %d dag sedan av %s", + "misc.refinedstorage.last_modified.days": "Senast ändrad %d dagar sedan av %s", + "misc.refinedstorage.last_modified.week": "Senast ändrad %d vecka sedan av %s", + "misc.refinedstorage.last_modified.weeks": "Senast ändrad %d veckor sedan av %s", + "misc.refinedstorage.last_modified.year": "Senast ändrad %d år sedan av %s", + "misc.refinedstorage.last_modified.years": "Senast ändrad %d år sedan av %s", + "misc.refinedstorage.resource_type.item": "Föremål", + "misc.refinedstorage.resource_type.fluid": "Vätska", + "misc.refinedstorage.press_shift_for_help": "Tryck SHIFT för hjälp", + "misc.refinedstorage.no_permission": "Ej behörighet", + "misc.refinedstorage.no_permission.open": "Du har inte behörighet att öppna %s.", + "misc.refinedstorage.no_permission.insert": "Du har inte behörighet att lägga till.", + "misc.refinedstorage.no_permission.extract": "Du har inte behörighet att plocka ut.", + "misc.refinedstorage.no_permission.build.place": "Du har inte behörighet att placera en %s här.", + "misc.refinedstorage.no_permission.build.break": "Du har inte behörighet att ta i sönder %s.", + "misc.refinedstorage.no_permission.build.rotate": "Du har inte behörighet att rotera %s.", + "misc.refinedstorage.no_permission.build.dismantle": "Du har inte behörighet att demontera %s.", + "misc.refinedstorage.pattern.crafting": "Crafting-mönster", + "misc.refinedstorage.pattern.processing": "Process-mönster", + "misc.refinedstorage.pattern.stonecutter": "Stenhuggar-mönster", + "misc.refinedstorage.pattern.smithing_table": "Smides-mönster", + "key.refinedstorage.focus_search_bar": "Fokusera sökfältet", + "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Rensa craftingrunäts-matris till nätverk", + "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Rensa runäts-matris till inventory", + "key.refinedstorage.open_wireless_grid": "Öppna trådlöst rutnät", + "key.refinedstorage.open_portable_grid": "Öppna bärbart rutnät", + "refinedstorage.subtitle.wrench": "Skiftnyckel använd", + "permission.refinedstorage.insert": "Föra in", + "permission.refinedstorage.insert.description": "Om spelaren kan föra in resurser i ett nätverk.", + "permission.refinedstorage.extract": "Plocka ut", + "permission.refinedstorage.extract.description": "Om spelaren kan plocka ut resurser från ett nätverk.", + "permission.refinedstorage.autocrafting": "Autocrafting", + "permission.refinedstorage.autocrafting.description": "Om spelaren kan starta, avbryta eller se en autocrafting uppgift.", + "permission.refinedstorage.open": "Öppna", + "permission.refinedstorage.open.description": "Om spelaren kan öppna nätverksenhetens GUI:er.", + "permission.refinedstorage.build": "Skapa", + "permission.refinedstorage.build.description": "Om spelaren kan lägga till eller ta bort nätverksenheter.", + "permission.refinedstorage.security": "Säkerhet", + "permission.refinedstorage.security.description": "Om spelaren kan hantera säkerhetsalternativen för ett nätverk.", + "tag.item.refinedstorage.cables": "Kablar", + "tag.item.refinedstorage.constructors": "Konstruktör", + "tag.item.refinedstorage.controllers": "Huvudenheter", + "tag.item.refinedstorage.crafting_grids": "Crafting-rutnät", + "tag.item.refinedstorage.pattern_grids": "Mall-rutnät", + "tag.item.refinedstorage.creative_controllers": "Kreativa huvudenheter", + "tag.item.refinedstorage.destructors": "Förstörare", + "tag.item.refinedstorage.detectors": "Detektorer", + "tag.item.refinedstorage.exporters": "Exportörer", + "tag.item.refinedstorage.external_storages": "Externa lagringsutrymmen", + "tag.item.refinedstorage.fluid_storage_disks": "Lagringsdiskar för vätska", + "tag.item.refinedstorage.grids": "Rutnät", + "tag.item.refinedstorage.importers": "Importörer", + "tag.item.refinedstorage.network_receivers": "Nätverksmottagare", + "tag.item.refinedstorage.network_transmitters": "Nätverkssändare", + "tag.item.refinedstorage.relays": "Reläer", + "tag.item.refinedstorage.security_managers": "Säkerhetshanterare", + "tag.item.refinedstorage.storage_disks": "Lagring diskar", + "tag.item.refinedstorage.wireless_transmitters": "Trådlösa sändare", + "tag.item.refinedstorage.disk_interfaces": "Disk-gränssnitt", + "tag.item.refinedstorage.crafters": "Crafters", + "text.autoconfig.refinedstorage.title": "Refined Storage konfiguration", + "refinedstorage.configuration.title": "Refined Storage konfiguration", + "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage konfiguration", + "refinedstorage.configuration.section.refinedstorage.common.toml.title": "Refined Storage konfiguration", + "text.autoconfig.refinedstorage.option.smoothScrolling": "Jämn skrollning", + "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "Om skroll-listen ska använda jämn skrolling.", + "text.autoconfig.refinedstorage.option.screenSize": "Skärmstorlek", + "text.autoconfig.refinedstorage.option.screenSize.tooltip": "Skärmens storlek.", + "text.autoconfig.refinedstorage.option.maxRowsStretch": "Maximal mängd rader när skärmstorleken är utsträckt", + "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "Det maximala antalet rader när skärmstorleken är utsträckt.\n", + "text.autoconfig.refinedstorage.option.grid": "Rutnät", + "text.autoconfig.refinedstorage.option.grid.tooltip": "Konfiguration för rutnätet.", + "text.autoconfig.refinedstorage.option.grid.largeFont": "Stort typsnitt", + "text.autoconfig.refinedstorage.option.grid.largeFont.tooltip": "Om rutnätet ska använda ett större typsnitt för antalet.", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown": "Förhindra sortering medan SHIFT är nere", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown.tooltip": "Om rutnätet ska undvika sortering när SHIFT hålls ner.", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip": "Detaljerad anvisning", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip.tooltip": "Om rutnätet ska visa en detaljerad anvisning.", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery": "Kom ihåg sökning", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery.tooltip": "Om senaste sökningen ska vara kvar efter att rutnätet stängts och öppnats igen.", + "text.autoconfig.refinedstorage.option.grid.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.grid.energyUsage.tooltip": "Energin som rutnätet förbrukar.", + "text.autoconfig.refinedstorage.option.grid.autoSelected": "Välj sökruta automatiskt", + "text.autoconfig.refinedstorage.option.grid.autoSelected.tooltip": "Om sökrutan automatiskt ska markeras när rutnätet öppnas.", + "text.autoconfig.refinedstorage.option.grid.synchronizer": "Synkronisera", + "text.autoconfig.refinedstorage.option.grid.synchronizer.tooltip": "Synkroniserings sätt för rutnätets sökruta.", + "text.autoconfig.refinedstorage.option.grid.resourceType": "Resurstyp", + "text.autoconfig.refinedstorage.option.grid.resourceType.tooltip": "Resurstypen som ska visas.", + "text.autoconfig.refinedstorage.option.grid.sortingDirection": "Sorteringsriktning", + "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "Sorteringsriktningen.", + "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorteringstyp", + "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "Sorteringstypen.", + "text.autoconfig.refinedstorage.option.grid.viewType": "Vy-typ", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "Vyns typ.", + "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting-rutnät", + "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Konfiguration för crafting-rutnät.", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "Energin som crafting-rutnätet förbrukar.", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Stäng beteende för crafting-matris", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "Vad ska hända med slotten i crafting-matrisen när crafting-rutnätet stängs.", + "text.autoconfig.refinedstorage.option.patternGrid": "Mall-rutnät", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Konfiguration för mall-rutnätet.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "Energin som mall-rutnätet förbrukar.", + "text.autoconfig.refinedstorage.option.controller": "Kontroller", + "text.autoconfig.refinedstorage.option.controller.tooltip": "Konfiguration för kontrollern.", + "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energikapacitet", + "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "Energikapaciteten hos kontrollern.", + "text.autoconfig.refinedstorage.option.cable": "Kabel", + "text.autoconfig.refinedstorage.option.cable.tooltip": "Konfiguration för kabeln.", + "text.autoconfig.refinedstorage.option.cable.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.cable.energyUsage.tooltip": "Kabelns energiförbrukning.", + "text.autoconfig.refinedstorage.option.diskDrive": "Diskenhet", + "text.autoconfig.refinedstorage.option.diskDrive.tooltip": "Konfiguration för diskenhet.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage.tooltip": "Diskenhetens energiförbrukning.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk": "Energiförbrukning på varje disk", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk.tooltip": "Energiförbrukningen på varje disk.", + "text.autoconfig.refinedstorage.option.diskInterface": "Disk-gränssnitt", + "text.autoconfig.refinedstorage.option.diskInterface.tooltip": "Konfiguration för disk-gränssnitt.", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage.tooltip": "Energiförbrukningen på disk-gränssnittet.", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk": "Energiförbrukning på varje disk", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk.tooltip": "Energiförbrukningen på varje disk.", + "text.autoconfig.refinedstorage.option.storageBlock": "Lagringsblock", + "text.autoconfig.refinedstorage.option.storageBlock.tooltip": "Konfiguration för lagringsblock.", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage": "1K energiförbrukning", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage.tooltip": "Energiförbrukningen på 1K lagrinsblocket.", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage": "4K energiförbrukning", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage.tooltip": "Energiförbrukningen på 4K lagrinsblocket.", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage": "16K energiförbrukning", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage.tooltip": "Energiförbrukningen på 16K lagrinsblocket.", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage": "64K energiförbrukning", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage.tooltip": "Energiförbrukningen på 64K lagrinsblocket.", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage": "Kreativ energiförbrukning", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage.tooltip": "Energiförbrukningen på kreativt lagringsblock.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock": "Vätskelagringsblock", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.tooltip": "Konfiguration för vätskelagringsblock.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energiförbrukning", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage.tooltip": "Energiförbrukningen på 64B vätskelagrinsblocket.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energiförbrukning", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage.tooltip": "Energiförbrukningen på 256B vätskelagrinsblocket.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energiförbrukning", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage.tooltip": "Energiförbrukningen på 1024B vätskelagrinsblocket.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energiförbrukning", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage.tooltip": "Energiförbrukningen på 4096B vätskelagrinsblocket.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage": "Kreativ energiförbrukning", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage.tooltip": "Energiförbrukningen på det kreativa vätskelagrinsblocket.", + "text.autoconfig.refinedstorage.option.importer": "Importör", + "text.autoconfig.refinedstorage.option.importer.tooltip": "Konfiguration för importören.", + "text.autoconfig.refinedstorage.option.importer.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.importer.energyUsage.tooltip": "Energiförbrukningen på importören.", + "text.autoconfig.refinedstorage.option.exporter": "Exportör", + "text.autoconfig.refinedstorage.option.exporter.tooltip": "Konfiguration för exportören.", + "text.autoconfig.refinedstorage.option.exporter.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.exporter.energyUsage.tooltip": "Energiförbrukningen på exportören.", + "text.autoconfig.refinedstorage.option.detector": "Detektor", + "text.autoconfig.refinedstorage.option.detector.tooltip": "Konfiguration för detektorn.", + "text.autoconfig.refinedstorage.option.detector.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.detector.energyUsage.tooltip": "Energiförbrukningen på detektorn.", + "text.autoconfig.refinedstorage.option.constructor": "Konstruktör", + "text.autoconfig.refinedstorage.option.constructor.tooltip": "Konfiguration för konstruktören.", + "text.autoconfig.refinedstorage.option.constructor.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.constructor.energyUsage.tooltip": "Energiförbrukningen på konstruktören.", + "text.autoconfig.refinedstorage.option.destructor": "Förstörare", + "text.autoconfig.refinedstorage.option.destructor.tooltip": "Konfiguration för förstöraren.", + "text.autoconfig.refinedstorage.option.destructor.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.destructor.energyUsage.tooltip": "Energiförbrukningen på förstöraren.", + "text.autoconfig.refinedstorage.option.upgrade": "Uppgradering", + "text.autoconfig.refinedstorage.option.upgrade.tooltip": "Konfiguration för uppgraderingar.", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage": "Hastighetsuppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas per hastighetsuppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage": "Stack-uppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas av stack-uppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 uppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas av Fortune 1 uppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 uppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas av Fortune 2 uppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 uppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas per Fortune 3 uppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch uppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas av Silk Touch uppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage": "Regulatoruppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas av regulatoruppgraderingen.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage": "Räckviddsuppgraderingens energiförbrukning", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas per räckviddsuppgradering.", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage": "Kreativa räckviddsuppgraderingens energiförbrukningen", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage.tooltip": "Den extra energi som förbrukas av den kreativa räckviddsuppgraderingen.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange": "Räckviddsuppgraderingens räckvidd", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange.tooltip": "Det extra räckvidd som läggs till av räckviddsuppgraderingen.", + "text.autoconfig.refinedstorage.option.iface": "Gränssnitt", + "text.autoconfig.refinedstorage.option.iface.tooltip": "Konfiguration för gränssnittet.", + "text.autoconfig.refinedstorage.option.iface.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.iface.energyUsage.tooltip": "Energiförbrukningen på gränssnittet.", + "text.autoconfig.refinedstorage.option.externalStorage": "Externt lagringsutrymme", + "text.autoconfig.refinedstorage.option.externalStorage.tooltip": "Konfiguration för externt lagringsutrymme.", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage.tooltip": "Energiförbrukningen på det externa lagringsutrymmet.", + "text.autoconfig.refinedstorage.option.wirelessGrid": "Trådlöst rutnät", + "text.autoconfig.refinedstorage.option.wirelessGrid.tooltip": "Konfiguration för trådlösa rutnätet.", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity": "Energikapacitet", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity.tooltip": "Energikapaciteten för det trådlösa rutnätet.", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage": "Öppna energiförbrukning", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage.tooltip": "Energiförbrukningen för trådlösa rutnätet när den är öppen.", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage": "Sätt in energiförbrukning", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage.tooltip": "Energiförbrukningen som används av trådlösa rutnätet när resurser sätts in.", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage": "Plocka ut energiförbrukning", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage.tooltip": "Energiförbrukningen som används av trådlösa rutnätet när resurser plockas ut.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter": "Trådlös sändare", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.tooltip": "Konfiguration för den trådlösa sändaren.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage.tooltip": "Energiförbrukningen på den trådlösa sändaren.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange": "Standardtäckning", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange.tooltip": "Standardtäckningen för den trådlösa sändaren.", + "text.autoconfig.refinedstorage.option.storageMonitor": "Lagringsöversikt", + "text.autoconfig.refinedstorage.option.storageMonitor.tooltip": "Konfiguration för lagringsöversikten.", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage.tooltip": "Energiförbrukningen för lagringsöversikten.", + "text.autoconfig.refinedstorage.option.networkReceiver": "Nätverksmottagare", + "text.autoconfig.refinedstorage.option.networkReceiver.tooltip": "Konfiguration för nätverksmottagaren.", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage": "Energiförbrukning", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage.tooltip": "The energy used by the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage.option.networkTransmitter.tooltip": "Configuration for the Network Transmitter.", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage.tooltip": "The energy used by the Network Transmitter.", + "text.autoconfig.refinedstorage.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage.option.portableGrid.tooltip": "Configuration for the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity.tooltip": "The energy capacity of the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage.tooltip": "The energy used by the Portable Grid to open.", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage.tooltip": "The energy used by the Portable Grid to insert resources.", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage.tooltip": "The energy used by the Portable Grid to extract resources.", + "text.autoconfig.refinedstorage.option.securityCard": "Security Card", + "text.autoconfig.refinedstorage.option.securityCard.tooltip": "Configuration for the Security Card.", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage.tooltip": "The energy used by the Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard": "Fallback Security Card", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.tooltip": "Configuration for the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage.tooltip": "The energy used by the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.securityManager": "Security Manager", + "text.autoconfig.refinedstorage.option.securityManager.tooltip": "Configuration for the Security Manager.", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage.tooltip": "The energy used by the Security Manager.", + "text.autoconfig.refinedstorage.option.relay": "Relay", + "text.autoconfig.refinedstorage.option.relay.tooltip": "Konfiguration för reläet.", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage": "Inmatningsnätverkets energiförbrukning", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Inmatningsnätverkets energiförbrukning.", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Utmatningsnätverkets energiförbrukning (om inte i \"pass thru\" läge)", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Utmatningsnätverkets energiförbrukning (om inte i pass thru läge)", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", + "advancements.refinedstorage.root.description": "Använd en eller flera huvudenheter i ett nätverk för att förse det med energi", + "advancements.refinedstorage.connecting": "Ansluter", + "advancements.refinedstorage.connecting.description": "Använd kablar för att ansluta enheter med varandra, eller placera enheterna mot varandra", + "advancements.refinedstorage.drives": "Drives", + "advancements.refinedstorage.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage.interfacing_with_disks": "Interfacing with disks", + "advancements.refinedstorage.interfacing_with_disks.description": "Craft a Disk Interface to transfer resources between the storage network and storage disks", + "advancements.refinedstorage.storing_items": "Storing items", + "advancements.refinedstorage.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage.storing_fluids": "Storing fluids", + "advancements.refinedstorage.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage.importing": "Importing", + "advancements.refinedstorage.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage.exporting": "Exporting", + "advancements.refinedstorage.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage.upgrading": "Upgrading", + "advancements.refinedstorage.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage.storing_externally": "Storing externally", + "advancements.refinedstorage.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage.detecting": "Detecting", + "advancements.refinedstorage.detecting.description": "Use redstone to check resources stored in the storage network", + "advancements.refinedstorage.construction": "Construction", + "advancements.refinedstorage.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage.destruction": "Destruction", + "advancements.refinedstorage.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage.wireless": "Wireless", + "advancements.refinedstorage.wireless.description": "Access your resources wirelessly with a Wireless Grid", + "advancements.refinedstorage.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage.no_cables_required": "No cables required", + "advancements.refinedstorage.no_cables_required.description": "Add extra components to your storage network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage.portable_storage": "Portable storage", + "advancements.refinedstorage.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network", + "advancements.refinedstorage.security": "Security", + "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", + "advancements.refinedstorage.conditional_connecting": "Conditional connecting", + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" +} From 553d088d5fb77efcb14c851207af0b28e5e388a1 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:14 +0200 Subject: [PATCH 75/83] chore: update translation Turkish from crowdin --- .../assets/refinedstorage/lang/tr_tr.json | 62 ++++++++++++++++--- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json index bee0cba7a..a41547857 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/tr_tr.json @@ -37,6 +37,7 @@ "block.refinedstorage.security_manager.help": "Bu cihaz aktif olduğunda, varsayılan olarak ağı koruyacak ve tüm işlemleri engelleyecektir. Bir oyuncu için belirli işlemlere izin vermek veya reddetmek için Güvenlik Kartları eklemeye başlayın.", "block.refinedstorage.relay": "Röle", "block.refinedstorage.disk_interface": "Disk Arayüzü", + "block.refinedstorage.autocrafter": "Otomatik Üretici", "gui.refinedstorage.controller.redstone_mode_help": "Bu cihaz etkin olmadığında, depolama ağı bu cihazı enerji kaynağı olarak kullanamayacaktır.", "gui.refinedstorage.disk_drive.disks": "Diskler", "gui.refinedstorage.storage.redstone_mode_help": "Bu cihaz etkin olmadığında, içerdiği depolama alanına depolama ağı içinden erişilemeyecektir.", @@ -44,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Yapılandırılmış herhangi bir filtre olmadan, bu depolama alanına hiçbir kaynak kabul edilmeyecektir.", "gui.refinedstorage.storage.filter_mode.allow.help": "Yalnızca filtrelerde yapılandırılan kaynakların bu depolama alanına girmesine izin ver.", "gui.refinedstorage.storage.filter_mode.block.help": "Filtrelerde yapılandırılan kaynakların bu depolama alanına girmesine izin verme.", + "gui.refinedstorage.grid.view_type": "Görünüm türü", + "gui.refinedstorage.grid.view_type.all": "Hepsi", + "gui.refinedstorage.grid.view_type.autocraftable": "Otomatik üretilebilir", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Otomatik üretilemez", "gui.refinedstorage.grid.sorting.direction": "Sıralama yönü", "gui.refinedstorage.grid.sorting.direction.ascending": "Artan", "gui.refinedstorage.grid.sorting.direction.descending": "Azalan", @@ -59,9 +64,14 @@ "gui.refinedstorage.grid.synchronization_mode.off.help": "Arama kutusu metnini senkronize etme.", "gui.refinedstorage.grid.resource_type": "Kaynak türü", "gui.refinedstorage.grid.resource_type.all": "Hepsi", - "gui.refinedstorage.grid.resource_type.help": "Belirli kaynak türlerini filtreleyin.", + "gui.refinedstorage.grid.craft": "Üret", + "gui.refinedstorage.grid.autocraftable": "Bu malzeme otomatik üretilebilir", + "gui.refinedstorage.grid.pattern_in_inventory": "Bu malzemenin envanterinizde bir şablonu var.", + "gui.refinedstorage.grid.click_to_autocraft": "Otomatik üretmek için tıkla", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "Otomatik üretmek için CTRL + tıkla", "gui.refinedstorage.crafting_grid.move.network": "Eşyaları ağa taşı", "gui.refinedstorage.crafting_grid.move.inventory": "Eşyaları envantere taşı", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Yalnızca tarifte kullanılan eşyaları göstermek için SHIFT + CTRL tuşlarına bas.", "gui.refinedstorage.pattern_grid.create_pattern": "Şablon oluştur", "gui.refinedstorage.pattern_grid.clear": "Temizle", "gui.refinedstorage.pattern_grid.fuzzy_mode": "Belirsiz Mod", @@ -76,7 +86,7 @@ "gui.refinedstorage.pattern_grid.alternatives": "Alternatifler", "gui.refinedstorage.pattern_grid.alternatives.expand": "Genişlet", "gui.refinedstorage.screen_size": "Ekran boyutu", - "gui.refinedstorage.screen_size.stretch": "Esnet", + "gui.refinedstorage.screen_size.stretch": "Uzatılmış", "gui.refinedstorage.screen_size.small": "Küçük", "gui.refinedstorage.screen_size.medium": "Orta", "gui.refinedstorage.screen_size.large": "Büyük", @@ -116,6 +126,7 @@ "gui.refinedstorage.scheduling_mode.random.help": "Rastgele bir filtreyi kullan.", "gui.refinedstorage.priority": "Öncelik", "gui.refinedstorage.priority.storage_help": "Depolama ağının kaynakları ekleyeceği veya çıkaracağı sıra, en yüksek-ilk.", + "gui.refinedstorage.priority.crafter_help": "Bir kaynak için birden fazla şablon varsa, üretim görevleri Otomatik Üretici'de en yüksek önceliğe sahip şablona öncelik verecektir.", "gui.refinedstorage.configure_amount": "Miktarı yapılandır", "gui.refinedstorage.configure_amount.reset": "Sıfırla", "gui.refinedstorage.configure_amount.set": "Ayarla", @@ -143,7 +154,7 @@ "gui.refinedstorage.void_excess": "Fazla kaynakları geçersiz kıl", "gui.refinedstorage.void_excess.help": "Fazla kaynakları geçersiz kıl modu açıldığında ve depolama alanı dolduğunda, kaynakları kabul etmeye devam edecek ancak onları geçersiz kılacaktır.", "gui.refinedstorage.void_excess.allowlist_warning": "Fazlalığı geçersiz kıl modu yalnızca depolama, izin listesi modundayken çalışacaktır.", - "gui.refinedstorage.upgrade_slot": "Boş yükseltme yuvası", + "gui.refinedstorage.empty_upgrade_slot": "Boş yükseltme yuvası", "gui.refinedstorage.filter_slot.empty_filter": "Boş filtre", "gui.refinedstorage.filter_slot.left_click_for": "Şunun için Sol tıkla", "gui.refinedstorage.filter_slot.right_click_for": "Şunun için Sağ tıkla", @@ -160,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "Bu cihaz etkin olmadığında, ağ korunmayacaktır.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Yedek Güvenlik Kartı için Yuva.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Güvenlik Kartı olmadan her oyuncunun izinlerini ayarlamak için bu yuvaya bir Yedek Güvenlik Kartı ekleyin. Varsayılan olarak, tüm eylemler reddedilir.", - "gui.refinedstorage.relay.filter_help": "Röle, doğrudan geçiş modunda değilse giriş ağından çıkış ağına maruz bırakılması gereken kaynaklar.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Doğrudan geçiş", "gui.refinedstorage.relay.pass_through.help": "Bu cihazın tüm giriş ağı sinyalini olduğu gibi geçirmesi gerekip gerekmediği. Bileşenleri çıkış ağına seçici olarak maruz bırakmak için bunu kapatın.", "gui.refinedstorage.relay.pass_energy": "Enerjiyi geçir", @@ -169,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Bu cihazın depolamayı giriş ağından çıkış ağına geçirmesi gerekip gerekmediği.", "gui.refinedstorage.relay.pass_security": "Güvenliği geçir", "gui.refinedstorage.relay.pass_security.help": "Bu cihazın güvenlik ayarlarını giriş ağından çıkış ağına geçirmesi gerekip gerekmediği.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Yalnızca filtrelerde yapılandırılmış olan kaynakları giriş ağından çıkış ağına maruz bırakın.", "gui.refinedstorage.relay.filter_mode.block.help": "Filtrelerde yapılandırılmış olan kaynakları giriş ağından çıkış ağına maruz bırakmayın.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Yalnızca filtrelerde yapılandırılan kaynakların depolama disklerine veya ağa girmesine izin ver.", @@ -181,6 +194,27 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Kaynakları, depolama disklerinden depolama ağına yerleştirin.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Ağdan çıkar", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Kaynakları, depolama ağından depolama disklerine yerleştirin.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Boş şablon yuvası", + "gui.refinedstorage.autocrafter.lock_mode": "Kilit modu", + "gui.refinedstorage.autocrafter.lock_mode.never": "Asla", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Redstone darbesi alınana kadar kilitle", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Bağlı makine boşalana kadar kilitle", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Tüm çıkışlar alınana kadar kilitle", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Yüksek redstone sinyaline kadar kilitle", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Düşük redstone sinyaline kadar kilitle", + "gui.refinedstorage.autocrafter.edit_name": "Düzenle", + "gui.refinedstorage.autocrafter.chained": "Zincirlenmiş", + "gui.refinedstorage.autocrafter.chained.help": "Bu otomatik üretici bir zincirin parçası.", + "gui.refinedstorage.autocrafter.chained.head_help": "Bu otomatik üretici zincirin başı.", + "gui.refinedstorage.autocrafter.not_chained": "Zincirlenmemiş", + "gui.refinedstorage.autocrafter.not_chained.help": "Eğer başka bir otomatik üretici de buna bakıyorsa, bir zincir oluşturarak tek bir makineye daha fazla şablon girmesini sağlayacaktır.", + "gui.refinedstorage.autocrafting_preview.title": "Otomatik Üretim", + "gui.refinedstorage.autocrafting_preview.start": "Başlat", + "gui.refinedstorage.autocrafting_preview.pending": "Beklemede", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "Eksik kaynaklar var.", + "gui.refinedstorage.autocrafting_preview.available": "Kullanılabilir: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "Üretmek için: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Eksik: %s", "item.refinedstorage.controller.help": "Depolama ağına enerji sağlar. Tek bir depolama ağında birden fazlasına izin verilir.", "item.refinedstorage.creative_controller.help": "Depolama ağına sonsuz enerji sağlar.", "item.refinedstorage.disk_drive.help": "Depolama ağına, depolama alanı sağlamak için depolama disklerini kabul eder.", @@ -196,6 +230,7 @@ "item.refinedstorage.constructor.help": "Depolama ağındaki blokları dünyaya yerleştirir.", "item.refinedstorage.destructor.help": "Dünyadaki blokları yok eder ve depolama ağına yerleştirir.", "item.refinedstorage.relay.help": "Bir depolama ağının tüm bölümlerini açın veya kapatın ve ağınızın yeni dallarını oluşturun.", + "item.refinedstorage.autocrafter.help": "Otomatik üretilebilir kaynakları depolamak için şablonları kabul eder.", "item.refinedstorage.quartz_enriched_iron": "Kuvarsla Zenginleştirilmiş Demir", "item.refinedstorage.quartz_enriched_copper": "Kuvarsla Zenginleştirilmiş Bakır", "item.refinedstorage.processor_binding": "İşlemci Bağlayıcısı", @@ -278,7 +313,7 @@ "item.refinedstorage.network_card.bound": "%s boyutunda %d, %d, %d konumuna bağlanıldı.", "item.refinedstorage.network_transmitter.help": "Bir ağ sinyalini kablosuz olarak iletir. Ağ Alıcısı ile eşleştirilmiş Ağ Kartı gerekir.", "item.refinedstorage.network_receiver.help": "Ağ sinyalini kablosuz olarak alır. Bu bloğa bir Ağ Kartı bağlayın.", - "item.refinedstorage.cable.help": "Depolama ağı cihazlarını birbirine bağlar.", + "item.refinedstorage.cable.help": "Depolama ağı cihazlarını birbirine bağlar. Tam bloklar, herhangi bir renge bağlanır. Kablo blokları, yalnızca aynı renge veya varsayılan renge (gri) bağlanır.", "item.refinedstorage.security_card": "Güvenlik Kartı", "item.refinedstorage.security_card.cleared_configuration": "Yapılandırma temizlendi.", "item.refinedstorage.security_card.unbound": "Bağlanmamış.", @@ -361,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Depolama Diskileri", "tag.item.refinedstorage.wireless_transmitters": "Kablosuz Vericiler", "tag.item.refinedstorage.disk_interfaces": "Disk Arayüzleri", + "tag.item.refinedstorage.crafters": "Üreticiler", "text.autoconfig.refinedstorage.title": "Refined Storage Yapılandırması", "refinedstorage.configuration.title": "Refined Storage Yapılandırması", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Yapılandırması", @@ -369,8 +405,8 @@ "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "Kaydırma çubuklarının yumuşak kaydırmayı kullanıp kullanmayacağı.", "text.autoconfig.refinedstorage.option.screenSize": "Ekran boyutu", "text.autoconfig.refinedstorage.option.screenSize.tooltip": "Ekran boyutu.", - "text.autoconfig.refinedstorage.option.maxRowsStretch": "Ekran boyutu esnetildiğinde en fazla satır miktarı", - "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "Ekran boyutu esnetildiğinde görüntülenebilecek maksimum satır miktarı.", + "text.autoconfig.refinedstorage.option.maxRowsStretch": "Ekran boyutu uzatıldığında en fazla satır miktarı", + "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "Ekran boyutu uzatıldığında görüntülenebilecek maksimum satır miktarı.", "text.autoconfig.refinedstorage.option.grid": "Terminal", "text.autoconfig.refinedstorage.option.grid.tooltip": "Terminal için yapılandırma.", "text.autoconfig.refinedstorage.option.grid.largeFont": "Büyük yazı tipi", @@ -393,6 +429,8 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "Sıralama yönü.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sıralama türü", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "Sıralama türü.", + "text.autoconfig.refinedstorage.option.grid.viewType": "Görünüm türü", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "Görünüm türü.", "text.autoconfig.refinedstorage.option.craftingGrid": "Üretim Terminali", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Üretim Terminali için yapılandırma.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Enerji kullanımı", @@ -553,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Giriş ağı enerji kullanımı.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Çıkış ağı enerji kullanımı (doğrudan geçiş modunda değilse)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Çıkış ağı enerji kullanımı (doğrudan geçiş modunda değilse).", + "text.autoconfig.refinedstorage.option.autocrafter": "Otomatik Üretici", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Otomatik Üretici için yapılandırma.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Enerji kullanımı", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "Otomatik Üretici tarafından kullanılan enerji.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Ağınıza enerji sağlamak için bir depolama ağında bir veya birden fazla Denetleyici kullanın", "advancements.refinedstorage.connecting": "Bağlanıyor", "advancements.refinedstorage.connecting.description": "Cihazları birbirlerine bağlamak veya cihazları birbirlerine doğru yerleştirmek için Kablo kullanın", @@ -595,5 +639,7 @@ "advancements.refinedstorage.security": "Güvenlik", "advancements.refinedstorage.security.description": "Depolama ağınızı bir Güvenlik Yöneticisi ve Güvenlik Kartı ile güvence altına alın", "advancements.refinedstorage.conditional_connecting": "Koşullu bağlantı", - "advancements.refinedstorage.conditional_connecting.description": "Bir depolama ağının tüm bölümlerini açın veya kapatın ve bir Röle ile ağınızın yeni dallarını oluşturun" + "advancements.refinedstorage.conditional_connecting.description": "Bir depolama ağının tüm bölümlerini açın veya kapatın ve bir Röle ile ağınızın yeni dallarını oluşturun", + "advancements.refinedstorage.autocrafting": "Otomatik Üretim", + "advancements.refinedstorage.autocrafting.description": "Bir Şablon Terminalinde oluşturulan şablonları kullanarak bir Otomatik Üretici ile üretimi otomatikleştirin" } From 1d273b4ac5c367cf04ed806e1658d6435570b516 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:15 +0200 Subject: [PATCH 76/83] chore: update translation Chinese Simplified from crowdin --- .../assets/refinedstorage/lang/zh_cn.json | 456 ++++++++++-------- 1 file changed, 266 insertions(+), 190 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_cn.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_cn.json index c585ecc29..11071c7f0 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_cn.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_cn.json @@ -2,10 +2,11 @@ "mod.refinedstorage": "精致存储", "block.refinedstorage.cable": "线缆", "block.refinedstorage.quartz_enriched_iron_block": "富石英铁块", - "block.refinedstorage.quartz_enriched_copper_block": "Block of Quartz Enriched Copper", + "block.refinedstorage.quartz_enriched_copper_block": "富石英铜块", "block.refinedstorage.disk_drive": "磁盘驱动器", "block.refinedstorage.machine_casing": "机器外壳", "block.refinedstorage.grid": "终端", + "block.refinedstorage.pattern_grid": "样板终端", "block.refinedstorage.crafting_grid": "合成终端", "block.refinedstorage.controller": "控制器", "block.refinedstorage.creative_controller": "创造控制器", @@ -35,7 +36,8 @@ "block.refinedstorage.security_manager": "权限管理器", "block.refinedstorage.security_manager.help": "当此设备处于激活状态时会默认阻止所有操作来保护网络。添加安全卡以配置特定玩家对于特定操作的权限", "block.refinedstorage.relay": "中继器", - "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.disk_interface": "磁盘接口", + "block.refinedstorage.autocrafter": "自动合成仓", "gui.refinedstorage.controller.redstone_mode_help": "当此设备处于非激活状态时,存储网络将无法将此设备用作能源来源。", "gui.refinedstorage.disk_drive.disks": "磁盘", "gui.refinedstorage.storage.redstone_mode_help": "当此设备处于非激活状态时,其中的存储空间将无法从存储网络内访问。", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "在没有配置任何过滤器的情况下,此存储将不接受任何资源。", "gui.refinedstorage.storage.filter_mode.allow.help": "只允许过滤器配置中的资源进入此存储。", "gui.refinedstorage.storage.filter_mode.block.help": "禁止过滤器配置中的资源进入此存储。", + "gui.refinedstorage.grid.view_type": "视图类型", + "gui.refinedstorage.grid.view_type.all": "全部", + "gui.refinedstorage.grid.view_type.autocraftable": "可自动合成", + "gui.refinedstorage.grid.view_type.non_autocraftable": "不可自动合成", "gui.refinedstorage.grid.sorting.direction": "排序方式", "gui.refinedstorage.grid.sorting.direction.ascending": "升序", "gui.refinedstorage.grid.sorting.direction.descending": "降序", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "最后修改时间", "gui.refinedstorage.grid.auto_selected": "自动选取", "gui.refinedstorage.grid.auto_selected.help": "在打开终端时是否自动选择搜索框。", - "gui.refinedstorage.grid.synchronizer": "同步模式", - "gui.refinedstorage.grid.synchronizer.off": "关闭", - "gui.refinedstorage.grid.synchronizer.off.help": "不同步搜索框文本。", + "gui.refinedstorage.grid.synchronization_mode": "同步模式", + "gui.refinedstorage.grid.synchronization_mode.off": "关闭", + "gui.refinedstorage.grid.synchronization_mode.off.help": "不同步搜索框文本", "gui.refinedstorage.grid.resource_type": "存储通道", "gui.refinedstorage.grid.resource_type.all": "全部", - "gui.refinedstorage.grid.resource_type.help": "从特定的存储通道中过滤资源。", + "gui.refinedstorage.grid.craft": "合成", + "gui.refinedstorage.grid.autocraftable": "该资源可合成", + "gui.refinedstorage.grid.pattern_in_inventory": "此资源在背包中存在样板。", + "gui.refinedstorage.grid.click_to_autocraft": "单击以自动合成", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + 单击以自动合成。", "gui.refinedstorage.crafting_grid.move.network": "将物品移动到网络。", "gui.refinedstorage.crafting_grid.move.inventory": "将物品移动到物品栏。", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "按下 SHIFT + CTRL 只显示该配方中使用的项目。", + "gui.refinedstorage.pattern_grid.create_pattern": "创建样板", + "gui.refinedstorage.pattern_grid.clear": "清空", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "模糊匹配模式", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "匹配模式输入,忽略元件", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "精确匹配模式输入", + "gui.refinedstorage.pattern_grid.processing.inputs": "输入", + "gui.refinedstorage.pattern_grid.processing.outputs": "输出", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "这些资源将被从存储网络中提取并插入到目标库存中", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "这些达到物品达到合成后达到预期并返回网络认为合成任务成功完成", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "单机以配置数量和替代方案", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "允许的替代方案", + "gui.refinedstorage.pattern_grid.alternatives": "代替方案", + "gui.refinedstorage.pattern_grid.alternatives.expand": "扩展", "gui.refinedstorage.screen_size": "界面大小", "gui.refinedstorage.screen_size.stretch": "自适应", "gui.refinedstorage.screen_size.small": "小", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "只允许过滤器配置中的资源进入存储网络。", "gui.refinedstorage.importer.filter_mode.block.help": "禁止过滤器配置中的资源进入存储网络。", "gui.refinedstorage.wireless_transmitter.distance": "%d 方块", + "gui.refinedstorage.wireless_transmitter.inactive": "不活动", "gui.refinedstorage.storage_monitor.filter_help": "要显示的资源。", "gui.refinedstorage.redstone_mode": "红石模式", "gui.refinedstorage.redstone_mode.ignore": "忽略红石信号", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "使用随机过滤器。", "gui.refinedstorage.priority": "优先级", "gui.refinedstorage.priority.storage_help": "存储网络存入或提取资源的顺序,从高到低。", - "gui.refinedstorage.amount": "物品数量", - "gui.refinedstorage.amount.reset": "重置", - "gui.refinedstorage.amount.set": "设置", + "gui.refinedstorage.priority.crafter_help": "如果一个资源存在多个样板,合成任务将按照这些样板的装配室优先级进行合成。", + "gui.refinedstorage.configure_amount": "配置数量", + "gui.refinedstorage.configure_amount.reset": "重置", + "gui.refinedstorage.configure_amount.set": "设定", "gui.refinedstorage.filter_mode": "过滤模式", "gui.refinedstorage.filter_mode.allow": "白名单", "gui.refinedstorage.filter_mode.block": "黑名单", "gui.refinedstorage.fuzzy_mode": "模糊模式", "gui.refinedstorage.fuzzy_mode.on": "开启", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "精确匹配白名单或黑名单的过滤器。", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "精确匹配过滤器。", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "从存储网络提取时精确匹配过滤器。", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "从源提取时精确匹配过滤器。", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "匹配允许列表或组织列表的筛选器,忽略组件", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "匹配过滤器,忽略组件", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "从存储网络中提取时匹配筛选器,忽略组件", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "从源中提取时匹配过滤器,忽略组件", "gui.refinedstorage.fuzzy_mode.off": "关闭", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "在白名单或黑名单的过滤器中匹配时不比较NBT标签。", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "在匹配过滤器时不比较NBT标签。", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "从存储网络提取时,在过滤器中匹配时不比较NBT标签。", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "从源提取时,在过滤器中匹配时不比较NBT标签。", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "与允许列表或阻止列表的筛选器完全匹配", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "精确匹配过滤器", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "从存储网络提取时与过滤器精确匹配", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "从源中提取时与过滤器精确匹配", "gui.refinedstorage.access_mode": "访问模式", "gui.refinedstorage.access_mode.insert_extract": "插入和提取", "gui.refinedstorage.access_mode.insert_extract.help": "存储网络可以插入或从此存储中提取。", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "销毁过量资源", "gui.refinedstorage.void_excess.help": "当销毁过量模式被打开且存储已满时,将继续接受资源并将其直接销毁。", "gui.refinedstorage.void_excess.allowlist_warning": "销毁过量仅在白名单模式下才会生效", - "gui.refinedstorage.upgrade_slot": "空升级槽", + "gui.refinedstorage.empty_upgrade_slot": "空升级槽位", "gui.refinedstorage.filter_slot.empty_filter": "空过滤器", "gui.refinedstorage.filter_slot.left_click_for": "左键点击", "gui.refinedstorage.filter_slot.right_click_for": "右键点击", "gui.refinedstorage.filter_slot.click_to_clear": "点击清除", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "单击以确定数量", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "按住shift清除", "gui.refinedstorage.regulator_upgrade.filter_help": "目标中应调节的资源。", "gui.refinedstorage.network_transmitter.status.inactive": "未激活", "gui.refinedstorage.network_transmitter.status.missing_network_card": "缺少网络卡", @@ -143,43 +171,68 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "当此设备处于未激活状态时,将不能保护网络。", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "后备安全卡卡槽", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "在此槽位加入后备权限卡来设置没有单独使用权限卡配置的玩家的权限。默认情况下所有操作均被阻止。", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", - "gui.refinedstorage.relay.pass_through": "Pass-through", - "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", - "gui.refinedstorage.relay.pass_energy": "Pass energy", - "gui.refinedstorage.relay.pass_energy.help": "Whether this device should pass the energy buffer from the input network to the output network.", - "gui.refinedstorage.relay.pass_storage": "Pass storage", - "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", - "gui.refinedstorage.relay.pass_security": "Pass security", - "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", - "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", - "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", - "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", - "gui.refinedstorage.disk_interface.filter_mode.block.help": "Disallow resources into the storage disks or into the network that are configured in the filters.", - "gui.refinedstorage.disk_interface.in": "In", - "gui.refinedstorage.disk_interface.out": "Out", - "gui.refinedstorage.disk_interface.filter_help": "The resources that may or may not be allowed transferred from or into the provided storage disks, depending if the device is in allowlist or blocklist mode.", - "gui.refinedstorage.disk_interface.transfer_mode": "Transfer mode", - "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network": "Insert into network", - "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", - "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", - "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.pass_through": "传递", + "gui.refinedstorage.relay.pass_through.help": "此设备是否应按原样通过整个输入网络信号。关闭此选项可有选择地将元件暴露于输出网络。", + "gui.refinedstorage.relay.pass_energy": "能量传递", + "gui.refinedstorage.relay.pass_energy.help": "此器件是否应将能量缓冲器从输入网络传递到输出网络。", + "gui.refinedstorage.relay.pass_storage": "存储传递", + "gui.refinedstorage.relay.pass_storage.help": "此设备是否应将存储从输入网络传递到输出网络。", + "gui.refinedstorage.relay.pass_security": "通过安全检验", + "gui.refinedstorage.relay.pass_security.help": "此设备是否应将安全设置从输入网络传递到输出网络。", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", + "gui.refinedstorage.relay.filter_mode.allow.help": "仅将在筛选器中配置的资源从输入网络公开到输出网络。", + "gui.refinedstorage.relay.filter_mode.block.help": "不要将输入网络中的资源公开给在筛选器中配置的输出网络。", + "gui.refinedstorage.disk_interface.filter_mode.allow.help": "仅允许资源进入在筛选器中配置的存储磁盘或网络", + "gui.refinedstorage.disk_interface.filter_mode.block.help": "不允许资源进入在筛选器中配置的存储磁盘或网络。", + "gui.refinedstorage.disk_interface.in": "里面", + "gui.refinedstorage.disk_interface.out": "外面", + "gui.refinedstorage.disk_interface.filter_help": "允许或不允许从提供的存储磁盘传输或传输到提供的存储磁盘的资源,具体取决于设备是处于白名单模式还是黑名单模式。", + "gui.refinedstorage.disk_interface.transfer_mode": "转移模式", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network": "插入网络", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "将存储磁盘中的资源插入存储网络", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "从网络中提取", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "将存储网络中的资源插入存储磁盘。", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "空样板栏位", + "gui.refinedstorage.autocrafter.lock_mode": "锁定模式", + "gui.refinedstorage.autocrafter.lock_mode.never": "从不", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "直到收到红石脉冲再进行下一次合成", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "直到连接的机器的物品为空时再进行下一次合成", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "直到本次合成完成后再进行下一次合成", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "收到高红石信号才进行合成", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "收到低红石信号才进行合成", + "gui.refinedstorage.autocrafter.edit_name": "编辑", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "如果另一个自动合成仓面向当前合成仓,他们会形成一个链状结构,从而让一个机器可以拥有更多的样板。", + "gui.refinedstorage.autocrafting_preview.title": "自动合成", + "gui.refinedstorage.autocrafting_preview.start": "开始", + "gui.refinedstorage.autocrafting_preview.pending": "待处理", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "缺少资源。", + "gui.refinedstorage.autocrafting_preview.available": "可用: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "合成数量:%s", + "gui.refinedstorage.autocrafting_preview.missing": "缺少:%s", "item.refinedstorage.controller.help": "为存储网络提供能量。一个存储网络中允许包含多个。", "item.refinedstorage.creative_controller.help": "为存储网络提供无限能源。", "item.refinedstorage.disk_drive.help": "接受存储磁盘,为存储网络提供存储空间。", - "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", + "item.refinedstorage.disk_interface.help": "在存储网络和提供的存储磁盘之间传输资源。", "item.refinedstorage.grid.help": "允许与存储网络交互。", "item.refinedstorage.crafting_grid.help": "允许与存储网络交互,并具有合成能力。", + "item.refinedstorage.pattern_grid.help": "允许创建用于自动制作的图案", "item.refinedstorage.importer.help": "从外部源导入资源到存储网络。", "item.refinedstorage.exporter.help": "从存储网络将资源导出到外部目标。", "item.refinedstorage.interface.help": "充当输入总线和输出总线的结合。", "item.refinedstorage.external_storage.help": "为存储网络提供来自外部源的存储。", "item.refinedstorage.detector.help": "如果存储网络包含等于、大于或小于给定数量的资源,则发出红石信号。", - "item.refinedstorage.constructor.help": "从存储网络中放置方块到世界中。", + "item.refinedstorage.constructor.help": "从存储网络中的方块放置方块到世界中。", "item.refinedstorage.destructor.help": "从世界中销毁方块并将其放入存储网络。", - "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.relay.help": "打开或关闭存储网络的整个部分,并创建网络的新分支。", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "富石英铁", - "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", + "item.refinedstorage.quartz_enriched_copper": "富石英铜", "item.refinedstorage.processor_binding": "处理器绑定", "item.refinedstorage.silicon": "硅", "item.refinedstorage.raw_basic_processor": "原始基础处理器", @@ -196,11 +249,11 @@ "item.refinedstorage.4k_storage_disk": "4K 存储磁盘", "item.refinedstorage.16k_storage_disk": "16K 存储磁盘", "item.refinedstorage.64k_storage_disk": "64K 存储磁盘", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "存储%s个项目。当空的时候,在拿起的时候使用,以返回存储部分。可通过与存储部件组合升级到更高级", + "item.refinedstorage.storage_block.help": "存储%s个项目。当空的时候,在拿着的时候使用,以返回存储部分和机器外壳。可通过与存储部分组合升级到更高级", "item.refinedstorage.creative_storage_disk": "创造存储磁盘", - "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", - "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", + "item.refinedstorage.creative_storage_disk.help": "存储无限的物品", + "item.refinedstorage.creative_storage_block.help": "存储无限的物品", "item.refinedstorage.64b_fluid_storage_part": "64B 流体存储原件", "item.refinedstorage.256b_fluid_storage_part": "256B 流体存储原件", "item.refinedstorage.1024b_fluid_storage_part": "1024B 流体存储原件", @@ -209,33 +262,33 @@ "item.refinedstorage.256b_fluid_storage_disk": "256B 流体存储磁盘", "item.refinedstorage.1024b_fluid_storage_disk": "1024B 流体存储磁盘", "item.refinedstorage.4096b_fluid_storage_disk": "4096B 流体存储磁盘", - "item.refinedstorage.fluid_storage_disk.help": "Stores %s buckets.", - "item.refinedstorage.fluid_storage_block.help": "Stores %s buckets.", + "item.refinedstorage.fluid_storage_disk.help": "存储%s桶流体", + "item.refinedstorage.fluid_storage_block.help": "存储%s桶流体", "item.refinedstorage.creative_fluid_storage_disk": "创造流体存储磁盘", - "item.refinedstorage.creative_fluid_storage_disk.help": "Stores an infinite amount of buckets.", - "item.refinedstorage.creative_fluid_storage_block.help": "Stores an infinite amount of buckets.", + "item.refinedstorage.creative_fluid_storage_disk.help": "存储无限的流体", + "item.refinedstorage.creative_fluid_storage_block.help": "存储无限的流体", "item.refinedstorage.storage_housing": "磁盘外壳", "item.refinedstorage.construction_core": "成型核心", "item.refinedstorage.destruction_core": "破坏核心", "item.refinedstorage.wrench": "扳手", - "item.refinedstorage.wrench.help": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage.wrench.help": "用于旋转方块块或按下SHIFT键时用于拆除精制存储的方块", "item.refinedstorage.upgrade": "空白升级", "item.refinedstorage.speed_upgrade": "速度升级", - "item.refinedstorage.speed_upgrade.help": "Increases the operation speed of a storage network device.", + "item.refinedstorage.speed_upgrade.help": "提高存储网络设备的操作速度", "item.refinedstorage.stack_upgrade": "堆叠升级", - "item.refinedstorage.stack_upgrade.help": "Increases the amount of resources that the storage network device handles per operation.", + "item.refinedstorage.stack_upgrade.help": "增加存储网络设备每次操作处理的资源量", "item.refinedstorage.silk_touch_upgrade": "精准采集升级", - "item.refinedstorage.silk_touch_upgrade.help": "Acts like the Silk Touch enchantment on a pickaxe.", + "item.refinedstorage.silk_touch_upgrade.help": "像附魔了精准采集的镐子一样工作", "item.refinedstorage.fortune_upgrade.1": "时运 I 升级", "item.refinedstorage.fortune_upgrade.2": "时运 II 升级", "item.refinedstorage.fortune_upgrade.3": "时运 III 升级", - "item.refinedstorage.fortune_upgrade.help": "Yields more resources when breaking a block. Acts like the Fortune enchantment on a pickaxe.", + "item.refinedstorage.fortune_upgrade.help": "破坏方块时掉落更多资源。就像附魔了时运的镐子一样工作", "item.refinedstorage.regulator_upgrade": "调节器升级", "item.refinedstorage.regulator_upgrade.help": "在输出总线中,仅在目标中的数量少于升级中配置的数量时导出。在输入总线中,仅在目标中的数量大于升级中配置的数量时导入。使用物品进行配置。", "item.refinedstorage.range_upgrade": "范围升级", - "item.refinedstorage.range_upgrade.help": "Increases the range of the Wireless Transmitter.", + "item.refinedstorage.range_upgrade.help": "增加无线增幅器的范围", "item.refinedstorage.creative_range_upgrade": "创造范围升级", - "item.refinedstorage.creative_range_upgrade.help": "Provides infinite range for the Wireless Transmitter. Does not work cross-dimensionally.", + "item.refinedstorage.creative_range_upgrade.help": "为无线发射器提供无限范围但不能跨维度工作", "item.refinedstorage.wireless_grid": "无线终端", "item.refinedstorage.creative_wireless_grid": "创造无线终端", "item.refinedstorage.wireless_transmitter.help": "为诸如无线终端之类的物品提供无线网络访问。一个区域内允许放置多个以扩大覆盖范围。", @@ -258,9 +311,9 @@ "item.refinedstorage.network_card.unbound": "未绑定。", "item.refinedstorage.network_card.bound_help": "插入到网络变送器中。在潜行状态下使用以清除绑定。", "item.refinedstorage.network_card.bound": "绑定到 %d, %d, %d 在 %s 中。", - "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", - "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.network_transmitter.help": "无线传输网络信号。需要与网络接收器配对的网卡。", + "item.refinedstorage.network_receiver.help": "无线接收网络信号。将网卡绑定到方块。", + "item.refinedstorage.cable.help": "连接存储网络设备。对于完整的块,将连接到任何颜色。对于线缆,将仅连接到相同颜色或默认颜色(灰色)", "item.refinedstorage.security_card": "权限卡", "item.refinedstorage.security_card.cleared_configuration": "已清除配置。", "item.refinedstorage.security_card.unbound": "未绑定。", @@ -269,8 +322,11 @@ "item.refinedstorage.security_card.bound.help": "右键使用以进行配置,潜行状态下使用以清除当前配置与绑定", "item.refinedstorage.fallback_security_card": "后备权限卡", "item.refinedstorage.fallback_security_card.help": "如果权限管理器中没有对应玩家的权限卡则将后备权限卡的权限配置应用于该玩家。右键使用以进行配置,潜行状态使用以清除当前配置", - "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", - "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.portable_grid.help": "允许在未连接到存储网络时与存储磁盘进行交互。可在世界中或从您的背包中被使用", + "item.refinedstorage.storage_monitor.help": "用于显示存储网络中特定资源的当前数量的方块。按住Shift键并右键单击可进行配置。左键单击可提取一组堆叠的物品,Shift+左键单击可取出单个物品,右键单击可放入物品,多次右键单击可批量放入物品。", + "item.refinedstorage.pattern": "样板", + "item.refinedstorage.pattern.fuzzy_mode": "模糊匹配模式", + "item.refinedstorage.pattern.help": "在合成仓中用于存储要制作的配方。蹲下时使用以清除。", "misc.refinedstorage.stored": "存储:%s", "misc.refinedstorage.stored_with_capacity": "存储:%s / %s (%d%%)", "misc.refinedstorage.total": "总数:%d", @@ -298,11 +354,15 @@ "misc.refinedstorage.no_permission.build.break": "你没有破坏 %s 的权限", "misc.refinedstorage.no_permission.build.rotate": "你没有旋转 %s 的权限", "misc.refinedstorage.no_permission.build.dismantle": "你没有拆除 %s 的权限", + "misc.refinedstorage.pattern.crafting": "合成样板", + "misc.refinedstorage.pattern.processing": "加工样板", + "misc.refinedstorage.pattern.stonecutter": "切石机样板", + "misc.refinedstorage.pattern.smithing_table": "锻造台样板", "key.refinedstorage.focus_search_bar": "聚焦搜索栏", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "清除合成终端矩阵到网络", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "清除合成终端矩阵到库存", "key.refinedstorage.open_wireless_grid": "打开无线终端", - "key.refinedstorage.open_portable_grid": "Open Portable Grid", + "key.refinedstorage.open_portable_grid": "打开样板终端", "refinedstorage.subtitle.wrench": "使用扳手", "permission.refinedstorage.insert": "存入", "permission.refinedstorage.insert.description": "玩家是否可以向存储网络中存入资源", @@ -316,220 +376,234 @@ "permission.refinedstorage.build.description": "玩家是否可以在网络中添加或者移除设备", "permission.refinedstorage.security": "权限", "permission.refinedstorage.security.description": "玩家是否可以管理网络的权限设置", - "tag.item.refinedstorage.cables": "Cables", - "tag.item.refinedstorage.constructors": "Constructors", - "tag.item.refinedstorage.controllers": "Controllers", - "tag.item.refinedstorage.crafting_grids": "Crafting Grids", - "tag.item.refinedstorage.creative_controllers": "Creative Controllers", - "tag.item.refinedstorage.destructors": "Destructors", - "tag.item.refinedstorage.detectors": "Detectors", - "tag.item.refinedstorage.exporters": "Exporters", - "tag.item.refinedstorage.external_storages": "External Storages", - "tag.item.refinedstorage.fluid_storage_disks": "Fluid Storage Disks", - "tag.item.refinedstorage.grids": "Grids", - "tag.item.refinedstorage.importers": "Importers", - "tag.item.refinedstorage.network_receivers": "Network Receivers", - "tag.item.refinedstorage.network_transmitters": "Network Transmitters", - "tag.item.refinedstorage.relays": "Relays", - "tag.item.refinedstorage.security_managers": "Security Managers", - "tag.item.refinedstorage.storage_disks": "Storage Disks", - "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", - "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", - "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", - "refinedstorage.configuration.title": "Refined Storage Configuration", - "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", - "refinedstorage.configuration.section.refinedstorage.common.toml.title": "Refined Storage Configuration", + "tag.item.refinedstorage.cables": "线缆", + "tag.item.refinedstorage.constructors": "成型面板", + "tag.item.refinedstorage.controllers": "控制器", + "tag.item.refinedstorage.crafting_grids": "合成网络", + "tag.item.refinedstorage.pattern_grids": "样板网络", + "tag.item.refinedstorage.creative_controllers": "创造控制器", + "tag.item.refinedstorage.destructors": "析构函数", + "tag.item.refinedstorage.detectors": "探测器", + "tag.item.refinedstorage.exporters": "输出接口", + "tag.item.refinedstorage.external_storages": "外部储存总线", + "tag.item.refinedstorage.fluid_storage_disks": "流体磁盘", + "tag.item.refinedstorage.grids": "终端", + "tag.item.refinedstorage.importers": "输入接口", + "tag.item.refinedstorage.network_receivers": "网络接收器", + "tag.item.refinedstorage.network_transmitters": "网络变送器", + "tag.item.refinedstorage.relays": "中继器", + "tag.item.refinedstorage.security_managers": "安全管理器", + "tag.item.refinedstorage.storage_disks": "存储磁盘", + "tag.item.refinedstorage.wireless_transmitters": "无线发射器", + "tag.item.refinedstorage.disk_interfaces": "磁盘接口", + "tag.item.refinedstorage.crafters": "合成仓", + "text.autoconfig.refinedstorage.title": "精致存储配置", + "refinedstorage.configuration.title": "精致存储配置", + "refinedstorage.configuration.section.refinedstorage.common.toml": "精致存储配置", + "refinedstorage.configuration.section.refinedstorage.common.toml.title": "精致存储配置", "text.autoconfig.refinedstorage.option.smoothScrolling": "平滑滚动", - "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "Whether scrollbars should use smooth scrolling.", + "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "滚动条是否启用平滑滚动", "text.autoconfig.refinedstorage.option.screenSize": "界面大小", - "text.autoconfig.refinedstorage.option.screenSize.tooltip": "The screen size.", + "text.autoconfig.refinedstorage.option.screenSize.tooltip": "屏幕尺寸", "text.autoconfig.refinedstorage.option.maxRowsStretch": "截面尺寸拉伸时的最大显示行数", - "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "The maximum amount of rows that can be displayed when the screen size is stretched.", + "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "屏幕最大可现实的行数", "text.autoconfig.refinedstorage.option.grid": "终端", - "text.autoconfig.refinedstorage.option.grid.tooltip": "Configuration for the Grid.", + "text.autoconfig.refinedstorage.option.grid.tooltip": "终端配置", "text.autoconfig.refinedstorage.option.grid.largeFont": "大字体", - "text.autoconfig.refinedstorage.option.grid.largeFont.tooltip": "Whether the Grid should use a large font for quantities.", + "text.autoconfig.refinedstorage.option.grid.largeFont.tooltip": "终端是否实用更大字体显示物品数量", "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown": "按住 SHIFT 时阻止排序", - "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown.tooltip": "Whether the Grid should avoid sorting when shift is held down.", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown.tooltip": "按住shift时,终端是否应避免排序", "text.autoconfig.refinedstorage.option.grid.detailedTooltip": "详细提示", - "text.autoconfig.refinedstorage.option.grid.detailedTooltip.tooltip": "Whether the Grid should show a detailed tooltip.", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip.tooltip": "终端是否应详细显示工具信息", "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery": "记住搜索查询", - "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery.tooltip": "Whether the search query should persist when closing and re-opening the Grid.", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery.tooltip": "关闭终端后是否保留搜索内容", "text.autoconfig.refinedstorage.option.grid.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.grid.energyUsage.tooltip": "The energy used by the Grid.", + "text.autoconfig.refinedstorage.option.grid.energyUsage.tooltip": "终端使用的能源", "text.autoconfig.refinedstorage.option.grid.autoSelected": "自动选择搜索框", - "text.autoconfig.refinedstorage.option.grid.autoSelected.tooltip": "Whether the search box should be auto-selected when opening the Grid.", + "text.autoconfig.refinedstorage.option.grid.autoSelected.tooltip": "打开终端时是否显示搜索框", "text.autoconfig.refinedstorage.option.grid.synchronizer": "同步器", - "text.autoconfig.refinedstorage.option.grid.synchronizer.tooltip": "The synchronization type of the Grid search box.", - "text.autoconfig.refinedstorage.option.grid.resourceType": "Resource type", - "text.autoconfig.refinedstorage.option.grid.resourceType.tooltip": "The resource type to be shown.", + "text.autoconfig.refinedstorage.option.grid.synchronizer.tooltip": "终端搜索框同步类型", + "text.autoconfig.refinedstorage.option.grid.resourceType": "物品类型", + "text.autoconfig.refinedstorage.option.grid.resourceType.tooltip": "显示的物品类型", "text.autoconfig.refinedstorage.option.grid.sortingDirection": "排序方向", - "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", + "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "排序方向", "text.autoconfig.refinedstorage.option.grid.sortingType": "排序类型", - "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "排序类型", + "text.autoconfig.refinedstorage.option.grid.viewType": "视图类型", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "视图类型", "text.autoconfig.refinedstorage.option.craftingGrid": "合成终端", - "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "终端配置", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "合成终端使用的能源", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "合成矩阵关闭行为", - "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "关闭合成终端时,合成框会发生什么变化", + "text.autoconfig.refinedstorage.option.patternGrid": "样板终端", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "样板终端配置", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "能源使用", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "样板终端使用的能源", "text.autoconfig.refinedstorage.option.controller": "控制器", - "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", + "text.autoconfig.refinedstorage.option.controller.tooltip": "控制器配置", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "能量容量", - "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "The energy capacity of the Controller.", + "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "控制器使用的能源", "text.autoconfig.refinedstorage.option.cable": "电缆", - "text.autoconfig.refinedstorage.option.cable.tooltip": "Configuration for the Cable.", + "text.autoconfig.refinedstorage.option.cable.tooltip": "线缆配置", "text.autoconfig.refinedstorage.option.cable.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.cable.energyUsage.tooltip": "The energy used by the Cable.", + "text.autoconfig.refinedstorage.option.cable.energyUsage.tooltip": "线缆使用的能源", "text.autoconfig.refinedstorage.option.diskDrive": "磁盘驱动器", - "text.autoconfig.refinedstorage.option.diskDrive.tooltip": "Configuration for the Disk Drive.", + "text.autoconfig.refinedstorage.option.diskDrive.tooltip": "磁盘驱动器配置", "text.autoconfig.refinedstorage.option.diskDrive.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.diskDrive.energyUsage.tooltip": "The energy used by the Disk Drive.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage.tooltip": "磁盘驱动器使用的能源", "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk": "每个磁盘的耗能", - "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk.tooltip": "The energy used per disk.", - "text.autoconfig.refinedstorage.option.diskInterface": "Disk Interface", - "text.autoconfig.refinedstorage.option.diskInterface.tooltip": "Configuration for the Disk Interface.", - "text.autoconfig.refinedstorage.option.diskInterface.energyUsage": "Energy usage", - "text.autoconfig.refinedstorage.option.diskInterface.energyUsage.tooltip": "The energy used by the Disk Interface.", - "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk": "Energy usage per disk", - "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk.tooltip": "The energy used per disk.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk.tooltip": "每个磁盘使用的能源", + "text.autoconfig.refinedstorage.option.diskInterface": "磁盘接口", + "text.autoconfig.refinedstorage.option.diskInterface.tooltip": "磁盘接口配置", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage": "能源使用", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage.tooltip": "磁盘接口使用的能源", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk": "每个磁盘的能耗", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk.tooltip": "每个磁盘的能耗", "text.autoconfig.refinedstorage.option.storageBlock": "存储方块", - "text.autoconfig.refinedstorage.option.storageBlock.tooltip": "Configuration for the Storage Blocks.", + "text.autoconfig.refinedstorage.option.storageBlock.tooltip": "存储方块配置", "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage": "1K 能源", - "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage.tooltip": "The energy used by the 1K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage.tooltip": "1K存储块使用的能源", "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage": "4K 能源", - "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage.tooltip": "The energy used by the 4K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage.tooltip": "4K存储块使用的能源", "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage": "16K 能源", - "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage.tooltip": "The energy used by the 16K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage.tooltip": "16K存储块使用的能源", "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage": "64K 能源", - "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage.tooltip": "The energy used by the 64K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage.tooltip": "64K存储块使用的能源", "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage": "创造能源", - "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage.tooltip": "创造存储块使用的能源", "text.autoconfig.refinedstorage.option.fluidStorageBlock": "流体存储块", - "text.autoconfig.refinedstorage.option.fluidStorageBlock.tooltip": "Configuration for the Fluid Storage Blocks.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.tooltip": "流体存储块配置", "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B 能源", - "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage.tooltip": "The energy used by the 64B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage.tooltip": "64B流体存储块使用的能源", "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B 能源", - "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage.tooltip": "The energy used by the 256B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage.tooltip": "256B流体存储块使用的能源", "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B 能源", - "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage.tooltip": "The energy used by the 1024B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage.tooltip": "1024B流体存储块使用的能源", "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B 能源", - "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage.tooltip": "The energy used by the 4096B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage.tooltip": "4096B流体存储块使用的能源", "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage": "创造能源", - "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage.tooltip": "创造流体存储块使用的能源", "text.autoconfig.refinedstorage.option.importer": "输入总线", - "text.autoconfig.refinedstorage.option.importer.tooltip": "Configuration for the Importer.", + "text.autoconfig.refinedstorage.option.importer.tooltip": "输入接口配置", "text.autoconfig.refinedstorage.option.importer.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.importer.energyUsage.tooltip": "The energy used by the Importer.", + "text.autoconfig.refinedstorage.option.importer.energyUsage.tooltip": "输入接口使用的能源", "text.autoconfig.refinedstorage.option.exporter": "输出总线", - "text.autoconfig.refinedstorage.option.exporter.tooltip": "Configuration for the Exporter.", + "text.autoconfig.refinedstorage.option.exporter.tooltip": "输出接口配置", "text.autoconfig.refinedstorage.option.exporter.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.exporter.energyUsage.tooltip": "The energy used by the Exporter.", + "text.autoconfig.refinedstorage.option.exporter.energyUsage.tooltip": "输出接口使用的能源", "text.autoconfig.refinedstorage.option.detector": "检测器", - "text.autoconfig.refinedstorage.option.detector.tooltip": "Configuration for the Detector.", + "text.autoconfig.refinedstorage.option.detector.tooltip": "侦测器配置", "text.autoconfig.refinedstorage.option.detector.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.detector.energyUsage.tooltip": "The energy used by the Detector.", + "text.autoconfig.refinedstorage.option.detector.energyUsage.tooltip": "侦测器使用的能源", "text.autoconfig.refinedstorage.option.constructor": "成型面板", - "text.autoconfig.refinedstorage.option.constructor.tooltip": "Configuration for the Constructor.", + "text.autoconfig.refinedstorage.option.constructor.tooltip": "成型面板配置", "text.autoconfig.refinedstorage.option.constructor.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.constructor.energyUsage.tooltip": "The energy used by the Constructor.", + "text.autoconfig.refinedstorage.option.constructor.energyUsage.tooltip": "成型面板使用的能源", "text.autoconfig.refinedstorage.option.destructor": "破坏面板", - "text.autoconfig.refinedstorage.option.destructor.tooltip": "Configuration for the Destructor.", + "text.autoconfig.refinedstorage.option.destructor.tooltip": "破坏面板配置", "text.autoconfig.refinedstorage.option.destructor.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.destructor.energyUsage.tooltip": "The energy used by the Destructor.", + "text.autoconfig.refinedstorage.option.destructor.energyUsage.tooltip": "破坏面板使用的能源", "text.autoconfig.refinedstorage.option.upgrade": "升级", - "text.autoconfig.refinedstorage.option.upgrade.tooltip": "Configuration for the Upgrades.", + "text.autoconfig.refinedstorage.option.upgrade.tooltip": "升级模块配置", "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage": "速度升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage.tooltip": "The additional energy used per Speed Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage.tooltip": "每级速度升级需要的额外能量", "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage": "堆叠升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage.tooltip": "The additional energy used by the Stack Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage.tooltip": "每级堆叠升级需要的额外能量", "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage": "时运 I 升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 1 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage.tooltip": "时运I升级需要的额外能量", "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage": "时运 II 升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 2 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage.tooltip": "时运II升级需要的额外能量", "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage": "时运 III 升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 3 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage.tooltip": "时运III升级需要的额外能量", "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage": "精准采集升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage.tooltip": "The additional energy used by the Silk Touch Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage.tooltip": "精准采集升级需要的额外能量", "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage": "调节器升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage.tooltip": "The additional energy used by the Regulator Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage.tooltip": "调节器升级需要的能量", "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage": "范围升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage.tooltip": "The additional energy used per Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage.tooltip": "每级范围升级所需的能量", "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage": "创造范围升级耗能", - "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage.tooltip": "The additional energy used by the Creative Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage.tooltip": "创造范围升级所需的能量", "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange": "范围升级范围", - "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange.tooltip": "The additional range provided by the Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange.tooltip": "范围升级提供的额外单位", "text.autoconfig.refinedstorage.option.iface": "物品传输接口", - "text.autoconfig.refinedstorage.option.iface.tooltip": "Configuration for the Interface.", + "text.autoconfig.refinedstorage.option.iface.tooltip": "物品传输接口配置", "text.autoconfig.refinedstorage.option.iface.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.iface.energyUsage.tooltip": "The energy used by the Interface.", - "text.autoconfig.refinedstorage.option.externalStorage": "外部存储", - "text.autoconfig.refinedstorage.option.externalStorage.tooltip": "Configuration for the External Storage.", + "text.autoconfig.refinedstorage.option.iface.energyUsage.tooltip": "物品传输接口使用的能量", + "text.autoconfig.refinedstorage.option.externalStorage": "外部存储总线", + "text.autoconfig.refinedstorage.option.externalStorage.tooltip": "外部存储总线配置", "text.autoconfig.refinedstorage.option.externalStorage.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.externalStorage.energyUsage.tooltip": "The energy used by the External Storage.", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage.tooltip": "外部存储总线使用的能源", "text.autoconfig.refinedstorage.option.wirelessGrid": "无线网格", - "text.autoconfig.refinedstorage.option.wirelessGrid.tooltip": "Configuration for the Wireless Grid.", + "text.autoconfig.refinedstorage.option.wirelessGrid.tooltip": "无线终端配置", "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity": "能量容量", - "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity.tooltip": "The energy capacity of the Wireless Grid.", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity.tooltip": "无线终端可存储的能量", "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage": "打开耗能", - "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage.tooltip": "The energy used by the Wireless Grid to open.", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage.tooltip": "打开无线终端使用的能量", "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage": "插入耗能", - "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage.tooltip": "The energy used by the Wireless Grid to insert resources.", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage.tooltip": "在无线终端中放入物品需要的能量", "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage": "取出耗能", - "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage.tooltip": "The energy used by the Wireless Grid to extract resources.", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage.tooltip": "在无线终端中取出物品需要的能量", "text.autoconfig.refinedstorage.option.wirelessTransmitter": "无线访问点", - "text.autoconfig.refinedstorage.option.wirelessTransmitter.tooltip": "Configuration for the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.tooltip": "无线发射器配置", "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage.tooltip": "The energy used by the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage.tooltip": "无线发射器使用的能量", "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange": "基础范围", - "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange.tooltip": "The base range of the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange.tooltip": "无线发射器的基础范围", "text.autoconfig.refinedstorage.option.storageMonitor": "存储监控器", - "text.autoconfig.refinedstorage.option.storageMonitor.tooltip": "Configuration for the Storage Monitor.", + "text.autoconfig.refinedstorage.option.storageMonitor.tooltip": "存储监视器配置", "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage.tooltip": "The energy used by the Storage Monitor.", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage.tooltip": "存储监视器使用的能源", "text.autoconfig.refinedstorage.option.networkReceiver": "网络接收器", - "text.autoconfig.refinedstorage.option.networkReceiver.tooltip": "Configuration for the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkReceiver.tooltip": "网络接收器配置", "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage.tooltip": "The energy used by the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage.tooltip": "网络接收器使用的能量", "text.autoconfig.refinedstorage.option.networkTransmitter": "网络发送器", - "text.autoconfig.refinedstorage.option.networkTransmitter.tooltip": "Configuration for the Network Transmitter.", + "text.autoconfig.refinedstorage.option.networkTransmitter.tooltip": "网络变送器配置", "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage.tooltip": "The energy used by the Network Transmitter.", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage.tooltip": "网络变送器使用的能量", "text.autoconfig.refinedstorage.option.portableGrid": "便携式终端", - "text.autoconfig.refinedstorage.option.portableGrid.tooltip": "Configuration for the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.tooltip": "样板终端配置", "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity": "能量容量", - "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity.tooltip": "The energy capacity of the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity.tooltip": "样板终端耗能", "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage": "打开耗能", - "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage.tooltip": "The energy used by the Portable Grid to open.", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage.tooltip": "样板终端使用的能源", "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage": "插入耗能", - "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage.tooltip": "The energy used by the Portable Grid to insert resources.", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage.tooltip": "使用样板终端放入物品消耗的能源", "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage": "取出耗能", - "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage.tooltip": "The energy used by the Portable Grid to extract resources.", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage.tooltip": "使用样板终端取出的物品消耗的能源", "text.autoconfig.refinedstorage.option.securityCard": "权限卡", - "text.autoconfig.refinedstorage.option.securityCard.tooltip": "Configuration for the Security Card.", + "text.autoconfig.refinedstorage.option.securityCard.tooltip": "权限卡配置", "text.autoconfig.refinedstorage.option.securityCard.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.securityCard.energyUsage.tooltip": "The energy used by the Security Card.", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage.tooltip": "权限卡使用的能量", "text.autoconfig.refinedstorage.option.fallbackSecurityCard": "后备权限卡", - "text.autoconfig.refinedstorage.option.fallbackSecurityCard.tooltip": "Configuration for the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.tooltip": "后备权限卡配置", "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage.tooltip": "The energy used by the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage.tooltip": "后备权限卡使用的能源", "text.autoconfig.refinedstorage.option.securityManager": "权限管理器", - "text.autoconfig.refinedstorage.option.securityManager.tooltip": "Configuration for the Security Manager.", + "text.autoconfig.refinedstorage.option.securityManager.tooltip": "权限管理器配置", "text.autoconfig.refinedstorage.option.securityManager.energyUsage": "耗能", - "text.autoconfig.refinedstorage.option.securityManager.energyUsage.tooltip": "The energy used by the Security Manager.", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage.tooltip": "权限管理器使用的能源", "text.autoconfig.refinedstorage.option.relay": "中继器", - "text.autoconfig.refinedstorage.option.relay.tooltip": "Configuration for the Relay.", + "text.autoconfig.refinedstorage.option.relay.tooltip": "中继器配置", "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage": "输入网络耗能", - "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", - "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", - "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "存入网络消耗的能耗", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "从网络中取出的能耗(如果不是经过模式)", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "输出网络能量使用(如果未处于通过模式)", + "text.autoconfig.refinedstorage.option.autocrafter": "自动合成仓", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "自动合成仓配置", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "耗能", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "自动合成仓耗能", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "每个样板的耗能", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "在网络中使用一个或多个控制器为其提供能量", "advancements.refinedstorage.connecting": "连接", "advancements.refinedstorage.connecting.description": "使用电缆将设备连接在一起,或放置时使设备贴在一起", "advancements.refinedstorage.drives": "驱动器", "advancements.refinedstorage.drives.description": "合成一个磁盘驱动器,以便能够收纳您的存储磁盘", - "advancements.refinedstorage.interfacing_with_disks": "Interfacing with disks", - "advancements.refinedstorage.interfacing_with_disks.description": "Craft a Disk Interface to transfer resources between the storage network and storage disks", + "advancements.refinedstorage.interfacing_with_disks": "磁盘接口", + "advancements.refinedstorage.interfacing_with_disks.description": "创建一个磁盘接口以便在存储网络和磁盘中传输资", "advancements.refinedstorage.storing_items": "存储物品", "advancements.refinedstorage.storing_items.description": "合成一个存储磁盘并将其放入磁盘驱动器中", "advancements.refinedstorage.viewing_your_storage": "查看您的存储", @@ -551,9 +625,9 @@ "advancements.refinedstorage.detecting": "检测", "advancements.refinedstorage.detecting.description": "使用红石检测存储网络内的资源", "advancements.refinedstorage.construction": "成型", - "advancements.refinedstorage.construction.description": "使用构造器将方块从存储网络中放入世界", + "advancements.refinedstorage.construction.description": "使用成型面板将方块从存储网络中的方块放入世界", "advancements.refinedstorage.destruction": "破坏", - "advancements.refinedstorage.destruction.description": "使用破坏器将世界中的方块放入存储网络", + "advancements.refinedstorage.destruction.description": "使用破坏面板将世界中的方块放入存储网络", "advancements.refinedstorage.wireless": "无线", "advancements.refinedstorage.wireless.description": "使用无线终端远程访问你的资源", "advancements.refinedstorage.better_than_a_barrel": "比桶更好", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "权限", "advancements.refinedstorage.security.description": "用权限管理器和权限卡来保护你的存储网络", "advancements.refinedstorage.conditional_connecting": "条件连接", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "打开或关闭存储网络的整个部分,并使用中继创建网络的新分支", + "advancements.refinedstorage.autocrafting": "自动合成", + "advancements.refinedstorage.autocrafting.description": "使用自动合成仓和样板终端制作的样板进行自动合成" } From efe4f9fcf9ea021bb3715540ca20a57379308dcd Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:16 +0200 Subject: [PATCH 77/83] chore: update translation Chinese Traditional from crowdin --- .../assets/refinedstorage/lang/zh_tw.json | 64 ++++++++++++++++--- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json index 1c1983983..650e24710 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/zh_tw.json @@ -37,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "中繼", "block.refinedstorage.disk_interface": "硬碟介面", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "未啟動該裝置時,存儲網路將無法將其作為能量來源", "gui.refinedstorage.disk_drive.disks": "硬碟", "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", @@ -44,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "排序方向", "gui.refinedstorage.grid.sorting.direction.ascending": "昇冪排序", "gui.refinedstorage.grid.sorting.direction.descending": "降冪排序", @@ -59,9 +64,14 @@ "gui.refinedstorage.grid.synchronization_mode.off.help": "不要同步搜尋欄位", "gui.refinedstorage.grid.resource_type": "資源類型", "gui.refinedstorage.grid.resource_type.all": "全部", - "gui.refinedstorage.grid.resource_type.help": "過濾特定資源類型", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "將物品移入網路", "gui.refinedstorage.crafting_grid.move.inventory": "將物品移入背包", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", "gui.refinedstorage.pattern_grid.create_pattern": "創建樣板", "gui.refinedstorage.pattern_grid.clear": "清除", "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", @@ -116,13 +126,14 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", "gui.refinedstorage.configure_amount": "Configure amount", "gui.refinedstorage.configure_amount.reset": "Reset", "gui.refinedstorage.configure_amount.set": "Set", - "gui.refinedstorage.filter_mode": "Filter mode", - "gui.refinedstorage.filter_mode.allow": "Allowlist", - "gui.refinedstorage.filter_mode.block": "Blocklist", - "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.filter_mode": "篩選模式", + "gui.refinedstorage.filter_mode.allow": "白名單", + "gui.refinedstorage.filter_mode.block": "黑名單", + "gui.refinedstorage.fuzzy_mode": "模糊模式", "gui.refinedstorage.fuzzy_mode.on": "On", "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", @@ -143,7 +154,7 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", @@ -160,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -169,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -181,6 +194,27 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", @@ -196,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -278,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -361,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -393,6 +429,8 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", @@ -553,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -595,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From e6f8ac81523ea163debfbda4e63405009051a963 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:18 +0200 Subject: [PATCH 78/83] chore: update translation Portuguese, Brazilian from crowdin --- .../assets/refinedstorage/lang/pt_br.json | 124 ++++++++++++++---- 1 file changed, 100 insertions(+), 24 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pt_br.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pt_br.json index f53a35996..a3cfc61ad 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pt_br.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/pt_br.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Disco rígido", "block.refinedstorage.machine_casing": "Revestimento de máquina", "block.refinedstorage.grid": "Grade", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Grade de Criação", "block.refinedstorage.controller": "Controlador", "block.refinedstorage.creative_controller": "Controlador Criativo", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Quando este dispositivo estiver inativo, a rede de armazenamento não poderá usar este dispositivo como fonte de energia.", "gui.refinedstorage.disk_drive.disks": "Discos", "gui.refinedstorage.storage.redstone_mode_help": "Quando este dispositivo estiver inativo, o armazenamento contido não estará mais acessível a partir da rede de armazenamento.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Sem filtros configurados, nenhum recurso será aceito neste armazenamento.", "gui.refinedstorage.storage.filter_mode.allow.help": "Só permite recursos neste armazenamento que está configurado nos filtros.", "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Sorting direction", "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", "gui.refinedstorage.grid.sorting.direction.descending": "Descending", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Last modified", "gui.refinedstorage.grid.auto_selected": "Auto-selected", "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", - "gui.refinedstorage.grid.synchronizer": "Synchronization mode", - "gui.refinedstorage.grid.synchronizer.off": "Off", - "gui.refinedstorage.grid.synchronizer.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Resource type", "gui.refinedstorage.grid.resource_type.all": "All", - "gui.refinedstorage.grid.resource_type.help": "Filter specific resource types.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Move items to network", "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Screen size", "gui.refinedstorage.screen_size.stretch": "Stretch", "gui.refinedstorage.screen_size.small": "Small", @@ -69,8 +93,8 @@ "gui.refinedstorage.screen_size.extra_large": "Extra large", "gui.refinedstorage.detector.mode": "Mode", "gui.refinedstorage.detector.mode.under": "Emit redstone signal when under the amount", - "gui.refinedstorage.detector.mode.equal": "Emit redstone signal when on the amount", - "gui.refinedstorage.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage.detector.mode.equal": "Emitir sinal de \"redstone\" quando quantidade for exata", + "gui.refinedstorage.detector.mode.above": "Emitir sinal de \"redstone\" quando a quantidade for exata", "gui.refinedstorage.detector.filter_help": "The resource that should be detected in the storage network.", "gui.refinedstorage.destructor.pickup_items": "Pickup items instead of breaking", "gui.refinedstorage.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", "gui.refinedstorage.redstone_mode": "Redstone mode", "gui.refinedstorage.redstone_mode.ignore": "Ignore", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", "gui.refinedstorage.priority": "Priority", "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", - "gui.refinedstorage.amount": "Amount", - "gui.refinedstorage.amount.reset": "Reset", - "gui.refinedstorage.amount.set": "Set", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Filter mode", "gui.refinedstorage.filter_mode.allow": "Allowlist", "gui.refinedstorage.filter_mode.block": "Blocklist", "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", "gui.refinedstorage.fuzzy_mode.on": "On", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist exactly.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source exactly.", - "gui.refinedstorage.fuzzy_mode.off": "Off", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network without comparing NBT tags.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source without comparing NBT tags.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", + "gui.refinedstorage.fuzzy_mode.off": "Desligado", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Access mode", "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Void excess resources", "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", - "gui.refinedstorage.upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", "gui.refinedstorage.filter_slot.left_click_for": "Left click for", "gui.refinedstorage.filter_slot.right_click_for": "Right click for", "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Processor Binding", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "4K Storage Disk", "item.refinedstorage.16k_storage_disk": "16K Storage Disk", "item.refinedstorage.64k_storage_disk": "64K Storage Disk", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Stored: %s", "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", "misc.refinedstorage.total": "%d total", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Focus search bar", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Controller", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Connecting", "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From b8631ff47a4918ae00ec163f14fc538730bde166 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:19 +0200 Subject: [PATCH 79/83] chore: update translation Indonesian from crowdin --- .../assets/refinedstorage/lang/id_id.json | 118 ++++++++++++++---- 1 file changed, 97 insertions(+), 21 deletions(-) diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/id_id.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/id_id.json index 4c58839c8..19ae30be9 100644 --- a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/id_id.json +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/id_id.json @@ -6,6 +6,7 @@ "block.refinedstorage.disk_drive": "Lemari Cakram", "block.refinedstorage.machine_casing": "Kerangka Mesin", "block.refinedstorage.grid": "Kisi", + "block.refinedstorage.pattern_grid": "Pattern Grid", "block.refinedstorage.crafting_grid": "Kisi Kerajinan", "block.refinedstorage.controller": "Pengendali", "block.refinedstorage.creative_controller": "Pengendali Kreatif", @@ -36,6 +37,7 @@ "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", "block.refinedstorage.relay": "Relay", "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", "gui.refinedstorage.controller.redstone_mode_help": "Ketika peranagkat ini nonaktif, jaringan penyimpanan tidak dapat menggunakan perangkat ini sebagai sumber energi.", "gui.refinedstorage.disk_drive.disks": "Cakram", "gui.refinedstorage.storage.redstone_mode_help": "Ketika perangkat ini nonaktif, penyimpanan tidak akan dapat diakses dari dalam jaringan penyimpanan.", @@ -43,6 +45,10 @@ "gui.refinedstorage.storage.filter_mode.empty_warning": "Tanpa konfigurasi filter, tidak ada sumber daya yang akan diterima kedalam penyimpanan ini.", "gui.refinedstorage.storage.filter_mode.allow.help": "Hanya izinkan sumber daya kedalam penyimpanan ini yang telah dikonfigurasi dalam filter.", "gui.refinedstorage.storage.filter_mode.block.help": "Blokir sumber daya kedalam penyimpanan ini yang telah dikonfigurasi dalam filter.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", "gui.refinedstorage.grid.sorting.direction": "Arah Pengurutan", "gui.refinedstorage.grid.sorting.direction.ascending": "Menaik", "gui.refinedstorage.grid.sorting.direction.descending": "Menurun", @@ -53,14 +59,32 @@ "gui.refinedstorage.grid.sorting.type.last_modified": "Terakhir dirubah", "gui.refinedstorage.grid.auto_selected": "Pilih otomatis", "gui.refinedstorage.grid.auto_selected.help": "Memilih kotak pencarian secara otomatis saat membuka Kisi.", - "gui.refinedstorage.grid.synchronizer": "Mode sinkronisasi", - "gui.refinedstorage.grid.synchronizer.off": "Nonaktif", - "gui.refinedstorage.grid.synchronizer.off.help": "Jangan sinkronkan teks kotak pencarian.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", "gui.refinedstorage.grid.resource_type": "Jenis sumber daya", "gui.refinedstorage.grid.resource_type.all": "Semua", - "gui.refinedstorage.grid.resource_type.help": "Filter jenis sumber daya tertentu.", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", "gui.refinedstorage.crafting_grid.move.network": "Pindahkan barang ke jaringan", "gui.refinedstorage.crafting_grid.move.inventory": "Pindahkan barang ke inventaris", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", "gui.refinedstorage.screen_size": "Screen size", "gui.refinedstorage.screen_size.stretch": "Stretch", "gui.refinedstorage.screen_size.small": "Small", @@ -84,6 +108,7 @@ "gui.refinedstorage.importer.filter_mode.allow.help": "Hanya izinkan sumber daya kedalam jaringan penyimpanan yang telah dikonfigurasi dalam filter.", "gui.refinedstorage.importer.filter_mode.block.help": "Blokir sumber daya kedalam jaringan penyimpanan yang telah dikonfigurasi dalam filter.", "gui.refinedstorage.wireless_transmitter.distance": "%d blok", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", "gui.refinedstorage.storage_monitor.filter_help": "Sumber daya untuk ditampilkan.", "gui.refinedstorage.redstone_mode": "Mode redstone", "gui.refinedstorage.redstone_mode.ignore": "Abaikan", @@ -101,23 +126,24 @@ "gui.refinedstorage.scheduling_mode.random.help": "Gunakan filter acak.", "gui.refinedstorage.priority": "Prioritas", "gui.refinedstorage.priority.storage_help": "Urutan dimana jaringan penyimpanan akan memasukkan atau mengekstrak sumber daya, mulai dari yang tertinggi.", - "gui.refinedstorage.amount": "Jumlah", - "gui.refinedstorage.amount.reset": "Atur Ulang", - "gui.refinedstorage.amount.set": "Atur", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", "gui.refinedstorage.filter_mode": "Mode Filter", "gui.refinedstorage.filter_mode.allow": "Diizinkan", "gui.refinedstorage.filter_mode.block": "Diblokir", "gui.refinedstorage.fuzzy_mode": "Mode acak", "gui.refinedstorage.fuzzy_mode.on": "Hidup", - "gui.refinedstorage.fuzzy_mode.on.storage_help": "Cocokkan persis filter untuk daftar yang diizinkan atau yang diblokir.", - "gui.refinedstorage.fuzzy_mode.on.generic_help": "Sesuaikan persis filter.", - "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Sesuaikan persis filter ketika mengekstrak dari jaringan penyimpanan.", - "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Sesuaikan persis filter ketika mengekstrak dari sumber.", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", "gui.refinedstorage.fuzzy_mode.off": "Nonaktif", - "gui.refinedstorage.fuzzy_mode.off.storage_help": "Cocokkan filter untuk daftar yang diizinkan atau yang diblokir tanpa membandingkan label NBT.", - "gui.refinedstorage.fuzzy_mode.off.generic_help": "Sesuaikan filter tanpa membandingkan label NBT.", - "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Sesuaikan filter ketika mengekstrak dari jaringan penyimpanan tanpa membandingkan label NBT.", - "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Sesuaikan filter ketika mengekstrak dari sumber tanpa membandingkan label NBT.", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", "gui.refinedstorage.access_mode": "Modus akses", "gui.refinedstorage.access_mode.insert_extract": "Masukkan dan ekstrak", "gui.refinedstorage.access_mode.insert_extract.help": "Jaringan penyimpanan akan dapat memasukkan atau mengekstrak dari penyimpanan ini.", @@ -128,11 +154,13 @@ "gui.refinedstorage.void_excess": "Kosongkan sumber daya berlebih", "gui.refinedstorage.void_excess.help": "Ketika mode kosongan kelebihan dihidupkan dan penyimpanan penuh, penyimpanan akan tetap menerima sumber daya akan tetapi akan mengosongkannya.", "gui.refinedstorage.void_excess.allowlist_warning": "Kosongkan kelebihan hanya akan bekerja ketika penyimpanan dalam mode diizinkan.", - "gui.refinedstorage.upgrade_slot": "Slot peningkatan kosong", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", "gui.refinedstorage.filter_slot.empty_filter": "Filter kosong", "gui.refinedstorage.filter_slot.left_click_for": "Klik kiri untuk", "gui.refinedstorage.filter_slot.right_click_for": "Klik kanan untuk", "gui.refinedstorage.filter_slot.click_to_clear": "Klik untuk membersihkan", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", "gui.refinedstorage.regulator_upgrade.filter_help": "Sumber daya yang harus diatur dalam sasaran.", "gui.refinedstorage.network_transmitter.status.inactive": "Tidak aktif", "gui.refinedstorage.network_transmitter.status.missing_network_card": "Kartu Jaringan Tidak Ditemukan", @@ -143,7 +171,7 @@ "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", - "gui.refinedstorage.relay.filter_help": "Resources which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", "gui.refinedstorage.relay.pass_through": "Pass-through", "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", "gui.refinedstorage.relay.pass_energy": "Pass energy", @@ -152,6 +180,8 @@ "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", "gui.refinedstorage.relay.pass_security": "Pass security", "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", @@ -164,12 +194,34 @@ "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", "item.refinedstorage.controller.help": "Menyediakan energi ke jaringan penyimpanan. dapat digunakan beberapa kali dalam satu jaringan penyimpanan.", "item.refinedstorage.creative_controller.help": "Menyediakan energi tidak terbatas ke jaringan penyimpanan.", "item.refinedstorage.disk_drive.help": "Menerima cakram penyimpanan untuk menyediakan ruang penyimpanan kedalam jaringan penyimpanan.", "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", "item.refinedstorage.grid.help": "Memungkinkan untuk mengakses jaringan penyimpanan.", "item.refinedstorage.crafting_grid.help": "Memungkinkan untuk mengakses jaringan penyimpanan, dengan kemampuan untuk merakit.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", "item.refinedstorage.importer.help": "Import sumber daya dari sumber eksternal kedalam jaringan penyimpanan.", "item.refinedstorage.exporter.help": "Ekspor sumber daya dari jaringan penyimpanan kedalam tujuan eksternal.", "item.refinedstorage.interface.help": "Berfungsi sebagai gabungan dari Importir dan Eksportir.", @@ -178,6 +230,7 @@ "item.refinedstorage.constructor.help": "Tempatkan balok dari jaringan penyimpanan ke dunia.", "item.refinedstorage.destructor.help": "Memecahkan balok dari dunia dan memasukkannya kedalam jaringan penyimpanan.", "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", "item.refinedstorage.quartz_enriched_iron": "Besi yang Diperkaya Kuarsa", "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", "item.refinedstorage.processor_binding": "Pengikat Prosesor", @@ -196,8 +249,8 @@ "item.refinedstorage.4k_storage_disk": "Cakram Penyimpanan 4K", "item.refinedstorage.16k_storage_disk": "Cakram Penyimpanan 16K", "item.refinedstorage.64k_storage_disk": "Cakram Penyimpanan 64K", - "item.refinedstorage.storage_disk.help": "Stores %s items.", - "item.refinedstorage.storage_block.help": "Stores %s items.", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", "item.refinedstorage.creative_storage_disk": "Cakram Penyimpanan Kreatif", "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", @@ -260,7 +313,7 @@ "item.refinedstorage.network_card.bound": "Terikat pada %d, %d, %d dalam %s.", "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", - "item.refinedstorage.cable.help": "Connects storage network devices with each other.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", "item.refinedstorage.security_card": "Security Card", "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", "item.refinedstorage.security_card.unbound": "Unbound.", @@ -271,6 +324,9 @@ "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", "misc.refinedstorage.stored": "Tersimpan: %s", "misc.refinedstorage.stored_with_capacity": "Tersimpan: %s / %s (%d%%)", "misc.refinedstorage.total": "Total %d", @@ -298,6 +354,10 @@ "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", "key.refinedstorage.focus_search_bar": "Fokus pada kotak pencarian", "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Singkirkan matriks Kisi Kerajinan ke jaringan", "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Singkirkan matriks Kisi Kerajinan ke inventaris", @@ -320,6 +380,7 @@ "tag.item.refinedstorage.constructors": "Constructors", "tag.item.refinedstorage.controllers": "Controllers", "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", "tag.item.refinedstorage.creative_controllers": "Creative Controllers", "tag.item.refinedstorage.destructors": "Destructors", "tag.item.refinedstorage.detectors": "Detectors", @@ -335,6 +396,7 @@ "tag.item.refinedstorage.storage_disks": "Storage Disks", "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", "refinedstorage.configuration.title": "Refined Storage Configuration", "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", @@ -367,12 +429,18 @@ "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", "text.autoconfig.refinedstorage.option.grid.sortingType": "Jenis pengurutan", "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", "text.autoconfig.refinedstorage.option.craftingGrid": "Kisi Kerajinan", "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Pemakaian daya", "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Perilaku menutup Matriks kerajinan", "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", "text.autoconfig.refinedstorage.option.controller": "Pengendali", "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Kapasitas daya", @@ -523,6 +591,12 @@ "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", "advancements.refinedstorage.connecting": "Menyambungkan", "advancements.refinedstorage.connecting.description": "Gunakan Kabel untuk menghubungkan perangkat satu sama lain, atau letakkan perangkat melawan satu sama lain", @@ -565,5 +639,7 @@ "advancements.refinedstorage.security": "Security", "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", "advancements.refinedstorage.conditional_connecting": "Conditional connecting", - "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay" + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" } From 53788956e35af51ce837902ef5ebf303cf9d9fb3 Mon Sep 17 00:00:00 2001 From: Raoul Date: Sat, 12 Oct 2024 10:52:20 +0200 Subject: [PATCH 80/83] chore: update translation Ukrainian from crowdin --- .../assets/refinedstorage/lang/uk_ua.json | 645 ++++++++++++++++++ 1 file changed, 645 insertions(+) create mode 100644 refinedstorage-common/src/main/resources/assets/refinedstorage/lang/uk_ua.json diff --git a/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/uk_ua.json b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/uk_ua.json new file mode 100644 index 000000000..b28edd34e --- /dev/null +++ b/refinedstorage-common/src/main/resources/assets/refinedstorage/lang/uk_ua.json @@ -0,0 +1,645 @@ +{ + "mod.refinedstorage": "Refined Storage", + "block.refinedstorage.cable": "Кабель", + "block.refinedstorage.quartz_enriched_iron_block": "Block of Quartz Enriched Iron", + "block.refinedstorage.quartz_enriched_copper_block": "Block of Quartz Enriched Copper", + "block.refinedstorage.disk_drive": "Disk Drive", + "block.refinedstorage.machine_casing": "Machine Casing", + "block.refinedstorage.grid": "Сітка", + "block.refinedstorage.pattern_grid": "Pattern Grid", + "block.refinedstorage.crafting_grid": "Crafting Grid", + "block.refinedstorage.controller": "Controller", + "block.refinedstorage.creative_controller": "Creative Controller", + "block.refinedstorage.1k_storage_block": "1K Storage Block", + "block.refinedstorage.4k_storage_block": "4K Storage Block", + "block.refinedstorage.16k_storage_block": "16K Storage Block", + "block.refinedstorage.64k_storage_block": "64K Storage Block", + "block.refinedstorage.creative_storage_block": "Creative Storage Block", + "block.refinedstorage.64b_fluid_storage_block": "64B Fluid Storage Block", + "block.refinedstorage.256b_fluid_storage_block": "256B Fluid Storage Block", + "block.refinedstorage.1024b_fluid_storage_block": "1024B Fluid Storage Block", + "block.refinedstorage.4096b_fluid_storage_block": "4096B Fluid Storage Block", + "block.refinedstorage.creative_fluid_storage_block": "Creative Fluid Storage Block", + "block.refinedstorage.importer": "Importer", + "block.refinedstorage.exporter": "Exporter", + "block.refinedstorage.interface": "Interface", + "block.refinedstorage.external_storage": "External Storage", + "block.refinedstorage.detector": "Detector", + "block.refinedstorage.constructor": "Constructor", + "block.refinedstorage.destructor": "Destructor", + "block.refinedstorage.wireless_transmitter": "Wireless Transmitter", + "block.refinedstorage.storage_monitor": "Storage Monitor", + "block.refinedstorage.network_receiver": "Network Receiver", + "block.refinedstorage.network_transmitter": "Network Transmitter", + "block.refinedstorage.portable_grid": "Portable Grid", + "block.refinedstorage.creative_portable_grid": "Creative Portable Grid", + "block.refinedstorage.security_manager": "Security Manager", + "block.refinedstorage.security_manager.help": "When this device is active, will protect the network by default and block all operations. Start adding Security Cards to permit or deny specific operations for a player.", + "block.refinedstorage.relay": "Relay", + "block.refinedstorage.disk_interface": "Disk Interface", + "block.refinedstorage.autocrafter": "Autocrafter", + "gui.refinedstorage.controller.redstone_mode_help": "When this device is inactive, the storage network will not be able to use this device as an energy source.", + "gui.refinedstorage.disk_drive.disks": "Disks", + "gui.refinedstorage.storage.redstone_mode_help": "When this device is inactive, the contained storage will no longer be accessible from within the storage network.", + "gui.refinedstorage.storage.filter_help": "The resources that may or may not be allowed in this storage, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage.storage.filter_mode.empty_warning": "Without any configured filters, no resources will be accepted in this storage.", + "gui.refinedstorage.storage.filter_mode.allow.help": "Only allow resources into this storage that are configured in the filters.", + "gui.refinedstorage.storage.filter_mode.block.help": "Disallow resources into this storage that are configured in the filters.", + "gui.refinedstorage.grid.view_type": "View type", + "gui.refinedstorage.grid.view_type.all": "All", + "gui.refinedstorage.grid.view_type.autocraftable": "Autocraftable", + "gui.refinedstorage.grid.view_type.non_autocraftable": "Non-autocraftable", + "gui.refinedstorage.grid.sorting.direction": "Sorting direction", + "gui.refinedstorage.grid.sorting.direction.ascending": "Ascending", + "gui.refinedstorage.grid.sorting.direction.descending": "Descending", + "gui.refinedstorage.grid.sorting.type": "Sorting type", + "gui.refinedstorage.grid.sorting.type.quantity": "Quantity", + "gui.refinedstorage.grid.sorting.type.name": "Name", + "gui.refinedstorage.grid.sorting.type.id": "ID", + "gui.refinedstorage.grid.sorting.type.last_modified": "Last modified", + "gui.refinedstorage.grid.auto_selected": "Auto-selected", + "gui.refinedstorage.grid.auto_selected.help": "Whether to auto-select the search box when opening the Grid.", + "gui.refinedstorage.grid.synchronization_mode": "Synchronization mode", + "gui.refinedstorage.grid.synchronization_mode.off": "Off", + "gui.refinedstorage.grid.synchronization_mode.off.help": "Don't sync the search box text.", + "gui.refinedstorage.grid.resource_type": "Resource type", + "gui.refinedstorage.grid.resource_type.all": "All", + "gui.refinedstorage.grid.craft": "Craft", + "gui.refinedstorage.grid.autocraftable": "This resource is autocraftable", + "gui.refinedstorage.grid.pattern_in_inventory": "This resource has a pattern in your inventory.", + "gui.refinedstorage.grid.click_to_autocraft": "Click to autocraft", + "gui.refinedstorage.grid.ctrl_click_to_autocraft": "CTRL + click to autocraft", + "gui.refinedstorage.crafting_grid.move.network": "Move items to network", + "gui.refinedstorage.crafting_grid.move.inventory": "Move items to inventory", + "gui.refinedstorage.crafting_grid.press_shift_ctrl_to_only_show_items_used_in_crafting": "Press SHIFT + CTRL to only show items used in the recipe.", + "gui.refinedstorage.pattern_grid.create_pattern": "Create pattern", + "gui.refinedstorage.pattern_grid.clear": "Clear", + "gui.refinedstorage.pattern_grid.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.pattern_grid.fuzzy_mode.on.help": "Match the pattern inputs, ignoring components.", + "gui.refinedstorage.pattern_grid.fuzzy_mode.off.help": "Match the pattern inputs exactly.", + "gui.refinedstorage.pattern_grid.processing.inputs": "Inputs", + "gui.refinedstorage.pattern_grid.processing.outputs": "Outputs", + "gui.refinedstorage.pattern_grid.processing.input_slots_help": "The resources that will be extracted from the storage network and will be inserted into the target inventory.", + "gui.refinedstorage.pattern_grid.processing.output_slots_help": "The resources that are expected to be returned to the storage network to deem the crafting task successful.", + "gui.refinedstorage.pattern_grid.processing.click_to_configure_amount_and_alternatives": "Click to configure amount and alternatives", + "gui.refinedstorage.pattern_grid.processing.allowed_alternatives": "Allowed alternatives:", + "gui.refinedstorage.pattern_grid.alternatives": "Alternatives", + "gui.refinedstorage.pattern_grid.alternatives.expand": "Expand", + "gui.refinedstorage.screen_size": "Screen size", + "gui.refinedstorage.screen_size.stretch": "Stretch", + "gui.refinedstorage.screen_size.small": "Small", + "gui.refinedstorage.screen_size.medium": "Medium", + "gui.refinedstorage.screen_size.large": "Large", + "gui.refinedstorage.screen_size.extra_large": "Extra large", + "gui.refinedstorage.detector.mode": "Mode", + "gui.refinedstorage.detector.mode.under": "Emit redstone signal when under the amount", + "gui.refinedstorage.detector.mode.equal": "Emit redstone signal when on the amount", + "gui.refinedstorage.detector.mode.above": "Emit redstone signal when above the amount", + "gui.refinedstorage.detector.filter_help": "The resource that should be detected in the storage network.", + "gui.refinedstorage.destructor.pickup_items": "Pickup items instead of breaking", + "gui.refinedstorage.destructor.filter_help": "The blocks that may or may not be destroyed, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage.destructor.filter_mode.allow.help": "Only allow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage.destructor.filter_mode.block.help": "Disallow blocks into the storage network that are configured in the filters.", + "gui.refinedstorage.constructor.drop_items": "Drop items instead of placing blocks", + "gui.refinedstorage.constructor.filter_help": "The resources that should be placed from the storage network.", + "gui.refinedstorage.interface.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage.exporter.filter_help": "The resources that should be exported from the storage network.", + "gui.refinedstorage.importer.filter_help": "The resources that may be imported from the target inventory.", + "gui.refinedstorage.importer.filter_mode.allow.help": "Only allow resources into the storage network that are configured in the filters.", + "gui.refinedstorage.importer.filter_mode.block.help": "Disallow resources into the storage network that are configured in the filters.", + "gui.refinedstorage.wireless_transmitter.distance": "%d block(s)", + "gui.refinedstorage.wireless_transmitter.inactive": "Inactive", + "gui.refinedstorage.storage_monitor.filter_help": "The resource to display.", + "gui.refinedstorage.redstone_mode": "Redstone mode", + "gui.refinedstorage.redstone_mode.ignore": "Ignore", + "gui.refinedstorage.redstone_mode.ignore.help": "This device will always be active, regardless of redstone signal.", + "gui.refinedstorage.redstone_mode.high": "High", + "gui.refinedstorage.redstone_mode.high.help": "This device will only be active with a redstone signal.", + "gui.refinedstorage.redstone_mode.low": "Low", + "gui.refinedstorage.redstone_mode.low.help": "This device will only be active without a redstone signal.", + "gui.refinedstorage.scheduling_mode": "Scheduling mode", + "gui.refinedstorage.scheduling_mode.default": "Default", + "gui.refinedstorage.scheduling_mode.default.help": "Use the first available filter.", + "gui.refinedstorage.scheduling_mode.round_robin": "Round robin", + "gui.refinedstorage.scheduling_mode.round_robin.help": "Use each filter in turn.", + "gui.refinedstorage.scheduling_mode.random": "Random", + "gui.refinedstorage.scheduling_mode.random.help": "Use a random filter.", + "gui.refinedstorage.priority": "Priority", + "gui.refinedstorage.priority.storage_help": "The order in which the storage network will insert or extract resources, highest-first.", + "gui.refinedstorage.priority.crafter_help": "If multiple patterns exist for one resource, crafting tasks will prioritize the pattern in the Autocrafter with the highest priority.", + "gui.refinedstorage.configure_amount": "Configure amount", + "gui.refinedstorage.configure_amount.reset": "Reset", + "gui.refinedstorage.configure_amount.set": "Set", + "gui.refinedstorage.filter_mode": "Filter mode", + "gui.refinedstorage.filter_mode.allow": "Allowlist", + "gui.refinedstorage.filter_mode.block": "Blocklist", + "gui.refinedstorage.fuzzy_mode": "Fuzzy mode", + "gui.refinedstorage.fuzzy_mode.on": "On", + "gui.refinedstorage.fuzzy_mode.on.storage_help": "Match the filters for the allowlist or blocklist, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.generic_help": "Match the filter, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_storage_network_help": "Match the filters when extracting from the storage network, ignoring components.", + "gui.refinedstorage.fuzzy_mode.on.extracting_source_help": "Match the filters when extracting from the source, ignoring components.", + "gui.refinedstorage.fuzzy_mode.off": "Off", + "gui.refinedstorage.fuzzy_mode.off.storage_help": "Match the filters for the allowlist or blocklist exactly.", + "gui.refinedstorage.fuzzy_mode.off.generic_help": "Match the filter exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_storage_network_help": "Match the filters when extracting from the storage network exactly.", + "gui.refinedstorage.fuzzy_mode.off.extracting_source_help": "Match the filters when extracting from the source exactly.", + "gui.refinedstorage.access_mode": "Access mode", + "gui.refinedstorage.access_mode.insert_extract": "Insert and extract", + "gui.refinedstorage.access_mode.insert_extract.help": "The storage network will be able to insert or extract from this storage.", + "gui.refinedstorage.access_mode.insert": "Insert only", + "gui.refinedstorage.access_mode.insert.help": "The storage network will only be able to insert into this storage. Contained resources will still be visible in a Grid.", + "gui.refinedstorage.access_mode.extract": "Extract only", + "gui.refinedstorage.access_mode.extract.help": "The storage network will only be able to extract from this storage.", + "gui.refinedstorage.void_excess": "Void excess resources", + "gui.refinedstorage.void_excess.help": "When void excess mode is turned on and the storage is full, it will keep accepting resources but void them.", + "gui.refinedstorage.void_excess.allowlist_warning": "Void excess will only work when the storage is in allowlist mode.", + "gui.refinedstorage.empty_upgrade_slot": "Empty upgrade slot", + "gui.refinedstorage.filter_slot.empty_filter": "Empty filter", + "gui.refinedstorage.filter_slot.left_click_for": "Left click for", + "gui.refinedstorage.filter_slot.right_click_for": "Right click for", + "gui.refinedstorage.filter_slot.click_to_clear": "Click to clear", + "gui.refinedstorage.filter_slot.click_to_configure_amount": "Click to configure amount", + "gui.refinedstorage.filter_slot.shift_click_to_clear": "Shift click to clear", + "gui.refinedstorage.regulator_upgrade.filter_help": "The resource that should be regulated in the target.", + "gui.refinedstorage.network_transmitter.status.inactive": "Inactive", + "gui.refinedstorage.network_transmitter.status.missing_network_card": "Missing Network Card", + "gui.refinedstorage.network_transmitter.status.transmitting": "%d block(s)", + "gui.refinedstorage.network_transmitter.status.receiver_unreachable": "Unreachable", + "gui.refinedstorage.security_card.permission.reset": "Reset", + "gui.refinedstorage.security_card.permission.modified": "Modified", + "gui.refinedstorage.security_manager.redstone_mode_help": "When this device is inactive, the network will not be protected.", + "gui.refinedstorage.security_manager.fallback_security_card_slot_hint": "Slot for a Fallback Security Card.", + "gui.refinedstorage.security_manager.no_fallback_security_card_consequence": "Add a Fallback Security Card to this slot to set permissions for every player without a Security Card. By default, all actions are denied.", + "gui.refinedstorage.relay.filter_help": "Resources and patterns which should be exposed from the input network to the output network if the Relay isn't in pass-through mode.", + "gui.refinedstorage.relay.pass_through": "Pass-through", + "gui.refinedstorage.relay.pass_through.help": "Whether this device should pass-through the entire input network signal as-is. Turn this off to selectively expose components to the output network.", + "gui.refinedstorage.relay.pass_energy": "Pass energy", + "gui.refinedstorage.relay.pass_energy.help": "Whether this device should pass the energy buffer from the input network to the output network.", + "gui.refinedstorage.relay.pass_storage": "Pass storage", + "gui.refinedstorage.relay.pass_storage.help": "Whether this device should pass the storage from the input network to the output network.", + "gui.refinedstorage.relay.pass_security": "Pass security", + "gui.refinedstorage.relay.pass_security.help": "Whether this device should pass the security settings from the input network to the output network.", + "gui.refinedstorage.relay.pass_autocrafting": "Pass autocrafting", + "gui.refinedstorage.relay.pass_autocrafting.help": "Whether this device should pass the autocrafting patterns from the input network to the output network.", + "gui.refinedstorage.relay.filter_mode.allow.help": "Only expose resources from the input network to the output network that are configured in the filters.", + "gui.refinedstorage.relay.filter_mode.block.help": "Don't expose resources from the input network to the output network that are configured in the filters.", + "gui.refinedstorage.disk_interface.filter_mode.allow.help": "Only allow resources into the storage disks or into the network that are configured in the filters.", + "gui.refinedstorage.disk_interface.filter_mode.block.help": "Disallow resources into the storage disks or into the network that are configured in the filters.", + "gui.refinedstorage.disk_interface.in": "In", + "gui.refinedstorage.disk_interface.out": "Out", + "gui.refinedstorage.disk_interface.filter_help": "The resources that may or may not be allowed transferred from or into the provided storage disks, depending if the device is in allowlist or blocklist mode.", + "gui.refinedstorage.disk_interface.transfer_mode": "Transfer mode", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network": "Insert into network", + "gui.refinedstorage.disk_interface.transfer_mode.insert_into_network.help": "Insert the resources from the storage disks into the storage network.", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network": "Extract from network", + "gui.refinedstorage.disk_interface.transfer_mode.extract_from_network.help": "Insert the resources from the storage network into the storage disks.", + "gui.refinedstorage.autocrafter.empty_pattern_slot": "Empty pattern slot", + "gui.refinedstorage.autocrafter.lock_mode": "Lock mode", + "gui.refinedstorage.autocrafter.lock_mode.never": "Never", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_redstone_pulse_received": "Lock until redstone pulse is received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_connected_machine_is_empty": "Lock until connected machine is empty", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_all_outputs_are_received": "Lock until all outputs are received", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_high_redstone_signal": "Lock until high redstone signal", + "gui.refinedstorage.autocrafter.lock_mode.lock_until_low_redstone_signal": "Lock until low redstone signal", + "gui.refinedstorage.autocrafter.edit_name": "Edit", + "gui.refinedstorage.autocrafter.chained": "Chained", + "gui.refinedstorage.autocrafter.chained.help": "This autocrafter is part of a chain.", + "gui.refinedstorage.autocrafter.chained.head_help": "This autocrafter is the head of the chain.", + "gui.refinedstorage.autocrafter.not_chained": "Not chained", + "gui.refinedstorage.autocrafter.not_chained.help": "If another autocrafter is facing this one, they'll form a chain, allowing you to have more patterns going into a single machine.", + "gui.refinedstorage.autocrafting_preview.title": "Autocrafting", + "gui.refinedstorage.autocrafting_preview.start": "Start", + "gui.refinedstorage.autocrafting_preview.pending": "Pending", + "gui.refinedstorage.autocrafting_preview.start.missing_resources": "There are missing resources.", + "gui.refinedstorage.autocrafting_preview.available": "Available: %s", + "gui.refinedstorage.autocrafting_preview.to_craft": "To craft: %s", + "gui.refinedstorage.autocrafting_preview.missing": "Missing: %s", + "item.refinedstorage.controller.help": "Provides the storage network with energy. Multiple are allowed in a single storage network.", + "item.refinedstorage.creative_controller.help": "Provides the storage network with an infinite source of energy.", + "item.refinedstorage.disk_drive.help": "Accepts storage disks to provide the storage network with storage space.", + "item.refinedstorage.disk_interface.help": "Transfers resources between the storage network and provided storage disks.", + "item.refinedstorage.grid.help": "Allows for interacting with the storage network.", + "item.refinedstorage.crafting_grid.help": "Allows for interacting with the storage network, with crafting abilities.", + "item.refinedstorage.pattern_grid.help": "Allows for the creation of Patterns for use in autocrafting.", + "item.refinedstorage.importer.help": "Imports resources from an external source to the storage network.", + "item.refinedstorage.exporter.help": "Exports resources from the storage network to an external destination.", + "item.refinedstorage.interface.help": "Acts as the combination of an Importer and Exporter.", + "item.refinedstorage.external_storage.help": "Provides the storage network with storage from an external source.", + "item.refinedstorage.detector.help": "Emits a redstone signal if the storage network contains a resource equal, above or under a given amount.", + "item.refinedstorage.constructor.help": "Places blocks from the storage network in the world.", + "item.refinedstorage.destructor.help": "Destroys blocks from the world and puts them in the storage network.", + "item.refinedstorage.relay.help": "Turn entire sections of a storage network on or off and create new branches of your network.", + "item.refinedstorage.autocrafter.help": "Accepts patterns to store autocraftable resources.", + "item.refinedstorage.quartz_enriched_iron": "Quartz Enriched Iron", + "item.refinedstorage.quartz_enriched_copper": "Quartz Enriched Copper", + "item.refinedstorage.processor_binding": "Processor Binding", + "item.refinedstorage.silicon": "Silicon", + "item.refinedstorage.raw_basic_processor": "Raw Basic Processor", + "item.refinedstorage.raw_improved_processor": "Raw Improved Processor", + "item.refinedstorage.raw_advanced_processor": "Raw Advanced Processor", + "item.refinedstorage.basic_processor": "Basic Processor", + "item.refinedstorage.improved_processor": "Improved Processor", + "item.refinedstorage.advanced_processor": "Advanced Processor", + "item.refinedstorage.1k_storage_part": "1K Storage Part", + "item.refinedstorage.4k_storage_part": "4K Storage Part", + "item.refinedstorage.16k_storage_part": "16K Storage Part", + "item.refinedstorage.64k_storage_part": "64K Storage Part", + "item.refinedstorage.1k_storage_disk": "1K Storage Disk", + "item.refinedstorage.4k_storage_disk": "4K Storage Disk", + "item.refinedstorage.16k_storage_disk": "16K Storage Disk", + "item.refinedstorage.64k_storage_disk": "64K Storage Disk", + "item.refinedstorage.storage_disk.help": "Stores %s items. When empty, use while holding to return the Storage Part. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.storage_block.help": "Stores %s items. When empty, use while holding to return the Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Storage Part.", + "item.refinedstorage.creative_storage_disk": "Creative Storage Disk", + "item.refinedstorage.creative_storage_disk.help": "Stores an infinite amount of items.", + "item.refinedstorage.creative_storage_block.help": "Stores an infinite amount of items.", + "item.refinedstorage.64b_fluid_storage_part": "64B Fluid Storage Part", + "item.refinedstorage.256b_fluid_storage_part": "256B Fluid Storage Part", + "item.refinedstorage.1024b_fluid_storage_part": "1024B Fluid Storage Part", + "item.refinedstorage.4096b_fluid_storage_part": "4096B Fluid Storage Part", + "item.refinedstorage.64b_fluid_storage_disk": "64B Fluid Storage Disk", + "item.refinedstorage.256b_fluid_storage_disk": "256B Fluid Storage Disk", + "item.refinedstorage.1024b_fluid_storage_disk": "1024B Fluid Storage Disk", + "item.refinedstorage.4096b_fluid_storage_disk": "4096B Fluid Storage Disk", + "item.refinedstorage.fluid_storage_disk.help": "Stores %s buckets.", + "item.refinedstorage.fluid_storage_block.help": "Stores %s buckets.", + "item.refinedstorage.creative_fluid_storage_disk": "Creative Fluid Storage Disk", + "item.refinedstorage.creative_fluid_storage_disk.help": "Stores an infinite amount of buckets.", + "item.refinedstorage.creative_fluid_storage_block.help": "Stores an infinite amount of buckets.", + "item.refinedstorage.storage_housing": "Storage Housing", + "item.refinedstorage.construction_core": "Construction Core", + "item.refinedstorage.destruction_core": "Destruction Core", + "item.refinedstorage.wrench": "Wrench", + "item.refinedstorage.wrench.help": "Use to rotate blocks or press SHIFT and use to dismantle Refined Storage blocks.", + "item.refinedstorage.upgrade": "Upgrade", + "item.refinedstorage.speed_upgrade": "Speed Upgrade", + "item.refinedstorage.speed_upgrade.help": "Increases the operation speed of a storage network device.", + "item.refinedstorage.stack_upgrade": "Stack Upgrade", + "item.refinedstorage.stack_upgrade.help": "Increases the amount of resources that the storage network device handles per operation.", + "item.refinedstorage.silk_touch_upgrade": "Silk Touch Upgrade", + "item.refinedstorage.silk_touch_upgrade.help": "Acts like the Silk Touch enchantment on a pickaxe.", + "item.refinedstorage.fortune_upgrade.1": "Fortune I Upgrade", + "item.refinedstorage.fortune_upgrade.2": "Fortune II Upgrade", + "item.refinedstorage.fortune_upgrade.3": "Fortune III Upgrade", + "item.refinedstorage.fortune_upgrade.help": "Yields more resources when breaking a block. Acts like the Fortune enchantment on a pickaxe.", + "item.refinedstorage.regulator_upgrade": "Regulator Upgrade", + "item.refinedstorage.regulator_upgrade.help": "In an Exporter, will only export if the amount in the target is less than configured in the upgrade. In an Importer, will only import if the amount in the target is more than configured in the upgrade. Use item to configure.", + "item.refinedstorage.range_upgrade": "Range Upgrade", + "item.refinedstorage.range_upgrade.help": "Increases the range of the Wireless Transmitter.", + "item.refinedstorage.creative_range_upgrade": "Creative Range Upgrade", + "item.refinedstorage.creative_range_upgrade.help": "Provides infinite range for the Wireless Transmitter. Does not work cross-dimensionally.", + "item.refinedstorage.wireless_grid": "Wireless Grid", + "item.refinedstorage.creative_wireless_grid": "Creative Wireless Grid", + "item.refinedstorage.wireless_transmitter.help": "Provides wireless network access for items like the Wireless Grid. Multiple are allowed in an area for wider coverage.", + "item.refinedstorage.network_item.unbound": "Unbound.", + "item.refinedstorage.network_item.unbound.help": "Use on any storage network device to bind.", + "item.refinedstorage.network_item.bound_to": "Bound to %d, %d, %d.", + "item.refinedstorage.network_item.cannot_open_with_shortcut_due_to_duplicate": "There is more than one %s in your inventory.", + "item.refinedstorage.network_item.cannot_open_because_not_found": "There isn't any %s in your inventory.", + "item.refinedstorage.configuration_card": "Configuration Card", + "item.refinedstorage.configuration_card.empty": "Empty.", + "item.refinedstorage.configuration_card.configured": "Contains configuration for %s.", + "item.refinedstorage.configuration_card.copied_configuration": "Copied configuration for %s.", + "item.refinedstorage.configuration_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage.configuration_card.cannot_apply_configuration": "Cannot apply configuration card to different type of device. It is configured for %s.", + "item.refinedstorage.configuration_card.applied_configuration": "Applied configuration.", + "item.refinedstorage.configuration_card.empty_help": "Use on a storage network device while crouching to copy its configuration and upgrades to the card.", + "item.refinedstorage.configuration_card.configured_help": "Use on the destination storage network device while crouching to transfer the configuration and upgrades. Use while crouching to clear.", + "item.refinedstorage.network_card": "Network Card", + "item.refinedstorage.network_card.unbound_help": "Use while crouching on a Network Receiver.", + "item.refinedstorage.network_card.unbound": "Unbound.", + "item.refinedstorage.network_card.bound_help": "Insert into a Network Transmitter. Use while crouching to clear binding.", + "item.refinedstorage.network_card.bound": "Bound to %d, %d, %d in %s.", + "item.refinedstorage.network_transmitter.help": "Transmits a network signal wirelessly. Needs a Network Card that is paired with a Network Receiver.", + "item.refinedstorage.network_receiver.help": "Receives a network signal wirelessly. Bind a Network Card to this block.", + "item.refinedstorage.cable.help": "Connects storage network devices with each other. For full blocks, will connect to any color. For cable blocks, will only connect to the same color or to the default color (gray).", + "item.refinedstorage.security_card": "Security Card", + "item.refinedstorage.security_card.cleared_configuration": "Cleared configuration.", + "item.refinedstorage.security_card.unbound": "Unbound.", + "item.refinedstorage.security_card.unbound.help": "Right click to configure and bind to the current player.", + "item.refinedstorage.security_card.bound": "Bound to %s.", + "item.refinedstorage.security_card.bound.help": "Right click to configure. Use while crouching to clear configuration and binding.", + "item.refinedstorage.fallback_security_card": "Fallback Security Card", + "item.refinedstorage.fallback_security_card.help": "Acts as a fallback if no matching Security Card for a player is found. Right click to configure. Use while crouching to clear configuration.", + "item.refinedstorage.portable_grid.help": "Allows to interact with a storage disk while not being connected to a storage network. Can be used as a block in world, or from your inventory.", + "item.refinedstorage.storage_monitor.help": "A block that displays the current amount of a certain resource in your storage network. SHIFT + right click to configure. Left click to extract a stack, SHIFT + left click to extract a single resource, right click to insert a resource, right click multiple times to insert resources in bulk.", + "item.refinedstorage.pattern": "Pattern", + "item.refinedstorage.pattern.fuzzy_mode": "Fuzzy mode", + "item.refinedstorage.pattern.help": "Used in autocrafting to store the recipe to be crafted. Use while crouching to clear.", + "misc.refinedstorage.stored": "Stored: %s", + "misc.refinedstorage.stored_with_capacity": "Stored: %s / %s (%d%%)", + "misc.refinedstorage.total": "%d total", + "misc.refinedstorage.last_modified.just_now": "Last modified just now by %s", + "misc.refinedstorage.last_modified.second": "Last modified %d second ago by %s", + "misc.refinedstorage.last_modified.seconds": "Last modified %d seconds ago by %s", + "misc.refinedstorage.last_modified.minute": "Last modified %d minute ago by %s", + "misc.refinedstorage.last_modified.minutes": "Last modified %d minutes ago by %s", + "misc.refinedstorage.last_modified.hour": "Last modified %d hour ago by %s", + "misc.refinedstorage.last_modified.hours": "Last modified %d hours ago by %s", + "misc.refinedstorage.last_modified.day": "Last modified %d day ago by %s", + "misc.refinedstorage.last_modified.days": "Last modified %d days ago by %s", + "misc.refinedstorage.last_modified.week": "Last modified %d week ago by %s", + "misc.refinedstorage.last_modified.weeks": "Last modified %d weeks ago by %s", + "misc.refinedstorage.last_modified.year": "Last modified %d year ago by %s", + "misc.refinedstorage.last_modified.years": "Last modified %d years ago by %s", + "misc.refinedstorage.resource_type.item": "Item", + "misc.refinedstorage.resource_type.fluid": "Fluid", + "misc.refinedstorage.press_shift_for_help": "Press SHIFT for help", + "misc.refinedstorage.no_permission": "No permission", + "misc.refinedstorage.no_permission.open": "You are not allowed to open the %s.", + "misc.refinedstorage.no_permission.insert": "You are not allowed to insert.", + "misc.refinedstorage.no_permission.extract": "You are not allowed to extract.", + "misc.refinedstorage.no_permission.build.place": "You are not allowed to place a %s here.", + "misc.refinedstorage.no_permission.build.break": "You are not allowed to break the %s.", + "misc.refinedstorage.no_permission.build.rotate": "You are not allowed to rotate the %s.", + "misc.refinedstorage.no_permission.build.dismantle": "You are not allowed to dismantle the %s.", + "misc.refinedstorage.pattern.crafting": "Crafting Pattern", + "misc.refinedstorage.pattern.processing": "Processing Pattern", + "misc.refinedstorage.pattern.stonecutter": "Stonecutter Pattern", + "misc.refinedstorage.pattern.smithing_table": "Smithing Table Pattern", + "key.refinedstorage.focus_search_bar": "Focus search bar", + "key.refinedstorage.clear_crafting_grid_matrix_to_network": "Clear Crafting Grid matrix to network", + "key.refinedstorage.clear_crafting_grid_matrix_to_inventory": "Clear Crafting Grid matrix to inventory", + "key.refinedstorage.open_wireless_grid": "Open Wireless Grid", + "key.refinedstorage.open_portable_grid": "Open Portable Grid", + "refinedstorage.subtitle.wrench": "Wrench used", + "permission.refinedstorage.insert": "Insert", + "permission.refinedstorage.insert.description": "Whether the player can insert resources in a network.", + "permission.refinedstorage.extract": "Extract", + "permission.refinedstorage.extract.description": "Whether the player can extract resources from a network.", + "permission.refinedstorage.autocrafting": "Autocrafting", + "permission.refinedstorage.autocrafting.description": "Whether the player can start, cancel or view an autocrafting task.", + "permission.refinedstorage.open": "Open", + "permission.refinedstorage.open.description": "Whether the player can open network device GUIs.", + "permission.refinedstorage.build": "Build", + "permission.refinedstorage.build.description": "Whether the player can add or remove network devices.", + "permission.refinedstorage.security": "Security", + "permission.refinedstorage.security.description": "Whether the player can manage the security options for a network.", + "tag.item.refinedstorage.cables": "Cables", + "tag.item.refinedstorage.constructors": "Constructors", + "tag.item.refinedstorage.controllers": "Controllers", + "tag.item.refinedstorage.crafting_grids": "Crafting Grids", + "tag.item.refinedstorage.pattern_grids": "Pattern Grids", + "tag.item.refinedstorage.creative_controllers": "Creative Controllers", + "tag.item.refinedstorage.destructors": "Destructors", + "tag.item.refinedstorage.detectors": "Detectors", + "tag.item.refinedstorage.exporters": "Exporters", + "tag.item.refinedstorage.external_storages": "External Storages", + "tag.item.refinedstorage.fluid_storage_disks": "Fluid Storage Disks", + "tag.item.refinedstorage.grids": "Grids", + "tag.item.refinedstorage.importers": "Importers", + "tag.item.refinedstorage.network_receivers": "Network Receivers", + "tag.item.refinedstorage.network_transmitters": "Network Transmitters", + "tag.item.refinedstorage.relays": "Relays", + "tag.item.refinedstorage.security_managers": "Security Managers", + "tag.item.refinedstorage.storage_disks": "Storage Disks", + "tag.item.refinedstorage.wireless_transmitters": "Wireless Transmitters", + "tag.item.refinedstorage.disk_interfaces": "Disk Interfaces", + "tag.item.refinedstorage.crafters": "Crafters", + "text.autoconfig.refinedstorage.title": "Refined Storage Configuration", + "refinedstorage.configuration.title": "Refined Storage Configuration", + "refinedstorage.configuration.section.refinedstorage.common.toml": "Refined Storage Configuration", + "refinedstorage.configuration.section.refinedstorage.common.toml.title": "Refined Storage Configuration", + "text.autoconfig.refinedstorage.option.smoothScrolling": "Smooth scrolling", + "text.autoconfig.refinedstorage.option.smoothScrolling.tooltip": "Whether scrollbars should use smooth scrolling.", + "text.autoconfig.refinedstorage.option.screenSize": "Screen size", + "text.autoconfig.refinedstorage.option.screenSize.tooltip": "The screen size.", + "text.autoconfig.refinedstorage.option.maxRowsStretch": "Maximum amount of rows when screen size is stretched", + "text.autoconfig.refinedstorage.option.maxRowsStretch.tooltip": "The maximum amount of rows that can be displayed when the screen size is stretched.", + "text.autoconfig.refinedstorage.option.grid": "Grid", + "text.autoconfig.refinedstorage.option.grid.tooltip": "Configuration for the Grid.", + "text.autoconfig.refinedstorage.option.grid.largeFont": "Large font", + "text.autoconfig.refinedstorage.option.grid.largeFont.tooltip": "Whether the Grid should use a large font for quantities.", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown": "Prevent sorting while SHIFT is down", + "text.autoconfig.refinedstorage.option.grid.preventSortingWhileShiftIsDown.tooltip": "Whether the Grid should avoid sorting when shift is held down.", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip": "Detailed tooltip", + "text.autoconfig.refinedstorage.option.grid.detailedTooltip.tooltip": "Whether the Grid should show a detailed tooltip.", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery": "Remember search query", + "text.autoconfig.refinedstorage.option.grid.rememberSearchQuery.tooltip": "Whether the search query should persist when closing and re-opening the Grid.", + "text.autoconfig.refinedstorage.option.grid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.grid.energyUsage.tooltip": "The energy used by the Grid.", + "text.autoconfig.refinedstorage.option.grid.autoSelected": "Auto selected search box", + "text.autoconfig.refinedstorage.option.grid.autoSelected.tooltip": "Whether the search box should be auto-selected when opening the Grid.", + "text.autoconfig.refinedstorage.option.grid.synchronizer": "Synchronizer", + "text.autoconfig.refinedstorage.option.grid.synchronizer.tooltip": "The synchronization type of the Grid search box.", + "text.autoconfig.refinedstorage.option.grid.resourceType": "Resource type", + "text.autoconfig.refinedstorage.option.grid.resourceType.tooltip": "The resource type to be shown.", + "text.autoconfig.refinedstorage.option.grid.sortingDirection": "Sorting direction", + "text.autoconfig.refinedstorage.option.grid.sortingDirection.tooltip": "The sorting direction.", + "text.autoconfig.refinedstorage.option.grid.sortingType": "Sorting type", + "text.autoconfig.refinedstorage.option.grid.sortingType.tooltip": "The sorting type.", + "text.autoconfig.refinedstorage.option.grid.viewType": "View type", + "text.autoconfig.refinedstorage.option.grid.viewType.tooltip": "The view type.", + "text.autoconfig.refinedstorage.option.craftingGrid": "Crafting Grid", + "text.autoconfig.refinedstorage.option.craftingGrid.tooltip": "Configuration for the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.craftingGrid.energyUsage.tooltip": "The energy used by the Crafting Grid.", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior": "Crafting matrix close behavior", + "text.autoconfig.refinedstorage.option.craftingGrid.craftingMatrixCloseBehavior.tooltip": "What should happen to the crafting matrix slots when closing the Crafting Grid.", + "text.autoconfig.refinedstorage.option.patternGrid": "Pattern Grid", + "text.autoconfig.refinedstorage.option.patternGrid.tooltip": "Configuration for the Pattern Grid.", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.patternGrid.energyUsage.tooltip": "The energy used by the Pattern Grid.", + "text.autoconfig.refinedstorage.option.controller": "Controller", + "text.autoconfig.refinedstorage.option.controller.tooltip": "Configuration for the Controller.", + "text.autoconfig.refinedstorage.option.controller.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.controller.energyCapacity.tooltip": "The energy capacity of the Controller.", + "text.autoconfig.refinedstorage.option.cable": "Cable", + "text.autoconfig.refinedstorage.option.cable.tooltip": "Configuration for the Cable.", + "text.autoconfig.refinedstorage.option.cable.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.cable.energyUsage.tooltip": "The energy used by the Cable.", + "text.autoconfig.refinedstorage.option.diskDrive": "Disk Drive", + "text.autoconfig.refinedstorage.option.diskDrive.tooltip": "Configuration for the Disk Drive.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsage.tooltip": "The energy used by the Disk Drive.", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage.option.diskDrive.energyUsagePerDisk.tooltip": "The energy used per disk.", + "text.autoconfig.refinedstorage.option.diskInterface": "Disk Interface", + "text.autoconfig.refinedstorage.option.diskInterface.tooltip": "Configuration for the Disk Interface.", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsage.tooltip": "The energy used by the Disk Interface.", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk": "Energy usage per disk", + "text.autoconfig.refinedstorage.option.diskInterface.energyUsagePerDisk.tooltip": "The energy used per disk.", + "text.autoconfig.refinedstorage.option.storageBlock": "Storage Block", + "text.autoconfig.refinedstorage.option.storageBlock.tooltip": "Configuration for the Storage Blocks.", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage": "1K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.oneKEnergyUsage.tooltip": "The energy used by the 1K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage": "4K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.fourKEnergyUsage.tooltip": "The energy used by the 4K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage": "16K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.sixteenKEnergyUsage.tooltip": "The energy used by the 16K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage": "64K energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.sixtyFourKEnergyUsage.tooltip": "The energy used by the 64K Storage Block.", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage.option.storageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock": "Fluid Storage Block", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.tooltip": "Configuration for the Fluid Storage Blocks.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.sixtyFourBEnergyUsage.tooltip": "The energy used by the 64B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.twoHundredFiftySixBEnergyUsage.tooltip": "The energy used by the 256B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.thousandTwentyFourBEnergyUsage.tooltip": "The energy used by the 1024B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage": "4096B energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.fourThousandNinetySixBEnergyUsage.tooltip": "The energy used by the 4096B Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage": "Creative energy usage", + "text.autoconfig.refinedstorage.option.fluidStorageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Fluid Storage Block.", + "text.autoconfig.refinedstorage.option.importer": "Importer", + "text.autoconfig.refinedstorage.option.importer.tooltip": "Configuration for the Importer.", + "text.autoconfig.refinedstorage.option.importer.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.importer.energyUsage.tooltip": "The energy used by the Importer.", + "text.autoconfig.refinedstorage.option.exporter": "Exporter", + "text.autoconfig.refinedstorage.option.exporter.tooltip": "Configuration for the Exporter.", + "text.autoconfig.refinedstorage.option.exporter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.exporter.energyUsage.tooltip": "The energy used by the Exporter.", + "text.autoconfig.refinedstorage.option.detector": "Detector", + "text.autoconfig.refinedstorage.option.detector.tooltip": "Configuration for the Detector.", + "text.autoconfig.refinedstorage.option.detector.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.detector.energyUsage.tooltip": "The energy used by the Detector.", + "text.autoconfig.refinedstorage.option.constructor": "Constructor", + "text.autoconfig.refinedstorage.option.constructor.tooltip": "Configuration for the Constructor.", + "text.autoconfig.refinedstorage.option.constructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.constructor.energyUsage.tooltip": "The energy used by the Constructor.", + "text.autoconfig.refinedstorage.option.destructor": "Destructor", + "text.autoconfig.refinedstorage.option.destructor.tooltip": "Configuration for the Destructor.", + "text.autoconfig.refinedstorage.option.destructor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.destructor.energyUsage.tooltip": "The energy used by the Destructor.", + "text.autoconfig.refinedstorage.option.upgrade": "Upgrade", + "text.autoconfig.refinedstorage.option.upgrade.tooltip": "Configuration for the Upgrades.", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage": "Speed Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.speedUpgradeEnergyUsage.tooltip": "The additional energy used per Speed Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage": "Stack Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.stackUpgradeEnergyUsage.tooltip": "The additional energy used by the Stack Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage": "Fortune 1 Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.fortune1UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 1 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage": "Fortune 2 Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.fortune2UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 2 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage": "Fortune 3 Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.fortune3UpgradeEnergyUsage.tooltip": "The additional energy used by the Fortune 3 Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage": "Silk Touch Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.silkTouchUpgradeEnergyUsage.tooltip": "The additional energy used by the Silk Touch Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage": "Regulator Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.regulatorUpgradeEnergyUsage.tooltip": "The additional energy used by the Regulator Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage": "Range Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeEnergyUsage.tooltip": "The additional energy used per Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage": "Creative Range Upgrade energy usage", + "text.autoconfig.refinedstorage.option.upgrade.creativeRangeUpgradeEnergyUsage.tooltip": "The additional energy used by the Creative Range Upgrade.", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange": "Range Upgrade range", + "text.autoconfig.refinedstorage.option.upgrade.rangeUpgradeRange.tooltip": "The additional range provided by the Range Upgrade.", + "text.autoconfig.refinedstorage.option.iface": "Interface", + "text.autoconfig.refinedstorage.option.iface.tooltip": "Configuration for the Interface.", + "text.autoconfig.refinedstorage.option.iface.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.iface.energyUsage.tooltip": "The energy used by the Interface.", + "text.autoconfig.refinedstorage.option.externalStorage": "External Storage", + "text.autoconfig.refinedstorage.option.externalStorage.tooltip": "Configuration for the External Storage.", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.externalStorage.energyUsage.tooltip": "The energy used by the External Storage.", + "text.autoconfig.refinedstorage.option.wirelessGrid": "Wireless Grid", + "text.autoconfig.refinedstorage.option.wirelessGrid.tooltip": "Configuration for the Wireless Grid.", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.wirelessGrid.energyCapacity.tooltip": "The energy capacity of the Wireless Grid.", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage.option.wirelessGrid.openEnergyUsage.tooltip": "The energy used by the Wireless Grid to open.", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage.option.wirelessGrid.insertEnergyUsage.tooltip": "The energy used by the Wireless Grid to insert resources.", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage.option.wirelessGrid.extractEnergyUsage.tooltip": "The energy used by the Wireless Grid to extract resources.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter": "Wireless Transmitter", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.tooltip": "Configuration for the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.energyUsage.tooltip": "The energy used by the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange": "Base range", + "text.autoconfig.refinedstorage.option.wirelessTransmitter.baseRange.tooltip": "The base range of the Wireless Transmitter.", + "text.autoconfig.refinedstorage.option.storageMonitor": "Storage Monitor", + "text.autoconfig.refinedstorage.option.storageMonitor.tooltip": "Configuration for the Storage Monitor.", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.storageMonitor.energyUsage.tooltip": "The energy used by the Storage Monitor.", + "text.autoconfig.refinedstorage.option.networkReceiver": "Network Receiver", + "text.autoconfig.refinedstorage.option.networkReceiver.tooltip": "Configuration for the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.networkReceiver.energyUsage.tooltip": "The energy used by the Network Receiver.", + "text.autoconfig.refinedstorage.option.networkTransmitter": "Network Transmitter", + "text.autoconfig.refinedstorage.option.networkTransmitter.tooltip": "Configuration for the Network Transmitter.", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.networkTransmitter.energyUsage.tooltip": "The energy used by the Network Transmitter.", + "text.autoconfig.refinedstorage.option.portableGrid": "Portable Grid", + "text.autoconfig.refinedstorage.option.portableGrid.tooltip": "Configuration for the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity": "Energy capacity", + "text.autoconfig.refinedstorage.option.portableGrid.energyCapacity.tooltip": "The energy capacity of the Portable Grid.", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage": "Open energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.openEnergyUsage.tooltip": "The energy used by the Portable Grid to open.", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage": "Insert energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.insertEnergyUsage.tooltip": "The energy used by the Portable Grid to insert resources.", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage": "Extract energy usage", + "text.autoconfig.refinedstorage.option.portableGrid.extractEnergyUsage.tooltip": "The energy used by the Portable Grid to extract resources.", + "text.autoconfig.refinedstorage.option.securityCard": "Security Card", + "text.autoconfig.refinedstorage.option.securityCard.tooltip": "Configuration for the Security Card.", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.securityCard.energyUsage.tooltip": "The energy used by the Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard": "Fallback Security Card", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.tooltip": "Configuration for the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.fallbackSecurityCard.energyUsage.tooltip": "The energy used by the Fallback Security Card.", + "text.autoconfig.refinedstorage.option.securityManager": "Security Manager", + "text.autoconfig.refinedstorage.option.securityManager.tooltip": "Configuration for the Security Manager.", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.securityManager.energyUsage.tooltip": "The energy used by the Security Manager.", + "text.autoconfig.refinedstorage.option.relay": "Relay", + "text.autoconfig.refinedstorage.option.relay.tooltip": "Configuration for the Relay.", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage": "Input network energy usage", + "text.autoconfig.refinedstorage.option.relay.inputNetworkEnergyUsage.tooltip": "Input network energy usage.", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage": "Output network energy usage (if not in pass through mode)", + "text.autoconfig.refinedstorage.option.relay.outputNetworkEnergyUsage.tooltip": "Output network energy usage (if not in pass through mode).", + "text.autoconfig.refinedstorage.option.autocrafter": "Autocrafter", + "text.autoconfig.refinedstorage.option.autocrafter.tooltip": "Configuration for the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage": "Energy usage", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsage.tooltip": "The energy used by the Autocrafter.", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern": "Energy usage per pattern", + "text.autoconfig.refinedstorage.option.autocrafter.energyUsagePerPattern.tooltip": "The additional energy used per pattern.", + "advancements.refinedstorage.root.description": "Use one or multiple Controllers in a storage network to provide your network with energy", + "advancements.refinedstorage.connecting": "Connecting", + "advancements.refinedstorage.connecting.description": "Use Cable to connect devices with each other, or place devices against each other", + "advancements.refinedstorage.drives": "Drives", + "advancements.refinedstorage.drives.description": "Craft a Disk Drive to be able to store your storage disks", + "advancements.refinedstorage.interfacing_with_disks": "Interfacing with disks", + "advancements.refinedstorage.interfacing_with_disks.description": "Craft a Disk Interface to transfer resources between the storage network and storage disks", + "advancements.refinedstorage.storing_items": "Storing items", + "advancements.refinedstorage.storing_items.description": "Craft a Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage.viewing_your_storage": "Viewing your storage", + "advancements.refinedstorage.viewing_your_storage.description": "Craft a Grid to interact with your storage", + "advancements.refinedstorage.upgrading_your_grid": "Upgrading your Grid", + "advancements.refinedstorage.upgrading_your_grid.description": "Upgrade your Grid to a Crafting Grid to get crafting abilities", + "advancements.refinedstorage.storing_fluids": "Storing fluids", + "advancements.refinedstorage.storing_fluids.description": "Craft a Fluid Storage Disk and put it in your Disk Drive", + "advancements.refinedstorage.importing": "Importing", + "advancements.refinedstorage.importing.description": "Get resources into the storage network with an Importer", + "advancements.refinedstorage.exporting": "Exporting", + "advancements.refinedstorage.exporting.description": "Get resources out of the storage network with an Exporter", + "advancements.refinedstorage.upgrading": "Upgrading", + "advancements.refinedstorage.upgrading.description": "Craft an Upgrade to improve various devices", + "advancements.refinedstorage.interface_to_the_world": "Interface to the world", + "advancements.refinedstorage.interface_to_the_world.description": "Export and import items at the same time with an Interface", + "advancements.refinedstorage.storing_externally": "Storing externally", + "advancements.refinedstorage.storing_externally.description": "Use an External Storage to provide the network with storage from an external block like a chest", + "advancements.refinedstorage.detecting": "Detecting", + "advancements.refinedstorage.detecting.description": "Use redstone to check resources stored in the storage network", + "advancements.refinedstorage.construction": "Construction", + "advancements.refinedstorage.construction.description": "Get blocks from the storage network into the world with a Constructor", + "advancements.refinedstorage.destruction": "Destruction", + "advancements.refinedstorage.destruction.description": "Get blocks from in the world into the storage network with a Destructor", + "advancements.refinedstorage.wireless": "Wireless", + "advancements.refinedstorage.wireless.description": "Access your resources wirelessly with a Wireless Grid", + "advancements.refinedstorage.better_than_a_barrel": "Better than a barrel", + "advancements.refinedstorage.better_than_a_barrel.description": "Craft a Storage Monitor to view, insert or extract resources in a storage network", + "advancements.refinedstorage.no_cables_required": "No cables required", + "advancements.refinedstorage.no_cables_required.description": "Add extra components to your storage network without using cables by using a Network Transmitter, Network Receiver and Network Card", + "advancements.refinedstorage.portable_storage": "Portable storage", + "advancements.refinedstorage.portable_storage.description": "Craft a Portable Grid to access the content of disks without requiring a storage network", + "advancements.refinedstorage.security": "Security", + "advancements.refinedstorage.security.description": "Secure your storage network with a Security Manager and a Security Card", + "advancements.refinedstorage.conditional_connecting": "Conditional connecting", + "advancements.refinedstorage.conditional_connecting.description": "Turn entire sections of a storage network on or off and create new branches of your network with a Relay", + "advancements.refinedstorage.autocrafting": "Autocrafting", + "advancements.refinedstorage.autocrafting.description": "Automate crafting with an Autocrafter by using patterns created in a Pattern Grid" +} From a2da91732db6464ea662e815c302f37458111e47 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 12 Oct 2024 17:07:31 +0200 Subject: [PATCH 81/83] fix: the configuration card is now stack sensitive To transfer a configured Regulator Upgrade for example. --- CHANGELOG.md | 1 + .../configurationcard/ConfigurationCardTarget.java | 5 ++--- .../common/autocrafting/AutocrafterBlockEntity.java | 4 ++-- .../common/autocrafting/PatternItemOverrides.java | 2 +- .../configurationcard/ConfigurationCardItem.java | 13 ++++++------- .../configurationcard/ConfigurationCardState.java | 13 +++++-------- .../AbstractConstructorBlockEntity.java | 4 ++-- .../AbstractDestructorBlockEntity.java | 5 ++--- .../exporter/AbstractExporterBlockEntity.java | 4 ++-- .../importer/AbstractImporterBlockEntity.java | 4 ++-- .../networking/WirelessTransmitterBlockEntity.java | 4 ++-- .../AbstractDiskInterfaceBlockEntity.java | 4 ++-- .../common/upgrade/UpgradeContainer.java | 12 ++++++------ .../constructordestructor/ConstructorTest.java | 2 +- .../constructordestructor/DestructorTest.java | 2 +- .../common/exporter/ExporterTest.java | 4 ++-- .../common/importer/ImporterTest.java | 4 ++-- .../storage/diskinterface/DiskInterfaceTest.java | 4 ++-- 18 files changed, 43 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d13088e1..4c09c8552 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed upgrade destinations not being shown on upgrades. - Fixed resources with changed data format or ID causing entire storage to fail to load. - Fixed crash when trying to export fluids from an External Storage on Fabric. +- The Configuration Card can now also transfer the (configured) Regulator Upgrade. ## [2.0.0-milestone.4.7] - 2024-08-11 diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java index 5d246efaf..420c85641 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/configurationcard/ConfigurationCardTarget.java @@ -5,7 +5,6 @@ import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import org.apiguardian.api.API; @@ -18,11 +17,11 @@ public interface ConfigurationCardTarget { void readConfiguration(CompoundTag tag, HolderLookup.Provider provider); - default List getUpgradeItems() { + default List getUpgrades() { return Collections.emptyList(); } - default boolean addUpgradeItem(ItemStack upgradeStack) { + default boolean addUpgrade(ItemStack upgradeStack) { return false; } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java index df3cadde9..3b6401a9c 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java @@ -230,12 +230,12 @@ protected boolean hasRedstoneMode() { } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItemOverrides.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItemOverrides.java index 3bce9bfea..c53f3ecd5 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItemOverrides.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/PatternItemOverrides.java @@ -21,7 +21,7 @@ public class PatternItemOverrides extends ItemOverrides { private final BakedModel stonecutterModel; private final BakedModel smithingTableModel; - @SuppressWarnings({"DataFlowIssue"}) // null is allowed as long as we don't pass overrides + @SuppressWarnings({"DataFlowIssue", "deprecation"}) // null is allowed as long as we don't pass overrides public PatternItemOverrides(final ModelBaker modelBaker, final BakedModel emptyModel, final BakedModel craftingModel, diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java index 7b78ff02f..f6cc77056 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java @@ -55,7 +55,7 @@ public InteractionResult useOn(final UseOnContext ctx) { stack.set(DataComponents.INSTANCE.getConfigurationCardState(), new ConfigurationCardState( blockEntity.getType(), createConfigTag(target, ctx.getLevel().registryAccess()), - target.getUpgradeItems() + target.getUpgrades() )); sendCopiedConfigurationMessage(ctx.getPlayer(), blockEntity.getType()); return InteractionResult.CONSUME; @@ -74,7 +74,7 @@ private InteractionResult applyConfiguration( return configurationCardIsConfiguredForDifferentType(player, state.blockEntityType()); } target.readConfiguration(state.config(), provider); - tryTransferUpgrades(player, target, state.upgradeItems()); + tryTransferUpgrades(player, target, state.upgrades()); targetBlockEntity.setChanged(); player.sendSystemMessage(createTranslation("item", "configuration_card.applied_configuration")); return InteractionResult.SUCCESS; @@ -82,11 +82,10 @@ private InteractionResult applyConfiguration( private void tryTransferUpgrades(final Player player, final ConfigurationCardTarget target, - final List upgradeItems) { - for (final Item upgradeItem : upgradeItems) { - final ItemStack upgradeStack = new ItemStack(upgradeItem); - final int upgradeIndexInPlayerInventory = player.getInventory().findSlotMatchingItem(upgradeStack); - if (upgradeIndexInPlayerInventory >= 0 && target.addUpgradeItem(upgradeStack)) { + final List upgradeItems) { + for (final ItemStack upgradeItem : upgradeItems) { + final int upgradeIndexInPlayerInventory = player.getInventory().findSlotMatchingItem(upgradeItem); + if (upgradeIndexInPlayerInventory >= 0 && target.addUpgrade(upgradeItem)) { player.getInventory().removeItem(upgradeIndexInPlayerInventory, 1); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardState.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardState.java index 33e3bccfd..15d37b943 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardState.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardState.java @@ -11,27 +11,24 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntityType; -public record ConfigurationCardState(BlockEntityType blockEntityType, - CompoundTag config, - List upgradeItems) { +public record ConfigurationCardState(BlockEntityType blockEntityType, CompoundTag config, List upgrades) { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( BuiltInRegistries.BLOCK_ENTITY_TYPE.byNameCodec().fieldOf("blockEntityType") .forGetter(ConfigurationCardState::blockEntityType), CompoundTag.CODEC.fieldOf("config") .forGetter(ConfigurationCardState::config), - Codec.list(BuiltInRegistries.ITEM.byNameCodec()).fieldOf("upgradeItems") - .forGetter(ConfigurationCardState::upgradeItems) + Codec.list(ItemStack.SINGLE_ITEM_CODEC).fieldOf("upgrades") + .forGetter(ConfigurationCardState::upgrades) ).apply(instance, ConfigurationCardState::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.registry(Registries.BLOCK_ENTITY_TYPE), ConfigurationCardState::blockEntityType, ByteBufCodecs.COMPOUND_TAG, ConfigurationCardState::config, - ByteBufCodecs.collection(ArrayList::new, ByteBufCodecs.registry(Registries.ITEM)), - ConfigurationCardState::upgradeItems, + ByteBufCodecs.collection(ArrayList::new, ItemStack.STREAM_CODEC), ConfigurationCardState::upgrades, ConfigurationCardState::new ); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java index 75c15737e..7e8add10f 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java @@ -84,12 +84,12 @@ void setFilters(final List filters) { } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java index d94e3709b..c1d00b756 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractDestructorBlockEntity.java @@ -35,7 +35,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; @@ -75,12 +74,12 @@ protected AbstractDestructorBlockEntity(final BlockPos pos, final BlockState sta } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java index 628263c20..227a77533 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java @@ -87,12 +87,12 @@ private void schedulingModeChanged(final SchedulingMode schedulingMode) { } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java index a19995600..e10917621 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java @@ -81,12 +81,12 @@ protected AbstractImporterBlockEntity(final BlockPos pos, final BlockState state } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 199d7649f..49ace3368 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -74,12 +74,12 @@ public void loadAdditional(final CompoundTag tag, final HolderLookup.Provider pr } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 792f0751a..81c72b10b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -109,12 +109,12 @@ public void writeConfiguration(final CompoundTag tag, final HolderLookup.Provide } @Override - public List getUpgradeItems() { + public List getUpgrades() { return upgradeContainer.getUpgradeItems(); } @Override - public boolean addUpgradeItem(final ItemStack upgradeStack) { + public boolean addUpgrade(final ItemStack upgradeStack) { return upgradeContainer.addUpgradeItem(upgradeStack); } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java index 671a654aa..5c71dc2e6 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/upgrade/UpgradeContainer.java @@ -39,7 +39,7 @@ public class UpgradeContainer extends SimpleContainer implements UpgradeState { private final UpgradeContainerListener listener; private final int defaultWorkTickRate; private final ThrottledNetworkNodeTicker ticker; - + public UpgradeContainer(final UpgradeDestination destination) { this(destination, null); } @@ -145,20 +145,20 @@ public long getEnergyUsage() { return usage; } - public List getUpgradeItems() { - final List upgradeItems = new ArrayList<>(); + public List getUpgradeItems() { + final List upgradeItems = new ArrayList<>(); for (int i = 0; i < getContainerSize(); ++i) { final ItemStack itemStack = getItem(i); if (itemStack.isEmpty()) { continue; } - upgradeItems.add(itemStack.getItem()); + upgradeItems.add(itemStack.copy()); } return upgradeItems; } - public boolean addUpgradeItem(final ItemStack upgradeStack) { - return addItem(upgradeStack).isEmpty(); + public boolean addUpgradeItem(final ItemStack upgradeItem) { + return addItem(upgradeItem).isEmpty(); } public NonNullList getDrops() { diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java index b51cb42c3..dc4850830 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/ConstructorTest.java @@ -129,7 +129,7 @@ public static void shouldDropItemWithStackUpgrade(final GameTestHelper helper) { // Act constructor.setDropItems(true); constructor.setFilters(List.of(asResource(DIRT))); - constructor.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + constructor.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java index a1eb71777..0b7d8d6cf 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/constructordestructor/DestructorTest.java @@ -139,7 +139,7 @@ public static void shouldBreakBlockWithSilkTouchUpgrade(final GameTestHelper hel // Act helper.setBlock(pos.east(), Blocks.DIAMOND_ORE); - destructor.addUpgradeItem(RSITEMS.getSilkTouchUpgrade().getDefaultInstance()); + destructor.addUpgrade(RSITEMS.getSilkTouchUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java index b8d3d7e7c..09e93ba91 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java @@ -80,7 +80,7 @@ public static void shouldExportItemWithStackUpgrade(final GameTestHelper helper) // Act exporter.setFilters(List.of(asResource(DIRT))); - exporter.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + exporter.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence @@ -224,7 +224,7 @@ public static void shouldExportFluidWithStackUpgrade(final GameTestHelper helper // Act exporter.setFilters(List.of(asResource(WATER))); - exporter.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + exporter.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java index a6eefe1a1..ed203c400 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java @@ -90,7 +90,7 @@ public static void shouldImportItemWithStackUpgrade(final GameTestHelper helper) DIRT.getDefaultInstance() ); - importer.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + importer.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence @@ -371,7 +371,7 @@ public static void shouldImportFluidWithStackUpgrade(final GameTestHelper helper new ResourceAmount(asResource(WATER), Platform.INSTANCE.getBucketAmount() * 15), new ResourceAmount(asResource(LAVA), Platform.INSTANCE.getBucketAmount()) ); - importer.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + importer.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java index 1b89c4589..2955d51d0 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/storage/diskinterface/DiskInterfaceTest.java @@ -76,7 +76,7 @@ public static void shouldInsertItemsIntoNetworkWithStackUpgrade(final GameTestHe // Act diskInterface.setTransferMode(StorageTransferMode.INSERT_INTO_NETWORK); - diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + diskInterface.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence @@ -217,7 +217,7 @@ public static void shouldExtractItemsFromNetworkWithStackUpgrade(final GameTestH // Act diskInterface.setTransferMode(StorageTransferMode.EXTRACT_FROM_NETWORK); - diskInterface.addUpgradeItem(RSITEMS.getStackUpgrade().getDefaultInstance()); + diskInterface.addUpgrade(RSITEMS.getStackUpgrade().getDefaultInstance()); // Assert sequence From eff65a809b2384ee1a3c6dd10b6c019b576efc57 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 12 Oct 2024 17:22:37 +0200 Subject: [PATCH 82/83] feat: expose creative mode tab id As requested by Technici4n For addon mods who want to add few items to our main tab. --- .../refinedstorage/common/api/RefinedStorageApi.java | 3 +++ .../refinedstorage/common/api/RefinedStorageApiProxy.java | 6 ++++++ .../refinedstorage/common/RefinedStorageApiImpl.java | 7 +++++++ .../common/autocrafting/AutocrafterBlockEntity.java | 1 - .../common/configurationcard/ConfigurationCardItem.java | 8 ++++---- .../AbstractConstructorBlockEntity.java | 1 - .../refinedstorage/common/content/ContentIds.java | 2 ++ .../common/exporter/AbstractExporterBlockEntity.java | 1 - .../common/importer/AbstractImporterBlockEntity.java | 1 - .../common/networking/WirelessTransmitterBlockEntity.java | 1 - .../diskinterface/AbstractDiskInterfaceBlockEntity.java | 1 - .../refinedstorage/fabric/ModInitializerImpl.java | 2 +- .../refinedstorage/neoforge/ModInitializer.java | 2 +- .../refinedstorage/common/exporter/ExporterTest.java | 2 +- .../refinedstorage/common/importer/ImporterTest.java | 2 +- 15 files changed, 26 insertions(+), 14 deletions(-) diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java index 95b3116cc..585eaa5f4 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApi.java @@ -54,6 +54,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; @@ -207,4 +208,6 @@ EnergyStorage asBlockItemEnergyStorage( Optional getPattern(ItemStack stack, Level level); void openAutocraftingPreview(List requests, @Nullable Object parentScreen); + + ResourceLocation getCreativeModeTabId(); } diff --git a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java index cd6065445..f33b6d74b 100644 --- a/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java +++ b/refinedstorage-common-api/src/main/java/com/refinedmods/refinedstorage/common/api/RefinedStorageApiProxy.java @@ -54,6 +54,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; @@ -408,6 +409,11 @@ public void openAutocraftingPreview(final List requests, @Nullab ensureLoaded().openAutocraftingPreview(requests, parentScreen); } + @Override + public ResourceLocation getCreativeModeTabId() { + return ensureLoaded().getCreativeModeTabId(); + } + private RefinedStorageApi ensureLoaded() { if (delegate == null) { throw new IllegalStateException("API not loaded yet"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java index 71589c077..0f328fcc4 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/RefinedStorageApiImpl.java @@ -50,6 +50,7 @@ import com.refinedmods.refinedstorage.common.api.support.slotreference.SlotReferenceProvider; import com.refinedmods.refinedstorage.common.api.upgrade.UpgradeRegistry; import com.refinedmods.refinedstorage.common.api.wirelesstransmitter.WirelessTransmitterRangeModifier; +import com.refinedmods.refinedstorage.common.content.ContentIds; import com.refinedmods.refinedstorage.common.grid.NoopGridSynchronizer; import com.refinedmods.refinedstorage.common.grid.screen.hint.GridInsertionHintsImpl; import com.refinedmods.refinedstorage.common.grid.screen.hint.ItemGridInsertionHint; @@ -104,6 +105,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -605,4 +607,9 @@ public void openAutocraftingPreview(final List requests, @Nullab } ClientPlatformUtil.openCraftingPreview(requests, parentScreen); } + + @Override + public ResourceLocation getCreativeModeTabId() { + return ContentIds.CREATIVE_MODE_TAB; + } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java index 3b6401a9c..a0c59c865 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/autocrafting/AutocrafterBlockEntity.java @@ -32,7 +32,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java index f6cc77056..806000f25 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/configurationcard/ConfigurationCardItem.java @@ -82,10 +82,10 @@ private InteractionResult applyConfiguration( private void tryTransferUpgrades(final Player player, final ConfigurationCardTarget target, - final List upgradeItems) { - for (final ItemStack upgradeItem : upgradeItems) { - final int upgradeIndexInPlayerInventory = player.getInventory().findSlotMatchingItem(upgradeItem); - if (upgradeIndexInPlayerInventory >= 0 && target.addUpgrade(upgradeItem)) { + final List upgrades) { + for (final ItemStack upgrade : upgrades) { + final int upgradeIndexInPlayerInventory = player.getInventory().findSlotMatchingItem(upgrade); + if (upgradeIndexInPlayerInventory >= 0 && target.addUpgrade(upgrade)) { player.getInventory().removeItem(upgradeIndexInPlayerInventory, 1); } } diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java index 7e8add10f..d30fa7823 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/constructordestructor/AbstractConstructorBlockEntity.java @@ -36,7 +36,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java index 3d932e4e2..31f38d827 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/content/ContentIds.java @@ -9,6 +9,8 @@ import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.createIdentifier; public final class ContentIds { + public static final ResourceLocation CREATIVE_MODE_TAB = createIdentifier("general"); + public static final ResourceLocation DISK_DRIVE = createIdentifier("disk_drive"); public static final ResourceLocation MACHINE_CASING = createIdentifier("machine_casing"); public static final ResourceLocation CABLE = createIdentifier("cable"); diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java index 227a77533..961903cbd 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/exporter/AbstractExporterBlockEntity.java @@ -41,7 +41,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import org.slf4j.Logger; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java index e10917621..6e722c5cb 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/importer/AbstractImporterBlockEntity.java @@ -40,7 +40,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; import org.slf4j.Logger; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java index 49ace3368..acd182a92 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/networking/WirelessTransmitterBlockEntity.java @@ -27,7 +27,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; diff --git a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java index 81c72b10b..27e78416b 100644 --- a/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java +++ b/refinedstorage-common/src/main/java/com/refinedmods/refinedstorage/common/storage/diskinterface/AbstractDiskInterfaceBlockEntity.java @@ -28,7 +28,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; diff --git a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java index 37d2390c8..2eb94d057 100644 --- a/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java +++ b/refinedstorage-fabric/src/main/java/com/refinedmods/refinedstorage/fabric/ModInitializerImpl.java @@ -400,7 +400,7 @@ public boolean allowComponentsUpdateAnimation(final Player player, private void registerCreativeModeTab() { Registry.register( BuiltInRegistries.CREATIVE_MODE_TAB, - createIdentifier("general"), + RefinedStorageApi.INSTANCE.getCreativeModeTabId(), CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) .title(ContentNames.MOD) .icon(() -> new ItemStack(Blocks.INSTANCE.getCreativeController().getDefault())) diff --git a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java index 2964aed52..fb0e8e4eb 100644 --- a/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java +++ b/refinedstorage-neoforge/src/main/java/com/refinedmods/refinedstorage/neoforge/ModInitializer.java @@ -528,7 +528,7 @@ public void onRegister(final RegisterEvent e) { helper -> registerLootFunctions(new DirectRegistryCallback<>(BuiltInRegistries.LOOT_FUNCTION_TYPE)) ); e.register(Registries.CREATIVE_MODE_TAB, helper -> helper.register( - createIdentifier("general"), + RefinedStorageApi.INSTANCE.getCreativeModeTabId(), CreativeModeTab.builder() .title(ContentNames.MOD) .icon(() -> new ItemStack(Blocks.INSTANCE.getCreativeController().getDefault())) diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java index 09e93ba91..fa0298721 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/exporter/ExporterTest.java @@ -129,7 +129,7 @@ public static void shouldExportItemWithRegulatorUpgrade(final GameTestHelper hel if (upgrade.getItem() instanceof RegulatorUpgradeItem upgradeItem) { upgradeItem.setAmount(upgrade, asResource(DIRT.getDefaultInstance()), 10); } - exporter.addUpgradeItem(upgrade); + exporter.addUpgrade(upgrade); // Assert sequence diff --git a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java index ed203c400..57209f6d7 100644 --- a/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java +++ b/refinedstorage-neoforge/src/test/java/com/refinedmods/refinedstorage/common/importer/ImporterTest.java @@ -140,7 +140,7 @@ public static void shouldImportItemWithRegulatorUpgrade(final GameTestHelper hel if (upgrade.getItem() instanceof RegulatorUpgradeItem upgradeItem) { upgradeItem.setAmount(upgrade, asResource(DIRT.getDefaultInstance()), 10); } - importer.addUpgradeItem(upgrade); + importer.addUpgrade(upgrade); // Assert sequence From 6080a41c3c031d6e6da1ca42c9e851bbcef870cd Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 12 Oct 2024 15:39:35 +0000 Subject: [PATCH 83/83] chore: prepare release v2.0.0-milestone.4.8 --- CHANGELOG.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c09c8552..de77f5cc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [2.0.0-milestone.4.8] - 2024-10-12 + ### Added - Autocrafter @@ -20,12 +22,12 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - You can now define a priority in the Crafter. - You can now change the name of a Crafter in the GUI. - Changed "Crafter mode" to "Locking mode" with following options: - - Never - - Lock until redstone pulse is received - - Lock until connected machine is empty (new, facilitates easier "blocking mode" without redstone) - - Lock until all outputs are received (new, facilitates easier "blocking mode" without redstone) - - Lock until low redstone signal - - Lock until high redstone signal + - Never + - Lock until redstone pulse is received + - Lock until connected machine is empty (new, facilitates easier "blocking mode" without redstone) + - Lock until all outputs are received (new, facilitates easier "blocking mode" without redstone) + - Lock until low redstone signal + - Lock until high redstone signal - Resources in the Grid that are autocraftable now display an orange backdrop and tooltip to indicate whether the resource is autocraftable at a glance. - Slots used in the Pattern Grid for pattern encoding and Crafting Grid crafting matrix slots now display an orange backdrop and tooltip to indicate whether the item is autocraftable at a glance. This checks patterns from your network and from your inventory. - Added help tooltip for filtering based on recipe items in the Crafting Grid. @@ -773,7 +775,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - The Grid can now use smooth scrolling. - The Grid now has syntax highlighting for the search query. -[Unreleased]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.4.7...HEAD +[Unreleased]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.4.8...HEAD + +[2.0.0-milestone.4.8]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.4.7...v2.0.0-milestone.4.8 [2.0.0-milestone.4.7]: https://github.com/refinedmods/refinedstorage2/compare/v2.0.0-milestone.4.6...v2.0.0-milestone.4.7