From 3c83edf64908c53b021418fb7a6a3d01f2ece82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=BF=E9=B9=B0?= Date: Mon, 12 May 2025 15:35:51 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(plugin):=20=E5=A2=9E=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=20NBT=20=E8=AF=BB=E5=86=99=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 getNBT 和 setNBT 函数,支持 1.20.5+ 版本的 CUSTOM_DATA 类型读写 - 保留原有函数接口,新增参数 isCustom 以控制是否使用 CUSTOM_DATA --- .../menu/module/internal/script/Assist.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugin/src/main/kotlin/trplugins/menu/module/internal/script/Assist.kt b/plugin/src/main/kotlin/trplugins/menu/module/internal/script/Assist.kt index 01e4a8e7..9e7b63ca 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/internal/script/Assist.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/internal/script/Assist.kt @@ -366,11 +366,28 @@ class Assist { * NBT */ + /** + * @param isCustom 仅针对 1.20.5+, 是否读取为 CUSTOM_DATA 的 DataComponentType + */ + fun getNBT(itemStack: ItemStack, string: String, isCustom: Boolean = true): String? { + val itemTag = itemStack.getItemTag(isCustom) + return itemTag[string]?.asString() + } + fun getNBT(itemStack: ItemStack, string: String): String? { val itemTag = itemStack.getItemTag() return itemTag[string]?.asString() } + /** + * @param isCustom 仅针对 1.20.5+, 是否读取为 CUSTOM_DATA 的 DataComponentType + */ + fun setNBT(itemStack: ItemStack, key: String, value: String, isCustom: Boolean = true): ItemStack { + val itemTag = itemStack.getItemTag(isCustom) + itemTag[key] = ItemTagData(value) + return itemStack.also { itemTag.saveTo(it, isCustom) } + } + fun setNBT(itemStack: ItemStack, key: String, value: String): ItemStack { val itemTag = itemStack.getItemTag() itemTag[key] = ItemTagData(value) From b1156cc340cd485339fb0fe89ffe3d1fdd63e41a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=BF=E9=B9=B0?= Date: Mon, 12 May 2025 15:44:20 +0800 Subject: [PATCH 2/3] Update gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index dc6a7617..bfb98d52 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=me.arasple.mc.trmenu -version=3.5.1 +version=3.5.2 From 36ae582274aa76967c3ede3cfbad0f7d0732bf8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=BF=E9=B9=B0?= Date: Tue, 13 May 2025 15:17:19 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix(api):=20=E4=BF=AE=E5=A4=8D=E7=82=B9?= =?UTF-8?q?=E5=87=BB=E7=89=A9=E5=93=81=E6=97=B6=E9=BC=A0=E6=A0=87=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=87=BA=E7=9B=B8=E5=90=8C=E7=89=A9=E5=93=81=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/receptacle/build.gradle.kts | 5 +++++ .../menu/api/receptacle/vanilla/window/NMSImpl.kt | 8 ++++++++ gradle.properties | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/api/receptacle/build.gradle.kts b/api/receptacle/build.gradle.kts index 2a7b5368..aaf31461 100644 --- a/api/receptacle/build.gradle.kts +++ b/api/receptacle/build.gradle.kts @@ -1,6 +1,11 @@ + repositories { + maven("https://repo.aeoliancloud.com/repository/releases") { isAllowInsecureProtocol = true } +} + dependencies { compileOnly(project(":common")) compileOnly("ink.ptms:nms-all:1.0.0") + compileOnly("dependencies.core:paper:12104-min") compileOnly("ink.ptms.core:v12002:12002-minimize:universal") compileOnly("ink.ptms.core:v12002:12002-minimize:mapped") compileOnly("org.geysermc.floodgate:api:2.2.3-SNAPSHOT") diff --git a/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt b/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt index 042bd386..de147004 100644 --- a/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt +++ b/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt @@ -1,5 +1,6 @@ package trplugins.menu.api.receptacle.vanilla.window +import net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket import net.minecraft.server.v1_16_R3.* import org.bukkit.Material import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack @@ -161,6 +162,13 @@ class NMSImpl : NMS() { "slot" to slot, "itemStack" to toNMSCopy(itemStack) ) + kotlin.runCatching { + sendPacket( + player, + ClientboundSetCursorItemPacket::class.java.unsafeInstance(), + "contents" to toNMSCopy(ItemStack(Material.AIR)) + ) + } } else -> { player.sendPacket(PacketPlayOutSetSlot(windowId, slot, toNMSCopy(itemStack))) diff --git a/gradle.properties b/gradle.properties index bfb98d52..45fac02b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=me.arasple.mc.trmenu -version=3.5.2 +version=3.5.3