From a088b5b25804f0350d606b63fa5c055f2ec6566f Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sat, 1 Mar 2025 22:00:19 +0100 Subject: [PATCH 1/3] Patch production - Remove killtps command, it should not be available in built jars - Added a tooltip for the stock keeper address input - Fixed crash when re-packaging a duplicated package fragment #7456 - Fixed crash when ctrl-click copying a gauge #7431 - Safety check for unexpected string modifications in address edit boxes #7409 --- .../factoryBoard/FactoryPanelBlock.java | 10 +++--- .../factoryBoard/FactoryPanelBlockEntity.java | 3 +- .../factoryBoard/FactoryPanelBlockItem.java | 34 +++++++++++++++++++ .../packager/PackageDefragmenter.java | 3 +- .../stockTicker/StockKeeperRequestScreen.java | 23 +++++++++++-- .../schedule/DestinationSuggestions.java | 3 ++ .../infrastructure/command/AllCommands.java | 2 +- 7 files changed, 67 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java index dbcd2f78d7..a88149fe68 100644 --- a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlock.java @@ -122,16 +122,16 @@ public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock if (blockState.is(this) && location != null && fpbe != null) { if (!level.isClientSide()) { PanelSlot targetedSlot = getTargetedSlot(pos, blockState, location); - UUID networkFromStack = LogisticallyLinkedBlockItem.networkFromStack(pContext.getItemInHand()); + ItemStack panelItem = FactoryPanelBlockItem.fixCtrlCopiedStack(pContext.getItemInHand()); + UUID networkFromStack = LogisticallyLinkedBlockItem.networkFromStack(panelItem); Player pPlayer = pContext.getPlayer(); if (fpbe.addPanel(targetedSlot, networkFromStack) && pPlayer != null) { pPlayer.displayClientMessage(CreateLang.translateDirect("logistically_linked.connected"), true); if (!pPlayer.isCreative()) { - ItemStack item = pContext.getItemInHand(); - item.shrink(1); - if (item.isEmpty()) + panelItem.shrink(1); + if (panelItem.isEmpty()) pPlayer.setItemInHand(pContext.getHand(), ItemStack.EMPTY); } } @@ -217,7 +217,7 @@ public class FactoryPanelBlock extends FaceAttachedHorizontalDirectionalBlock PanelSlot newSlot = getTargetedSlot(pPos, pState, location); withBlockEntityDo(pLevel, pPos, fpbe -> { - if (!fpbe.addPanel(newSlot, LogisticallyLinkedBlockItem.networkFromStack(item))) + if (!fpbe.addPanel(newSlot, LogisticallyLinkedBlockItem.networkFromStack(FactoryPanelBlockItem.fixCtrlCopiedStack(item)))) return; pPlayer.displayClientMessage(CreateLang.translateDirect("logistically_linked.connected"), true); pLevel.playSound(null, pPos, soundType.getPlaceSound(), SoundSource.BLOCKS); diff --git a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockEntity.java index 64a5249ac8..104ca18fd2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockEntity.java @@ -133,7 +133,8 @@ public class FactoryPanelBlockEntity extends SmartBlockEntity { FactoryPanelBehaviour behaviour = panels.get(slot); if (behaviour != null && !behaviour.isActive()) { behaviour.enable(); - behaviour.setNetwork(frequency); + if (frequency != null) + behaviour.setNetwork(frequency); redraw = true; lastShape = null; diff --git a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockItem.java b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockItem.java index 83277f542a..105a6f57ec 100644 --- a/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/factoryBoard/FactoryPanelBlockItem.java @@ -1,13 +1,21 @@ package com.simibubi.create.content.logistics.factoryBoard; +import java.util.UUID; + import com.simibubi.create.AllSoundEvents; +import com.simibubi.create.content.logistics.factoryBoard.FactoryPanelBlock.PanelSlot; import com.simibubi.create.content.logistics.packagerLink.LogisticallyLinkedBlockItem; import com.simibubi.create.foundation.utility.CreateLang; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class FactoryPanelBlockItem extends LogisticallyLinkedBlockItem { @@ -29,5 +37,31 @@ public class FactoryPanelBlockItem extends LogisticallyLinkedBlockItem { return super.place(pContext); } + + @Override + protected boolean updateCustomBlockEntityTag(BlockPos pos, Level level, Player player, ItemStack stack, + BlockState state) { + return super.updateCustomBlockEntityTag(pos, level, player, fixCtrlCopiedStack(stack), state); + } + + public static ItemStack fixCtrlCopiedStack(ItemStack stack) { + // Salvage frequency data from one of the panel slots + if (isTuned(stack) && networkFromStack(stack) == null) { + CompoundTag bet = stack.getTagElement(BLOCK_ENTITY_TAG); + UUID frequency = UUID.randomUUID(); + + for (PanelSlot slot : PanelSlot.values()) { + CompoundTag panelTag = bet.getCompound(CreateLang.asId(slot.name())); + if (panelTag.hasUUID("Freq")) + frequency = panelTag.getUUID("Freq"); + } + + bet = new CompoundTag(); + bet.putUUID("Freq", frequency); + stack.getTag().put(BLOCK_ENTITY_TAG, bet); + } + + return stack; + } } diff --git a/src/main/java/com/simibubi/create/content/logistics/packager/PackageDefragmenter.java b/src/main/java/com/simibubi/create/content/logistics/packager/PackageDefragmenter.java index 77fc51f258..1ada09e81f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/packager/PackageDefragmenter.java +++ b/src/main/java/com/simibubi/create/content/logistics/packager/PackageDefragmenter.java @@ -113,7 +113,8 @@ public class PackageDefragmenter { ItemStack output = ItemHandlerHelper.copyStackWithSize(entry.stack, removedAmount); targetAmount -= removedAmount; - targetedEntry.count = targetAmount; + if (targetedEntry != null) + targetedEntry.count = targetAmount; entry.count -= removedAmount; outputSlots.add(output); } diff --git a/src/main/java/com/simibubi/create/content/logistics/stockTicker/StockKeeperRequestScreen.java b/src/main/java/com/simibubi/create/content/logistics/stockTicker/StockKeeperRequestScreen.java index 18ff2d66b1..7adc2d71b2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/stockTicker/StockKeeperRequestScreen.java +++ b/src/main/java/com/simibubi/create/content/logistics/stockTicker/StockKeeperRequestScreen.java @@ -38,6 +38,7 @@ import com.simibubi.create.content.trains.station.NoShadowFontWrapper; import com.simibubi.create.foundation.gui.AllGuiTextures; import com.simibubi.create.foundation.gui.ScreenWithStencils; import com.simibubi.create.foundation.gui.menu.AbstractSimiContainerScreen; +import com.simibubi.create.foundation.gui.widget.ScrollInput; import com.simibubi.create.foundation.utility.CreateLang; import dev.engine_room.flywheel.lib.model.baked.PartialModel; @@ -489,9 +490,12 @@ public class StockKeeperRequestScreen extends AbstractSimiContainerScreen Date: Sun, 2 Mar 2025 00:24:11 +0100 Subject: [PATCH 2/3] Update changelog.md --- changelog.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/changelog.md b/changelog.md index 68f3686c05..7501a439bc 100644 --- a/changelog.md +++ b/changelog.md @@ -4,12 +4,23 @@ Create 6.0.1 #### Bug Fixes -- Fixed crash when using factory gauges +- Fixed Shopping lists not updating when adding purchases (1.21) #7449 #7393 +- Fixed Frogport ponder scene not animating correctly (1.21) +- Fixed broken address filter in second stock ticker ponder scene (1.21) +- Added a tooltip for the stock keeper address input +- Fixed crash when re-packaging a duplicated package fragment #7456 +- Fixed crash when ctrl-click copying a gauge #7431 +- Safety check for unexpected string modifications in address edit boxes #7409 +- Fixed crash with fluid propagator +- Fixed a crash when using factory gauges - Fixed debug info command not translating the graphics mode text - Fixed cardboard sword not being able to damage arthropod mobs other than the spider - Fixed a crash that occurred when placing a stock link on a re-packager - Fixed an issue where wearing diving boots and sprinting would force you into the swim position and then out of it right away +- Fixed item group attribute filters crashing +- Fixed mixin conflict with immersive portals +- Fixed processing output not supporting itemstack components ------------------------------------------------------ Create 6.0.0 From cda89da9ca984de15ccbd44e7676e1bfdb643347 Mon Sep 17 00:00:00 2001 From: TropheusJ Date: Sat, 1 Mar 2025 19:55:49 -0500 Subject: [PATCH 3/3] better fix for InventorySorter compat --- build.gradle | 1 + src/main/java/com/simibubi/create/Create.java | 3 +++ .../java/com/simibubi/create/compat/Mods.java | 3 ++- .../InventorySorterCompat.java | 25 +++++++++++++++++++ .../RedstoneRequesterMenu.java | 10 +++++++- .../RedstoneRequesterScreen.java | 11 +------- 6 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/simibubi/create/compat/inventorySorter/InventorySorterCompat.java diff --git a/build.gradle b/build.gradle index ed66a0e036..5c35f495ac 100644 --- a/build.gradle +++ b/build.gradle @@ -247,6 +247,7 @@ dependencies { // modRuntimeOnly("curse.maven:blueprint-382216:4749000") // modRuntimeOnly("curse.maven:windsweptmod-636321:4817132") // modRuntimeOnly("curse.maven:good-ending-690161:4363719") + // modRuntimeOnly("curse.maven:inventory-sorter-240633:5979609") // https://discord.com/channels/313125603924639766/725850371834118214/910619168821354497 // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 0037fc9960..ffaead4b0e 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -2,6 +2,8 @@ package com.simibubi.create; import java.util.Random; +import com.simibubi.create.compat.inventorySorter.InventorySorterCompat; + import org.slf4j.Logger; import com.google.gson.Gson; @@ -156,6 +158,7 @@ public class Create { // FIXME: this is not thread-safe Mods.CURIOS.executeIfInstalled(() -> () -> Curios.init(modEventBus, forgeEventBus)); + Mods.INVENTORYSORTER.executeIfInstalled(() -> () -> InventorySorterCompat.init(modEventBus)); } public static void init(final FMLCommonSetupEvent event) { diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index 37418fe6a7..a28b7085b7 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -34,7 +34,8 @@ public enum Mods { MODERNUI, FTBCHUNKS, JOURNEYMAP, - FTBLIBRARY; + FTBLIBRARY, + INVENTORYSORTER; private final String id; diff --git a/src/main/java/com/simibubi/create/compat/inventorySorter/InventorySorterCompat.java b/src/main/java/com/simibubi/create/compat/inventorySorter/InventorySorterCompat.java new file mode 100644 index 0000000000..6da07bf9a0 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/inventorySorter/InventorySorterCompat.java @@ -0,0 +1,25 @@ +package com.simibubi.create.compat.inventorySorter; + +import com.simibubi.create.compat.Mods; + +import com.simibubi.create.content.logistics.redstoneRequester.RedstoneRequesterMenu.SorterProofSlot; + +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.InterModComms; +import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; + +/** + * Compatibility with cpw's InventorySorter. + * We need to stop it from interfering with scrolling in the Redstone Requester's screen. + */ +public class InventorySorterCompat { + public static final String SLOT_BLACKLIST = "slotblacklist"; + + public static void init(IEventBus bus) { + bus.addListener(InventorySorterCompat::sendImc); + } + + private static void sendImc(InterModEnqueueEvent event) { + InterModComms.sendTo(Mods.INVENTORYSORTER.id(), SLOT_BLACKLIST, SorterProofSlot.class::getName); + } +} diff --git a/src/main/java/com/simibubi/create/content/logistics/redstoneRequester/RedstoneRequesterMenu.java b/src/main/java/com/simibubi/create/content/logistics/redstoneRequester/RedstoneRequesterMenu.java index 878f42178f..98ea6ae424 100644 --- a/src/main/java/com/simibubi/create/content/logistics/redstoneRequester/RedstoneRequesterMenu.java +++ b/src/main/java/com/simibubi/create/content/logistics/redstoneRequester/RedstoneRequesterMenu.java @@ -16,6 +16,7 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.MenuType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.SlotItemHandler; @@ -64,7 +65,7 @@ public class RedstoneRequesterMenu extends GhostItemMenu getTooltipFromContainerItem(ItemStack pStack) { List tooltip = super.getTooltipFromContainerItem(pStack);