From 040c3b4d67ad152febcaa35187e840052405eab9 Mon Sep 17 00:00:00 2001 From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com> Date: Tue, 22 Apr 2025 08:01:26 -0700 Subject: [PATCH 1/3] fix formatting chars being copied to hand --- .../compat/vanilla/command/infoparser/InfoParserItem.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/command/infoparser/InfoParserItem.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/command/infoparser/InfoParserItem.java index f712c6af0..c10936cda 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/command/infoparser/InfoParserItem.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/command/infoparser/InfoParserItem.java @@ -5,6 +5,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.common.FMLCommonHandler; import org.jetbrains.annotations.NotNull; import java.util.Iterator; @@ -14,6 +15,10 @@ public class InfoParserItem extends GenericInfoParser { public static final InfoParserItem instance = new InfoParserItem(); + private static void copyToClipboard(String text) { + GuiScreen.setClipboardString(text); + } + @Override public int priority() { return 1; @@ -39,7 +44,8 @@ public void iterate(List messages, @NotNull Iterator if (entries.hasNext()) { ItemStack entry = entries.next(); messages.add(information(entry, prettyNbt)); - GuiScreen.setClipboardString(copyText(entry, prettyNbt)); + // can only copy to clipboard if a client is running this + if (FMLCommonHandler.instance().getSide().isClient()) copyToClipboard(copyText(entry, false)); } while (entries.hasNext()) { messages.add(information(entries.next(), prettyNbt)); From a653f456073c4e7d91ab50b2ad0cd3f6ca15cf76 Mon Sep 17 00:00:00 2001 From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com> Date: Tue, 22 Apr 2025 08:39:20 -0700 Subject: [PATCH 2/3] disable jei tab info on server --- .../groovyscript/compat/mods/jei/InfoParserTab.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/InfoParserTab.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/InfoParserTab.java index a51232375..7a91ff49a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/InfoParserTab.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/InfoParserTab.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.jei; +import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.infocommand.InfoParserPackage; import com.cleanroommc.groovyscript.compat.vanilla.command.infoparser.GenericInfoParser; import com.cleanroommc.groovyscript.core.mixin.jei.ModRegistryAccessor; import com.cleanroommc.groovyscript.helper.StyleConstant; import mezz.jei.api.recipe.IRecipeCategory; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.oredict.OreDictionary; import org.jetbrains.annotations.NotNull; @@ -36,6 +38,11 @@ public String text(@NotNull IRecipeCategory entry, boolean colored, boolean pret @Override @SuppressWarnings("rawtypes") public void parse(InfoParserPackage info) { + // only runs client-side + if (!FMLCommonHandler.instance().getSide().isClient()) { + GroovyLog.get().debug("Attempted to check the JEI tab via info parser server-side"); + return; + } if (info.getStack().isEmpty()) return; // this gets all categories the item appears on - and there isn't any inbuilt method to get *just* catalysts. From cf6f35c0b1ae5baa7367df8b4af4eb80843e627b Mon Sep 17 00:00:00 2001 From: Waiting Idly <25394029+WaitingIdly@users.noreply.github.com> Date: Wed, 23 Apr 2025 08:39:33 -0700 Subject: [PATCH 3/3] sort info on addition, add javadocs --- .../api/infocommand/InfoParser.java | 3 +- .../api/infocommand/InfoParserRegistry.java | 38 ++++++++++++++++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParser.java b/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParser.java index b6726a896..b028fd36c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParser.java +++ b/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParser.java @@ -16,7 +16,8 @@ public interface InfoParser { /** * Priority of the parser for determining the order they are logged in chat, * with lowest being first and highest being last. - * The is 100, and {@link com.cleanroommc.groovyscript.compat.vanilla.command.infoparser.InfoParserItem#priority()} is set to 1. + * The default for {@link com.cleanroommc.groovyscript.compat.vanilla.command.infoparser.GenericInfoParser GenericInfoParser} 100, + * and {@link com.cleanroommc.groovyscript.compat.vanilla.command.infoparser.InfoParserItem#priority() InfoParserItem.priority()} is set to 1. * * @return the priority of the Parser */ diff --git a/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParserRegistry.java b/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParserRegistry.java index 5c9977412..c207c66be 100644 --- a/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParserRegistry.java +++ b/src/main/java/com/cleanroommc/groovyscript/api/infocommand/InfoParserRegistry.java @@ -1,23 +1,51 @@ package com.cleanroommc.groovyscript.api.infocommand; +import com.google.common.collect.ImmutableList; + import java.util.ArrayList; import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; +/** + * To help gather information about items, blocks, the world, etc. + * GroovyScript adds {@link InfoParser}s, which will provide information to the player + * using data from an {@link InfoParserPackage}. + *

+ * This is currently only used for commands related to {@link com.cleanroommc.groovyscript.command.BaseInfoCommand BaseInfoCommand}. + * + * @see com.cleanroommc.groovyscript.compat.vanilla.command.infoparser.StandardInfoParserRegistry StandardInfoParserRegistry + */ public class InfoParserRegistry { private static final List INFO_PARSERS = new ArrayList<>(); + private static final List IDS = new ArrayList<>(); - public static void addInfoParser(InfoParser command) { - INFO_PARSERS.add(command); + /** + * Register the given info parser. + */ + public static void addInfoParser(InfoParser parser) { + INFO_PARSERS.add(parser); + INFO_PARSERS.sort(Comparator.comparing(InfoParser::priority)); } + /** + * @return all registered info parsers + */ public static List getInfoParsers() { - return INFO_PARSERS.stream().sorted(Comparator.comparing(InfoParser::priority)).collect(Collectors.toList()); + return ImmutableList.copyOf(INFO_PARSERS); } + /** + * @return the ids of all registered info parsers + */ public static List getIds() { - return INFO_PARSERS.stream().sorted(Comparator.comparing(InfoParser::priority)).map(InfoParser::id).collect(Collectors.toList()); + // generate the list + if (IDS.size() != INFO_PARSERS.size()) { + IDS.clear(); + for (var parser : INFO_PARSERS) { + IDS.add(parser.id()); + } + } + return ImmutableList.copyOf(IDS); } }