From e5e40f3b8ea08e362dc815221b25602e5f725af2 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 26 Mar 2022 15:20:40 +0100 Subject: [PATCH 01/49] Bump to v1.10.3 --- CHANGELOG.md | 2 ++ build.gradle | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a801a0a9..cb9f3b303 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [v1.10.2] - 2022-03-26 + ### Changed - Ported to Minecraft 1.18.2. diff --git a/build.gradle b/build.gradle index 07c76a5f4..d9213c73b 100755 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ apply plugin: 'maven-publish' group = 'com.refinedmods' archivesBaseName = 'refinedstorage' -version = '1.10.2' +version = '1.10.3' if (System.getenv('GITHUB_SHA') != null) { version += '+' + System.getenv('GITHUB_SHA').substring(0, 7) From d2b1d8db0dea473ba04d9252183aca319595c2f4 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 17 Apr 2022 15:21:57 +0200 Subject: [PATCH 02/49] make logger static to improve performance --- .../refinedstorage/screen/grid/stack/FluidGridStack.java | 2 +- .../refinedstorage/screen/grid/stack/ItemGridStack.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java index f50908f24..9b1d93a4d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -26,7 +26,7 @@ import java.util.stream.Collectors; public class FluidGridStack implements IGridStack { private static final String ERROR_PLACEHOLDER = ""; - private final Logger logger = LogManager.getLogger(getClass()); + private static final Logger logger = LogManager.getLogger(FluidGridStack.class); private final UUID id; private final FluidStack stack; diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java index 1150e1d83..ff9804596 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -26,7 +26,7 @@ import java.util.stream.Collectors; public class ItemGridStack implements IGridStack { private static final String ERROR_PLACEHOLDER = ""; - private final Logger logger = LogManager.getLogger(getClass()); + private static final Logger logger = LogManager.getLogger(ItemGridStack.class); private final ItemStack stack; private UUID id; @Nullable From def0984d1d06db12a3b960f684b495a336c6754f Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 17 Apr 2022 15:57:28 +0200 Subject: [PATCH 03/49] fix name --- .../refinedstorage/screen/grid/stack/FluidGridStack.java | 6 +++--- .../refinedstorage/screen/grid/stack/ItemGridStack.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java index 9b1d93a4d..574e4120e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -26,7 +26,7 @@ import java.util.stream.Collectors; public class FluidGridStack implements IGridStack { private static final String ERROR_PLACEHOLDER = ""; - private static final Logger logger = LogManager.getLogger(FluidGridStack.class); + private static final Logger LOGGER = LogManager.getLogger(FluidGridStack.class); private final UUID id; private final FluidStack stack; @@ -86,7 +86,7 @@ public class FluidGridStack implements IGridStack { try { cachedName = stack.getDisplayName().getString(); } catch (Throwable t) { - logger.warn("Could not retrieve fluid name of {}", stack.getFluid().getRegistryName()); + LOGGER.warn("Could not retrieve fluid name of {}", stack.getFluid().getRegistryName()); cachedName = ERROR_PLACEHOLDER; } @@ -146,7 +146,7 @@ public class FluidGridStack implements IGridStack { try { tooltip = Lists.newArrayList(stack.getDisplayName()); } catch (Throwable t) { - logger.warn("Could not retrieve fluid tooltip of {}", stack.getFluid().getRegistryName()); + LOGGER.warn("Could not retrieve fluid tooltip of {}", stack.getFluid().getRegistryName()); tooltip = Lists.newArrayList(new TextComponent(ERROR_PLACEHOLDER)); } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java index ff9804596..fecff1bcb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -26,7 +26,7 @@ import java.util.stream.Collectors; public class ItemGridStack implements IGridStack { private static final String ERROR_PLACEHOLDER = ""; - private static final Logger logger = LogManager.getLogger(ItemGridStack.class); + private static final Logger LOGGER = LogManager.getLogger(ItemGridStack.class); private final ItemStack stack; private UUID id; @Nullable @@ -96,7 +96,7 @@ public class ItemGridStack implements IGridStack { try { cachedName = stack.getHoverName().getString(); } catch (Throwable t) { - logger.warn("Could not retrieve item name of {}", stack.getItem().getRegistryName()); + LOGGER.warn("Could not retrieve item name of {}", stack.getItem().getRegistryName()); cachedName = ERROR_PLACEHOLDER; } @@ -156,7 +156,7 @@ public class ItemGridStack implements IGridStack { try { tooltip = RenderUtils.getTooltipFromItem(stack); } catch (Throwable t) { - logger.warn("Could not retrieve item tooltip of {}", stack.getItem().getRegistryName()); + LOGGER.warn("Could not retrieve item tooltip of {}", stack.getItem().getRegistryName()); tooltip = new ArrayList<>(); tooltip.add(new TextComponent(ERROR_PLACEHOLDER)); From 20a4e4868b78c448e701c51fa42690de6adf2d83 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 17 Apr 2022 15:58:36 +0200 Subject: [PATCH 04/49] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb9f3b303..78c53232d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed + +- Improved Performance for grid updates + ## [v1.10.2] - 2022-03-26 ### Changed From e7d6e1ae6f18f9596048428b42279da574de0e4b Mon Sep 17 00:00:00 2001 From: Darkere Date: Thu, 26 May 2022 15:11:36 +0200 Subject: [PATCH 05/49] fix placing cable in fluid removing fluid --- CHANGELOG.md | 1 + .../com/refinedmods/refinedstorage/block/CableBlock.java | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 78c53232d..5fd7f86db 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed - Improved Performance for grid updates +- Improved waterlogging to behave more like vanilla ## [v1.10.2] - 2022-03-26 diff --git a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java index d2b5374a7..3ee9af354 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java @@ -6,9 +6,9 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNodeProxy; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType; import com.refinedmods.refinedstorage.block.shape.ShapeCache; +import com.refinedmods.refinedstorage.blockentity.CableBlockEntity; import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability; import com.refinedmods.refinedstorage.render.ConstantsCable; -import com.refinedmods.refinedstorage.blockentity.CableBlockEntity; import com.refinedmods.refinedstorage.util.BlockUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -165,7 +165,8 @@ public class CableBlock extends NetworkNodeBlock implements SimpleWaterloggedBlo @Nullable @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { - return getState(defaultBlockState(), ctx.getLevel(), ctx.getClickedPos()); + FluidState fluidState = ctx.getLevel().getFluidState(ctx.getClickedPos()); + return getState(defaultBlockState().setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER), ctx.getLevel(), ctx.getClickedPos()); } @Override From 282572c2cee078bf5e3dbdd046aafcf8a99cce3e Mon Sep 17 00:00:00 2001 From: Darkere Date: Thu, 26 May 2022 13:06:18 +0200 Subject: [PATCH 06/49] fix destructor dupe --- .../apiimpl/network/node/DestructorNetworkNode.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java index 9facb3b6c..7d6da7c12 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java @@ -15,8 +15,8 @@ import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.item.UpgradeItem; -import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.LevelUtils; +import com.refinedmods.refinedstorage.util.StackUtils; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; @@ -100,7 +100,12 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I List droppedItems = level.getEntitiesOfClass(ItemEntity.class, new AABB(front)); for (ItemEntity entity : droppedItems) { - ItemStack droppedItem = ((ItemEntity) entity).getItem(); + + if (entity.isRemoved()) { + continue; + } + + ItemStack droppedItem = entity.getItem(); if (IWhitelistBlacklist.acceptsItem(itemFilters, mode, compare, droppedItem) && network.insertItem(droppedItem, droppedItem.getCount(), Action.SIMULATE).isEmpty()) { From 700f39e0ca3fa0d668966e30872d4e82db8b3d2e Mon Sep 17 00:00:00 2001 From: Darkere Date: Thu, 26 May 2022 13:07:14 +0200 Subject: [PATCH 07/49] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fd7f86db..7977e9171 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed + +- Fixed Destructor dupe bug + ### Changed - Improved Performance for grid updates From 726c3e3c25447c8c4272c178f3ff53b702b3196b Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 28 May 2022 14:21:24 +0200 Subject: [PATCH 08/49] Add changelog for v1.9.18 --- CHANGELOG-old.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG-old.md b/CHANGELOG-old.md index 57bc1eb9b..90ede8402 100644 --- a/CHANGELOG-old.md +++ b/CHANGELOG-old.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 1.9.18 + +- Fixed potential Pattern crash when loading Minecraft. + ### 1.9.17 - Added more slots to the Pattern Grid (Darkere) - Combined Fluid and Item View in the Pattern Grid (Darkere) From d689c325d6f8489448731538c738fc5399aae96a Mon Sep 17 00:00:00 2001 From: Davide Albiero Date: Wed, 8 Jun 2022 22:52:21 +0200 Subject: [PATCH 09/49] LootItemFunctionType now use LootItemFunctionType --- build.gradle | 4 +- .../com/refinedmods/refinedstorage/RS.java | 1 + .../refinedstorage/RSLootFunctions.java | 42 ++++++++----------- .../loottable/ControllerLootFunction.java | 2 +- .../loottable/CrafterLootFunction.java | 2 +- .../PortableGridBlockLootFunction.java | 2 +- .../loottable/StorageBlockLootFunction.java | 2 +- .../refinedstorage/setup/CommonSetup.java | 3 -- src/main/resources/META-INF/mods.toml | 6 +++ 9 files changed, 30 insertions(+), 34 deletions(-) diff --git a/build.gradle b/build.gradle index d9213c73b..b7276c143 100755 --- a/build.gradle +++ b/build.gradle @@ -102,7 +102,7 @@ processResources { } dependencies { - minecraft 'net.minecraftforge:forge:1.18.2-40.0.32' + minecraft 'net.minecraftforge:forge:1.18.2-40.1.48' compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171:api") runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171") @@ -122,7 +122,7 @@ jar { "Specification-Vendor" : "refinedmods", "Specification-Version" : "1", "Implementation-Title" : project.name, - "Implementation-Version" : "${version}", + "Implementation-Version" : project.jar.archiveVersion, "Implementation-Vendor" : "refinedmods", "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) diff --git a/src/main/java/com/refinedmods/refinedstorage/RS.java b/src/main/java/com/refinedmods/refinedstorage/RS.java index 5c54ddc46..a6a48c117 100644 --- a/src/main/java/com/refinedmods/refinedstorage/RS.java +++ b/src/main/java/com/refinedmods/refinedstorage/RS.java @@ -48,6 +48,7 @@ public final class RS { RSBlocks.register(); RSItems.register(); + RSLootFunctions.register(); FMLJavaModLoadingContext.get().getModEventBus().addListener(CommonSetup::onCommonSetup); FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(BlockEntityType.class, CommonSetup::onRegisterBlockEntities); diff --git a/src/main/java/com/refinedmods/refinedstorage/RSLootFunctions.java b/src/main/java/com/refinedmods/refinedstorage/RSLootFunctions.java index ab4384483..69e4eeabb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/RSLootFunctions.java +++ b/src/main/java/com/refinedmods/refinedstorage/RSLootFunctions.java @@ -5,38 +5,30 @@ import com.refinedmods.refinedstorage.loottable.CrafterLootFunction; import com.refinedmods.refinedstorage.loottable.PortableGridBlockLootFunction; import com.refinedmods.refinedstorage.loottable.StorageBlockLootFunction; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; public final class RSLootFunctions { - private static LootItemFunctionType storageBlock; - private static LootItemFunctionType portableGrid; - private static LootItemFunctionType crafter; - private static LootItemFunctionType controller; + public static final RegistryObject STORAGE_BLOCK; + public static final RegistryObject PORTABLE_GRID; + public static final RegistryObject CRAFTER; + public static final RegistryObject CONTROLLER; + + private static final DeferredRegister LOOT_ITEM_FUNCTIONS = DeferredRegister.create(Registry.LOOT_FUNCTION_REGISTRY, RS.ID); + + static { + STORAGE_BLOCK = LOOT_ITEM_FUNCTIONS.register("storage_block", () -> new LootItemFunctionType(new StorageBlockLootFunction.Serializer())); + PORTABLE_GRID = LOOT_ITEM_FUNCTIONS.register("portable_grid", () -> new LootItemFunctionType(new PortableGridBlockLootFunction.Serializer())); + CRAFTER = LOOT_ITEM_FUNCTIONS.register("crafter", () -> new LootItemFunctionType(new CrafterLootFunction.Serializer())); + CONTROLLER = LOOT_ITEM_FUNCTIONS.register("controller", () -> new LootItemFunctionType(new ControllerLootFunction.Serializer())); + } private RSLootFunctions() { } public static void register() { - storageBlock = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "storage_block"), new LootItemFunctionType(new StorageBlockLootFunction.Serializer())); - portableGrid = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "portable_grid"), new LootItemFunctionType(new PortableGridBlockLootFunction.Serializer())); - crafter = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "crafter"), new LootItemFunctionType(new CrafterLootFunction.Serializer())); - controller = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "controller"), new LootItemFunctionType(new ControllerLootFunction.Serializer())); - } - - public static LootItemFunctionType getStorageBlock() { - return storageBlock; - } - - public static LootItemFunctionType getPortableGrid() { - return portableGrid; - } - - public static LootItemFunctionType getCrafter() { - return crafter; - } - - public static LootItemFunctionType getController() { - return controller; + LOOT_ITEM_FUNCTIONS.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java index 55bb76cec..c4b62c13a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/ControllerLootFunction.java @@ -38,7 +38,7 @@ public class ControllerLootFunction extends LootItemConditionalFunction { @Override public LootItemFunctionType getType() { - return RSLootFunctions.getController(); + return RSLootFunctions.CONTROLLER.get(); } public static class Serializer extends LootItemConditionalFunction.Serializer { diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java index 090dbacad..117e316bb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/CrafterLootFunction.java @@ -40,7 +40,7 @@ public class CrafterLootFunction extends LootItemConditionalFunction { @Override public LootItemFunctionType getType() { - return RSLootFunctions.getCrafter(); + return RSLootFunctions.CRAFTER.get(); } public static class Serializer extends LootItemConditionalFunction.Serializer { diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java index 101c24bbc..b16062938 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/PortableGridBlockLootFunction.java @@ -30,7 +30,7 @@ public class PortableGridBlockLootFunction extends LootItemConditionalFunction { @Override public LootItemFunctionType getType() { - return RSLootFunctions.getPortableGrid(); + return RSLootFunctions.PORTABLE_GRID.get(); } public static class Serializer extends LootItemConditionalFunction.Serializer { diff --git a/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java b/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java index 8a2f0414d..cd2582423 100644 --- a/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java +++ b/src/main/java/com/refinedmods/refinedstorage/loottable/StorageBlockLootFunction.java @@ -51,7 +51,7 @@ public class StorageBlockLootFunction extends LootItemConditionalFunction { @Override public LootItemFunctionType getType() { - return RSLootFunctions.getStorageBlock(); + return RSLootFunctions.STORAGE_BLOCK.get(); } public static class Serializer extends LootItemConditionalFunction.Serializer { diff --git a/src/main/java/com/refinedmods/refinedstorage/setup/CommonSetup.java b/src/main/java/com/refinedmods/refinedstorage/setup/CommonSetup.java index 57d08073b..0828b11be 100644 --- a/src/main/java/com/refinedmods/refinedstorage/setup/CommonSetup.java +++ b/src/main/java/com/refinedmods/refinedstorage/setup/CommonSetup.java @@ -159,9 +159,6 @@ public final class CommonSetup { @SubscribeEvent public static void onRegisterBlockEntities(RegistryEvent.Register> e) { - // Register here, there seems to be no specific register event for loot function types. - RSLootFunctions.register(); - e.getRegistry().register(registerSynchronizationParameters(BlockEntityType.Builder.of((pos, state) -> new ControllerBlockEntity(NetworkType.NORMAL, pos, state), RSBlocks.CONTROLLER.getBlocks()).build(null).setRegistryName(RS.ID, "controller"))); e.getRegistry().register(registerSynchronizationParameters(BlockEntityType.Builder.of((pos, state) -> new ControllerBlockEntity(NetworkType.CREATIVE, pos, state), RSBlocks.CREATIVE_CONTROLLER.getBlocks()).build(null).setRegistryName(RS.ID, "creative_controller"))); e.getRegistry().register(BlockEntityType.Builder.of(CableBlockEntity::new, RSBlocks.CABLE.get()).build(null).setRegistryName(RS.ID, "cable")); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index de6a82fec..51ca61878 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -12,3 +12,9 @@ authors = "Refined Mods" description = ''' An elegant solution to your hoarding problem ''' +[[dependencies.refinedstorage]] +modId="forge" +mandatory=true +versionRange="[40.1,)" +ordering="NONE" +side="BOTH" \ No newline at end of file From 32b798becc2f025e6812cf6eb84ed8b4fac049b5 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sat, 28 May 2022 18:03:10 +0200 Subject: [PATCH 10/49] fixed storage monitor insertion and non-exact mode --- CHANGELOG.md | 2 ++ .../network/node/StorageMonitorNetworkNode.java | 16 ++++++++++------ .../block/StorageMonitorBlock.java | 6 +++--- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7977e9171..5ab3d14a2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Fixed Destructor dupe bug +- Fixed being unable to insert items into the Storage Monitor +- Fixed Storage Monitor not showing all matching items in non-exact mode ### Changed diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/StorageMonitorNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/StorageMonitorNetworkNode.java index 02d1eb06e..2a6d0b80b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/StorageMonitorNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/StorageMonitorNetworkNode.java @@ -5,16 +5,16 @@ import com.refinedmods.refinedstorage.api.network.security.Permission; import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.apiimpl.API; -import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; -import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; -import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity; import com.refinedmods.refinedstorage.blockentity.config.IComparable; import com.refinedmods.refinedstorage.blockentity.config.IType; import com.refinedmods.refinedstorage.blockentity.config.RedstoneMode; +import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory; +import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler; +import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; +import com.refinedmods.refinedstorage.util.LevelUtils; import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.StackUtils; -import com.refinedmods.refinedstorage.util.LevelUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -299,9 +299,13 @@ public class StorageMonitorNetworkNode extends NetworkNode implements IComparabl return 0; } - ItemStack stored = network.getItemStorageCache().getList().get(toCheck, compare); + if (compare == IComparer.COMPARE_NBT) { + ItemStack stored = network.getItemStorageCache().getList().get(toCheck, compare); + return stored != null ? stored.getCount() : 0; + } else { + return network.getItemStorageCache().getList().getStacks(toCheck).stream().mapToInt(entry -> entry.getStack().getCount()).sum(); + } - return stored != null ? stored.getCount() : 0; } else if (getType() == IType.FLUIDS) { FluidStack toCheck = fluidFilter.getFluid(0); diff --git a/src/main/java/com/refinedmods/refinedstorage/block/StorageMonitorBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/StorageMonitorBlock.java index 051f3a508..74b4e2722 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/StorageMonitorBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/StorageMonitorBlock.java @@ -1,12 +1,12 @@ package com.refinedmods.refinedstorage.block; import com.refinedmods.refinedstorage.apiimpl.network.node.StorageMonitorNetworkNode; +import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity; import com.refinedmods.refinedstorage.container.StorageMonitorContainerMenu; import com.refinedmods.refinedstorage.container.factory.BlockEntityMenuProvider; -import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity; import com.refinedmods.refinedstorage.util.BlockUtils; -import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.LevelUtils; +import com.refinedmods.refinedstorage.util.NetworkUtils; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.server.level.ServerPlayer; @@ -40,7 +40,7 @@ public class StorageMonitorBlock extends NetworkNodeBlock { @SuppressWarnings("deprecation") public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) { if (!level.isClientSide) { - ItemStack held = player.containerMenu.getCarried(); + ItemStack held = player.getItemInHand(handIn); if (player.isCrouching()) { return NetworkUtils.attemptModify(level, pos, player, () -> NetworkHooks.openGui( From a5c971e5e156799af65c1102c8062d9288063cb9 Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 17:18:35 -0500 Subject: [PATCH 11/49] Created colored block tag map, added to from ColorMap#registerBlocks --- .../java/com/refinedmods/refinedstorage/RSBlocks.java | 9 +++++---- .../com/refinedmods/refinedstorage/util/ColorMap.java | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java b/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java index 27c7c083e..b979ae724 100644 --- a/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java +++ b/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java @@ -7,16 +7,16 @@ import com.refinedmods.refinedstorage.apiimpl.storage.ItemStorageType; import com.refinedmods.refinedstorage.block.*; import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem; import com.refinedmods.refinedstorage.util.ColorMap; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.List; -import java.util.Map; +import java.util.*; public final class RSBlocks { public static final RegistryObject IMPORTER; @@ -28,6 +28,7 @@ public final class RSBlocks { public static final RegistryObject EXTERNAL_STORAGE; public static final Map> STORAGE_BLOCKS = new EnumMap<>(ItemStorageType.class); public static final Map> FLUID_STORAGE_BLOCKS = new EnumMap<>(FluidStorageType.class); + public static final Map, ColorMap> COLORED_BLOCK_TAGS = new HashMap<>(); public static final RegistryObject INTERFACE; public static final RegistryObject FLUID_INTERFACE; public static final RegistryObject STORAGE_MONITOR; diff --git a/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java b/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java index edba36433..dc856066f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java @@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.item.blockitem.ColoredBlockItem; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.player.Player; @@ -77,6 +78,7 @@ public class ColorMap> { map.put(color, (RegistryObject) block); RSBlocks.COLORED_BLOCKS.add(block); } + RSBlocks.COLORED_BLOCK_TAGS.put(BlockTags.create(new ResourceLocation(RS.ID, get(DEFAULT_COLOR).getId().getPath())), (ColorMap) this); } public void registerItemsFromBlocks(ColorMap blockMap) { From e3e1595458e3a780778cb2cf5cce27a5930ed4ff Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 17:19:10 -0500 Subject: [PATCH 12/49] TagGenerator -> ItemTagGenerator, add BlockTagGenerator --- .../datageneration/BlockTagGenerator.java | 29 +++++++++++++++++++ .../datageneration/DataGenerators.java | 6 ++-- ...agGenerator.java => ItemTagGenerator.java} | 4 +-- 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java rename src/main/java/com/refinedmods/refinedstorage/datageneration/{TagGenerator.java => ItemTagGenerator.java} (73%) diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java new file mode 100644 index 000000000..19c56ccb1 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java @@ -0,0 +1,29 @@ +package com.refinedmods.refinedstorage.datageneration; + +import com.refinedmods.refinedstorage.RSBlocks; +import com.refinedmods.refinedstorage.RSItems; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; + +public class BlockTagGenerator extends BlockTagsProvider { + public BlockTagGenerator(DataGenerator dataGenerator, String modId, @Nullable ExistingFileHelper existingFileHelper) { + super(dataGenerator, modId, existingFileHelper); + } + + @Override + protected void addTags() { + TagAppender noRelocationTag = tag(BlockTags.create(new ResourceLocation("forge:relocation_not_supported"))); + RSBlocks.COLORED_BLOCK_TAGS.forEach((tag, map) -> { + map.values().forEach(block -> tag(tag).add(block.get())); + noRelocationTag.addTags(tag); + }); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java index 13ed3bfbe..628449506 100644 --- a/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java @@ -13,9 +13,11 @@ public class DataGenerators { } if (event.includeServer()) { event.getGenerator().addProvider(new RecipeGenerator(event.getGenerator())); - event.getGenerator().addProvider(new TagGenerator( + BlockTagGenerator blockTagGenerator = new BlockTagGenerator(event.getGenerator(), RS.ID, event.getExistingFileHelper()); + event.getGenerator().addProvider(blockTagGenerator); + event.getGenerator().addProvider(new ItemTagGenerator( event.getGenerator(), - new BlockTagsProvider(event.getGenerator(), RS.ID, event.getExistingFileHelper()), + blockTagGenerator, RS.ID, event.getExistingFileHelper()) ); diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/TagGenerator.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/ItemTagGenerator.java similarity index 73% rename from src/main/java/com/refinedmods/refinedstorage/datageneration/TagGenerator.java rename to src/main/java/com/refinedmods/refinedstorage/datageneration/ItemTagGenerator.java index 32d49371c..3eaae3bc1 100644 --- a/src/main/java/com/refinedmods/refinedstorage/datageneration/TagGenerator.java +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/ItemTagGenerator.java @@ -8,8 +8,8 @@ import net.minecraftforge.common.data.ExistingFileHelper; import javax.annotation.Nullable; -public class TagGenerator extends ItemTagsProvider { - public TagGenerator(DataGenerator dataGenerator, BlockTagsProvider blockTagProvider, String modId, @Nullable ExistingFileHelper existingFileHelper) { +public class ItemTagGenerator extends ItemTagsProvider { + public ItemTagGenerator(DataGenerator dataGenerator, BlockTagsProvider blockTagProvider, String modId, @Nullable ExistingFileHelper existingFileHelper) { super(dataGenerator, blockTagProvider, modId, existingFileHelper); } From 2f6eb24e3b29f82d4fd13649b344dbefdf68aed5 Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 17:21:09 -0500 Subject: [PATCH 13/49] Generate colored block tags and additions to Forge relocation blacklist tag --- src/generated/resources/.cache/cache | 17 +++++++++++++++ .../tags/blocks/relocation_not_supported.json | 21 +++++++++++++++++++ .../tags/blocks/controller.json | 21 +++++++++++++++++++ .../refinedstorage/tags/blocks/crafter.json | 21 +++++++++++++++++++ .../tags/blocks/crafter_manager.json | 21 +++++++++++++++++++ .../tags/blocks/crafting_grid.json | 21 +++++++++++++++++++ .../tags/blocks/crafting_monitor.json | 21 +++++++++++++++++++ .../tags/blocks/creative_controller.json | 21 +++++++++++++++++++ .../refinedstorage/tags/blocks/detector.json | 21 +++++++++++++++++++ .../tags/blocks/disk_manipulator.json | 21 +++++++++++++++++++ .../tags/blocks/fluid_grid.json | 21 +++++++++++++++++++ .../data/refinedstorage/tags/blocks/grid.json | 21 +++++++++++++++++++ .../tags/blocks/network_receiver.json | 21 +++++++++++++++++++ .../tags/blocks/network_transmitter.json | 21 +++++++++++++++++++ .../tags/blocks/pattern_grid.json | 21 +++++++++++++++++++ .../refinedstorage/tags/blocks/relay.json | 21 +++++++++++++++++++ .../tags/blocks/security_manager.json | 21 +++++++++++++++++++ .../tags/blocks/wireless_transmitter.json | 21 +++++++++++++++++++ 18 files changed, 374 insertions(+) create mode 100644 src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/controller.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/crafter.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/crafter_manager.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/crafting_grid.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/crafting_monitor.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/creative_controller.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/detector.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/disk_manipulator.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/fluid_grid.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/grid.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/network_receiver.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/network_transmitter.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/pattern_grid.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/relay.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/security_manager.json create mode 100644 src/generated/resources/data/refinedstorage/tags/blocks/wireless_transmitter.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 92531710b..c61070a25 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -767,6 +767,7 @@ bbae585b79552836f291bd7a254bb5311362b717 assets/refinedstorage/models/item/yello 8bf5c07f71be511207cb3338cd9ab569f23d89d6 assets/refinedstorage/models/item/yellow_relay.json 031da071bd54f6bbd6bd726ae8e54dcb31d93dd7 assets/refinedstorage/models/item/yellow_security_manager.json 8cd04b5fd0ef2456369a59326d87b5067a6b7cf5 assets/refinedstorage/models/item/yellow_wireless_transmitter.json +b611c0ad3d661929db0e1e4dd723c6f218964690 data/forge/tags/blocks/relocation_not_supported.json 24e9450a858ed0e2268fee8f5d37a168f92e73bc data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_controller.json 0e90c4471c953dbb46ae3f87b713f107a4b5c6ed data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter.json 6645b1e1c826d9147b0c81d3169ab0e8e1ef6ef2 data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter_manager.json @@ -1599,6 +1600,22 @@ f7ec08070c9ea50a614731adc57d07b94cdd3853 data/refinedstorage/recipes/pattern_gri f60de4928bb466ca6c9010d07817963f771caa94 data/refinedstorage/recipes/pattern_grid/red_pattern_grid.json a4be089e23d8452846198b5c273fd2bcc77266ca data/refinedstorage/recipes/pattern_grid/white_pattern_grid.json c1672fda10e2f1326c8dfea6b0379cda5156a9e7 data/refinedstorage/recipes/pattern_grid/yellow_pattern_grid.json +0b7b05fd6b7942263c550e1ac28029c34a2d1df3 data/refinedstorage/tags/blocks/controller.json +55a19599ea37daf13407b2f2cfb8499f8ba0460d data/refinedstorage/tags/blocks/crafter.json +a7e857fa1054067960733aeba34648b19ef7b6c0 data/refinedstorage/tags/blocks/crafter_manager.json +65535d054b0c6adaefaf96d73a03d2c1bcfcbd12 data/refinedstorage/tags/blocks/crafting_grid.json +dc6d041c09fccabd495c8f0edcd10ab07aafb4f5 data/refinedstorage/tags/blocks/crafting_monitor.json +e3f2ad6beb27c3ab1e78d149050e0184c327cef0 data/refinedstorage/tags/blocks/creative_controller.json +a46c335e9b9fe849307b6bda03ac1b62e43c8e5e data/refinedstorage/tags/blocks/detector.json +4d6cf8175e66ad05a36b03d2e1ba3ee55fbf150f data/refinedstorage/tags/blocks/disk_manipulator.json +b047ec7509a9adb5bdd7d7d7915211e27ecd51ae data/refinedstorage/tags/blocks/fluid_grid.json +6cef1d9ca36a6f9b90188e8d1872e8b5d498b224 data/refinedstorage/tags/blocks/grid.json +160871a29dcd72d0212afeb40462f36549f12725 data/refinedstorage/tags/blocks/network_receiver.json +fa7ffed55c5cf1f96d0762495765d7e2be4ac89a data/refinedstorage/tags/blocks/network_transmitter.json +428fd07b2f9098024738edb68efd338aed5f9723 data/refinedstorage/tags/blocks/pattern_grid.json +cddb4a7aa4728aa0af85a16cbc52c87c25e95366 data/refinedstorage/tags/blocks/relay.json +b9f5ac8ab978b8a5328fa480bc8a4d7bd2c307f2 data/refinedstorage/tags/blocks/security_manager.json +46aed661692d3d4b26880e4b293b8892ce440706 data/refinedstorage/tags/blocks/wireless_transmitter.json 0b7b05fd6b7942263c550e1ac28029c34a2d1df3 data/refinedstorage/tags/items/controller.json 55a19599ea37daf13407b2f2cfb8499f8ba0460d data/refinedstorage/tags/items/crafter.json a7e857fa1054067960733aeba34648b19ef7b6c0 data/refinedstorage/tags/items/crafter_manager.json diff --git a/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json b/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json new file mode 100644 index 000000000..367d0a506 --- /dev/null +++ b/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "#refinedstorage:detector", + "#refinedstorage:disk_manipulator", + "#refinedstorage:security_manager", + "#refinedstorage:pattern_grid", + "#refinedstorage:creative_controller", + "#refinedstorage:wireless_transmitter", + "#refinedstorage:crafter_manager", + "#refinedstorage:network_transmitter", + "#refinedstorage:grid", + "#refinedstorage:relay", + "#refinedstorage:network_receiver", + "#refinedstorage:crafting_grid", + "#refinedstorage:controller", + "#refinedstorage:crafting_monitor", + "#refinedstorage:crafter", + "#refinedstorage:fluid_grid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/controller.json b/src/generated/resources/data/refinedstorage/tags/blocks/controller.json new file mode 100644 index 000000000..af9280905 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/controller.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_controller", + "refinedstorage:orange_controller", + "refinedstorage:magenta_controller", + "refinedstorage:controller", + "refinedstorage:yellow_controller", + "refinedstorage:lime_controller", + "refinedstorage:pink_controller", + "refinedstorage:gray_controller", + "refinedstorage:light_gray_controller", + "refinedstorage:cyan_controller", + "refinedstorage:purple_controller", + "refinedstorage:blue_controller", + "refinedstorage:brown_controller", + "refinedstorage:green_controller", + "refinedstorage:red_controller", + "refinedstorage:black_controller" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/crafter.json b/src/generated/resources/data/refinedstorage/tags/blocks/crafter.json new file mode 100644 index 000000000..efe2272ac --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/crafter.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "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/src/generated/resources/data/refinedstorage/tags/blocks/crafter_manager.json b/src/generated/resources/data/refinedstorage/tags/blocks/crafter_manager.json new file mode 100644 index 000000000..e523f3c18 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/crafter_manager.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_crafter_manager", + "refinedstorage:orange_crafter_manager", + "refinedstorage:magenta_crafter_manager", + "refinedstorage:crafter_manager", + "refinedstorage:yellow_crafter_manager", + "refinedstorage:lime_crafter_manager", + "refinedstorage:pink_crafter_manager", + "refinedstorage:gray_crafter_manager", + "refinedstorage:light_gray_crafter_manager", + "refinedstorage:cyan_crafter_manager", + "refinedstorage:purple_crafter_manager", + "refinedstorage:blue_crafter_manager", + "refinedstorage:brown_crafter_manager", + "refinedstorage:green_crafter_manager", + "refinedstorage:red_crafter_manager", + "refinedstorage:black_crafter_manager" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/crafting_grid.json b/src/generated/resources/data/refinedstorage/tags/blocks/crafting_grid.json new file mode 100644 index 000000000..35d358cf1 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/crafting_grid.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_crafting_grid", + "refinedstorage:orange_crafting_grid", + "refinedstorage:magenta_crafting_grid", + "refinedstorage:crafting_grid", + "refinedstorage:yellow_crafting_grid", + "refinedstorage:lime_crafting_grid", + "refinedstorage:pink_crafting_grid", + "refinedstorage:gray_crafting_grid", + "refinedstorage:light_gray_crafting_grid", + "refinedstorage:cyan_crafting_grid", + "refinedstorage:purple_crafting_grid", + "refinedstorage:blue_crafting_grid", + "refinedstorage:brown_crafting_grid", + "refinedstorage:green_crafting_grid", + "refinedstorage:red_crafting_grid", + "refinedstorage:black_crafting_grid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/crafting_monitor.json b/src/generated/resources/data/refinedstorage/tags/blocks/crafting_monitor.json new file mode 100644 index 000000000..493ca506f --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/crafting_monitor.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_crafting_monitor", + "refinedstorage:orange_crafting_monitor", + "refinedstorage:magenta_crafting_monitor", + "refinedstorage:crafting_monitor", + "refinedstorage:yellow_crafting_monitor", + "refinedstorage:lime_crafting_monitor", + "refinedstorage:pink_crafting_monitor", + "refinedstorage:gray_crafting_monitor", + "refinedstorage:light_gray_crafting_monitor", + "refinedstorage:cyan_crafting_monitor", + "refinedstorage:purple_crafting_monitor", + "refinedstorage:blue_crafting_monitor", + "refinedstorage:brown_crafting_monitor", + "refinedstorage:green_crafting_monitor", + "refinedstorage:red_crafting_monitor", + "refinedstorage:black_crafting_monitor" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/creative_controller.json b/src/generated/resources/data/refinedstorage/tags/blocks/creative_controller.json new file mode 100644 index 000000000..2e140cc01 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/creative_controller.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_creative_controller", + "refinedstorage:orange_creative_controller", + "refinedstorage:magenta_creative_controller", + "refinedstorage:creative_controller", + "refinedstorage:yellow_creative_controller", + "refinedstorage:lime_creative_controller", + "refinedstorage:pink_creative_controller", + "refinedstorage:gray_creative_controller", + "refinedstorage:light_gray_creative_controller", + "refinedstorage:cyan_creative_controller", + "refinedstorage:purple_creative_controller", + "refinedstorage:blue_creative_controller", + "refinedstorage:brown_creative_controller", + "refinedstorage:green_creative_controller", + "refinedstorage:red_creative_controller", + "refinedstorage:black_creative_controller" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/detector.json b/src/generated/resources/data/refinedstorage/tags/blocks/detector.json new file mode 100644 index 000000000..1092c9f26 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/detector.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_detector", + "refinedstorage:orange_detector", + "refinedstorage:magenta_detector", + "refinedstorage:detector", + "refinedstorage:yellow_detector", + "refinedstorage:lime_detector", + "refinedstorage:pink_detector", + "refinedstorage:gray_detector", + "refinedstorage:light_gray_detector", + "refinedstorage:cyan_detector", + "refinedstorage:purple_detector", + "refinedstorage:blue_detector", + "refinedstorage:brown_detector", + "refinedstorage:green_detector", + "refinedstorage:red_detector", + "refinedstorage:black_detector" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/disk_manipulator.json b/src/generated/resources/data/refinedstorage/tags/blocks/disk_manipulator.json new file mode 100644 index 000000000..e9e0ddbf2 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/disk_manipulator.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_disk_manipulator", + "refinedstorage:orange_disk_manipulator", + "refinedstorage:magenta_disk_manipulator", + "refinedstorage:disk_manipulator", + "refinedstorage:yellow_disk_manipulator", + "refinedstorage:lime_disk_manipulator", + "refinedstorage:pink_disk_manipulator", + "refinedstorage:gray_disk_manipulator", + "refinedstorage:light_gray_disk_manipulator", + "refinedstorage:cyan_disk_manipulator", + "refinedstorage:purple_disk_manipulator", + "refinedstorage:blue_disk_manipulator", + "refinedstorage:brown_disk_manipulator", + "refinedstorage:green_disk_manipulator", + "refinedstorage:red_disk_manipulator", + "refinedstorage:black_disk_manipulator" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/fluid_grid.json b/src/generated/resources/data/refinedstorage/tags/blocks/fluid_grid.json new file mode 100644 index 000000000..4b57e76c8 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/fluid_grid.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_fluid_grid", + "refinedstorage:orange_fluid_grid", + "refinedstorage:magenta_fluid_grid", + "refinedstorage:fluid_grid", + "refinedstorage:yellow_fluid_grid", + "refinedstorage:lime_fluid_grid", + "refinedstorage:pink_fluid_grid", + "refinedstorage:gray_fluid_grid", + "refinedstorage:light_gray_fluid_grid", + "refinedstorage:cyan_fluid_grid", + "refinedstorage:purple_fluid_grid", + "refinedstorage:blue_fluid_grid", + "refinedstorage:brown_fluid_grid", + "refinedstorage:green_fluid_grid", + "refinedstorage:red_fluid_grid", + "refinedstorage:black_fluid_grid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/grid.json b/src/generated/resources/data/refinedstorage/tags/blocks/grid.json new file mode 100644 index 000000000..cc5b43744 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/grid.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_grid", + "refinedstorage:orange_grid", + "refinedstorage:magenta_grid", + "refinedstorage:grid", + "refinedstorage:yellow_grid", + "refinedstorage:lime_grid", + "refinedstorage:pink_grid", + "refinedstorage:gray_grid", + "refinedstorage:light_gray_grid", + "refinedstorage:cyan_grid", + "refinedstorage:purple_grid", + "refinedstorage:blue_grid", + "refinedstorage:brown_grid", + "refinedstorage:green_grid", + "refinedstorage:red_grid", + "refinedstorage:black_grid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/network_receiver.json b/src/generated/resources/data/refinedstorage/tags/blocks/network_receiver.json new file mode 100644 index 000000000..d8edf164d --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/network_receiver.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_network_receiver", + "refinedstorage:orange_network_receiver", + "refinedstorage:magenta_network_receiver", + "refinedstorage:network_receiver", + "refinedstorage:yellow_network_receiver", + "refinedstorage:lime_network_receiver", + "refinedstorage:pink_network_receiver", + "refinedstorage:gray_network_receiver", + "refinedstorage:light_gray_network_receiver", + "refinedstorage:cyan_network_receiver", + "refinedstorage:purple_network_receiver", + "refinedstorage:blue_network_receiver", + "refinedstorage:brown_network_receiver", + "refinedstorage:green_network_receiver", + "refinedstorage:red_network_receiver", + "refinedstorage:black_network_receiver" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/network_transmitter.json b/src/generated/resources/data/refinedstorage/tags/blocks/network_transmitter.json new file mode 100644 index 000000000..c2e320ddc --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/network_transmitter.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_network_transmitter", + "refinedstorage:orange_network_transmitter", + "refinedstorage:magenta_network_transmitter", + "refinedstorage:network_transmitter", + "refinedstorage:yellow_network_transmitter", + "refinedstorage:lime_network_transmitter", + "refinedstorage:pink_network_transmitter", + "refinedstorage:gray_network_transmitter", + "refinedstorage:light_gray_network_transmitter", + "refinedstorage:cyan_network_transmitter", + "refinedstorage:purple_network_transmitter", + "refinedstorage:blue_network_transmitter", + "refinedstorage:brown_network_transmitter", + "refinedstorage:green_network_transmitter", + "refinedstorage:red_network_transmitter", + "refinedstorage:black_network_transmitter" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/pattern_grid.json b/src/generated/resources/data/refinedstorage/tags/blocks/pattern_grid.json new file mode 100644 index 000000000..bc14c201b --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/pattern_grid.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_pattern_grid", + "refinedstorage:orange_pattern_grid", + "refinedstorage:magenta_pattern_grid", + "refinedstorage:pattern_grid", + "refinedstorage:yellow_pattern_grid", + "refinedstorage:lime_pattern_grid", + "refinedstorage:pink_pattern_grid", + "refinedstorage:gray_pattern_grid", + "refinedstorage:light_gray_pattern_grid", + "refinedstorage:cyan_pattern_grid", + "refinedstorage:purple_pattern_grid", + "refinedstorage:blue_pattern_grid", + "refinedstorage:brown_pattern_grid", + "refinedstorage:green_pattern_grid", + "refinedstorage:red_pattern_grid", + "refinedstorage:black_pattern_grid" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/relay.json b/src/generated/resources/data/refinedstorage/tags/blocks/relay.json new file mode 100644 index 000000000..736ba7cc2 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/relay.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_relay", + "refinedstorage:orange_relay", + "refinedstorage:magenta_relay", + "refinedstorage:relay", + "refinedstorage:yellow_relay", + "refinedstorage:lime_relay", + "refinedstorage:pink_relay", + "refinedstorage:gray_relay", + "refinedstorage:light_gray_relay", + "refinedstorage:cyan_relay", + "refinedstorage:purple_relay", + "refinedstorage:blue_relay", + "refinedstorage:brown_relay", + "refinedstorage:green_relay", + "refinedstorage:red_relay", + "refinedstorage:black_relay" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/security_manager.json b/src/generated/resources/data/refinedstorage/tags/blocks/security_manager.json new file mode 100644 index 000000000..3d378b1b4 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/security_manager.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_security_manager", + "refinedstorage:orange_security_manager", + "refinedstorage:magenta_security_manager", + "refinedstorage:security_manager", + "refinedstorage:yellow_security_manager", + "refinedstorage:lime_security_manager", + "refinedstorage:pink_security_manager", + "refinedstorage:gray_security_manager", + "refinedstorage:light_gray_security_manager", + "refinedstorage:cyan_security_manager", + "refinedstorage:purple_security_manager", + "refinedstorage:blue_security_manager", + "refinedstorage:brown_security_manager", + "refinedstorage:green_security_manager", + "refinedstorage:red_security_manager", + "refinedstorage:black_security_manager" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/refinedstorage/tags/blocks/wireless_transmitter.json b/src/generated/resources/data/refinedstorage/tags/blocks/wireless_transmitter.json new file mode 100644 index 000000000..9158222e5 --- /dev/null +++ b/src/generated/resources/data/refinedstorage/tags/blocks/wireless_transmitter.json @@ -0,0 +1,21 @@ +{ + "replace": false, + "values": [ + "refinedstorage:white_wireless_transmitter", + "refinedstorage:orange_wireless_transmitter", + "refinedstorage:magenta_wireless_transmitter", + "refinedstorage:wireless_transmitter", + "refinedstorage:yellow_wireless_transmitter", + "refinedstorage:lime_wireless_transmitter", + "refinedstorage:pink_wireless_transmitter", + "refinedstorage:gray_wireless_transmitter", + "refinedstorage:light_gray_wireless_transmitter", + "refinedstorage:cyan_wireless_transmitter", + "refinedstorage:purple_wireless_transmitter", + "refinedstorage:blue_wireless_transmitter", + "refinedstorage:brown_wireless_transmitter", + "refinedstorage:green_wireless_transmitter", + "refinedstorage:red_wireless_transmitter", + "refinedstorage:black_wireless_transmitter" + ] +} \ No newline at end of file From b6de5f553a1056931f7415d9cc1efb138a1912a9 Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 18:26:18 -0500 Subject: [PATCH 14/49] Add non-colored blocks to Forge relocation blacklist tag --- src/generated/resources/.cache/cache | 2 +- .../tags/blocks/relocation_not_supported.json | 47 ++++++++++++++----- .../datageneration/BlockTagGenerator.java | 7 +-- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index c61070a25..148beee01 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -767,7 +767,7 @@ bbae585b79552836f291bd7a254bb5311362b717 assets/refinedstorage/models/item/yello 8bf5c07f71be511207cb3338cd9ab569f23d89d6 assets/refinedstorage/models/item/yellow_relay.json 031da071bd54f6bbd6bd726ae8e54dcb31d93dd7 assets/refinedstorage/models/item/yellow_security_manager.json 8cd04b5fd0ef2456369a59326d87b5067a6b7cf5 assets/refinedstorage/models/item/yellow_wireless_transmitter.json -b611c0ad3d661929db0e1e4dd723c6f218964690 data/forge/tags/blocks/relocation_not_supported.json +346cf6402101b92a94df091df36ea44fb526776e data/forge/tags/blocks/relocation_not_supported.json 24e9450a858ed0e2268fee8f5d37a168f92e73bc data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_controller.json 0e90c4471c953dbb46ae3f87b713f107a4b5c6ed data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter.json 6645b1e1c826d9147b0c81d3169ab0e8e1ef6ef2 data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter_manager.json diff --git a/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json b/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json index 367d0a506..054628461 100644 --- a/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json +++ b/src/generated/resources/data/forge/tags/blocks/relocation_not_supported.json @@ -1,21 +1,42 @@ { "replace": false, "values": [ - "#refinedstorage:detector", - "#refinedstorage:disk_manipulator", - "#refinedstorage:security_manager", - "#refinedstorage:pattern_grid", - "#refinedstorage:creative_controller", - "#refinedstorage:wireless_transmitter", - "#refinedstorage:crafter_manager", - "#refinedstorage:network_transmitter", - "#refinedstorage:grid", - "#refinedstorage:relay", - "#refinedstorage:network_receiver", - "#refinedstorage:crafting_grid", "#refinedstorage:controller", "#refinedstorage:crafting_monitor", + "#refinedstorage:relay", + "#refinedstorage:crafter_manager", "#refinedstorage:crafter", - "#refinedstorage:fluid_grid" + "#refinedstorage:crafting_grid", + "#refinedstorage:network_receiver", + "#refinedstorage:disk_manipulator", + "#refinedstorage:creative_controller", + "#refinedstorage:pattern_grid", + "#refinedstorage:network_transmitter", + "#refinedstorage:security_manager", + "#refinedstorage:fluid_grid", + "#refinedstorage:detector", + "#refinedstorage:grid", + "#refinedstorage:wireless_transmitter", + "refinedstorage:1k_storage_block", + "refinedstorage:4k_storage_block", + "refinedstorage:16k_storage_block", + "refinedstorage:64k_storage_block", + "refinedstorage:creative_storage_block", + "refinedstorage:64k_fluid_storage_block", + "refinedstorage:256k_fluid_storage_block", + "refinedstorage:1024k_fluid_storage_block", + "refinedstorage:4096k_fluid_storage_block", + "refinedstorage:creative_fluid_storage_block", + "refinedstorage:importer", + "refinedstorage:exporter", + "refinedstorage:external_storage", + "refinedstorage:disk_drive", + "refinedstorage:interface", + "refinedstorage:fluid_interface", + "refinedstorage:storage_monitor", + "refinedstorage:constructor", + "refinedstorage:destructor", + "refinedstorage:portable_grid", + "refinedstorage:creative_portable_grid" ] } \ No newline at end of file diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java index 19c56ccb1..e12188871 100644 --- a/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java @@ -1,13 +1,10 @@ package com.refinedmods.refinedstorage.datageneration; import com.refinedmods.refinedstorage.RSBlocks; -import com.refinedmods.refinedstorage.RSItems; import net.minecraft.data.DataGenerator; import net.minecraft.data.tags.BlockTagsProvider; -import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; -import net.minecraft.tags.TagKey; import net.minecraft.world.level.block.Block; import net.minecraftforge.common.data.ExistingFileHelper; @@ -25,5 +22,9 @@ public class BlockTagGenerator extends BlockTagsProvider { map.values().forEach(block -> tag(tag).add(block.get())); noRelocationTag.addTags(tag); }); + RSBlocks.STORAGE_BLOCKS.forEach((tag, block) -> noRelocationTag.add(block.get())); + RSBlocks.FLUID_STORAGE_BLOCKS.forEach((tag, block) -> noRelocationTag.add(block.get())); + + noRelocationTag.add(RSBlocks.IMPORTER.get(), RSBlocks.EXPORTER.get(), RSBlocks.EXTERNAL_STORAGE.get(), RSBlocks.DISK_DRIVE.get(), RSBlocks.INTERFACE.get(), RSBlocks.FLUID_INTERFACE.get(), RSBlocks.STORAGE_MONITOR.get(), RSBlocks.CONSTRUCTOR.get(), RSBlocks.DESTRUCTOR.get(), RSBlocks.PORTABLE_GRID.get(), RSBlocks.CREATIVE_PORTABLE_GRID.get()); } } From 3a17b00c2968ee8ea2e6ab9e7c3834f730d1226f Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 18:43:33 -0500 Subject: [PATCH 15/49] BlockTagGenerator formatting --- .../datageneration/BlockTagGenerator.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java index e12188871..567872714 100644 --- a/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockTagGenerator.java @@ -25,6 +25,18 @@ public class BlockTagGenerator extends BlockTagsProvider { RSBlocks.STORAGE_BLOCKS.forEach((tag, block) -> noRelocationTag.add(block.get())); RSBlocks.FLUID_STORAGE_BLOCKS.forEach((tag, block) -> noRelocationTag.add(block.get())); - noRelocationTag.add(RSBlocks.IMPORTER.get(), RSBlocks.EXPORTER.get(), RSBlocks.EXTERNAL_STORAGE.get(), RSBlocks.DISK_DRIVE.get(), RSBlocks.INTERFACE.get(), RSBlocks.FLUID_INTERFACE.get(), RSBlocks.STORAGE_MONITOR.get(), RSBlocks.CONSTRUCTOR.get(), RSBlocks.DESTRUCTOR.get(), RSBlocks.PORTABLE_GRID.get(), RSBlocks.CREATIVE_PORTABLE_GRID.get()); + noRelocationTag.add( + RSBlocks.IMPORTER.get(), + RSBlocks.EXPORTER.get(), + RSBlocks.EXTERNAL_STORAGE.get(), + RSBlocks.DISK_DRIVE.get(), + RSBlocks.INTERFACE.get(), + RSBlocks.FLUID_INTERFACE.get(), + RSBlocks.STORAGE_MONITOR.get(), + RSBlocks.CONSTRUCTOR.get(), + RSBlocks.DESTRUCTOR.get(), + RSBlocks.PORTABLE_GRID.get(), + RSBlocks.CREATIVE_PORTABLE_GRID.get() + ); } } From 2cb754230da0bd65d9a5100644261929e2a8033d Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 18:44:22 -0500 Subject: [PATCH 16/49] Create BlockEntityTagGenerator with blacklist tag for Packing Tape --- .../BlockEntityTagGenerator.java | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/main/java/com/refinedmods/refinedstorage/datageneration/BlockEntityTagGenerator.java diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockEntityTagGenerator.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockEntityTagGenerator.java new file mode 100644 index 000000000..58ecdb45f --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/BlockEntityTagGenerator.java @@ -0,0 +1,68 @@ +package com.refinedmods.refinedstorage.datageneration; + +import com.refinedmods.refinedstorage.RSBlockEntities; +import net.minecraft.core.Registry; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.tags.TagsProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.common.data.ExistingFileHelper; + +import javax.annotation.Nullable; + +public class BlockEntityTagGenerator extends TagsProvider> { + public BlockEntityTagGenerator(DataGenerator dataGenerator, String modId, @Nullable ExistingFileHelper existingFileHelper) { + super(dataGenerator, Registry.BLOCK_ENTITY_TYPE, modId, existingFileHelper); + } + + @Override + protected void addTags() { + TagAppender> packingTapeBlacklist = tag(TagKey.create(Registry.BLOCK_ENTITY_TYPE_REGISTRY, new ResourceLocation("packingtape:blacklist/problematic"))); + packingTapeBlacklist.add( + RSBlockEntities.CONTROLLER, + RSBlockEntities.CREATIVE_CONTROLLER, + RSBlockEntities.DETECTOR, + RSBlockEntities.DISK_DRIVE, + RSBlockEntities.EXPORTER, + RSBlockEntities.EXTERNAL_STORAGE, + RSBlockEntities.GRID, + RSBlockEntities.CRAFTING_GRID, + RSBlockEntities.PATTERN_GRID, + RSBlockEntities.FLUID_GRID, + RSBlockEntities.IMPORTER, + RSBlockEntities.NETWORK_TRANSMITTER, + RSBlockEntities.NETWORK_RECEIVER, + RSBlockEntities.RELAY, + RSBlockEntities.CABLE, + RSBlockEntities.ONE_K_STORAGE_BLOCK, + RSBlockEntities.FOUR_K_STORAGE_BLOCK, + RSBlockEntities.SIXTEEN_K_STORAGE_BLOCK, + RSBlockEntities.SIXTY_FOUR_K_STORAGE_BLOCK, + RSBlockEntities.CREATIVE_STORAGE_BLOCK, + RSBlockEntities.SIXTY_FOUR_K_FLUID_STORAGE_BLOCK, + RSBlockEntities.TWO_HUNDRED_FIFTY_SIX_K_FLUID_STORAGE_BLOCK, + RSBlockEntities.THOUSAND_TWENTY_FOUR_K_FLUID_STORAGE_BLOCK, + RSBlockEntities.FOUR_THOUSAND_NINETY_SIX_K_FLUID_STORAGE_BLOCK, + RSBlockEntities.CREATIVE_FLUID_STORAGE_BLOCK, + RSBlockEntities.SECURITY_MANAGER, + RSBlockEntities.INTERFACE, + RSBlockEntities.FLUID_INTERFACE, + RSBlockEntities.WIRELESS_TRANSMITTER, + RSBlockEntities.STORAGE_MONITOR, + RSBlockEntities.CONSTRUCTOR, + RSBlockEntities.DESTRUCTOR, + RSBlockEntities.DISK_MANIPULATOR, + RSBlockEntities.PORTABLE_GRID, + RSBlockEntities.CREATIVE_PORTABLE_GRID, + RSBlockEntities.CRAFTER, + RSBlockEntities.CRAFTER_MANAGER, + RSBlockEntities.CRAFTING_MONITOR + ); + } + + @Override + public String getName() { + return "Block Entity Type Tags"; + } +} From e5b0c1e763796f50a29d47cbba05e0f101799790 Mon Sep 17 00:00:00 2001 From: aeonic Date: Fri, 10 Jun 2022 18:44:26 -0500 Subject: [PATCH 17/49] Add BlockEntityTagGenerator to DataGenerators, reformat (+ block tags) to match previous formatting --- .../refinedstorage/datageneration/DataGenerators.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java b/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java index 628449506..24fdf2333 100644 --- a/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java +++ b/src/main/java/com/refinedmods/refinedstorage/datageneration/DataGenerators.java @@ -13,7 +13,10 @@ public class DataGenerators { } if (event.includeServer()) { event.getGenerator().addProvider(new RecipeGenerator(event.getGenerator())); - BlockTagGenerator blockTagGenerator = new BlockTagGenerator(event.getGenerator(), RS.ID, event.getExistingFileHelper()); + BlockTagGenerator blockTagGenerator = new BlockTagGenerator( + event.getGenerator(), + RS.ID, + event.getExistingFileHelper()); event.getGenerator().addProvider(blockTagGenerator); event.getGenerator().addProvider(new ItemTagGenerator( event.getGenerator(), @@ -21,6 +24,11 @@ public class DataGenerators { RS.ID, event.getExistingFileHelper()) ); + event.getGenerator().addProvider(new BlockEntityTagGenerator( + event.getGenerator(), + RS.ID, + event.getExistingFileHelper() + )); event.getGenerator().addProvider(new LootTableGenerator(event.getGenerator())); } } From 5c7100477076952388b38e9115c01bffb8456d2b Mon Sep 17 00:00:00 2001 From: aeonic Date: Sat, 11 Jun 2022 13:19:22 -0500 Subject: [PATCH 18/49] Generate block entity tag for Packing Tape blacklist --- src/generated/resources/.cache/cache | 1 + .../blacklist/problematic.json | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/generated/resources/data/packingtape/tags/block_entity_type/blacklist/problematic.json diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 148beee01..b490a4165 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -768,6 +768,7 @@ bbae585b79552836f291bd7a254bb5311362b717 assets/refinedstorage/models/item/yello 031da071bd54f6bbd6bd726ae8e54dcb31d93dd7 assets/refinedstorage/models/item/yellow_security_manager.json 8cd04b5fd0ef2456369a59326d87b5067a6b7cf5 assets/refinedstorage/models/item/yellow_wireless_transmitter.json 346cf6402101b92a94df091df36ea44fb526776e data/forge/tags/blocks/relocation_not_supported.json +072517fbb36937374da062823ff793db732cee6c data/packingtape/tags/block_entity_type/blacklist/problematic.json 24e9450a858ed0e2268fee8f5d37a168f92e73bc data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_controller.json 0e90c4471c953dbb46ae3f87b713f107a4b5c6ed data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter.json 6645b1e1c826d9147b0c81d3169ab0e8e1ef6ef2 data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter_manager.json diff --git a/src/generated/resources/data/packingtape/tags/block_entity_type/blacklist/problematic.json b/src/generated/resources/data/packingtape/tags/block_entity_type/blacklist/problematic.json new file mode 100644 index 000000000..e888de87d --- /dev/null +++ b/src/generated/resources/data/packingtape/tags/block_entity_type/blacklist/problematic.json @@ -0,0 +1,43 @@ +{ + "replace": false, + "values": [ + "refinedstorage:controller", + "refinedstorage:creative_controller", + "refinedstorage:detector", + "refinedstorage:disk_drive", + "refinedstorage:exporter", + "refinedstorage:external_storage", + "refinedstorage:grid", + "refinedstorage:crafting_grid", + "refinedstorage:pattern_grid", + "refinedstorage:fluid_grid", + "refinedstorage:importer", + "refinedstorage:network_transmitter", + "refinedstorage:network_receiver", + "refinedstorage:relay", + "refinedstorage:cable", + "refinedstorage:1k_storage_block", + "refinedstorage:4k_storage_block", + "refinedstorage:16k_storage_block", + "refinedstorage:64k_storage_block", + "refinedstorage:creative_storage_block", + "refinedstorage:64k_fluid_storage_block", + "refinedstorage:256k_fluid_storage_block", + "refinedstorage:1024k_fluid_storage_block", + "refinedstorage:4096k_fluid_storage_block", + "refinedstorage:creative_fluid_storage_block", + "refinedstorage:security_manager", + "refinedstorage:interface", + "refinedstorage:fluid_interface", + "refinedstorage:wireless_transmitter", + "refinedstorage:storage_monitor", + "refinedstorage:constructor", + "refinedstorage:destructor", + "refinedstorage:disk_manipulator", + "refinedstorage:portable_grid", + "refinedstorage:creative_portable_grid", + "refinedstorage:crafter", + "refinedstorage:crafter_manager", + "refinedstorage:crafting_monitor" + ] +} \ No newline at end of file From b3981c402e0279457bb49ef5aa352d44b42cffd2 Mon Sep 17 00:00:00 2001 From: aeonic Date: Sat, 11 Jun 2022 15:50:58 -0500 Subject: [PATCH 19/49] Revert autoformatting changes --- .../java/com/refinedmods/refinedstorage/RSBlocks.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java b/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java index b979ae724..89c6c7cbf 100644 --- a/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java +++ b/src/main/java/com/refinedmods/refinedstorage/RSBlocks.java @@ -8,15 +8,17 @@ import com.refinedmods.refinedstorage.block.*; import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem; import com.refinedmods.refinedstorage.util.ColorMap; import net.minecraft.tags.TagKey; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; -import java.util.*; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public final class RSBlocks { public static final RegistryObject IMPORTER; From 1d1d5f064f479fe38db7d48de71226ac915f9fe0 Mon Sep 17 00:00:00 2001 From: aeonic Date: Sun, 19 Jun 2022 11:50:14 -0500 Subject: [PATCH 20/49] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ab3d14a2..37d180e86 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Improved Performance for grid updates - Improved waterlogging to behave more like vanilla +- Added Forge relocation and Packing Tape blacklist tag entries to prevent block movement ## [v1.10.2] - 2022-03-26 From a7cfcbfe8985a9a62965c32253909f5961e12bc5 Mon Sep 17 00:00:00 2001 From: Alyx Ferrari Date: Sun, 26 Jun 2022 06:48:03 -0400 Subject: [PATCH 21/49] Fix incorrect autocraft prompt on macOS (#3283) * Fix incorrect autocraft prompt on macOS * Fix empty macOS autocrafting string in Japanese * Update CHANGELOG.md --- .gitignore | 1 + CHANGELOG.md | 2 ++ .../integration/jei/RecipeTransferCraftingGridError.java | 7 ++++++- src/main/resources/assets/refinedstorage/lang/en_us.json | 1 + src/main/resources/assets/refinedstorage/lang/it_IT.json | 1 + src/main/resources/assets/refinedstorage/lang/ja_jp.json | 4 +++- src/main/resources/assets/refinedstorage/lang/ko_kr.json | 1 + src/main/resources/assets/refinedstorage/lang/pl_pl.json | 1 + 8 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d9ac69212..a862b184c 100755 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ run/ out/ /bin/ logs/ +**/.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md index 37d180e86..6968fe660 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed - Improved Performance for grid updates +- Fixed incorrect autocrafting keybind prompt on macOS +- Added Japanese translations for certain autocrafting actions - Improved waterlogging to behave more like vanilla - Added Forge relocation and Packing Tape blacklist tag entries to prevent block movement diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java index 0b89a868f..ec8527b13 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java @@ -16,6 +16,7 @@ import java.util.List; public class RecipeTransferCraftingGridError implements IRecipeTransferError { protected static final Color AUTOCRAFTING_HIGHLIGHT_COLOR = new Color(0.0f, 0.0f, 1.0f, 0.4f); private static final Color MISSING_HIGHLIGHT_COLOR = new Color(1.0f, 0.0f, 0.0f, 0.4f); + private static final boolean HOST_OS_IS_MACOS = System.getProperty("os.name").equals("Mac OS X"); protected final IngredientTracker tracker; public RecipeTransferCraftingGridError(IngredientTracker tracker) { @@ -59,7 +60,11 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { } if (craftMessage) { - message.add(new TranslatableComponent("gui.refinedstorage.jei.transfer.request_autocrafting").withStyle(ChatFormatting.BLUE)); + if (HOST_OS_IS_MACOS) { + message.add(new TranslatableComponent("gui.refinedstorage.jei.transfer.request_autocrafting_mac").withStyle(ChatFormatting.BLUE)); + } else { + message.add(new TranslatableComponent("gui.refinedstorage.jei.transfer.request_autocrafting").withStyle(ChatFormatting.BLUE)); + } } return message; diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index 658cbb6e4..997a36f98 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -90,6 +90,7 @@ "gui.refinedstorage.alternatives.apply": "Apply", "gui.refinedstorage.jei.transfer.autocrafting_available": "Autocrafting available", "gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + CLICK to request autocrafting", + "gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + CLICK to request autocrafting", "misc.refinedstorage.energy_stored": "%d / %d FE", "misc.refinedstorage.energy_usage": "Usage: %d FE/t", "misc.refinedstorage.energy_usage_minimal": "%d FE/t", diff --git a/src/main/resources/assets/refinedstorage/lang/it_IT.json b/src/main/resources/assets/refinedstorage/lang/it_IT.json index c02db0c72..f5ef27234 100644 --- a/src/main/resources/assets/refinedstorage/lang/it_IT.json +++ b/src/main/resources/assets/refinedstorage/lang/it_IT.json @@ -88,6 +88,7 @@ "gui.refinedstorage.alternatives.apply": "Applica", "gui.refinedstorage.jei.transfer.autocrafting_available": "Fabbricazione automatica disponibile", "gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + CLICK per richiedere la fabbricazione automatica", + "gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + CLICK per richiedere la fabbricazione automatica", "misc.refinedstorage.energy_stored": "%d / %d FE", "misc.refinedstorage.energy_usage": "Utilizzo: %d FE/t", "misc.refinedstorage.energy_usage_minimal": "%d FE/t", diff --git a/src/main/resources/assets/refinedstorage/lang/ja_jp.json b/src/main/resources/assets/refinedstorage/lang/ja_jp.json index 0d0dd9c5f..02667b22f 100644 --- a/src/main/resources/assets/refinedstorage/lang/ja_jp.json +++ b/src/main/resources/assets/refinedstorage/lang/ja_jp.json @@ -88,7 +88,9 @@ "gui.refinedstorage.crafter_manager": "クラフターマネージャー", "gui.refinedstorage.alternatives": "代替案", "gui.refinedstorage.alternatives.apply": "適用", - + "gui.refinedstorage.jei.transfer.autocrafting_available": "自動クラフトが出来る", + "gui.refinedstorage.jei.transfer.request_autocrafting": "CTRLキーを押しながらクリックするために自動クラフトする", + "gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMDキーを押しながらクリックするために自動クラフトする", "misc.refinedstorage.energy_stored": "%d / %d FE", "misc.refinedstorage.energy_usage": "消費電力: %d FE/t", "misc.refinedstorage.energy_usage_minimal": "%d FE/t", diff --git a/src/main/resources/assets/refinedstorage/lang/ko_kr.json b/src/main/resources/assets/refinedstorage/lang/ko_kr.json index 0b09cadb3..ab27ce45f 100644 --- a/src/main/resources/assets/refinedstorage/lang/ko_kr.json +++ b/src/main/resources/assets/refinedstorage/lang/ko_kr.json @@ -90,6 +90,7 @@ "gui.refinedstorage.alternatives.apply": "적용", "gui.refinedstorage.jei.transfer.autocrafting_available": "자동 제작 사용 가능", "gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + 클릭하여 자동 제작 요청", + "gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + 클릭하여 자동 제작 요청", "misc.refinedstorage.energy_stored": "%d / %d FE", "misc.refinedstorage.energy_usage": "사용: %d FE/t", "misc.refinedstorage.energy_usage_minimal": "%d FE/t", diff --git a/src/main/resources/assets/refinedstorage/lang/pl_pl.json b/src/main/resources/assets/refinedstorage/lang/pl_pl.json index 9775d6049..35e591a03 100644 --- a/src/main/resources/assets/refinedstorage/lang/pl_pl.json +++ b/src/main/resources/assets/refinedstorage/lang/pl_pl.json @@ -90,6 +90,7 @@ "gui.refinedstorage.alternatives.apply": "Zastosuj", "gui.refinedstorage.jei.transfer.autocrafting_available": "Auto-wytwarzanie dostępne", "gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + KLIKNIJ aby zażądać wytworzenia", + "gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + KLIKNIJ aby zażądać wytworzenia", "misc.refinedstorage.energy_stored": "%d / %d FE", "misc.refinedstorage.energy_usage": "Zużycie: %d FE/t", "misc.refinedstorage.energy_usage_minimal": "%d FE/t", From 0d98e9837470afa90bda483b76b167f1b946e992 Mon Sep 17 00:00:00 2001 From: Darkere Date: Tue, 19 Jul 2022 19:20:34 +0200 Subject: [PATCH 22/49] update to new JEI API --- build.gradle | 5 +- .../jei/CoverCraftingCategoryExtension.java | 60 +++++------- .../jei/GridRecipeTransferHandler.java | 98 ++++++++++--------- .../HollowCoverCraftingCategoryExtension.java | 74 +++++++++----- .../integration/jei/Ingredient.java | 15 ++- .../integration/jei/IngredientTracker.java | 22 +++-- .../jei/RecipeTransferCraftingGridError.java | 12 +-- .../jei/RecipeTransferPatternGridError.java | 2 +- .../network/grid/GridTransferMessage.java | 46 +++------ 9 files changed, 169 insertions(+), 165 deletions(-) diff --git a/build.gradle b/build.gradle index b7276c143..07fd10e9d 100755 --- a/build.gradle +++ b/build.gradle @@ -104,8 +104,9 @@ processResources { dependencies { minecraft 'net.minecraftforge:forge:1.18.2-40.1.48' - compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171:api") - runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171") + compileOnly fg.deobf("mezz.jei:jei-1.18.2-common-api:10.1.0.208") + compileOnly fg.deobf("mezz.jei:jei-1.18.2-forge-api:10.1.0.208") + runtimeOnly fg.deobf("mezz.jei:jei-1.18.2-forge:10.1.0.208") compileOnly fg.deobf('curse.maven:mouse-tweaks-60089:3578801') diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java index 95063fcd4..fd9be26a0 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java @@ -5,9 +5,10 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.item.CoverItem; import com.refinedmods.refinedstorage.recipe.CoverRecipe; import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICustomCraftingCategoryExtension; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.ingredient.ICraftingGridHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; @@ -16,25 +17,24 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraftforge.common.Tags; -import net.minecraftforge.common.util.Size2i; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.tags.ITag; import javax.annotation.Nullable; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; -public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryExtension { +public class CoverCraftingCategoryExtension implements ICraftingCategoryExtension { + @Override - public void setIngredients(IIngredients ingredients) { + public void setRecipe(IRecipeLayoutBuilder builder, ICraftingGridHelper craftingGridHelper, IFocusGroup focuses) { List input = new ArrayList<>(); List output = new ArrayList<>(); for (Block block : ForgeRegistries.BLOCKS.getValues()) { - Item item = Item.byBlock(block); - if (item == Items.AIR) { + Item item = Item.BY_BLOCK.get(block); + if (item == null || item == Items.AIR) { continue; } NonNullList subBlocks = NonNullList.create(); @@ -48,15 +48,26 @@ public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryEx } } } - ITag nuggets = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); - ingredients.setInputLists(VanillaTypes.ITEM, Arrays.asList(nuggets.stream().map(ItemStack::new).collect(Collectors.toList()), input)); - ingredients.setOutputs(VanillaTypes.ITEM, output); + + ITag nuggetTag = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); + List nuggets = nuggetTag.stream().map(ItemStack::new).toList(); + List> inputs = new ArrayList<>(Collections.nCopies(9, new ArrayList<>())); + inputs.set(4, nuggets); + inputs.set(5, input); + craftingGridHelper.setInputs(builder, VanillaTypes.ITEM_STACK, inputs, 3, 3); + craftingGridHelper.setOutputs(builder, VanillaTypes.ITEM_STACK, output); + + //builder.createFocusLink(in, out); //waiting on API update } - @Nullable @Override - public Size2i getSize() { - return new Size2i(2, 1); + public int getWidth() { + return 3; + } + + @Override + public int getHeight() { + return 3; } @Nullable @@ -64,21 +75,4 @@ public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryEx public ResourceLocation getRegistryName() { return CoverRecipe.SERIALIZER.getRegistryName(); } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, IIngredients ingredients) { - ITag nuggets = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); - ItemStack stack = recipeLayout.getFocus(VanillaTypes.ITEM).getValue(); - if (stack.getItem() instanceof CoverItem) { - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(4, nuggets.stream().map(ItemStack::new).collect(Collectors.toList())); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, CoverItem.getItem(stack)); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, stack); - } else { - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(4, nuggets.stream().map(ItemStack::new).collect(Collectors.toList())); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, stack); - ItemStack output = new ItemStack(RSItems.COVER.get()); - CoverItem.setItem(output, stack); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, output); - } - } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java index 93c0fabde..c68bb945b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java @@ -9,8 +9,11 @@ import com.refinedmods.refinedstorage.network.grid.GridTransferMessage; import com.refinedmods.refinedstorage.screen.grid.GridScreen; import com.refinedmods.refinedstorage.screen.grid.stack.IGridStack; import com.refinedmods.refinedstorage.screen.grid.stack.ItemGridStack; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.gui.ingredient.IGuiIngredient; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.forge.ForgeTypes; +import mezz.jei.api.gui.ingredient.IRecipeSlotView; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.transfer.IRecipeTransferError; import mezz.jei.api.recipe.transfer.IRecipeTransferHandler; import net.minecraft.client.gui.screens.Screen; @@ -19,11 +22,9 @@ import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.CraftingRecipe; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; public class GridRecipeTransferHandler implements IRecipeTransferHandler { @@ -47,23 +48,22 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler s.container instanceof CraftingContainer).collect(Collectors.toList()), - recipe instanceof CraftingRecipe - )); + private void move(IRecipeSlotsView recipeSlotsView) { + List> inputs = recipeSlotsView.getSlotViews(RecipeIngredientRole.INPUT).stream().map(view -> { + + //Creating a mutable list + List stacks = view.getIngredients(VanillaTypes.ITEM_STACK).collect(Collectors.toCollection(ArrayList::new)); + + //moving the displayed stack to first + Optional displayStack = view.getDisplayedIngredient(VanillaTypes.ITEM_STACK); + displayStack.ifPresent(stack -> { + int index = stacks.indexOf(stack); + if (index > -1) { + stacks.remove(index); + stacks.add(0, stack); + } + }); + return stacks; + }).toList(); + + RS.NETWORK_HANDLER.sendToServer(new GridTransferMessage(inputs)); } - private void moveForProcessing(IRecipeLayout recipeLayout, IngredientTracker tracker) { + private void moveForProcessing(IRecipeSlotsView recipeLayout, IngredientTracker tracker) { List inputs = new LinkedList<>(); List outputs = new LinkedList<>(); List fluidInputs = new LinkedList<>(); List fluidOutputs = new LinkedList<>(); - for (IGuiIngredient guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { - handleItemIngredient(inputs, outputs, guiIngredient, tracker); + List inputSlots = recipeLayout.getSlotViews(RecipeIngredientRole.INPUT); + for (IRecipeSlotView view : inputSlots) { + handleItemIngredient(inputs, view, tracker); + handleFluidIngredient(fluidInputs, view); } - for (IGuiIngredient guiIngredient : recipeLayout.getFluidStacks().getGuiIngredients().values()) { - handleFluidIngredient(fluidInputs, fluidOutputs, guiIngredient); + List outputSlots = recipeLayout.getSlotViews(RecipeIngredientRole.OUTPUT); + for (IRecipeSlotView view : outputSlots) { + handleItemIngredient(outputs, view, tracker); + handleFluidIngredient(fluidOutputs, view); } RS.NETWORK_HANDLER.sendToServer(new GridProcessingTransferMessage(inputs, outputs, fluidInputs, fluidOutputs)); } - private void handleFluidIngredient(List fluidInputs, List fluidOutputs, IGuiIngredient guiIngredient) { - if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { - FluidStack ingredient = guiIngredient.getDisplayedIngredient().copy(); - - if (guiIngredient.isInput()) { - fluidInputs.add(ingredient); - } else { - fluidOutputs.add(ingredient); - } + private void handleFluidIngredient(List list, IRecipeSlotView slotView) { + if (slotView != null) { + slotView.getDisplayedIngredient(ForgeTypes.FLUID_STACK).ifPresent(list::add); } } - private void handleItemIngredient(List inputs, List outputs, IGuiIngredient guiIngredient, IngredientTracker tracker) { - if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) { - ItemStack ingredient = tracker.findBestMatch(guiIngredient.getAllIngredients()).copy(); + private void handleItemIngredient(List list, IRecipeSlotView slotView, IngredientTracker tracker) { + if (slotView != null && slotView.getIngredients(VanillaTypes.ITEM_STACK).findAny().isPresent()) { + ItemStack stack = tracker.findBestMatch(slotView.getIngredients(VanillaTypes.ITEM_STACK).toList()); - if (ingredient == ItemStack.EMPTY) { - ingredient = guiIngredient.getDisplayedIngredient().copy(); + if (stack.isEmpty() && slotView.getDisplayedIngredient(VanillaTypes.ITEM_STACK).isPresent()) { + stack = slotView.getDisplayedIngredient(VanillaTypes.ITEM_STACK).get(); } - - if (guiIngredient.isInput()) { - inputs.add(ingredient); - } else { - outputs.add(ingredient); + if (!stack.isEmpty()) { + list.add(stack); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java index d1c9a6809..5de4f8af9 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java @@ -1,30 +1,58 @@ package com.refinedmods.refinedstorage.integration.jei; import com.refinedmods.refinedstorage.RSItems; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.item.CoverItem; import com.refinedmods.refinedstorage.recipe.HollowCoverRecipe; import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.ingredients.IIngredients; -import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICustomCraftingCategoryExtension; +import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.ingredient.ICraftingGridHelper; +import mezz.jei.api.recipe.IFocusGroup; +import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; +import net.minecraft.core.NonNullList; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.util.Size2i; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.registries.ForgeRegistries; import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; -public class HollowCoverCraftingCategoryExtension implements ICustomCraftingCategoryExtension { +public class HollowCoverCraftingCategoryExtension implements ICraftingCategoryExtension { @Override - public void setIngredients(IIngredients ingredients) { - ingredients.setInput(VanillaTypes.ITEM, new ItemStack(RSItems.COVER.get())); - ingredients.setOutput(VanillaTypes.ITEM, new ItemStack(RSItems.HOLLOW_COVER.get())); - } + public void setRecipe(IRecipeLayoutBuilder builder, ICraftingGridHelper craftingGridHelper, IFocusGroup focuses) { - @Nullable - @Override - public Size2i getSize() { - return new Size2i(2, 1); + List> stacks = new ArrayList<>(Collections.nCopies(9, new ArrayList<>())); + List input = new ArrayList<>(); + List output = new ArrayList<>(); + for (Block block : ForgeRegistries.BLOCKS.getValues()) { + Item item = Item.BY_BLOCK.get(block); + if (item == null || item == Items.AIR) { + continue; + } + NonNullList subBlocks = NonNullList.create(); + block.fillItemCategory(CreativeModeTab.TAB_SEARCH, subBlocks); + for (ItemStack subBlock : subBlocks) { + if (CoverManager.isValidCover(subBlock)) { + ItemStack fullCover = new ItemStack(RSItems.COVER.get()); + CoverItem.setItem(fullCover, subBlock); + input.add(fullCover); + ItemStack hollowCover = new ItemStack(RSItems.HOLLOW_COVER.get()); + CoverItem.setItem(hollowCover, subBlock); + output.add(hollowCover); + } + } + } + + stacks.set(4, input); + craftingGridHelper.setInputs(builder, VanillaTypes.ITEM_STACK, stacks, 0, 0); + craftingGridHelper.setOutputs(builder, VanillaTypes.ITEM_STACK, output); } @Nullable @@ -34,18 +62,12 @@ public class HollowCoverCraftingCategoryExtension implements ICustomCraftingCate } @Override - public void setRecipe(IRecipeLayout recipeLayout, IIngredients ingredients) { - ItemStack stack = recipeLayout.getFocus(VanillaTypes.ITEM).getValue(); - if (stack.getItem() == RSItems.COVER.get()) { - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, stack); - ItemStack output = new ItemStack(RSItems.HOLLOW_COVER.get()); - CoverItem.setItem(output, CoverItem.getItem(stack)); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, output); - } else { - ItemStack input = new ItemStack(RSItems.COVER.get()); - CoverItem.setItem(input, CoverItem.getItem(stack)); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, input); - recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, stack); - } + public int getWidth() { + return 0; + } + + @Override + public int getHeight() { + return 0; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java index 30f43f32d..c2aa43de1 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/Ingredient.java @@ -1,19 +1,18 @@ package com.refinedmods.refinedstorage.integration.jei; -import mezz.jei.api.gui.ingredient.IGuiIngredient; -import net.minecraft.world.item.ItemStack; +import mezz.jei.api.gui.ingredient.IRecipeSlotView; import java.util.UUID; class Ingredient { - private final IGuiIngredient guiIngredient; + private final IRecipeSlotView slotView; private final int required; private UUID craftStackId; private int fulfilled; - public Ingredient(IGuiIngredient guiIngredient) { - this.guiIngredient = guiIngredient; - this.required = guiIngredient.getAllIngredients().get(0).getCount(); + public Ingredient(IRecipeSlotView view, int count) { + this.slotView = view; + this.required = count; } public boolean isAvailable() { @@ -28,8 +27,8 @@ class Ingredient { return craftStackId != null; } - public IGuiIngredient getGuiIngredient() { - return guiIngredient; + public IRecipeSlotView getSlotView() { + return slotView; } public UUID getCraftStackId() { diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java index 2f2947763..1e1923dbc 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/IngredientTracker.java @@ -6,8 +6,10 @@ import com.refinedmods.refinedstorage.api.util.IComparer; import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.item.PatternItem; import com.refinedmods.refinedstorage.screen.grid.stack.IGridStack; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.gui.ingredient.IGuiIngredient; +import mezz.jei.api.constants.VanillaTypes; +import mezz.jei.api.gui.ingredient.IRecipeSlotView; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; +import mezz.jei.api.recipe.RecipeIngredientRole; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -20,12 +22,13 @@ public class IngredientTracker { private final Map storedItems = new HashMap<>(); private boolean doTransfer; - public IngredientTracker(IRecipeLayout recipeLayout, boolean doTransfer) { - for (IGuiIngredient guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) { - if (guiIngredient.isInput() && !guiIngredient.getAllIngredients().isEmpty()) { - ingredients.add(new Ingredient(guiIngredient)); - } + public IngredientTracker(IRecipeSlotsView recipeLayout, boolean doTransfer) { + for (IRecipeSlotView slotView : recipeLayout.getSlotViews(RecipeIngredientRole.INPUT)) { + Optional optionalItemStack = slotView.getIngredients(VanillaTypes.ITEM_STACK).findAny(); + + optionalItemStack.ifPresent(stack -> ingredients.add(new Ingredient(slotView, stack.getCount()))); } + this.doTransfer = doTransfer; } @@ -55,9 +58,8 @@ public class IngredientTracker { } Optional match = ingredient - .getGuiIngredient() - .getAllIngredients() - .stream() + .getSlotView() + .getIngredients(VanillaTypes.ITEM_STACK) .filter(s -> API.instance().getComparer().isEqual(stack, s, IComparer.COMPARE_NBT)) .findFirst(); diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java index ec8527b13..e01355377 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage.integration.jei; import com.mojang.blaze3d.vertex.PoseStack; -import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.recipe.transfer.IRecipeTransferError; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; @@ -29,11 +29,11 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { } @Override - public void showError(PoseStack stack, int mouseX, int mouseY, IRecipeLayout recipeLayout, int recipeX, int recipeY) { - List message = drawIngredientHighlights(stack, recipeX, recipeY); + public void showError(PoseStack poseStack, int mouseX, int mouseY, IRecipeSlotsView recipeSlotsView, int recipeX, int recipeY) { + List message = drawIngredientHighlights(poseStack, recipeX, recipeY); Screen currentScreen = Minecraft.getInstance().screen; - currentScreen.renderComponentTooltip(stack, message, mouseX, mouseY); + currentScreen.renderComponentTooltip(poseStack, message, mouseX, mouseY); } protected List drawIngredientHighlights(PoseStack stack, int recipeX, int recipeY) { @@ -46,10 +46,10 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { for (Ingredient ingredient : tracker.getIngredients()) { if (!ingredient.isAvailable()) { if (ingredient.isCraftable()) { - ingredient.getGuiIngredient().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY); + ingredient.getSlotView().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB()); craftMessage = true; } else { - ingredient.getGuiIngredient().drawHighlight(stack, MISSING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY); + ingredient.getSlotView().drawHighlight(stack, MISSING_HIGHLIGHT_COLOR.getRGB()); missingMessage = true; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java index 38ce96ce6..b4269176f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferPatternGridError.java @@ -22,7 +22,7 @@ public class RecipeTransferPatternGridError extends RecipeTransferCraftingGridEr for (Ingredient ingredient : tracker.getIngredients()) { if (ingredient.isCraftable()) { - ingredient.getGuiIngredient().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY); + ingredient.getSlotView().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB()); craftMessage = true; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java index a0935671b..406c219da 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridTransferMessage.java @@ -1,47 +1,36 @@ package com.refinedmods.refinedstorage.network.grid; + import com.refinedmods.refinedstorage.api.network.grid.GridType; import com.refinedmods.refinedstorage.api.network.grid.IGrid; import com.refinedmods.refinedstorage.container.GridContainerMenu; import com.refinedmods.refinedstorage.util.StackUtils; -import mezz.jei.api.gui.ingredient.IGuiIngredient; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; import net.minecraftforge.network.NetworkEvent; -import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.function.Supplier; - public class GridTransferMessage { private final ItemStack[][] recipe = new ItemStack[9][]; - private Map> inputs; - private List slots; - boolean isCraftingRecipe; + List> inputs; public GridTransferMessage() { } - public GridTransferMessage(Map> inputs, List slots, boolean isCraftingRecipe) { + public GridTransferMessage(List> inputs) { this.inputs = inputs; - this.slots = slots; - this.isCraftingRecipe = isCraftingRecipe; } public static GridTransferMessage decode(FriendlyByteBuf buf) { GridTransferMessage msg = new GridTransferMessage(); - int slots = buf.readInt(); + for (int i = 0; i < slots; i++) { + int numberOfIngredients = buf.readInt(); + msg.recipe[i] = new ItemStack[numberOfIngredients]; - for (int i = 0; i < slots; ++i) { - int ingredients = buf.readInt(); - - msg.recipe[i] = new ItemStack[ingredients]; - - for (int j = 0; j < ingredients; ++j) { + for (int j = 0; j < numberOfIngredients; j++) { msg.recipe[i][j] = StackUtils.readItemStack(buf); } } @@ -50,29 +39,18 @@ public class GridTransferMessage { } public static void encode(GridTransferMessage message, FriendlyByteBuf buf) { - buf.writeInt(message.slots.size()); - for (Slot slot : message.slots) { - IGuiIngredient ingredient = message.inputs.get(slot.getSlotIndex() + (message.isCraftingRecipe ? 1 : 0)); + buf.writeInt(message.inputs.size()); + for (List stacks : message.inputs) { + buf.writeInt(stacks.size()); - List ingredients = new ArrayList<>(); - - if (ingredient != null) { - for (ItemStack possibleStack : ingredient.getAllIngredients()) { - if (possibleStack != null) { - ingredients.add(possibleStack); - } - } - } - - buf.writeInt(ingredients.size()); - - for (ItemStack possibleStack : ingredients) { + for (ItemStack possibleStack : stacks) { StackUtils.writeItemStack(buf, possibleStack); } } } + public static void handle(GridTransferMessage message, Supplier ctx) { Player player = ctx.get().getSender(); From 31c2197691ddf9fe72c635150c6bc7ef9a90caba Mon Sep 17 00:00:00 2001 From: Darkere Date: Wed, 20 Jul 2022 18:58:21 +0200 Subject: [PATCH 23/49] downgrade to JEI 9.7 and implement focusLink --- build.gradle | 8 +++++--- .../jei/CoverCraftingCategoryExtension.java | 11 ++++++----- .../jei/HollowCoverCraftingCategoryExtension.java | 6 ++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/build.gradle b/build.gradle index 07fd10e9d..326bdaae0 100755 --- a/build.gradle +++ b/build.gradle @@ -104,9 +104,11 @@ processResources { dependencies { minecraft 'net.minecraftforge:forge:1.18.2-40.1.48' - compileOnly fg.deobf("mezz.jei:jei-1.18.2-common-api:10.1.0.208") - compileOnly fg.deobf("mezz.jei:jei-1.18.2-forge-api:10.1.0.208") - runtimeOnly fg.deobf("mezz.jei:jei-1.18.2-forge:10.1.0.208") + //compileOnly fg.deobf("mezz.jei:jei-1.18.2-common-api:10.1.0.208") + //compileOnly fg.deobf("mezz.jei:jei-1.18.2-forge-api:10.1.0.208") + //runtimeOnly fg.deobf("mezz.jei:jei-1.18.2-forge:10.1.1.231") + compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.7.1.232:api") + runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.7.1.232") compileOnly fg.deobf('curse.maven:mouse-tweaks-60089:3578801') diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java index fd9be26a0..11e5f1d87 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/CoverCraftingCategoryExtension.java @@ -6,6 +6,7 @@ import com.refinedmods.refinedstorage.item.CoverItem; import com.refinedmods.refinedstorage.recipe.CoverRecipe; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.builder.IRecipeSlotBuilder; import mezz.jei.api.gui.ingredient.ICraftingGridHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; @@ -52,12 +53,12 @@ public class CoverCraftingCategoryExtension implements ICraftingCategoryExtensio ITag nuggetTag = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON); List nuggets = nuggetTag.stream().map(ItemStack::new).toList(); List> inputs = new ArrayList<>(Collections.nCopies(9, new ArrayList<>())); - inputs.set(4, nuggets); - inputs.set(5, input); - craftingGridHelper.setInputs(builder, VanillaTypes.ITEM_STACK, inputs, 3, 3); - craftingGridHelper.setOutputs(builder, VanillaTypes.ITEM_STACK, output); + inputs.set(3, nuggets); + inputs.set(4, input); + List inputSlots = craftingGridHelper.createAndSetInputs(builder, VanillaTypes.ITEM_STACK, inputs, 3, 3); + IRecipeSlotBuilder outputSlot = craftingGridHelper.createAndSetOutputs(builder, VanillaTypes.ITEM_STACK, output); - //builder.createFocusLink(in, out); //waiting on API update + builder.createFocusLink(inputSlots.get(4), outputSlot); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java index 5de4f8af9..520d3d686 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/HollowCoverCraftingCategoryExtension.java @@ -6,6 +6,7 @@ import com.refinedmods.refinedstorage.item.CoverItem; import com.refinedmods.refinedstorage.recipe.HollowCoverRecipe; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.builder.IRecipeSlotBuilder; import mezz.jei.api.gui.ingredient.ICraftingGridHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension; @@ -51,8 +52,9 @@ public class HollowCoverCraftingCategoryExtension implements ICraftingCategoryEx } stacks.set(4, input); - craftingGridHelper.setInputs(builder, VanillaTypes.ITEM_STACK, stacks, 0, 0); - craftingGridHelper.setOutputs(builder, VanillaTypes.ITEM_STACK, output); + List inputSlots = craftingGridHelper.createAndSetInputs(builder, VanillaTypes.ITEM_STACK, stacks, 0, 0); + IRecipeSlotBuilder outputSlot = craftingGridHelper.createAndSetOutputs(builder, VanillaTypes.ITEM_STACK, output); + builder.createFocusLink(inputSlots.get(4), outputSlot); } @Nullable From 86575f73a66bfbd325a84b86937236ed5ef23adc Mon Sep 17 00:00:00 2001 From: Darkere Date: Wed, 20 Jul 2022 19:57:53 +0200 Subject: [PATCH 24/49] min JEI version of 9.7.1 --- src/main/resources/META-INF/mods.toml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 51ca61878..7d4dce050 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -3,9 +3,9 @@ loaderVersion = "[40,)" issueTrackerURL = "https://github.com/refinedmods/refinedstorage" license="MIT" [[mods]] -modId="refinedstorage" -version="${version}" -displayName="Refined Storage" +modId = "refinedstorage" +version = "123" +displayName = "Refined Storage" displayURL="https://refinedmods.com/refined-storage" logoFile="logo.png" authors = "Refined Mods" @@ -13,8 +13,14 @@ description = ''' An elegant solution to your hoarding problem ''' [[dependencies.refinedstorage]] -modId="forge" -mandatory=true -versionRange="[40.1,)" -ordering="NONE" -side="BOTH" \ No newline at end of file +modId = "forge" +mandatory = true +versionRange = "[40.1,)" +ordering = "NONE" +side = "BOTH" +[[dependencies.refinedstorage]] +modId = "jei" +mandatory = true +versionRange = "[9.7.1,)" +ordering = "NONE" +side = "BOTH" \ No newline at end of file From 7147718f0414c282f0f8a451e9047ff99afca0ef Mon Sep 17 00:00:00 2001 From: Darkere Date: Fri, 22 Jul 2022 15:29:02 +0200 Subject: [PATCH 25/49] jei not mandatory --- src/main/resources/META-INF/mods.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 7d4dce050..fd247f50b 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -4,10 +4,10 @@ issueTrackerURL = "https://github.com/refinedmods/refinedstorage" license="MIT" [[mods]] modId = "refinedstorage" -version = "123" +version = "${version}" displayName = "Refined Storage" -displayURL="https://refinedmods.com/refined-storage" -logoFile="logo.png" +displayURL = "https://refinedmods.com/refined-storage" +logoFile = "logo.png" authors = "Refined Mods" description = ''' An elegant solution to your hoarding problem @@ -20,7 +20,7 @@ ordering = "NONE" side = "BOTH" [[dependencies.refinedstorage]] modId = "jei" -mandatory = true +mandatory = false versionRange = "[9.7.1,)" -ordering = "NONE" +ordering = "BEFORE" side = "BOTH" \ No newline at end of file From 92f3001499556466d75444851f7b849ba8a30f93 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 24 Jul 2022 16:16:38 +0200 Subject: [PATCH 26/49] changelog --- CHANGELOG.md | 1 + build.gradle | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6968fe660..38bbec21b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Added Japanese translations for certain autocrafting actions - Improved waterlogging to behave more like vanilla - Added Forge relocation and Packing Tape blacklist tag entries to prevent block movement +- Requires version 9.7.1 of JEI or higher ## [v1.10.2] - 2022-03-26 diff --git a/build.gradle b/build.gradle index 326bdaae0..c7f85197f 100755 --- a/build.gradle +++ b/build.gradle @@ -104,9 +104,6 @@ processResources { dependencies { minecraft 'net.minecraftforge:forge:1.18.2-40.1.48' - //compileOnly fg.deobf("mezz.jei:jei-1.18.2-common-api:10.1.0.208") - //compileOnly fg.deobf("mezz.jei:jei-1.18.2-forge-api:10.1.0.208") - //runtimeOnly fg.deobf("mezz.jei:jei-1.18.2-forge:10.1.1.231") compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.7.1.232:api") runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.7.1.232") From f92e20f795b964a0edf4e8d9eb64e7f83f5b7573 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 24 Jul 2022 16:17:39 +0200 Subject: [PATCH 27/49] fix changelog text --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38bbec21b..410d27177 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Added Japanese translations for certain autocrafting actions - Improved waterlogging to behave more like vanilla - Added Forge relocation and Packing Tape blacklist tag entries to prevent block movement -- Requires version 9.7.1 of JEI or higher +- Requires JEI version 9.7.1 or higher ## [v1.10.2] - 2022-03-26 From 99235c7014367c2dff27960c58368cdd82fff8a9 Mon Sep 17 00:00:00 2001 From: ylou <1237500+ylou@users.noreply.github.com> Date: Sat, 1 May 2021 02:37:20 -0700 Subject: [PATCH 28/49] Allow simple math input in AmountSpecifyingScreen --- .../screen/AmountSpecifyingScreen.java | 62 ++++++---- .../screen/FluidAmountScreen.java | 12 +- .../screen/ItemAmountScreen.java | 12 +- .../refinedstorage/screen/PriorityScreen.java | 12 +- .../screen/grid/CraftingSettingsScreen.java | 12 +- .../util/EquationEvaluator.java | 107 ++++++++++++++++++ .../util/EquationEvaluatorTest.java | 64 +++++++++++ 7 files changed, 221 insertions(+), 60 deletions(-) create mode 100644 src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java create mode 100644 src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index 926f519ba..eb0a64874 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -3,6 +3,7 @@ package com.refinedmods.refinedstorage.screen; import com.mojang.blaze3d.vertex.PoseStack; import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.render.RenderSettings; +import com.refinedmods.refinedstorage.util.EquationEvaluator; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; @@ -38,6 +39,25 @@ public abstract class AmountSpecifyingScreen ex protected abstract int getMaxAmount(); + protected int getMinAmount() { + if (canAmountGoNegative()) { + return -getMaxAmount(); + } + return 1; + } + + protected int parseAmount() { + return (int) Math.ceil(EquationEvaluator.evaluate(amountField.getText())); + } + + protected int clampAmount(int amount) { + return Math.max(getMinAmount(), Math.min(getMaxAmount(), amount)); + } + + protected boolean isAmountInBounds(int amount) { + return getMinAmount() <= amount && amount <= getMaxAmount(); + } + protected Pair getAmountPos() { return Pair.of(7 + 2, 50 + 1); } @@ -137,29 +157,32 @@ public abstract class AmountSpecifyingScreen ex } private void onIncrementButtonClicked(int increment) { - int oldAmount = 0; - try { - oldAmount = Integer.parseInt(amountField.getValue()); - } catch (NumberFormatException e) { + int oldAmount = parseAmount(); + int newAmount = oldAmount + increment; + if (!canAmountGoNegative() && oldAmount == 1) { + newAmount--; + } + amountField.setText(String.valueOf(clampAmount(newAmount))); + } catch (IllegalArgumentException e) { // NO OP } - - int newAmount = increment; - - if (!canAmountGoNegative()) { - newAmount = Math.max(1, ((oldAmount == 1 && newAmount != 1) ? 0 : oldAmount) + newAmount); - } else { - newAmount = oldAmount + newAmount; - } - - if (newAmount > getMaxAmount()) { - newAmount = getMaxAmount(); - } - - amountField.setValue(String.valueOf(newAmount)); } + private void onOkButtonPressed(boolean shiftDown) { + try { + int amount = parseAmount(); + if (isAmountInBounds(amount)) { + onValidAmountSave(shiftDown, amount); + close(); + } + } catch (IllegalArgumentException e) { + // NO OP + } + } + + protected void onValidAmountSave(boolean shiftDown, int amount) {} + @Override public void tick(int x, int y) { // NO OP @@ -179,9 +202,6 @@ public abstract class AmountSpecifyingScreen ex renderString(poseStack, 7, 7, title.getString()); } - protected void onOkButtonPressed(boolean shiftDown) { - // NO OP - } @Override public boolean mouseScrolled(double x, double y, double delta) { diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java index e41ef0639..ac84365ad 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java @@ -87,15 +87,7 @@ public class FluidAmountScreen extends AmountSpecifyingScreen operators = new ArrayDeque<>(); + Deque operands = new ArrayDeque<>(); + String lastToken = null; + while (tokens.hasMoreTokens()) { + String rawToken = tokens.nextToken().trim(); + if (rawToken.isEmpty()) + continue; + + boolean isUnaryMinus = rawToken.equals("-") && (lastToken == null + || (!lastToken.equals("u") && isOperator(lastToken)) || lastToken.equals("(")); + final String token = isUnaryMinus ? "u" : rawToken; + if (isOperator(token)) { + popOperators(input, operators, operands, + top -> (!top.equals("(") && getPrecedence(token) <= getPrecedence(top))); + operators.push(token); + } else if (token.equals("(")) { + operators.push(token); + } else if (token.equals(")")) { + popOperators(input, operators, operands, top -> !top.equals("(")); + if (!operators.pop().equals("(")) { + throw new IllegalArgumentException("Unbalanced right parentheses in expression: " + input); + } + } else { + try { + operands.push(Double.parseDouble(token)); + } catch (NumberFormatException exception) { + throw new IllegalArgumentException("Could not evaluate expression: " + input); + } + } + lastToken = token; + } + popOperators(input, operators, operands, top -> true); + return operands.pop(); + } + + private static void popOperators(String input, Deque operators, Deque operands, + Predicate predicate) { + try { + while (!operators.isEmpty() && predicate.test(operators.peek())) { + String op = operators.pop(); + if (op.equals("u")) { + operands.push(-operands.pop()); + continue; + } + operands.push(evaluateExpression(op, operands.pop(), operands.pop())); + } + } catch (NoSuchElementException exception) { + throw new IllegalArgumentException("Missing operand in expression: " + input); + } + } + + private static double evaluateExpression(String op, double b, double a) { + switch (op) { + case "+": + return a + b; + case "-": + return a - b; + case "*": + return a * b; + case "/": + return a / b; + } + throw new IllegalArgumentException("Unexpected arithmetic operation " + op); + } + + private static boolean isOperator(String op) { + switch (op) { + case "+": + case "-": + case "*": + case "/": + case "u": + return true; + } + return false; + } + + private static int getPrecedence(String op) { + switch (op) { + case "+": + case "-": + return 0; + case "*": + case "/": + return 1; + case "u": + return 2; + } + return -1; + } +} diff --git a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java new file mode 100644 index 000000000..67f9f2295 --- /dev/null +++ b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java @@ -0,0 +1,64 @@ +package com.refinedmods.refinedstorage.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; + +class EquationEvaluatorTest { + + private void assertFuzzyEquals(double expected, double actual) { + assertEquals(expected, actual, 0.001D); + } + + @Test + void testConstants() { + assertFuzzyEquals(1, EquationEvaluator.evaluate("1")); + assertFuzzyEquals(122, EquationEvaluator.evaluate("122")); + assertFuzzyEquals(4.2, EquationEvaluator.evaluate("4.20")); + } + + @Test + void testNegativeConstants() { + assertFuzzyEquals(-1, EquationEvaluator.evaluate("-1")); + assertFuzzyEquals(-2.5, EquationEvaluator.evaluate("-2.5")); + } + + @Test + void testBasicOperations() { + assertFuzzyEquals(2, EquationEvaluator.evaluate("1+1")); + assertFuzzyEquals(1, EquationEvaluator.evaluate("3 - 2")); + assertFuzzyEquals(6, EquationEvaluator.evaluate("2*3")); + assertFuzzyEquals(2, EquationEvaluator.evaluate("6 / 3")); + assertFuzzyEquals(-2, EquationEvaluator.evaluate("2-4")); + + assertFuzzyEquals(32, EquationEvaluator.evaluate("64 + -4 * 8")); + assertFuzzyEquals(8, EquationEvaluator.evaluate("16 + -4 + -4")); + } + + @Test + void testInvalidInput() { + assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("hello")); + assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("1 / (")); + assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("1+-*/")); + assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("----1")); + } + + @Test + void testWhitespace() { + assertFuzzyEquals(2, EquationEvaluator.evaluate(" 1 + 1")); + assertFuzzyEquals(1, EquationEvaluator.evaluate(" 3 - 2 ")); + } + + @Test + void testParentheses() { + assertFuzzyEquals(42, EquationEvaluator.evaluate("10 + 8*(2 + 2)")); + assertFuzzyEquals(20, EquationEvaluator.evaluate("5 * ((1 + 1) * 2)")); + } + + @Test + void testOrderOfOperations() { + assertFuzzyEquals(1, EquationEvaluator.evaluate("1 - 2 + 3 * 4 / 6")); + assertFuzzyEquals(4.0 / 3, EquationEvaluator.evaluate("(((1 - 2) + 3) * 4) / 6")); + } +} From d976cbe8b9e8b5c9377200ff1aad984ec6891653 Mon Sep 17 00:00:00 2001 From: ylou <1237500+ylou@users.noreply.github.com> Date: Wed, 9 Jun 2021 21:55:06 -0700 Subject: [PATCH 29/49] Add an evaluate button for equation inputs Additionally adds translations in languages I sorta know. --- .../screen/AmountSpecifyingScreen.java | 39 +++++++++++++++---- .../screen/FluidAmountScreen.java | 2 +- .../screen/ItemAmountScreen.java | 2 +- .../assets/refinedstorage/lang/en_us.json | 1 + .../assets/refinedstorage/lang/fr_fr.json | 1 + .../assets/refinedstorage/lang/zh_cn.json | 1 + .../assets/refinedstorage/lang/zh_tw.json | 1 + 7 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index eb0a64874..cda1d0bd2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -20,6 +20,7 @@ public abstract class AmountSpecifyingScreen ex protected EditBox amountField; protected Button okButton; protected Button cancelButton; + protected Button evaluateButton; protected AmountSpecifyingScreen(BaseScreen parent, T container, int width, int height, Inventory playerInventory, Component title) { super(container, width, height, playerInventory, title); @@ -63,22 +64,36 @@ public abstract class AmountSpecifyingScreen ex } protected Pair getOkCancelPos() { - return Pair.of(114, 33); + return Pair.of(114, 20); } protected int getOkCancelButtonWidth() { return 50; } + protected int getOkCancelButtonHeight() { + return 20; + } + + public Button addActionButton(Pair absolutePos, int xOffset, int yOffset, ITextComponent text, + IPressable onPress) { + return addButton(absolutePos.getLeft() + xOffset, absolutePos.getRight() + yOffset, getOkCancelButtonWidth(), + getOkCancelButtonHeight(), text, true, true, onPress); + } + @Override public void onPostInit(int x, int y) { Pair pos = getOkCancelPos(); + Pair absolutePos = Pair.of(x + pos.getLeft(), y + pos.getRight()); - okButton = addButton(x + pos.getLeft(), y + pos.getRight(), getOkCancelButtonWidth(), 20, getOkButtonText(), true, true, btn -> onOkButtonPressed(hasShiftDown())); - cancelButton = addButton(x + pos.getLeft(), y + pos.getRight() + 24, getOkCancelButtonWidth(), 20, new TranslatableComponent("gui.cancel"), true, true, btn -> close()); + okButton = addActionButton(absolutePos, 0, 0, getOkButtonText(), btn -> onOkButtonPressed(hasShiftDown())); + cancelButton = addActionButton(absolutePos, 0, 24, new TranslationTextComponent("gui.cancel"), btn -> close()); + evaluateButton = addActionButton(absolutePos, 0, 48, new TranslationTextComponent("misc.refinedstorage.evaluate"), + btn -> onEvaluateButtonPressed(hasShiftDown())); - amountField = new EditBox(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, font.lineHeight, new TextComponent("")); - amountField.setBordered(false); + amountField = new TextFieldWidget(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, + font.FONT_HEIGHT, new StringTextComponent("")); + amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); amountField.setValue(String.valueOf(getDefaultAmount())); amountField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); @@ -173,7 +188,7 @@ public abstract class AmountSpecifyingScreen ex try { int amount = parseAmount(); if (isAmountInBounds(amount)) { - onValidAmountSave(shiftDown, amount); + onValidAmountSaved(shiftDown, amount); close(); } } catch (IllegalArgumentException e) { @@ -181,7 +196,16 @@ public abstract class AmountSpecifyingScreen ex } } - protected void onValidAmountSave(boolean shiftDown, int amount) {} + private void onEvaluateButtonPressed(boolean shiftDown) { + try { + amountField.setText(String.valueOf(clampAmount(parseAmount()))); + } catch (IllegalArgumentException e) { + // NO OP + } + } + + protected void onValidAmountSaved(boolean shiftDown, int amount) { + } @Override public void tick(int x, int y) { @@ -202,7 +226,6 @@ public abstract class AmountSpecifyingScreen ex renderString(poseStack, 7, 7, title.getString()); } - @Override public boolean mouseScrolled(double x, double y, double delta) { if (delta > 0) { diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java index ac84365ad..f985d5bdc 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java @@ -87,7 +87,7 @@ public class FluidAmountScreen extends AmountSpecifyingScreen Date: Wed, 9 Jun 2021 21:59:35 -0700 Subject: [PATCH 30/49] Attempt translations for evaluate in other langs Sorry in advance for the mistakes. Also updates the changelog. --- src/main/resources/assets/refinedstorage/lang/de_de.json | 1 + src/main/resources/assets/refinedstorage/lang/es_es.json | 1 + src/main/resources/assets/refinedstorage/lang/ja_jp.json | 1 + src/main/resources/assets/refinedstorage/lang/ko_kr.json | 1 + src/main/resources/assets/refinedstorage/lang/nl_nl.json | 2 ++ src/main/resources/assets/refinedstorage/lang/pt_br.json | 1 + src/main/resources/assets/refinedstorage/lang/ru_ru.json | 1 + 7 files changed, 8 insertions(+) diff --git a/src/main/resources/assets/refinedstorage/lang/de_de.json b/src/main/resources/assets/refinedstorage/lang/de_de.json index d184979aa..55a2f52cd 100644 --- a/src/main/resources/assets/refinedstorage/lang/de_de.json +++ b/src/main/resources/assets/refinedstorage/lang/de_de.json @@ -105,6 +105,7 @@ "misc.refinedstorage.start": "Start", "misc.refinedstorage.clear": "Löschen", "misc.refinedstorage.set": "Setzen", + "misc.refinedstorage.evaluate": "Auswerten", "misc.refinedstorage.cancel_all": "Alles Anhalten", "misc.refinedstorage.priority": "Priorität", "misc.refinedstorage.processing": "Verarbeitung", diff --git a/src/main/resources/assets/refinedstorage/lang/es_es.json b/src/main/resources/assets/refinedstorage/lang/es_es.json index b3cf2c137..bc9620e8d 100644 --- a/src/main/resources/assets/refinedstorage/lang/es_es.json +++ b/src/main/resources/assets/refinedstorage/lang/es_es.json @@ -90,6 +90,7 @@ "misc.refinedstorage.start": "Empezar", "misc.refinedstorage.clear": "Limpiar", "misc.refinedstorage.set": "Poner", + "misc.refinedstorage.evaluate": "Evaluar", "misc.refinedstorage.cancel_all": "Cancelar todo", "misc.refinedstorage.priority": "Prioridad", "misc.refinedstorage.processing": "Procesándose", diff --git a/src/main/resources/assets/refinedstorage/lang/ja_jp.json b/src/main/resources/assets/refinedstorage/lang/ja_jp.json index 02667b22f..88a85eadb 100644 --- a/src/main/resources/assets/refinedstorage/lang/ja_jp.json +++ b/src/main/resources/assets/refinedstorage/lang/ja_jp.json @@ -127,6 +127,7 @@ "misc.refinedstorage.start": "開始", "misc.refinedstorage.clear": "クリア", "misc.refinedstorage.set": "完了", + "misc.refinedstorage.evaluate": "を評価", "misc.refinedstorage.cancel_all": "全てキャンセル", "misc.refinedstorage.priority": "優先度", "misc.refinedstorage.exact": "精密モード", diff --git a/src/main/resources/assets/refinedstorage/lang/ko_kr.json b/src/main/resources/assets/refinedstorage/lang/ko_kr.json index ab27ce45f..e1d174fcd 100644 --- a/src/main/resources/assets/refinedstorage/lang/ko_kr.json +++ b/src/main/resources/assets/refinedstorage/lang/ko_kr.json @@ -123,6 +123,7 @@ "misc.refinedstorage.start": "시작", "misc.refinedstorage.clear": "초기화", "misc.refinedstorage.set": "설정", + "misc.refinedstorage.evaluate": "평가", "misc.refinedstorage.cancel_all": "모두 취소", "misc.refinedstorage.priority": "우선 순위", "misc.refinedstorage.exact": "정확성", diff --git a/src/main/resources/assets/refinedstorage/lang/nl_nl.json b/src/main/resources/assets/refinedstorage/lang/nl_nl.json index 8b8126491..a30d4cb1b 100644 --- a/src/main/resources/assets/refinedstorage/lang/nl_nl.json +++ b/src/main/resources/assets/refinedstorage/lang/nl_nl.json @@ -54,6 +54,8 @@ "misc.refinedstorage.start": "Start", "misc.refinedstorage.clear": "Legen", + "misc.refinedstorage.set": "Stel", + "misc.refinedstorage.evaluate": "Evalueer", "misc.refinedstorage.cancel_all": "Annuleer alles", "misc.refinedstorage.priority": "Prioriteit", diff --git a/src/main/resources/assets/refinedstorage/lang/pt_br.json b/src/main/resources/assets/refinedstorage/lang/pt_br.json index daffc681f..ebe83df84 100644 --- a/src/main/resources/assets/refinedstorage/lang/pt_br.json +++ b/src/main/resources/assets/refinedstorage/lang/pt_br.json @@ -85,6 +85,7 @@ "misc.refinedstorage.start": "Começar", "misc.refinedstorage.clear": "Limpar", "misc.refinedstorage.set": "Definir", + "misc.refinedstorage.evaluate": "Avalie", "misc.refinedstorage.cancel_all": "Cancelar tudo", "misc.refinedstorage.priority": "Prioridade", "misc.refinedstorage.processing": "Processamento", diff --git a/src/main/resources/assets/refinedstorage/lang/ru_ru.json b/src/main/resources/assets/refinedstorage/lang/ru_ru.json index d22e97860..391498fcb 100644 --- a/src/main/resources/assets/refinedstorage/lang/ru_ru.json +++ b/src/main/resources/assets/refinedstorage/lang/ru_ru.json @@ -125,6 +125,7 @@ "misc.refinedstorage.start": "Начать", "misc.refinedstorage.clear": "Очистить", "misc.refinedstorage.set": "Установить", + "misc.refinedstorage.evaluate": "Вычислить", "misc.refinedstorage.cancel_all": "Отменить все", "misc.refinedstorage.priority": "Приоритет", "misc.refinedstorage.exact": "Точно", From a218a8276bf206c4a5717c1399e0e320fd230553 Mon Sep 17 00:00:00 2001 From: ylou <1237500+ylou@users.noreply.github.com> Date: Sun, 13 Jun 2021 18:37:38 -0700 Subject: [PATCH 31/49] Add support for implicit multiply in equations --- .../util/EquationEvaluator.java | 73 ++++++++++++------- .../util/EquationEvaluatorTest.java | 13 ++++ 2 files changed, 58 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java b/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java index ab5081dab..ef5e59d85 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java @@ -6,6 +6,8 @@ import java.util.NoSuchElementException; import java.util.StringTokenizer; import java.util.function.Predicate; +import javax.annotation.Nullable; + /** * Implements evaluation for simple math expressions using the shunting yard * algorithm. @@ -13,47 +15,62 @@ import java.util.function.Predicate; public class EquationEvaluator { public static double evaluate(String input) { - StringTokenizer tokens = new StringTokenizer(input, "+-*/()", true); - Deque operators = new ArrayDeque<>(); - Deque operands = new ArrayDeque<>(); + final StringTokenizer tokens = new StringTokenizer(input, "+-*/()", true); + final Deque operators = new ArrayDeque<>(); + final Deque operands = new ArrayDeque<>(); String lastToken = null; while (tokens.hasMoreTokens()) { String rawToken = tokens.nextToken().trim(); if (rawToken.isEmpty()) continue; - - boolean isUnaryMinus = rawToken.equals("-") && (lastToken == null - || (!lastToken.equals("u") && isOperator(lastToken)) || lastToken.equals("(")); - final String token = isUnaryMinus ? "u" : rawToken; - if (isOperator(token)) { - popOperators(input, operators, operands, - top -> (!top.equals("(") && getPrecedence(token) <= getPrecedence(top))); - operators.push(token); - } else if (token.equals("(")) { - operators.push(token); - } else if (token.equals(")")) { - popOperators(input, operators, operands, top -> !top.equals("(")); - if (!operators.pop().equals("(")) { - throw new IllegalArgumentException("Unbalanced right parentheses in expression: " + input); - } - } else { - try { - operands.push(Double.parseDouble(token)); - } catch (NumberFormatException exception) { - throw new IllegalArgumentException("Could not evaluate expression: " + input); - } + if (isUnaryMinus(rawToken, lastToken)) { + rawToken = "u"; + } else if (isImplicitMultiply(rawToken, lastToken)) { + lastToken = processToken(input, "*", operators, operands); } - lastToken = token; + lastToken = processToken(input, rawToken, operators, operands); } popOperators(input, operators, operands, top -> true); return operands.pop(); } + private static boolean isUnaryMinus(String rawToken, @Nullable String lastToken) { + return rawToken.equals("-") + && (lastToken == null || (isOperator(lastToken) && !lastToken.equals("u")) || lastToken.equals("(")); + } + + private static boolean isImplicitMultiply(String rawToken, @Nullable String lastToken) { + return rawToken.equals("(") + && (lastToken != null && !isOperator(lastToken) && !lastToken.equals("(") && !lastToken.equals(")")); + } + + private static String processToken(String input, String token, Deque operators, Deque operands) { + if (isOperator(token)) { + popOperators(input, operators, operands, + top -> (!top.equals("(") && getPrecedence(token) <= getPrecedence(top))); + operators.push(token); + } else if (token.equals("(")) { + operators.push(token); + } else if (token.equals(")")) { + popOperators(input, operators, operands, top -> !top.equals("(")); + if (!operators.pop().equals("(")) { + throw new IllegalArgumentException("Unbalanced right parentheses in expression: " + input); + } + } else { + try { + operands.push(Double.parseDouble(token)); + } catch (NumberFormatException exception) { + throw new IllegalArgumentException("Could not parse double from:" + token); + } + } + return token; + } + private static void popOperators(String input, Deque operators, Deque operands, Predicate predicate) { try { while (!operators.isEmpty() && predicate.test(operators.peek())) { - String op = operators.pop(); + final String op = operators.pop(); if (op.equals("u")) { operands.push(-operands.pop()); continue; @@ -79,8 +96,8 @@ public class EquationEvaluator { throw new IllegalArgumentException("Unexpected arithmetic operation " + op); } - private static boolean isOperator(String op) { - switch (op) { + private static boolean isOperator(String token) { + switch (token) { case "+": case "-": case "*": diff --git a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java index 67f9f2295..4e6c6b538 100644 --- a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java +++ b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java @@ -61,4 +61,17 @@ class EquationEvaluatorTest { assertFuzzyEquals(1, EquationEvaluator.evaluate("1 - 2 + 3 * 4 / 6")); assertFuzzyEquals(4.0 / 3, EquationEvaluator.evaluate("(((1 - 2) + 3) * 4) / 6")); } + + @Test + void testDivideByZero() { + assertFuzzyEquals(Double.POSITIVE_INFINITY, EquationEvaluator.evaluate("1 / 0")); + assertFuzzyEquals(Double.POSITIVE_INFINITY, EquationEvaluator.evaluate("1 / (1 - 1)")); + } + + @Test + void testImplicitMultiply() { + assertFuzzyEquals(-2, EquationEvaluator.evaluate("2(3 + 6) - 5(6 - 2)")); + assertFuzzyEquals(1, EquationEvaluator.evaluate("6 / (2(4 - 1))")); + assertFuzzyEquals(6 * 5 * 4 * 3 * 2, EquationEvaluator.evaluate("6(5(4(3(2(1)))))")); + } } From b2f644156893d5415c69dea8b74105e44b20a289 Mon Sep 17 00:00:00 2001 From: mooofins <1237500+mooofins@users.noreply.github.com> Date: Sun, 24 Jul 2022 17:25:45 -0700 Subject: [PATCH 32/49] Add 1.18 port fixes --- .../screen/AmountSpecifyingScreen.java | 19 +++++++++---------- .../refinedstorage/screen/PriorityScreen.java | 2 +- .../screen/grid/CraftingSettingsScreen.java | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index cda1d0bd2..4ad031361 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -48,7 +48,7 @@ public abstract class AmountSpecifyingScreen ex } protected int parseAmount() { - return (int) Math.ceil(EquationEvaluator.evaluate(amountField.getText())); + return (int) Math.ceil(EquationEvaluator.evaluate(amountField.getValue())); } protected int clampAmount(int amount) { @@ -75,8 +75,8 @@ public abstract class AmountSpecifyingScreen ex return 20; } - public Button addActionButton(Pair absolutePos, int xOffset, int yOffset, ITextComponent text, - IPressable onPress) { + public Button addActionButton(Pair absolutePos, int xOffset, int yOffset, Component text, + Button.OnPress onPress) { return addButton(absolutePos.getLeft() + xOffset, absolutePos.getRight() + yOffset, getOkCancelButtonWidth(), getOkCancelButtonHeight(), text, true, true, onPress); } @@ -87,13 +87,12 @@ public abstract class AmountSpecifyingScreen ex Pair absolutePos = Pair.of(x + pos.getLeft(), y + pos.getRight()); okButton = addActionButton(absolutePos, 0, 0, getOkButtonText(), btn -> onOkButtonPressed(hasShiftDown())); - cancelButton = addActionButton(absolutePos, 0, 24, new TranslationTextComponent("gui.cancel"), btn -> close()); - evaluateButton = addActionButton(absolutePos, 0, 48, new TranslationTextComponent("misc.refinedstorage.evaluate"), + cancelButton = addActionButton(absolutePos, 0, 24, new TranslatableComponent("gui.cancel"), btn -> close()); + evaluateButton = addActionButton(absolutePos, 0, 48, new TranslatableComponent("misc.refinedstorage.evaluate"), btn -> onEvaluateButtonPressed(hasShiftDown())); - amountField = new TextFieldWidget(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, - font.FONT_HEIGHT, new StringTextComponent("")); - amountField.setEnableBackgroundDrawing(false); + amountField = new EditBox(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, font.lineHeight, new TextComponent("")); + amountField.setBordered(false); amountField.setVisible(true); amountField.setValue(String.valueOf(getDefaultAmount())); amountField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); @@ -178,7 +177,7 @@ public abstract class AmountSpecifyingScreen ex if (!canAmountGoNegative() && oldAmount == 1) { newAmount--; } - amountField.setText(String.valueOf(clampAmount(newAmount))); + amountField.setValue(String.valueOf(clampAmount(newAmount))); } catch (IllegalArgumentException e) { // NO OP } @@ -198,7 +197,7 @@ public abstract class AmountSpecifyingScreen ex private void onEvaluateButtonPressed(boolean shiftDown) { try { - amountField.setText(String.valueOf(clampAmount(parseAmount()))); + amountField.setValue(String.valueOf(clampAmount(parseAmount()))); } catch (IllegalArgumentException e) { // NO OP } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java index 3742d9786..1b47e9d88 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java @@ -67,7 +67,7 @@ public class PriorityScreen extends AmountSpecifyingScreen Date: Sun, 24 Jul 2022 18:06:31 -0700 Subject: [PATCH 33/49] Restore JUnit deps in build.gradle --- build.gradle | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build.gradle b/build.gradle index c7f85197f..6865e2c33 100755 --- a/build.gradle +++ b/build.gradle @@ -113,6 +113,16 @@ dependencies { runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.18.2-5.0.6.3") compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.18.2-5.0.6.3:api") + + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2' +} + +test { + useJUnitPlatform() + + testLogging { + events("passed", "skipped", "failed") + } } jar { From bdb51e0d21eecf08beb471c064af8f14597b2264 Mon Sep 17 00:00:00 2001 From: mooofins <1237500+mooofins@users.noreply.github.com> Date: Mon, 25 Jul 2022 01:01:11 -0700 Subject: [PATCH 34/49] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 410d27177..9c9e536c7 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Improved waterlogging to behave more like vanilla - Added Forge relocation and Packing Tape blacklist tag entries to prevent block movement - Requires JEI version 9.7.1 or higher +- Crafting requests can now take math equation inputs ## [v1.10.2] - 2022-03-26 From c66a17452c669228da6333f44e3af268e0163492 Mon Sep 17 00:00:00 2001 From: MelanX Date: Mon, 11 Apr 2022 20:33:16 +0200 Subject: [PATCH 35/49] fix integer overflow resulting in item lose --- .../apiimpl/storage/disk/FluidStorageDisk.java | 5 +++-- .../apiimpl/storage/disk/ItemStorageDisk.java | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java index c692e8d70..a3170a836 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java @@ -95,13 +95,14 @@ public class FluidStorageDisk implements IStorageDisk { return StackUtils.copy(otherStack, size - remainingSpace); } else { + int maxConsumable = Math.min(size, Integer.MAX_VALUE - otherStack.getAmount()); if (action == Action.PERFORM) { - otherStack.grow(size); + otherStack.grow(maxConsumable); onChanged(); } - return FluidStack.EMPTY; + return StackUtils.copy(otherStack, size - maxConsumable); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java index 27b30daa9..cea7e2326 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java @@ -102,14 +102,15 @@ public class ItemStorageDisk implements IStorageDisk { return ItemHandlerHelper.copyStackWithSize(otherStack, size - remainingSpace); } else { + int maxConsumable = Math.min(size, Integer.MAX_VALUE - otherStack.getCount()); if (action == Action.PERFORM) { - otherStack.grow(size); - itemCount += size; + otherStack.grow(maxConsumable); + itemCount += maxConsumable; onChanged(); } - return ItemStack.EMPTY; + return ItemHandlerHelper.copyStackWithSize(otherStack, size - maxConsumable); } } } From a8ddce28773101511d87f866f8b071dd4fa91a27 Mon Sep 17 00:00:00 2001 From: MelanX Date: Sun, 24 Jul 2022 09:47:36 +0200 Subject: [PATCH 36/49] add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c9e536c7..6363586c3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed Destructor dupe bug - Fixed being unable to insert items into the Storage Monitor - Fixed Storage Monitor not showing all matching items in non-exact mode +- Fixed integer overflow resulting in item lose ### Changed From d2e1c554b8028693de10826cd6ba35990873b376 Mon Sep 17 00:00:00 2001 From: MelanX Date: Sun, 24 Jul 2022 10:16:54 +0200 Subject: [PATCH 37/49] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6363586c3..18b323f9f 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed Destructor dupe bug - Fixed being unable to insert items into the Storage Monitor - Fixed Storage Monitor not showing all matching items in non-exact mode -- Fixed integer overflow resulting in item lose +- Fixed items getting lost on Creative Disk when more than 2,147,483,647 of one type is stored ### Changed From 384ea7415830444676e68dc6bd6f471804ea6e56 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Jul 2022 19:30:26 +0200 Subject: [PATCH 38/49] Cleanup changelog --- CHANGELOG.md | 13 ++++++++----- .../refinedstorage/lang/{it_IT.json => it_it.json} | 0 2 files changed, 8 insertions(+), 5 deletions(-) rename src/main/resources/assets/refinedstorage/lang/{it_IT.json => it_it.json} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18b323f9f..eebba01b8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,16 +13,19 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed being unable to insert items into the Storage Monitor - Fixed Storage Monitor not showing all matching items in non-exact mode - Fixed items getting lost on Creative Disk when more than 2,147,483,647 of one type is stored +- Fixed incorrect autocrafting keybind prompt on macOS ### Changed -- Improved Performance for grid updates -- Fixed incorrect autocrafting keybind prompt on macOS -- Added Japanese translations for certain autocrafting actions +- Improved performance for grid updates - Improved waterlogging to behave more like vanilla -- Added Forge relocation and Packing Tape blacklist tag entries to prevent block movement -- Requires JEI version 9.7.1 or higher +- JEI version 9.7.1 or higher is now required + +### Added + - Crafting requests can now take math equation inputs +- Forge relocation and Packing Tape blacklist tag entries to prevent block movement +- Japanese translations for certain autocrafting actions ## [v1.10.2] - 2022-03-26 diff --git a/src/main/resources/assets/refinedstorage/lang/it_IT.json b/src/main/resources/assets/refinedstorage/lang/it_it.json similarity index 100% rename from src/main/resources/assets/refinedstorage/lang/it_IT.json rename to src/main/resources/assets/refinedstorage/lang/it_it.json From c9c3b42b1635d00602f822856dcb777d93e87f0f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Jul 2022 19:47:25 +0200 Subject: [PATCH 39/49] Revert "Restore JUnit deps in build.gradle" This reverts commit 54caa37e828f0decc3fb0633ab9c141da46317e3. --- build.gradle | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/build.gradle b/build.gradle index 6865e2c33..c7f85197f 100755 --- a/build.gradle +++ b/build.gradle @@ -113,16 +113,6 @@ dependencies { runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.18.2-5.0.6.3") compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.18.2-5.0.6.3:api") - - testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2' -} - -test { - useJUnitPlatform() - - testLogging { - events("passed", "skipped", "failed") - } } jar { From 0afadf4decef7368d265d58cec610e60f403bf78 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Jul 2022 19:47:26 +0200 Subject: [PATCH 40/49] Revert "Add 1.18 port fixes" This reverts commit b2f644156893d5415c69dea8b74105e44b20a289. --- .../screen/AmountSpecifyingScreen.java | 19 ++++++++++--------- .../refinedstorage/screen/PriorityScreen.java | 2 +- .../screen/grid/CraftingSettingsScreen.java | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index 4ad031361..cda1d0bd2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -48,7 +48,7 @@ public abstract class AmountSpecifyingScreen ex } protected int parseAmount() { - return (int) Math.ceil(EquationEvaluator.evaluate(amountField.getValue())); + return (int) Math.ceil(EquationEvaluator.evaluate(amountField.getText())); } protected int clampAmount(int amount) { @@ -75,8 +75,8 @@ public abstract class AmountSpecifyingScreen ex return 20; } - public Button addActionButton(Pair absolutePos, int xOffset, int yOffset, Component text, - Button.OnPress onPress) { + public Button addActionButton(Pair absolutePos, int xOffset, int yOffset, ITextComponent text, + IPressable onPress) { return addButton(absolutePos.getLeft() + xOffset, absolutePos.getRight() + yOffset, getOkCancelButtonWidth(), getOkCancelButtonHeight(), text, true, true, onPress); } @@ -87,12 +87,13 @@ public abstract class AmountSpecifyingScreen ex Pair absolutePos = Pair.of(x + pos.getLeft(), y + pos.getRight()); okButton = addActionButton(absolutePos, 0, 0, getOkButtonText(), btn -> onOkButtonPressed(hasShiftDown())); - cancelButton = addActionButton(absolutePos, 0, 24, new TranslatableComponent("gui.cancel"), btn -> close()); - evaluateButton = addActionButton(absolutePos, 0, 48, new TranslatableComponent("misc.refinedstorage.evaluate"), + cancelButton = addActionButton(absolutePos, 0, 24, new TranslationTextComponent("gui.cancel"), btn -> close()); + evaluateButton = addActionButton(absolutePos, 0, 48, new TranslationTextComponent("misc.refinedstorage.evaluate"), btn -> onEvaluateButtonPressed(hasShiftDown())); - amountField = new EditBox(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, font.lineHeight, new TextComponent("")); - amountField.setBordered(false); + amountField = new TextFieldWidget(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, + font.FONT_HEIGHT, new StringTextComponent("")); + amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); amountField.setValue(String.valueOf(getDefaultAmount())); amountField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); @@ -177,7 +178,7 @@ public abstract class AmountSpecifyingScreen ex if (!canAmountGoNegative() && oldAmount == 1) { newAmount--; } - amountField.setValue(String.valueOf(clampAmount(newAmount))); + amountField.setText(String.valueOf(clampAmount(newAmount))); } catch (IllegalArgumentException e) { // NO OP } @@ -197,7 +198,7 @@ public abstract class AmountSpecifyingScreen ex private void onEvaluateButtonPressed(boolean shiftDown) { try { - amountField.setValue(String.valueOf(clampAmount(parseAmount()))); + amountField.setText(String.valueOf(clampAmount(parseAmount()))); } catch (IllegalArgumentException e) { // NO OP } diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java index 1b47e9d88..3742d9786 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/PriorityScreen.java @@ -67,7 +67,7 @@ public class PriorityScreen extends AmountSpecifyingScreen Date: Sat, 30 Jul 2022 19:47:27 +0200 Subject: [PATCH 41/49] Revert "Add support for implicit multiply in equations" This reverts commit a218a8276bf206c4a5717c1399e0e320fd230553. --- .../util/EquationEvaluator.java | 73 +++++++------------ .../util/EquationEvaluatorTest.java | 13 ---- 2 files changed, 28 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java b/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java index ef5e59d85..ab5081dab 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java @@ -6,8 +6,6 @@ import java.util.NoSuchElementException; import java.util.StringTokenizer; import java.util.function.Predicate; -import javax.annotation.Nullable; - /** * Implements evaluation for simple math expressions using the shunting yard * algorithm. @@ -15,62 +13,47 @@ import javax.annotation.Nullable; public class EquationEvaluator { public static double evaluate(String input) { - final StringTokenizer tokens = new StringTokenizer(input, "+-*/()", true); - final Deque operators = new ArrayDeque<>(); - final Deque operands = new ArrayDeque<>(); + StringTokenizer tokens = new StringTokenizer(input, "+-*/()", true); + Deque operators = new ArrayDeque<>(); + Deque operands = new ArrayDeque<>(); String lastToken = null; while (tokens.hasMoreTokens()) { String rawToken = tokens.nextToken().trim(); if (rawToken.isEmpty()) continue; - if (isUnaryMinus(rawToken, lastToken)) { - rawToken = "u"; - } else if (isImplicitMultiply(rawToken, lastToken)) { - lastToken = processToken(input, "*", operators, operands); + + boolean isUnaryMinus = rawToken.equals("-") && (lastToken == null + || (!lastToken.equals("u") && isOperator(lastToken)) || lastToken.equals("(")); + final String token = isUnaryMinus ? "u" : rawToken; + if (isOperator(token)) { + popOperators(input, operators, operands, + top -> (!top.equals("(") && getPrecedence(token) <= getPrecedence(top))); + operators.push(token); + } else if (token.equals("(")) { + operators.push(token); + } else if (token.equals(")")) { + popOperators(input, operators, operands, top -> !top.equals("(")); + if (!operators.pop().equals("(")) { + throw new IllegalArgumentException("Unbalanced right parentheses in expression: " + input); + } + } else { + try { + operands.push(Double.parseDouble(token)); + } catch (NumberFormatException exception) { + throw new IllegalArgumentException("Could not evaluate expression: " + input); + } } - lastToken = processToken(input, rawToken, operators, operands); + lastToken = token; } popOperators(input, operators, operands, top -> true); return operands.pop(); } - private static boolean isUnaryMinus(String rawToken, @Nullable String lastToken) { - return rawToken.equals("-") - && (lastToken == null || (isOperator(lastToken) && !lastToken.equals("u")) || lastToken.equals("(")); - } - - private static boolean isImplicitMultiply(String rawToken, @Nullable String lastToken) { - return rawToken.equals("(") - && (lastToken != null && !isOperator(lastToken) && !lastToken.equals("(") && !lastToken.equals(")")); - } - - private static String processToken(String input, String token, Deque operators, Deque operands) { - if (isOperator(token)) { - popOperators(input, operators, operands, - top -> (!top.equals("(") && getPrecedence(token) <= getPrecedence(top))); - operators.push(token); - } else if (token.equals("(")) { - operators.push(token); - } else if (token.equals(")")) { - popOperators(input, operators, operands, top -> !top.equals("(")); - if (!operators.pop().equals("(")) { - throw new IllegalArgumentException("Unbalanced right parentheses in expression: " + input); - } - } else { - try { - operands.push(Double.parseDouble(token)); - } catch (NumberFormatException exception) { - throw new IllegalArgumentException("Could not parse double from:" + token); - } - } - return token; - } - private static void popOperators(String input, Deque operators, Deque operands, Predicate predicate) { try { while (!operators.isEmpty() && predicate.test(operators.peek())) { - final String op = operators.pop(); + String op = operators.pop(); if (op.equals("u")) { operands.push(-operands.pop()); continue; @@ -96,8 +79,8 @@ public class EquationEvaluator { throw new IllegalArgumentException("Unexpected arithmetic operation " + op); } - private static boolean isOperator(String token) { - switch (token) { + private static boolean isOperator(String op) { + switch (op) { case "+": case "-": case "*": diff --git a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java index 4e6c6b538..67f9f2295 100644 --- a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java +++ b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java @@ -61,17 +61,4 @@ class EquationEvaluatorTest { assertFuzzyEquals(1, EquationEvaluator.evaluate("1 - 2 + 3 * 4 / 6")); assertFuzzyEquals(4.0 / 3, EquationEvaluator.evaluate("(((1 - 2) + 3) * 4) / 6")); } - - @Test - void testDivideByZero() { - assertFuzzyEquals(Double.POSITIVE_INFINITY, EquationEvaluator.evaluate("1 / 0")); - assertFuzzyEquals(Double.POSITIVE_INFINITY, EquationEvaluator.evaluate("1 / (1 - 1)")); - } - - @Test - void testImplicitMultiply() { - assertFuzzyEquals(-2, EquationEvaluator.evaluate("2(3 + 6) - 5(6 - 2)")); - assertFuzzyEquals(1, EquationEvaluator.evaluate("6 / (2(4 - 1))")); - assertFuzzyEquals(6 * 5 * 4 * 3 * 2, EquationEvaluator.evaluate("6(5(4(3(2(1)))))")); - } } From 51bbb68dbc5eac0861d98c2acb32b13525e698f0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Jul 2022 19:47:28 +0200 Subject: [PATCH 42/49] Revert "Attempt translations for evaluate in other langs" This reverts commit 4e8dcc4fe48f3e2fb07843f6e941bb37e23e0dad. --- src/main/resources/assets/refinedstorage/lang/de_de.json | 1 - src/main/resources/assets/refinedstorage/lang/es_es.json | 1 - src/main/resources/assets/refinedstorage/lang/ja_jp.json | 1 - src/main/resources/assets/refinedstorage/lang/ko_kr.json | 1 - src/main/resources/assets/refinedstorage/lang/nl_nl.json | 2 -- src/main/resources/assets/refinedstorage/lang/pt_br.json | 1 - src/main/resources/assets/refinedstorage/lang/ru_ru.json | 1 - 7 files changed, 8 deletions(-) diff --git a/src/main/resources/assets/refinedstorage/lang/de_de.json b/src/main/resources/assets/refinedstorage/lang/de_de.json index 55a2f52cd..d184979aa 100644 --- a/src/main/resources/assets/refinedstorage/lang/de_de.json +++ b/src/main/resources/assets/refinedstorage/lang/de_de.json @@ -105,7 +105,6 @@ "misc.refinedstorage.start": "Start", "misc.refinedstorage.clear": "Löschen", "misc.refinedstorage.set": "Setzen", - "misc.refinedstorage.evaluate": "Auswerten", "misc.refinedstorage.cancel_all": "Alles Anhalten", "misc.refinedstorage.priority": "Priorität", "misc.refinedstorage.processing": "Verarbeitung", diff --git a/src/main/resources/assets/refinedstorage/lang/es_es.json b/src/main/resources/assets/refinedstorage/lang/es_es.json index bc9620e8d..b3cf2c137 100644 --- a/src/main/resources/assets/refinedstorage/lang/es_es.json +++ b/src/main/resources/assets/refinedstorage/lang/es_es.json @@ -90,7 +90,6 @@ "misc.refinedstorage.start": "Empezar", "misc.refinedstorage.clear": "Limpiar", "misc.refinedstorage.set": "Poner", - "misc.refinedstorage.evaluate": "Evaluar", "misc.refinedstorage.cancel_all": "Cancelar todo", "misc.refinedstorage.priority": "Prioridad", "misc.refinedstorage.processing": "Procesándose", diff --git a/src/main/resources/assets/refinedstorage/lang/ja_jp.json b/src/main/resources/assets/refinedstorage/lang/ja_jp.json index 88a85eadb..02667b22f 100644 --- a/src/main/resources/assets/refinedstorage/lang/ja_jp.json +++ b/src/main/resources/assets/refinedstorage/lang/ja_jp.json @@ -127,7 +127,6 @@ "misc.refinedstorage.start": "開始", "misc.refinedstorage.clear": "クリア", "misc.refinedstorage.set": "完了", - "misc.refinedstorage.evaluate": "を評価", "misc.refinedstorage.cancel_all": "全てキャンセル", "misc.refinedstorage.priority": "優先度", "misc.refinedstorage.exact": "精密モード", diff --git a/src/main/resources/assets/refinedstorage/lang/ko_kr.json b/src/main/resources/assets/refinedstorage/lang/ko_kr.json index e1d174fcd..ab27ce45f 100644 --- a/src/main/resources/assets/refinedstorage/lang/ko_kr.json +++ b/src/main/resources/assets/refinedstorage/lang/ko_kr.json @@ -123,7 +123,6 @@ "misc.refinedstorage.start": "시작", "misc.refinedstorage.clear": "초기화", "misc.refinedstorage.set": "설정", - "misc.refinedstorage.evaluate": "평가", "misc.refinedstorage.cancel_all": "모두 취소", "misc.refinedstorage.priority": "우선 순위", "misc.refinedstorage.exact": "정확성", diff --git a/src/main/resources/assets/refinedstorage/lang/nl_nl.json b/src/main/resources/assets/refinedstorage/lang/nl_nl.json index a30d4cb1b..8b8126491 100644 --- a/src/main/resources/assets/refinedstorage/lang/nl_nl.json +++ b/src/main/resources/assets/refinedstorage/lang/nl_nl.json @@ -54,8 +54,6 @@ "misc.refinedstorage.start": "Start", "misc.refinedstorage.clear": "Legen", - "misc.refinedstorage.set": "Stel", - "misc.refinedstorage.evaluate": "Evalueer", "misc.refinedstorage.cancel_all": "Annuleer alles", "misc.refinedstorage.priority": "Prioriteit", diff --git a/src/main/resources/assets/refinedstorage/lang/pt_br.json b/src/main/resources/assets/refinedstorage/lang/pt_br.json index ebe83df84..daffc681f 100644 --- a/src/main/resources/assets/refinedstorage/lang/pt_br.json +++ b/src/main/resources/assets/refinedstorage/lang/pt_br.json @@ -85,7 +85,6 @@ "misc.refinedstorage.start": "Começar", "misc.refinedstorage.clear": "Limpar", "misc.refinedstorage.set": "Definir", - "misc.refinedstorage.evaluate": "Avalie", "misc.refinedstorage.cancel_all": "Cancelar tudo", "misc.refinedstorage.priority": "Prioridade", "misc.refinedstorage.processing": "Processamento", diff --git a/src/main/resources/assets/refinedstorage/lang/ru_ru.json b/src/main/resources/assets/refinedstorage/lang/ru_ru.json index 391498fcb..d22e97860 100644 --- a/src/main/resources/assets/refinedstorage/lang/ru_ru.json +++ b/src/main/resources/assets/refinedstorage/lang/ru_ru.json @@ -125,7 +125,6 @@ "misc.refinedstorage.start": "Начать", "misc.refinedstorage.clear": "Очистить", "misc.refinedstorage.set": "Установить", - "misc.refinedstorage.evaluate": "Вычислить", "misc.refinedstorage.cancel_all": "Отменить все", "misc.refinedstorage.priority": "Приоритет", "misc.refinedstorage.exact": "Точно", From 183b423bbb22e3a170c5545942648b34b4cae458 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Jul 2022 19:47:29 +0200 Subject: [PATCH 43/49] Revert "Add an evaluate button for equation inputs" This reverts commit d976cbe8b9e8b5c9377200ff1aad984ec6891653. --- .../screen/AmountSpecifyingScreen.java | 39 ++++--------------- .../screen/FluidAmountScreen.java | 2 +- .../screen/ItemAmountScreen.java | 2 +- .../assets/refinedstorage/lang/en_us.json | 1 - .../assets/refinedstorage/lang/fr_fr.json | 1 - .../assets/refinedstorage/lang/zh_cn.json | 1 - .../assets/refinedstorage/lang/zh_tw.json | 1 - 7 files changed, 10 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index cda1d0bd2..eb0a64874 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -20,7 +20,6 @@ public abstract class AmountSpecifyingScreen ex protected EditBox amountField; protected Button okButton; protected Button cancelButton; - protected Button evaluateButton; protected AmountSpecifyingScreen(BaseScreen parent, T container, int width, int height, Inventory playerInventory, Component title) { super(container, width, height, playerInventory, title); @@ -64,36 +63,22 @@ public abstract class AmountSpecifyingScreen ex } protected Pair getOkCancelPos() { - return Pair.of(114, 20); + return Pair.of(114, 33); } protected int getOkCancelButtonWidth() { return 50; } - protected int getOkCancelButtonHeight() { - return 20; - } - - public Button addActionButton(Pair absolutePos, int xOffset, int yOffset, ITextComponent text, - IPressable onPress) { - return addButton(absolutePos.getLeft() + xOffset, absolutePos.getRight() + yOffset, getOkCancelButtonWidth(), - getOkCancelButtonHeight(), text, true, true, onPress); - } - @Override public void onPostInit(int x, int y) { Pair pos = getOkCancelPos(); - Pair absolutePos = Pair.of(x + pos.getLeft(), y + pos.getRight()); - okButton = addActionButton(absolutePos, 0, 0, getOkButtonText(), btn -> onOkButtonPressed(hasShiftDown())); - cancelButton = addActionButton(absolutePos, 0, 24, new TranslationTextComponent("gui.cancel"), btn -> close()); - evaluateButton = addActionButton(absolutePos, 0, 48, new TranslationTextComponent("misc.refinedstorage.evaluate"), - btn -> onEvaluateButtonPressed(hasShiftDown())); + okButton = addButton(x + pos.getLeft(), y + pos.getRight(), getOkCancelButtonWidth(), 20, getOkButtonText(), true, true, btn -> onOkButtonPressed(hasShiftDown())); + cancelButton = addButton(x + pos.getLeft(), y + pos.getRight() + 24, getOkCancelButtonWidth(), 20, new TranslatableComponent("gui.cancel"), true, true, btn -> close()); - amountField = new TextFieldWidget(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, - font.FONT_HEIGHT, new StringTextComponent("")); - amountField.setEnableBackgroundDrawing(false); + amountField = new EditBox(font, x + getAmountPos().getLeft(), y + getAmountPos().getRight(), 69 - 6, font.lineHeight, new TextComponent("")); + amountField.setBordered(false); amountField.setVisible(true); amountField.setValue(String.valueOf(getDefaultAmount())); amountField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); @@ -188,7 +173,7 @@ public abstract class AmountSpecifyingScreen ex try { int amount = parseAmount(); if (isAmountInBounds(amount)) { - onValidAmountSaved(shiftDown, amount); + onValidAmountSave(shiftDown, amount); close(); } } catch (IllegalArgumentException e) { @@ -196,16 +181,7 @@ public abstract class AmountSpecifyingScreen ex } } - private void onEvaluateButtonPressed(boolean shiftDown) { - try { - amountField.setText(String.valueOf(clampAmount(parseAmount()))); - } catch (IllegalArgumentException e) { - // NO OP - } - } - - protected void onValidAmountSaved(boolean shiftDown, int amount) { - } + protected void onValidAmountSave(boolean shiftDown, int amount) {} @Override public void tick(int x, int y) { @@ -226,6 +202,7 @@ public abstract class AmountSpecifyingScreen ex renderString(poseStack, 7, 7, title.getString()); } + @Override public boolean mouseScrolled(double x, double y, double delta) { if (delta > 0) { diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java index f985d5bdc..ac84365ad 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java @@ -87,7 +87,7 @@ public class FluidAmountScreen extends AmountSpecifyingScreen Date: Sat, 30 Jul 2022 19:47:31 +0200 Subject: [PATCH 44/49] Revert "Allow simple math input in AmountSpecifyingScreen" This reverts commit 99235c7014367c2dff27960c58368cdd82fff8a9. --- .../screen/AmountSpecifyingScreen.java | 58 ++++------ .../screen/FluidAmountScreen.java | 12 +- .../screen/ItemAmountScreen.java | 12 +- .../refinedstorage/screen/PriorityScreen.java | 12 +- .../screen/grid/CraftingSettingsScreen.java | 12 +- .../util/EquationEvaluator.java | 107 ------------------ .../util/EquationEvaluatorTest.java | 64 ----------- 7 files changed, 58 insertions(+), 219 deletions(-) delete mode 100644 src/main/java/com/refinedmods/refinedstorage/util/EquationEvaluator.java delete mode 100644 src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java index eb0a64874..926f519ba 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/AmountSpecifyingScreen.java @@ -3,7 +3,6 @@ package com.refinedmods.refinedstorage.screen; import com.mojang.blaze3d.vertex.PoseStack; import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.render.RenderSettings; -import com.refinedmods.refinedstorage.util.EquationEvaluator; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; import net.minecraft.network.chat.Component; @@ -39,25 +38,6 @@ public abstract class AmountSpecifyingScreen ex protected abstract int getMaxAmount(); - protected int getMinAmount() { - if (canAmountGoNegative()) { - return -getMaxAmount(); - } - return 1; - } - - protected int parseAmount() { - return (int) Math.ceil(EquationEvaluator.evaluate(amountField.getText())); - } - - protected int clampAmount(int amount) { - return Math.max(getMinAmount(), Math.min(getMaxAmount(), amount)); - } - - protected boolean isAmountInBounds(int amount) { - return getMinAmount() <= amount && amount <= getMaxAmount(); - } - protected Pair getAmountPos() { return Pair.of(7 + 2, 50 + 1); } @@ -157,31 +137,28 @@ public abstract class AmountSpecifyingScreen ex } private void onIncrementButtonClicked(int increment) { + int oldAmount = 0; + try { - int oldAmount = parseAmount(); - int newAmount = oldAmount + increment; - if (!canAmountGoNegative() && oldAmount == 1) { - newAmount--; - } - amountField.setText(String.valueOf(clampAmount(newAmount))); - } catch (IllegalArgumentException e) { + oldAmount = Integer.parseInt(amountField.getValue()); + } catch (NumberFormatException e) { // NO OP } - } - private void onOkButtonPressed(boolean shiftDown) { - try { - int amount = parseAmount(); - if (isAmountInBounds(amount)) { - onValidAmountSave(shiftDown, amount); - close(); - } - } catch (IllegalArgumentException e) { - // NO OP + int newAmount = increment; + + if (!canAmountGoNegative()) { + newAmount = Math.max(1, ((oldAmount == 1 && newAmount != 1) ? 0 : oldAmount) + newAmount); + } else { + newAmount = oldAmount + newAmount; } - } - protected void onValidAmountSave(boolean shiftDown, int amount) {} + if (newAmount > getMaxAmount()) { + newAmount = getMaxAmount(); + } + + amountField.setValue(String.valueOf(newAmount)); + } @Override public void tick(int x, int y) { @@ -202,6 +179,9 @@ public abstract class AmountSpecifyingScreen ex renderString(poseStack, 7, 7, title.getString()); } + protected void onOkButtonPressed(boolean shiftDown) { + // NO OP + } @Override public boolean mouseScrolled(double x, double y, double delta) { diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java index ac84365ad..e41ef0639 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/FluidAmountScreen.java @@ -87,7 +87,15 @@ public class FluidAmountScreen extends AmountSpecifyingScreen operators = new ArrayDeque<>(); - Deque operands = new ArrayDeque<>(); - String lastToken = null; - while (tokens.hasMoreTokens()) { - String rawToken = tokens.nextToken().trim(); - if (rawToken.isEmpty()) - continue; - - boolean isUnaryMinus = rawToken.equals("-") && (lastToken == null - || (!lastToken.equals("u") && isOperator(lastToken)) || lastToken.equals("(")); - final String token = isUnaryMinus ? "u" : rawToken; - if (isOperator(token)) { - popOperators(input, operators, operands, - top -> (!top.equals("(") && getPrecedence(token) <= getPrecedence(top))); - operators.push(token); - } else if (token.equals("(")) { - operators.push(token); - } else if (token.equals(")")) { - popOperators(input, operators, operands, top -> !top.equals("(")); - if (!operators.pop().equals("(")) { - throw new IllegalArgumentException("Unbalanced right parentheses in expression: " + input); - } - } else { - try { - operands.push(Double.parseDouble(token)); - } catch (NumberFormatException exception) { - throw new IllegalArgumentException("Could not evaluate expression: " + input); - } - } - lastToken = token; - } - popOperators(input, operators, operands, top -> true); - return operands.pop(); - } - - private static void popOperators(String input, Deque operators, Deque operands, - Predicate predicate) { - try { - while (!operators.isEmpty() && predicate.test(operators.peek())) { - String op = operators.pop(); - if (op.equals("u")) { - operands.push(-operands.pop()); - continue; - } - operands.push(evaluateExpression(op, operands.pop(), operands.pop())); - } - } catch (NoSuchElementException exception) { - throw new IllegalArgumentException("Missing operand in expression: " + input); - } - } - - private static double evaluateExpression(String op, double b, double a) { - switch (op) { - case "+": - return a + b; - case "-": - return a - b; - case "*": - return a * b; - case "/": - return a / b; - } - throw new IllegalArgumentException("Unexpected arithmetic operation " + op); - } - - private static boolean isOperator(String op) { - switch (op) { - case "+": - case "-": - case "*": - case "/": - case "u": - return true; - } - return false; - } - - private static int getPrecedence(String op) { - switch (op) { - case "+": - case "-": - return 0; - case "*": - case "/": - return 1; - case "u": - return 2; - } - return -1; - } -} diff --git a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java b/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java deleted file mode 100644 index 67f9f2295..000000000 --- a/src/test/java/com/refinedmods/refinedstorage/util/EquationEvaluatorTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.refinedmods.refinedstorage.util; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import org.junit.jupiter.api.Test; - -class EquationEvaluatorTest { - - private void assertFuzzyEquals(double expected, double actual) { - assertEquals(expected, actual, 0.001D); - } - - @Test - void testConstants() { - assertFuzzyEquals(1, EquationEvaluator.evaluate("1")); - assertFuzzyEquals(122, EquationEvaluator.evaluate("122")); - assertFuzzyEquals(4.2, EquationEvaluator.evaluate("4.20")); - } - - @Test - void testNegativeConstants() { - assertFuzzyEquals(-1, EquationEvaluator.evaluate("-1")); - assertFuzzyEquals(-2.5, EquationEvaluator.evaluate("-2.5")); - } - - @Test - void testBasicOperations() { - assertFuzzyEquals(2, EquationEvaluator.evaluate("1+1")); - assertFuzzyEquals(1, EquationEvaluator.evaluate("3 - 2")); - assertFuzzyEquals(6, EquationEvaluator.evaluate("2*3")); - assertFuzzyEquals(2, EquationEvaluator.evaluate("6 / 3")); - assertFuzzyEquals(-2, EquationEvaluator.evaluate("2-4")); - - assertFuzzyEquals(32, EquationEvaluator.evaluate("64 + -4 * 8")); - assertFuzzyEquals(8, EquationEvaluator.evaluate("16 + -4 + -4")); - } - - @Test - void testInvalidInput() { - assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("hello")); - assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("1 / (")); - assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("1+-*/")); - assertThrows(IllegalArgumentException.class, () -> EquationEvaluator.evaluate("----1")); - } - - @Test - void testWhitespace() { - assertFuzzyEquals(2, EquationEvaluator.evaluate(" 1 + 1")); - assertFuzzyEquals(1, EquationEvaluator.evaluate(" 3 - 2 ")); - } - - @Test - void testParentheses() { - assertFuzzyEquals(42, EquationEvaluator.evaluate("10 + 8*(2 + 2)")); - assertFuzzyEquals(20, EquationEvaluator.evaluate("5 * ((1 + 1) * 2)")); - } - - @Test - void testOrderOfOperations() { - assertFuzzyEquals(1, EquationEvaluator.evaluate("1 - 2 + 3 * 4 / 6")); - assertFuzzyEquals(4.0 / 3, EquationEvaluator.evaluate("(((1 - 2) + 3) * 4) / 6")); - } -} From 054e650b5a0b8139afe84c85db10f4ae390a2d37 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Jul 2022 19:48:22 +0200 Subject: [PATCH 45/49] Update changelog after revert --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eebba01b8..79ab1dea2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,6 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added -- Crafting requests can now take math equation inputs - Forge relocation and Packing Tape blacklist tag entries to prevent block movement - Japanese translations for certain autocrafting actions From a0c31f6f336800832a63e316f79ea6999feb1baf Mon Sep 17 00:00:00 2001 From: Darkere Date: Sat, 30 Jul 2022 20:21:42 +0200 Subject: [PATCH 46/49] fix recipe highlighting position --- .../integration/jei/RecipeTransferCraftingGridError.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java index e01355377..a2342268c 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/RecipeTransferCraftingGridError.java @@ -30,6 +30,7 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError { @Override public void showError(PoseStack poseStack, int mouseX, int mouseY, IRecipeSlotsView recipeSlotsView, int recipeX, int recipeY) { + poseStack.translate(recipeX, recipeY, 0); List message = drawIngredientHighlights(poseStack, recipeX, recipeY); Screen currentScreen = Minecraft.getInstance().screen; From 885d46c7b9844096ebd8ae6af0874fbb5764d534 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 6 Aug 2022 16:42:32 +0200 Subject: [PATCH 47/49] Fixed crashing the game when a network block was removed in a bad way. Fixes #3326 --- CHANGELOG.md | 1 + .../blockentity/NetworkNodeBlockEntity.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79ab1dea2..df2fc975d 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed Storage Monitor not showing all matching items in non-exact mode - Fixed items getting lost on Creative Disk when more than 2,147,483,647 of one type is stored - Fixed incorrect autocrafting keybind prompt on macOS +- Fixed crashing the game when a network block was removed in a bad way ### Changed diff --git a/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java b/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java index 207c21a2c..b81292352 100644 --- a/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java +++ b/src/main/java/com/refinedmods/refinedstorage/blockentity/NetworkNodeBlockEntity.java @@ -6,10 +6,10 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNodeProxy; import com.refinedmods.refinedstorage.api.util.Action; import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.network.node.NetworkNode; -import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability; import com.refinedmods.refinedstorage.blockentity.config.IRedstoneConfigurable; import com.refinedmods.refinedstorage.blockentity.config.RedstoneMode; import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; +import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -18,6 +18,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -28,6 +30,8 @@ public abstract class NetworkNodeBlockEntity extends Base private N clientNode; private N removedNode; + private static final Logger LOGGER = LogManager.getLogger(); + protected NetworkNodeBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { super(type, pos, state); @@ -61,7 +65,10 @@ public abstract class NetworkNodeBlockEntity extends Base INetworkNode node = manager.getNode(worldPosition); if (node == null) { - throw new IllegalStateException("No network node present at " + worldPosition.toString() + ", consider removing the block at this position"); + LOGGER.warn("Expected a node @ {} but couldn't find it, creating a new one...", worldPosition); + node = createNode(level, worldPosition); + manager.setNode(worldPosition, node); + manager.markForSaving(); } return (N) node; From 402f5ef49199b97a68d2c77cc0518baca9c9b68f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 6 Aug 2022 17:00:31 +0200 Subject: [PATCH 48/49] Fixed constructor dupe bug with shulker boxes. Fixes #3343 and #3329 --- CHANGELOG.md | 1 + .../apiimpl/network/node/ConstructorNetworkNode.java | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df2fc975d..702eb8bb0 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed items getting lost on Creative Disk when more than 2,147,483,647 of one type is stored - Fixed incorrect autocrafting keybind prompt on macOS - Fixed crashing the game when a network block was removed in a bad way +- Fixed duplication bug with Constructors and Shulker Boxes ### Changed diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java index cbd443502..36dcfbfa6 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/ConstructorNetworkNode.java @@ -14,8 +14,8 @@ import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener; import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener; import com.refinedmods.refinedstorage.item.UpgradeItem; -import com.refinedmods.refinedstorage.util.StackUtils; import com.refinedmods.refinedstorage.util.LevelUtils; +import com.refinedmods.refinedstorage.util.StackUtils; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.PositionImpl; @@ -112,6 +112,8 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable, private void extractAndPlaceBlock(ItemStack stack) { ItemStack took = network.extractItem(stack, 1, compare, Action.SIMULATE); if (!took.isEmpty()) { + // We have to copy took as the forge hook clears the item. + final ItemStack tookCopy = took.copy(); BlockPlaceContext ctx = new ConstructorBlockItemUseContext( level, LevelUtils.getFakePlayer((ServerLevel) level, getOwner()), @@ -122,7 +124,7 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable, InteractionResult result = ForgeHooks.onPlaceItemIntoWorld(ctx); if (result.consumesAction()) { - network.extractItem(stack, 1, Action.PERFORM); + network.extractItem(tookCopy, 1, Action.PERFORM); } } else if (upgrades.hasUpgrade(UpgradeItem.Type.CRAFTING)) { ItemStack craft = itemFilters.getStackInSlot(0); From bebeaad0ccb33ab072b725c56fd768649bf476e9 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 6 Aug 2022 17:29:56 +0200 Subject: [PATCH 49/49] Fixed breaking blocks with pickaxe taking too much time. --- CHANGELOG.md | 1 + .../java/com/refinedmods/refinedstorage/util/BlockUtils.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 702eb8bb0..c4faa0055 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Fixed incorrect autocrafting keybind prompt on macOS - Fixed crashing the game when a network block was removed in a bad way - Fixed duplication bug with Constructors and Shulker Boxes +- Fixed breaking blocks with pickaxe taking too much time ### Changed diff --git a/src/main/java/com/refinedmods/refinedstorage/util/BlockUtils.java b/src/main/java/com/refinedmods/refinedstorage/util/BlockUtils.java index 13f78c796..35fb200e7 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/BlockUtils.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/BlockUtils.java @@ -8,7 +8,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.Material; public final class BlockUtils { - public static final BlockBehaviour.Properties DEFAULT_ROCK_PROPERTIES = BlockBehaviour.Properties.of(Material.STONE).strength(1.9F).sound(SoundType.STONE); + public static final BlockBehaviour.Properties DEFAULT_ROCK_PROPERTIES = BlockBehaviour.Properties.of(Material.STONE).strength(0.5F, 6.0F).sound(SoundType.STONE); public static final BlockBehaviour.Properties DEFAULT_GLASS_PROPERTIES = BlockBehaviour.Properties.of(Material.GLASS).sound(SoundType.GLASS).strength(0.35F); private BlockUtils() {