From 022b2144d303ac53e1e58b882811fe0edb980608 Mon Sep 17 00:00:00 2001 From: Ap_Tx <3045929398@qq.com> Date: Mon, 5 Oct 2026 19:11:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=BD=BD=E5=85=B7?= =?UTF-8?q?=E5=8F=AF=E5=A0=86=E5=8F=A0=E8=A7=84=E5=88=99=EF=BC=88=E7=9F=BF?= =?UTF-8?q?=E8=BD=A6/=E8=88=B9=E5=A0=86=E5=8F=A0=E8=87=B364=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mixin ItemInstance.getMaxStackSize,规则开启时矿车/船返回64,实现自动堆叠。新增item mixin分组。 --- .../carpetslsaddition/SLSCarpetSettings.java | 3 ++ .../mixin/item/ItemInstanceMixin.java | 40 +++++++++++++++++++ .../assets/slsaddition/lang/en_us.json | 4 +- .../assets/slsaddition/lang/zh_cn.json | 4 +- src/main/resources/slsaddition.mixins.json | 3 +- 5 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/github/zly2006/carpetslsaddition/mixin/item/ItemInstanceMixin.java diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java index 6fa7e39..b530ef9 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java @@ -77,4 +77,7 @@ public class SLSCarpetSettings { @Rule(categories = {SLSA, RuleCategory.FEATURE}) public static boolean unbreakableDecoratedPot = false; + + @Rule(categories = {SLSA, RuleCategory.FEATURE}) + public static boolean stackableVehicles = false; } diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/item/ItemInstanceMixin.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/item/ItemInstanceMixin.java new file mode 100644 index 0000000..5104a3e --- /dev/null +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/item/ItemInstanceMixin.java @@ -0,0 +1,40 @@ +package com.github.zly2006.carpetslsaddition.mixin.item; + +import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; +import net.minecraft.world.item.BoatItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemInstance; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.MinecartItem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * 载具堆叠:让矿车/船的物品可以堆叠到 64。 + * + *

26.1.2 的堆叠上限来自 {@code ItemInstance.getMaxStackSize()} 的 default 实现: + * 读取 {@code DataComponents.MAX_STACK_SIZE} 组件,默认 1(故矿车/船默认不堆叠)。 + * + *

本 mixin 注入该 default 方法:规则 {@code stackableVehicles} 开启时, + * 若物品是矿车({@link MinecartItem})或船({@link BoatItem}),返回 64。 + * 由于堆叠上限变大,同类载具在拾取/整理时会自动合并,实现"自动堆叠"。 + */ +@Mixin(ItemInstance.class) +public interface ItemInstanceMixin { + + @Inject(method = "getMaxStackSize", at = @At("HEAD"), cancellable = true) + private void stackableVehicles(CallbackInfoReturnable cir) { + if (!SLSCarpetSettings.stackableVehicles) { + return; + } + if (!(this instanceof ItemStack stack)) { + return; + } + Item item = stack.getItem(); + if (item instanceof MinecartItem || item instanceof BoatItem) { + cir.setReturnValue(64); + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/slsaddition/lang/en_us.json b/src/main/resources/assets/slsaddition/lang/en_us.json index c852510..478dd5b 100644 --- a/src/main/resources/assets/slsaddition/lang/en_us.json +++ b/src/main/resources/assets/slsaddition/lang/en_us.json @@ -72,5 +72,7 @@ "carpet.slsa.bot.respawned": "The bot %s's online time has been reset.", "carpet.slsa.bot.not_a_bot": "The player %s is not created by carpet sls addition, so you can't reset the online time.", - "carpet.slsa.block.deep_slate_core": "Deepslate Core" + "carpet.slsa.block.deep_slate_core": "Deepslate Core", + "carpet.rule.stackableVehicles.name": "Stackable vehicles", + "carpet.rule.stackableVehicles.desc": "Minecarts and boats can stack up to 64, auto-merging on pickup" } diff --git a/src/main/resources/assets/slsaddition/lang/zh_cn.json b/src/main/resources/assets/slsaddition/lang/zh_cn.json index 79a8fa8..2c33784 100644 --- a/src/main/resources/assets/slsaddition/lang/zh_cn.json +++ b/src/main/resources/assets/slsaddition/lang/zh_cn.json @@ -72,5 +72,7 @@ "carpet.slsa.bot.respawned": "假人%s的在线时长已重置!", "carpet.slsa.bot.not_a_bot": "假人%s不是由Carpet SLS Addition生成的,所以你不能重置它的在线时间!", - "carpet.slsa.block.deep_slate_core": "深板岩核心" + "carpet.slsa.block.deep_slate_core": "深板岩核心", + "carpet.rule.stackableVehicles.name": "载具可堆叠", + "carpet.rule.stackableVehicles.desc": "矿车和船的物品可以堆叠到64,拾取时自动合并" } diff --git a/src/main/resources/slsaddition.mixins.json b/src/main/resources/slsaddition.mixins.json index e678be8..af27894 100644 --- a/src/main/resources/slsaddition.mixins.json +++ b/src/main/resources/slsaddition.mixins.json @@ -12,6 +12,7 @@ "block.MixinDecoratedPotBlock", "block.MixinTrialSpawnerData", "block.MixinTrialSpawnerState", + "item.ItemInstanceMixin", "carpet.MixinEntityPlayerMPFake", "carpet.MixinPlayerCommand", "elytra.ItemAccessor", @@ -42,4 +43,4 @@ "injectors": { "defaultRequire": 1 } -} \ No newline at end of file +}