Building Gadgets

Building Gadgets

109M Downloads

Cut-Paste gadget on MI barrels throws packet error, creating a duplication exploit

James103 opened this issue ยท 2 comments

commented

Building Gadgets Version
1.3.7

Modern Industrialization Version
2.2.25

Mod pack
Craftoria 1.8.0

Describe the bug
When a Cut-Paste gadget is used to cut Modern Industrialization barrels, the resulting data can be pasted, but doing so throws a packet error, duplicates the blocks in their default form, and does not clear the paste allowing it to be infinitely reused at no cost.

To Reproduce
Place down a barrel from Modern Industrialization, then use the Cut-Paste gadget to try moving the barrel from one location to another. The barrel is cut from the world, but the resulting block data can't be pasted without throwing an error.

Expected behavior
Barrels from Modern Industrialization can be cut-and-pasted like other storage blocks, retaining their stored items.

Screenshots
N/A

Log Files
Error on paste:

[17:03:12] [Server thread/ERROR] [minecraft/ServerPacketListener]: Failed to handle packet net.minecraft.network.protocol.game.ServerboundUseItemPacket@11003027, suppressing error
java.lang.NullPointerException: Cannot invoke "aztech.modern_industrialization.blocks.storage.AbstractStorageBlockEntity.isEmpty()" because "storageBlockEntity" is null
	at TRANSFORMER/[email protected]/aztech.modern_industrialization.blocks.storage.AbstractStorageBlock.getStack(AbstractStorageBlock.java:59) ~[Modern-Industrialization-2.2.25.jar%23755!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/aztech.modern_industrialization.blocks.storage.AbstractStorageBlock.getCloneItemStack(AbstractStorageBlock.java:73) ~[Modern-Industrialization-2.2.25.jar%23755!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.neoforged.neoforge.common.extensions.IBlockExtension.getCloneItemStack(IBlockExtension.java:334) ~[neoforge-21.1.77-universal.jar%23533!/:?] {re:mixin,re:classloading}
	at TRANSFORMER/[email protected]/net.neoforged.neoforge.common.extensions.IBlockStateExtension.getCloneItemStack(IBlockStateExtension.java:230) ~[neoforge-21.1.77-universal.jar%23533!/:?] {re:computing_frames,re:mixin,re:classloading}
	at TRANSFORMER/[email protected]/com.direwolf20.buildinggadgets2.util.GadgetUtils.getItemForBlock(GadgetUtils.java:74) ~[buildinggadgets2-1.3.7.jar%23579!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/com.direwolf20.buildinggadgets2.util.GadgetUtils.getDropsForBlockState(GadgetUtils.java:89) ~[buildinggadgets2-1.3.7.jar%23579!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/com.direwolf20.buildinggadgets2.util.BuildingUtils.exchange(BuildingUtils.java:488) ~[buildinggadgets2-1.3.7.jar%23579!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/com.direwolf20.buildinggadgets2.util.BuildingUtils.buildWithTileData(BuildingUtils.java:524) ~[buildinggadgets2-1.3.7.jar%23579!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/com.direwolf20.buildinggadgets2.common.items.GadgetCutPaste.onAction(GadgetCutPaste.java:93) ~[buildinggadgets2-1.3.7.jar%23579!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/com.direwolf20.buildinggadgets2.common.items.BaseGadget.use(BaseGadget.java:145) ~[buildinggadgets2-1.3.7.jar%23579!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.world.item.ItemStack.use(ItemStack.java:391) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:apothic_enchanting.mixins.json:ItemStackMixin from mod apothic_enchanting,pl:mixin:APP:emi.mixins.json:ItemStackMixin from mod emi,pl:mixin:APP:clean_tooltips-common.mixins.json:ItemStackMixin from mod clean_tooltips,pl:mixin:APP:clean_tooltips-neoforge.mixins.json:ItemStackMixin from mod clean_tooltips,pl:mixin:APP:glitchcore.mixins.json:MixinItemStack from mod glitchcore,pl:mixin:APP:showcaseitem.mixins.json:ItemStackMixin from mod showcaseitem,pl:mixin:APP:mixins.transmog.common.json:ItemStackMixin from mod transmog,pl:mixin:APP:placebo.mixins.json:ItemStackMixin from mod placebo,pl:mixin:APP:usefulhats.mixins.json:CommonItemStackMixin from mod usefulhats,pl:mixin:APP:expandedstorage-common.mixins.json:common.SparrowItemIdFix from mod expandedstorage,pl:mixin:APP:kubejs.mixins.json:ItemStackMixin from mod kubejs,pl:mixin:APP:kubejs.mixins.json:ItemStackClientMixin from mod kubejs,pl:mixin:APP:mixins.artifacts.common.json:item.ItemStackMixin from mod artifacts,pl:mixin:APP:modern_industrialization.mixins.json:ItemStackMixin from mod modern_industrialization,pl:mixin:APP:tesseract_api.mixins.json:DataComponentTooltipProviderMixin from mod tesseract_api,pl:mixin:APP:tesseract_api.mixins.json:ItemStackExtraAttributeTooltipsMixin from mod tesseract_api,pl:mixin:APP:tesseract_api.mixins.json:event.ItemHurtEventMixin from mod tesseract_api,pl:mixin:APP:irons_spellbooks.mixins.json:ItemStackMixin from mod irons_spellbooks,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.level.ServerPlayerGameMode.useItem(ServerPlayerGameMode.java:313) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:computing_frames,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItem(ServerGamePacketListenerImpl.java:1171) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:forgivingvoid.mixins.json:ServerGamePacketListenerImplAccessor from mod forgivingvoid,pl:mixin:APP:the_bumblezone-common.mixins.json:gameplay.ServerGamePacketListenerImplAccessor from mod the_bumblezone,pl:mixin:APP:the_bumblezone-common.mixins.json:entities.ServerGamePacketListenerImplMixin from mod the_bumblezone,pl:mixin:APP:imfast.mixins.json:VelocityMixin from mod imfast,pl:mixin:APP:ftbquests-common.mixins.json:ServerGamePacketListenerImplMixin from mod ftbquests,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.network.protocol.game.ServerboundUseItemPacket.handle(ServerboundUseItemPacket.java:45) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.network.protocol.game.ServerboundUseItemPacket.handle(ServerboundUseItemPacket.java:9) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:27) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.server.TickTask.run(TickTask.java:18) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:148) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:computing_frames,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.BlockableEventLoopMixin from mod modernfix,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:computing_frames,re:mixin,re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:872) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:170) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:computing_frames,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.BlockableEventLoopMixin from mod modernfix,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:855) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:849) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:computing_frames,pl:accesstransformer:B,re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:modernfix-common.mixins.json:perf.fix_loop_spin_waiting.BlockableEventLoopMixin from mod modernfix,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.managedBlock(MinecraftServer.java:821) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:826) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:712) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at TRANSFORMER/[email protected]/net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:267) ~[client-1.21.1-20240808.144430-srg.jar%23532!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,xf:fml:xaeroworldmap:xaero_wm_minecraftserver,pl:mixin:A}
	at java.base/java.lang.Thread.run(Thread.java:1583) [?:?] {re:mixin}

Command to summon the exact gadget item used when pasting:

summon item ~ ~ ~ {Item: {components: {"buildinggadgets2:gadget_uuid": [I; -1332306111, 535580600, -1531489351, -1277584469], "buildinggadgets2:paste_replace_toggle": 1b, "buildinggadgets2:copy_start_pos": [I; -999, -999, -999], "buildinggadgets2:gadget_mode": "buildinggadgets2:paste", "buildinggadgets2:copy_end_pos": [I; -999, -999, -999], "buildinggadgets2:copy_uuid": [I; 1703784818, -450740174, -1854271842, 2131676853], "buildinggadgets2:raytrace_fluid_toggle": 0b, "buildinggadgets2:forge_energy": 5000000, "buildinggadgets2:undo_list": [[I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469], [I; -1332306111, 535580600, -1531489351, -1277584469]]}, count: 1, id: "buildinggadgets2:gadget_cut_paste"}}

Data file needed to load the paste data contained in the gadget (place in your world save's data folder):
buildinggadgets2-paste-data.zip

NOTE ON RUBIDIUM
Rubidium contains code that will crash many mods when used in conjunction with them. Unfortunately this includes Building Gadgets 2. There is absolutely nothing I can do on my side to prevent these crashes. If you're using Rubidium and your game crashes when rendering something, please try without rubidium before submitting a bug report.

commented

This looks like an issue on their side - can you open a bug report over there, and ask teh dev to ping me if they believe otherwise?

commented

Their response in #143 (comment):

This should be fixed in BG2. I don't want to add a null check in MI because it would then silently void items.