From cdf55b998a491778749792e14d327b7de2c4299f Mon Sep 17 00:00:00 2001 From: aoi Date: Mon, 2 Feb 2026 19:21:55 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=BF=BD=E7=95=A5=E5=B9=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4idea=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .idea/.gitignore | 3 -- .idea/compiler.xml | 6 ---- .idea/git_toolbox_blame.xml | 6 ---- .idea/gradle.xml | 17 --------- .idea/jarRepositories.xml | 35 ------------------- .idea/misc.xml | 10 ------ .idea/modules.xml | 9 ----- .idea/modules/QuickCopy.main.iml | 22 ------------ .idea/modules/QuickCopy.test.iml | 22 ------------ .idea/runConfigurations/runClient.xml | 18 ---------- .idea/runConfigurations/runData.xml | 18 ---------- .idea/runConfigurations/runGameTestServer.xml | 18 ---------- .idea/runConfigurations/runServer.xml | 18 ---------- .idea/vcs.xml | 6 ---- 15 files changed, 1 insertion(+), 208 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/git_toolbox_blame.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/modules/QuickCopy.main.iml delete mode 100644 .idea/modules/QuickCopy.test.iml delete mode 100644 .idea/runConfigurations/runClient.xml delete mode 100644 .idea/runConfigurations/runData.xml delete mode 100644 .idea/runConfigurations/runGameTestServer.xml delete mode 100644 .idea/runConfigurations/runServer.xml delete mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index ed0537e..78cf3e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /.gradle/ /build/ /.vscode/ +/.idea/ /bin/ /run/ /run-data/ diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 359bb53..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# 默认忽略的文件 -/shelf/ -/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/git_toolbox_blame.xml b/.idea/git_toolbox_blame.xml deleted file mode 100644 index 7dc1249..0000000 --- a/.idea/git_toolbox_blame.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 1fd1b27..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index da4688f..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index fe0b0da..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 93dbdd9..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules/QuickCopy.main.iml b/.idea/modules/QuickCopy.main.iml deleted file mode 100644 index b745635..0000000 --- a/.idea/modules/QuickCopy.main.iml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - FORGE - MIXIN - MCP - - 1 - - - - - - \ No newline at end of file diff --git a/.idea/modules/QuickCopy.test.iml b/.idea/modules/QuickCopy.test.iml deleted file mode 100644 index b745635..0000000 --- a/.idea/modules/QuickCopy.test.iml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - FORGE - MIXIN - MCP - - 1 - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/runClient.xml b/.idea/runConfigurations/runClient.xml deleted file mode 100644 index 9cb5c53..0000000 --- a/.idea/runConfigurations/runClient.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/.idea/runConfigurations/runData.xml b/.idea/runConfigurations/runData.xml deleted file mode 100644 index 31ddcac..0000000 --- a/.idea/runConfigurations/runData.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/.idea/runConfigurations/runGameTestServer.xml b/.idea/runConfigurations/runGameTestServer.xml deleted file mode 100644 index 01a891e..0000000 --- a/.idea/runConfigurations/runGameTestServer.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/.idea/runConfigurations/runServer.xml b/.idea/runConfigurations/runServer.xml deleted file mode 100644 index 17b2891..0000000 --- a/.idea/runConfigurations/runServer.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From a8ff87b66f81b4ff0bea709b5d6061bec153d16d Mon Sep 17 00:00:00 2001 From: aoi Date: Mon, 2 Feb 2026 20:58:01 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9C=A8runClient?= =?UTF-8?q?=E6=97=B6=E7=94=B1=E4=BA=8Ejade=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 15 ++++++++++++++- gradle.properties | 4 +++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f464919..7dc456b 100644 --- a/build.gradle +++ b/build.gradle @@ -86,6 +86,14 @@ minecraft { client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id + + /* + 修复类似问题 + [mixin/]: Mixing XxxMixin from jade.mixins.json into Xxx + [mixin/]: jade.mixins.json:XxxMixin: Class version 61 required is higher than the class version supported by the current version of Mixin (JAVA_16 supports class version 60) + */ + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" } server { @@ -117,10 +125,15 @@ repositories { maven { // CurseForge url "https://www.cursemaven.com" } + maven { + url = "https://api.modrinth.com/maven" + } } dependencies { - implementation fg.deobf("curse.maven:jade-324717:6271651") + // jade_version example: 11.13.1+forge + // Visit https://modrinth.com/mod/jade/versions?l=forge to get the latest version + implementation fg.deobf("maven.modrinth:jade:${project.jade_version}") implementation fg.deobf("curse.maven:slashblade-resharped-1022428:6298272") // Specify the version of Minecraft to use. diff --git a/gradle.properties b/gradle.properties index af40848..dde0ff9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,6 @@ org.gradle.daemon=false minecraft_version=1.20.1 minecraft_version_range = [1.16.5,) - ] # The Minecraft version must agree with the Forge version to get a valid artifact # The Minecraft version range can use any release version of Minecraft as bounds. # Snapshots, pre-releases, and release candidates are not guaranteed to sort properly @@ -51,3 +50,6 @@ mod_group_id=net.exmo mod_authors=canyuesama # The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list. mod_description=this is a simple tool to help you copy item id + +# Jade version +jade_version=11.13.2+forge From b5367a235b0f50d7072b6891b309088b454ab289 Mon Sep 17 00:00:00 2001 From: aoi Date: Mon, 2 Feb 2026 21:36:32 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=AE=8C=E5=96=84Jade=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/exmo/quickcopy/JadeBlockProvider.java | 39 +++++++++++++++++ .../exmo/quickcopy/JadeEntityProvider.java | 42 +++++++++++++++++++ .../java/net/exmo/quickcopy/JadeSupport.java | 9 ++-- .../net/exmo/quickcopy/TestJadeProvider.java | 2 +- .../exmo/quickcopy/TestJadeProviderBlock.java | 2 +- .../assets/quickcopy/lang/en_us.json | 4 +- .../assets/quickcopy/lang/zh_cn.json | 4 +- 7 files changed, 93 insertions(+), 9 deletions(-) create mode 100644 src/main/java/net/exmo/quickcopy/JadeBlockProvider.java create mode 100644 src/main/java/net/exmo/quickcopy/JadeEntityProvider.java diff --git a/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java b/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java new file mode 100644 index 0000000..29db622 --- /dev/null +++ b/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java @@ -0,0 +1,39 @@ +package net.exmo.quickcopy; + + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; +import snownee.jade.api.*; +import snownee.jade.api.config.IPluginConfig; + +import static net.exmo.quickcopy.Quickcopy.isKeyDown; + +public enum JadeBlockProvider implements IBlockComponentProvider { + INSTANCE; + + @Override + public ResourceLocation getUid() { + return JadeSupport.blockProviderId; + } + + @Override + public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { + if (Screen.hasAltDown()) { + if (isKeyDown) { + + ResourceLocation key = ForgeRegistries.BLOCKS.getKey(blockAccessor.getBlock()); + String string = key.toString(); + if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(string)) { + + Minecraft.getInstance().getChatListener().handleSystemMessage(Component.translatable("message.quickcopy.3").append(Component.literal(string)), false); + + Minecraft.getInstance().keyboardHandler.setClipboard(string); + + } + } + } + } +} diff --git a/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java b/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java new file mode 100644 index 0000000..4774630 --- /dev/null +++ b/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java @@ -0,0 +1,42 @@ +package net.exmo.quickcopy; + + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.registries.ForgeRegistries; +import snownee.jade.api.EntityAccessor; +import snownee.jade.api.IEntityComponentProvider; +import snownee.jade.api.ITooltip; +import snownee.jade.api.config.IPluginConfig; + +import static net.exmo.quickcopy.Quickcopy.isKeyDown; + +public enum JadeEntityProvider implements IEntityComponentProvider { + INSTANCE; + + @Override + public ResourceLocation getUid() { + return JadeSupport.entityProviderId; + } + + @Override + public void appendTooltip(ITooltip iTooltip, EntityAccessor entityAccessor, IPluginConfig iPluginConfig) { + if (Screen.hasAltDown()) { + if (isKeyDown) { + + ResourceLocation key = ForgeRegistries.ENTITY_TYPES.getKey(entityAccessor.getEntity().getType()); + String string = key.toString(); + if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(string)) { + + Minecraft.getInstance().getChatListener().handleSystemMessage(Component.translatable("message.quickcopy.3").append(Component.literal(string)), false); + + Minecraft.getInstance().keyboardHandler.setClipboard(string); + + } + } + } + + } +} diff --git a/src/main/java/net/exmo/quickcopy/JadeSupport.java b/src/main/java/net/exmo/quickcopy/JadeSupport.java index 9c52aa9..0358ae3 100644 --- a/src/main/java/net/exmo/quickcopy/JadeSupport.java +++ b/src/main/java/net/exmo/quickcopy/JadeSupport.java @@ -12,17 +12,16 @@ @WailaPlugin public class JadeSupport implements IWailaPlugin { - public static final ResourceLocation element_id = new ResourceLocation(MODID, "test"); - public static final ResourceLocation element_id2 = new ResourceLocation(MODID, "test_2"); + public static final ResourceLocation entityProviderId = new ResourceLocation(MODID, "entity"); + public static final ResourceLocation blockProviderId = new ResourceLocation(MODID, "block"); @Override public void register(IWailaCommonRegistration registration) { //TODO register data providers } - @Override public void registerClient(IWailaClientRegistration registration) { - registration.registerEntityComponent(TestJadeProvider.INSTANCE, LivingEntity.class); - registration.registerBlockComponent(TestJadeProviderBlock.INSTANCE, Block.class); + registration.registerEntityComponent(JadeEntityProvider.INSTANCE, LivingEntity.class); + registration.registerBlockComponent(JadeBlockProvider.INSTANCE, Block.class); } } diff --git a/src/main/java/net/exmo/quickcopy/TestJadeProvider.java b/src/main/java/net/exmo/quickcopy/TestJadeProvider.java index 46e53fa..0a4a6a8 100644 --- a/src/main/java/net/exmo/quickcopy/TestJadeProvider.java +++ b/src/main/java/net/exmo/quickcopy/TestJadeProvider.java @@ -37,6 +37,6 @@ public void appendTooltip(ITooltip iTooltip, EntityAccessor entityAccessor, IPlu } @Override public ResourceLocation getUid() { - return JadeSupport.element_id; + return JadeSupport.entityProviderId; } } diff --git a/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java b/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java index a1c4629..f8dcb1b 100644 --- a/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java +++ b/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java @@ -18,7 +18,7 @@ public enum TestJadeProviderBlock implements IBlockComponentProvider { @Override public ResourceLocation getUid() { - return JadeSupport.element_id2; + return JadeSupport.blockProviderId; } @Override diff --git a/src/main/resources/assets/quickcopy/lang/en_us.json b/src/main/resources/assets/quickcopy/lang/en_us.json index 1afa4e8..89e7dc8 100644 --- a/src/main/resources/assets/quickcopy/lang/en_us.json +++ b/src/main/resources/assets/quickcopy/lang/en_us.json @@ -3,5 +3,7 @@ "tootip.quickcopy.item": "§7Press \"Alt\" to copy item ID", "message.quickcopy.1": "§7[QuickCopy] Copy item ID function to activate", "message.quickcopy.2": "§7[QuickCopy] Copy item ID function to disable", - "message.quickcopy.3": "§7[QuickCopy] Replicated:" + "message.quickcopy.3": "§7[QuickCopy] Replicated:", + "config.jade.plugin_quickcopy.block": "Copy Block ID", + "config.jade.plugin_quickcopy.entity": "Copy Entity ID" } \ No newline at end of file diff --git a/src/main/resources/assets/quickcopy/lang/zh_cn.json b/src/main/resources/assets/quickcopy/lang/zh_cn.json index 0f9c00c..5bf093a 100644 --- a/src/main/resources/assets/quickcopy/lang/zh_cn.json +++ b/src/main/resources/assets/quickcopy/lang/zh_cn.json @@ -3,5 +3,7 @@ "tootip.quickcopy.item": "§7按下[Alt]来复制物品ID", "message.quickcopy.1": "§7[快捷复制] 复制物品ID功能已启动", "message.quickcopy.2": "§7[快捷复制] 复制物品ID功能已关闭", - "message.quickcopy.3": "§7[快捷复制] 已复制:" + "message.quickcopy.3": "§7[快捷复制] 已复制:", + "config.jade.plugin_quickcopy.block": "复制方块ID", + "config.jade.plugin_quickcopy.entity": "复制实体ID" } \ No newline at end of file From 21a96e4b571560ec249d178354bded18cee14c58 Mon Sep 17 00:00:00 2001 From: aoi Date: Mon, 2 Feb 2026 21:39:20 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A7=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/exmo/quickcopy/TestJadeProvider.java | 42 ------------------- .../exmo/quickcopy/TestJadeProviderBlock.java | 41 ------------------ 2 files changed, 83 deletions(-) delete mode 100644 src/main/java/net/exmo/quickcopy/TestJadeProvider.java delete mode 100644 src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java diff --git a/src/main/java/net/exmo/quickcopy/TestJadeProvider.java b/src/main/java/net/exmo/quickcopy/TestJadeProvider.java deleted file mode 100644 index 0a4a6a8..0000000 --- a/src/main/java/net/exmo/quickcopy/TestJadeProvider.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.exmo.quickcopy; - - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.ForgeRegistries; -import snownee.jade.api.EntityAccessor; -import snownee.jade.api.IEntityComponentProvider; -import snownee.jade.api.ITooltip; -import snownee.jade.api.config.IPluginConfig; - -import static net.exmo.quickcopy.Quickcopy.isKeyDown; - -public enum TestJadeProvider implements IEntityComponentProvider { - INSTANCE; - - - @Override - public void appendTooltip(ITooltip iTooltip, EntityAccessor entityAccessor, IPluginConfig iPluginConfig) { - if (Screen.hasAltDown()) { - if (isKeyDown) { - - ResourceLocation key = ForgeRegistries.ENTITY_TYPES.getKey(entityAccessor.getEntity().getType()); - String string = key.toString(); - if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(string)) { - - Minecraft.getInstance().getChatListener().handleSystemMessage(Component.translatable("message.quickcopy.3").append(Component.literal(string)), false); - - Minecraft.getInstance().keyboardHandler.setClipboard(string); - - } - } - } - - } - @Override - public ResourceLocation getUid() { - return JadeSupport.entityProviderId; - } -} diff --git a/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java b/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java deleted file mode 100644 index f8dcb1b..0000000 --- a/src/main/java/net/exmo/quickcopy/TestJadeProviderBlock.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.exmo.quickcopy; - - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.registries.ForgeRegistries; -import snownee.jade.api.*; -import snownee.jade.api.config.IPluginConfig; - -import static net.exmo.quickcopy.Quickcopy.isKeyDown; - -public enum TestJadeProviderBlock implements IBlockComponentProvider { - INSTANCE; - - - - @Override - public ResourceLocation getUid() { - return JadeSupport.blockProviderId; - } - - @Override - public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (Screen.hasAltDown()) { - if (isKeyDown) { - - ResourceLocation key = ForgeRegistries.BLOCKS.getKey(blockAccessor.getBlock()); - String string = key.toString(); - if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(string)) { - - Minecraft.getInstance().getChatListener().handleSystemMessage(Component.translatable("message.quickcopy.3").append(Component.literal(string)), false); - - Minecraft.getInstance().keyboardHandler.setClipboard(string); - - } - } - } - } -} From e966ee3c9cad1e6f69be83f8f02316bfd9ed5b21 Mon Sep 17 00:00:00 2001 From: aoi Date: Tue, 3 Feb 2026 15:53:46 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BC=98=E5=8C=96=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/net/exmo/quickcopy/Config.java | 21 +++ .../net/exmo/quickcopy/JadeBlockProvider.java | 27 ++- .../exmo/quickcopy/JadeEntityProvider.java | 30 ++-- .../java/net/exmo/quickcopy/JadeSupport.java | 5 - .../java/net/exmo/quickcopy/Quickcopy.java | 165 ++++++++++-------- .../assets/quickcopy/lang/en_us.json | 7 +- .../assets/quickcopy/lang/zh_cn.json | 9 +- 7 files changed, 138 insertions(+), 126 deletions(-) create mode 100644 src/main/java/net/exmo/quickcopy/Config.java diff --git a/src/main/java/net/exmo/quickcopy/Config.java b/src/main/java/net/exmo/quickcopy/Config.java new file mode 100644 index 0000000..eb474e5 --- /dev/null +++ b/src/main/java/net/exmo/quickcopy/Config.java @@ -0,0 +1,21 @@ +package net.exmo.quickcopy; + + +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; + +public class Config { + public static ConfigValue isEnable; + public static ConfigValue showTip; + public static ConfigValue withTag; + public static final ForgeConfigSpec SPEC; + Config(ForgeConfigSpec.Builder builder) { + isEnable = builder.comment("是否开启").define("isEnable", true); + showTip = builder.comment("是否显示提示").define("ShowTooltip", true); + withTag = builder.comment("复制时是否包含NBT标签").define("withTag", false); + } + + static { + SPEC = new ForgeConfigSpec.Builder().configure(Config::new).getRight(); + } +} diff --git a/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java b/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java index 29db622..868eb08 100644 --- a/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java +++ b/src/main/java/net/exmo/quickcopy/JadeBlockProvider.java @@ -1,16 +1,13 @@ package net.exmo.quickcopy; +import net.exmo.quickcopy.Quickcopy.KeyBindings; +import net.exmo.quickcopy.Quickcopy.TooltipTracker; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.registries.ForgeRegistries; import snownee.jade.api.*; import snownee.jade.api.config.IPluginConfig; -import static net.exmo.quickcopy.Quickcopy.isKeyDown; - public enum JadeBlockProvider implements IBlockComponentProvider { INSTANCE; @@ -21,19 +18,15 @@ public ResourceLocation getUid() { @Override public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - if (Screen.hasAltDown()) { - if (isKeyDown) { - - ResourceLocation key = ForgeRegistries.BLOCKS.getKey(blockAccessor.getBlock()); - String string = key.toString(); - if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(string)) { - - Minecraft.getInstance().getChatListener().handleSystemMessage(Component.translatable("message.quickcopy.3").append(Component.literal(string)), false); + if (!Config.isEnable.get()) { + return; + } + if (!KeyBindings.COPY_INFO.isDown()) + return; - Minecraft.getInstance().keyboardHandler.setClipboard(string); + ResourceLocation key = ForgeRegistries.BLOCKS.getKey(blockAccessor.getBlock()); + String string = key.toString(); + TooltipTracker.copyToClipboard(string); - } - } - } } } diff --git a/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java b/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java index 4774630..3760026 100644 --- a/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java +++ b/src/main/java/net/exmo/quickcopy/JadeEntityProvider.java @@ -1,9 +1,7 @@ package net.exmo.quickcopy; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.network.chat.Component; +import net.exmo.quickcopy.Quickcopy.KeyBindings; +import net.exmo.quickcopy.Quickcopy.TooltipTracker; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.registries.ForgeRegistries; import snownee.jade.api.EntityAccessor; @@ -11,8 +9,6 @@ import snownee.jade.api.ITooltip; import snownee.jade.api.config.IPluginConfig; -import static net.exmo.quickcopy.Quickcopy.isKeyDown; - public enum JadeEntityProvider implements IEntityComponentProvider { INSTANCE; @@ -20,23 +16,17 @@ public enum JadeEntityProvider implements IEntityComponentProvider { public ResourceLocation getUid() { return JadeSupport.entityProviderId; } - + @Override public void appendTooltip(ITooltip iTooltip, EntityAccessor entityAccessor, IPluginConfig iPluginConfig) { - if (Screen.hasAltDown()) { - if (isKeyDown) { - - ResourceLocation key = ForgeRegistries.ENTITY_TYPES.getKey(entityAccessor.getEntity().getType()); - String string = key.toString(); - if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(string)) { - - Minecraft.getInstance().getChatListener().handleSystemMessage(Component.translatable("message.quickcopy.3").append(Component.literal(string)), false); - - Minecraft.getInstance().keyboardHandler.setClipboard(string); - - } - } + if (!Config.isEnable.get()) { + return; } + if (!KeyBindings.COPY_INFO.isDown()) + return; + ResourceLocation key = ForgeRegistries.ENTITY_TYPES.getKey(entityAccessor.getEntity().getType()); + String string = key.toString(); + TooltipTracker.copyToClipboard(string); } } diff --git a/src/main/java/net/exmo/quickcopy/JadeSupport.java b/src/main/java/net/exmo/quickcopy/JadeSupport.java index 0358ae3..77056bc 100644 --- a/src/main/java/net/exmo/quickcopy/JadeSupport.java +++ b/src/main/java/net/exmo/quickcopy/JadeSupport.java @@ -4,7 +4,6 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.level.block.Block; import snownee.jade.api.IWailaClientRegistration; -import snownee.jade.api.IWailaCommonRegistration; import snownee.jade.api.IWailaPlugin; import snownee.jade.api.WailaPlugin; @@ -14,10 +13,6 @@ public class JadeSupport implements IWailaPlugin { public static final ResourceLocation entityProviderId = new ResourceLocation(MODID, "entity"); public static final ResourceLocation blockProviderId = new ResourceLocation(MODID, "block"); - @Override - public void register(IWailaCommonRegistration registration) { - //TODO register data providers - } @Override public void registerClient(IWailaClientRegistration registration) { diff --git a/src/main/java/net/exmo/quickcopy/Quickcopy.java b/src/main/java/net/exmo/quickcopy/Quickcopy.java index c3654db..6626b5b 100644 --- a/src/main/java/net/exmo/quickcopy/Quickcopy.java +++ b/src/main/java/net/exmo/quickcopy/Quickcopy.java @@ -4,115 +4,130 @@ import mods.flammpfeil.slashblade.item.ItemSlashBlade; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; +import net.minecraftforge.client.event.RenderTooltipEvent; +import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.TickEvent; +import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; -import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.ModList; +import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.registries.ForgeRegistries; import org.lwjgl.glfw.GLFW; -import java.util.logging.Logger; + +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.logging.LogUtils; + +import io.netty.util.internal.StringUtil; + +import org.slf4j.Logger; + +import java.util.Optional; @OnlyIn(Dist.CLIENT) @Mod(Quickcopy.MODID) public class Quickcopy { public static final String MODID = "quickcopy"; - - static Logger LOGGER = Logger.getLogger(MODID); + private static final Logger LOGGER = LogUtils.getLogger(); public Quickcopy() { - IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); - - modEventBus.addListener(this::commonSetup); - MinecraftForge.EVENT_BUS.register(this); - + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, Config.SPEC); } - private void commonSetup(final FMLCommonSetupEvent event) { + @Mod.EventBusSubscriber(modid = MODID, bus = Bus.MOD, value = Dist.CLIENT) + public static class KeyBindings { + @SubscribeEvent + public static void registerKeyMappings(RegisterKeyMappingsEvent event) { + event.register(COPY_INFO); + } + + public static final KeyMapping COPY_INFO = new KeyMapping("key.quickcopy.copy", + InputConstants.Type.KEYSYM, + GLFW.GLFW_KEY_LEFT_ALT, + "key.categories.quickcopy"); } - static boolean isKeyDown = false; - - @Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT) - public static class ClientInit { - - public static final KeyMapping COPY_ITEM_ID = new KeyMapping("key.quickcopy.copy", GLFW.GLFW_KEY_0, - "key.categories.misc") { - private boolean isDownOld = false; - - @Override - public void setDown(boolean isDown) { - super.setDown(isDown); - if (isDownOld != isDown && isDown) { - if (isKeyDown) { - Minecraft.getInstance().getChatListener() - .handleSystemMessage(Component.translatable("message.quickcopy.2"), false); - isKeyDown = false; - } else { - Minecraft.getInstance().getChatListener() - .handleSystemMessage(Component.translatable("message.quickcopy.1"), false); - isKeyDown = true; - } - } + @Mod.EventBusSubscriber(modid = MODID, bus = Bus.FORGE, value = Dist.CLIENT) + public static class TooltipTracker { + public static ItemStack hoveredStack = ItemStack.EMPTY; + @SubscribeEvent + public static void onTooltipGather(RenderTooltipEvent.GatherComponents event) { + hoveredStack = event.getItemStack(); + } + + @SubscribeEvent + public static void renderTooltip(ItemTooltipEvent event) { + if (!Config.isEnable.get()) { + return; + } + var keyName = KeyBindings.COPY_INFO.getTranslatedKeyMessage().getString(); + var tooltip = Component.translatable("tootip.quickcopy.tooltip", keyName); + if (Config.showTip.get()) { + event.getToolTip().add(tooltip); } - }; + } @SubscribeEvent - public static void registerKeyMappings(RegisterKeyMappingsEvent event) { - event.register(COPY_ITEM_ID); + public static void onClientTick(ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) + return; + if (Minecraft.getInstance().screen == null) { + hoveredStack = ItemStack.EMPTY; + } } - } - - @Mod.EventBusSubscriber(Dist.CLIENT) - public static class ClientModEvents { + // 处理在GUI的按键事件,用于复制物品ID @SubscribeEvent - public static void renderTooltip(ItemTooltipEvent event) { - if (isKeyDown) { - event.getToolTip().add(Component.translatable("tootip.quickcopy.item")); - - if (Screen.hasAltDown()) { - LOGGER.info("Copy item id"); - boolean flag = false; - String anObject = ""; - if (ModList.get().isLoaded(SlashBlade.MODID)) { - if (event.getItemStack().getItem() instanceof ItemSlashBlade) { - flag = true; - anObject = event.getItemStack().getTag().getCompound("bladeState") - .getString("translationKey"); - } - } - - if (!flag) { - ResourceLocation key = ForgeRegistries.ITEMS.getKey(event.getItemStack().getItem()); - anObject = String.valueOf(key); - } - if (!Minecraft.getInstance().keyboardHandler.getClipboard().equals(anObject)) { - - Minecraft.getInstance().getChatListener().handleSystemMessage( - Component.translatable("message.quickcopy.3").append(Component.literal(anObject)), - false); - - Minecraft.getInstance().keyboardHandler.setClipboard(anObject); - - } - - } + public static void onGuiKeyPress(ScreenEvent.KeyPressed.Pre event) { + var key = InputConstants.getKey(event.getKeyCode(), event.getScanCode()); + if (key != null && KeyBindings.COPY_INFO.isActiveAndMatches(key)) { + executeCopy(hoveredStack); } } + + public static void executeCopy(ItemStack itemStack) { + if (itemStack.isEmpty()) { + return; + } + var item = itemStack.getItem(); + + if (ModList.get().isLoaded(SlashBlade.MODID) && item instanceof ItemSlashBlade) { + var info = Optional.ofNullable(itemStack.getTag()) + .map(tag -> tag.getCompound("bladeState")) + .map(compound -> compound.getString("translationKey")).orElse(""); + copyToClipboard(info); + return; + } + + var key = ForgeRegistries.ITEMS.getKey(item).toString(); + if (itemStack.hasTag() && Config.withTag.get()) { + key += itemStack.getTag(); + } + copyToClipboard(key); + } + + public static void copyToClipboard(String str) { + if (StringUtil.isNullOrEmpty(str) || Minecraft.getInstance().keyboardHandler.getClipboard().equals(str)) + return; + Component message = Optional + .ofNullable(Component.translatable("message.quickcopy.completed").append(Component.literal(str))) + .orElse(Component.literal("获取到空的内容")); + Minecraft.getInstance().getChatListener().handleSystemMessage(message, false); + Minecraft.getInstance().keyboardHandler.setClipboard(str); + } } } diff --git a/src/main/resources/assets/quickcopy/lang/en_us.json b/src/main/resources/assets/quickcopy/lang/en_us.json index 89e7dc8..872f775 100644 --- a/src/main/resources/assets/quickcopy/lang/en_us.json +++ b/src/main/resources/assets/quickcopy/lang/en_us.json @@ -1,9 +1,8 @@ { "key.quickcopy.copy": "open or close item id copy function", - "tootip.quickcopy.item": "§7Press \"Alt\" to copy item ID", - "message.quickcopy.1": "§7[QuickCopy] Copy item ID function to activate", - "message.quickcopy.2": "§7[QuickCopy] Copy item ID function to disable", - "message.quickcopy.3": "§7[QuickCopy] Replicated:", + "key.categories.quickcopy": "QuickCopy", + "tootip.quickcopy.tooltip": "§7Press [{0}] to copy item ID", + "message.quickcopy.completed": "§7[QuickCopy] :", "config.jade.plugin_quickcopy.block": "Copy Block ID", "config.jade.plugin_quickcopy.entity": "Copy Entity ID" } \ No newline at end of file diff --git a/src/main/resources/assets/quickcopy/lang/zh_cn.json b/src/main/resources/assets/quickcopy/lang/zh_cn.json index 5bf093a..3279c8e 100644 --- a/src/main/resources/assets/quickcopy/lang/zh_cn.json +++ b/src/main/resources/assets/quickcopy/lang/zh_cn.json @@ -1,9 +1,8 @@ { - "key.quickcopy.copy": "打开或关闭复制物品ID功能", - "tootip.quickcopy.item": "§7按下[Alt]来复制物品ID", - "message.quickcopy.1": "§7[快捷复制] 复制物品ID功能已启动", - "message.quickcopy.2": "§7[快捷复制] 复制物品ID功能已关闭", - "message.quickcopy.3": "§7[快捷复制] 已复制:", + "key.quickcopy.copy": "复制物品ID", + "key.categories.quickcopy": "快捷复制", + "tootip.quickcopy.tooltip": "§7按下 [{0}] 来复制物品ID", + "message.quickcopy.completed": "§7[快捷复制] :", "config.jade.plugin_quickcopy.block": "复制方块ID", "config.jade.plugin_quickcopy.entity": "复制实体ID" } \ No newline at end of file