From bfa2d8fb4ea1119b1931e29e7474ef17add9bc9c Mon Sep 17 00:00:00 2001 From: thepigcat Date: Sun, 12 Jan 2025 11:32:31 +0100 Subject: [PATCH] fix codec --- .../103d9f3f36b01595f1aa5172191e60eff02e6924 | 3 +- .../researchd/researchd/research/example.json | 9 ++++ .../client/screens/ResearchScreen.java | 11 ++++- .../client/screens/graph/ResearchGraph.java | 43 +++++++++++++++++++ .../client/screens/graph/ResearchNode.java | 32 +++++--------- .../client/screens/list/TechList.java | 9 +--- .../datagen/DatapackRegistryProvider.java | 4 +- .../impl/research/SimpleResearch.java | 25 ++++++++++- .../researchd/registries/Researches.java | 34 +++++++++++++-- 9 files changed, 132 insertions(+), 38 deletions(-) create mode 100644 src/generated/resources/data/researchd/researchd/research/example.json create mode 100644 src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchGraph.java diff --git a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 index 36d2a15..4fce1ba 100644 --- a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -1,4 +1,5 @@ -// 1.21.1 2025-01-10T20:56:41.675605318 Registries +// 1.21.1 2025-01-12T01:35:51.697973695 Registries +a2254160c3b757cc65c156058b73a4d7fcfee7af data/researchd/researchd/research/example.json 1cdd93f8a6bb79a07d1657ef616b5bd4fbdb247d data/researchd/researchd/research_pack/end.json 89ac98c63d706e87b221fe288b9947b8018976ca data/researchd/researchd/research_pack/nether.json f077b1491836c0ad25f25653e259fb15df317440 data/researchd/researchd/research_pack/overworld.json diff --git a/src/generated/resources/data/researchd/researchd/research/example.json b/src/generated/resources/data/researchd/researchd/research/example.json new file mode 100644 index 0000000..e59b498 --- /dev/null +++ b/src/generated/resources/data/researchd/researchd/research/example.json @@ -0,0 +1,9 @@ +{ + "type": "researchd:simple", + "parent": {}, + "icon": "minecraft:stick", + "requires_parent": false, + "research_points": { + "researchd:overworld": 3 + } +} \ No newline at end of file diff --git a/src/main/java/com/portingdeadmods/researchd/client/screens/ResearchScreen.java b/src/main/java/com/portingdeadmods/researchd/client/screens/ResearchScreen.java index 8be60b7..28f1885 100644 --- a/src/main/java/com/portingdeadmods/researchd/client/screens/ResearchScreen.java +++ b/src/main/java/com/portingdeadmods/researchd/client/screens/ResearchScreen.java @@ -2,6 +2,7 @@ import com.portingdeadmods.researchd.Researchd; import com.portingdeadmods.researchd.api.research.Research; +import com.portingdeadmods.researchd.client.screens.graph.ResearchGraph; import com.portingdeadmods.researchd.client.screens.graph.ResearchNode; import com.portingdeadmods.researchd.client.screens.list.EntryType; import com.portingdeadmods.researchd.client.screens.list.TechList; @@ -30,6 +31,7 @@ public class ResearchScreen extends Screen { private final TechList techList; private final ResearchQueue researchQueue; + private final ResearchGraph researchGraph; public ResearchScreen() { super(Component.translatable("screen.researchd.research")); @@ -39,14 +41,21 @@ public ResearchScreen() { this.researchQueue.fillList(); int width = Minecraft.getInstance().getWindow().getGuiScaledWidth(); Researchd.LOGGER.debug("Width: {}", width); + int x = 174; + this.researchGraph = new ResearchGraph(x, 0, 300, 253); + ResearchNode node = new ResearchNode(SimpleResearch.debug(Items.IRON_NUGGET), EntryType.RESEARCHED, x + 60, 60); + this.researchGraph.setNode(node); + node.addNext(new ResearchNode(SimpleResearch.debug(Items.IRON_BARS), EntryType.RESEARCHABLE, x + 70, 100)); } @Override protected void init() { super.init(); - this.techList.visitWidgets(this::addRenderableWidget); + addRenderableWidget(this.techList); addRenderableWidget(this.researchQueue); + addRenderableWidget(this.techList.button); + addRenderableWidget(this.researchGraph); } @Override diff --git a/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchGraph.java b/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchGraph.java new file mode 100644 index 0000000..9d556b6 --- /dev/null +++ b/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchGraph.java @@ -0,0 +1,43 @@ +package com.portingdeadmods.researchd.client.screens.graph; + +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class ResearchGraph extends AbstractWidget { + private @Nullable ResearchNode node; + private final List nodes; + + public ResearchGraph(int x, int y, int width, int height) { + super(x, y, width, height, Component.empty()); + this.nodes = new ArrayList<>(); + } + + public void setNode(@Nullable ResearchNode node) { + this.node = node; + } + + @Override + protected void renderWidget(GuiGraphics guiGraphics, int i, int i1, float v) { + if (node != null) { + renderNode(node, guiGraphics, i, i1, v); + } + } + + private void renderNode(ResearchNode node, GuiGraphics guiGraphics, int mouseX, int mouseY,float partialTick) { + node.render(guiGraphics, mouseX, mouseY, partialTick); + for (ResearchNode rNode : node.getNext()) { + renderNode(rNode, guiGraphics, mouseX, mouseY, partialTick); + } + } + + @Override + protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { + } + +} diff --git a/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchNode.java b/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchNode.java index 25954a0..b114691 100644 --- a/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchNode.java +++ b/src/main/java/com/portingdeadmods/researchd/client/screens/graph/ResearchNode.java @@ -1,29 +1,23 @@ package com.portingdeadmods.researchd.client.screens.graph; import com.portingdeadmods.researchd.api.research.Research; +import com.portingdeadmods.researchd.client.screens.list.EntryType; +import com.portingdeadmods.researchd.client.screens.list.TechListEntry; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.network.chat.Component; +import java.util.ArrayList; import java.util.List; -public class ResearchNode extends AbstractWidget { - private Research research; - private List next; +public class ResearchNode extends TechListEntry { + private final List next; - public ResearchNode(Research research, int x, int y) { - super(x, y, 20, 20, Component.empty()); - this.research = research; - } - - public void setResearch(Research research) { - this.research = research; - } - - public Research getResearch() { - return research; + public ResearchNode(Research research, EntryType type, int x, int y) { + super(research, type, x, y); + this.next = new ArrayList<>(); } public void addNext(ResearchNode next) { @@ -34,13 +28,7 @@ public void removeNext(ResearchNode toRemove) { this.next.remove(toRemove); } - @Override - protected void renderWidget(GuiGraphics guiGraphics, int x, int y, float v) { - guiGraphics.renderItem(research.icon().getDefaultInstance(), x, y); - } - - @Override - protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) { - + public List getNext() { + return next; } } diff --git a/src/main/java/com/portingdeadmods/researchd/client/screens/list/TechList.java b/src/main/java/com/portingdeadmods/researchd/client/screens/list/TechList.java index e124e85..4ad3082 100644 --- a/src/main/java/com/portingdeadmods/researchd/client/screens/list/TechList.java +++ b/src/main/java/com/portingdeadmods/researchd/client/screens/list/TechList.java @@ -35,7 +35,7 @@ public class TechList extends AbstractWidget { private final int cols; private int curRow; private int scrollOffset; - private final ImageButton button; + public final ImageButton button; private boolean hasSearchBar; // DEBUG @@ -52,12 +52,7 @@ public TechList(int x, int y, int rows, int cols) { this.button = new ImageButton(scrollerX, y + 6, 14, 14, new WidgetSprites( Researchd.rl("search_button"), Researchd.rl("search_button_highlighted") - ), this::onButtonClicked) { - @Override - public void onClick(double mouseX, double mouseY) { - onButtonClicked(this); - } - }; + ), this::onButtonClicked); this.button.active = true; this.button.visible = true; } diff --git a/src/main/java/com/portingdeadmods/researchd/datagen/DatapackRegistryProvider.java b/src/main/java/com/portingdeadmods/researchd/datagen/DatapackRegistryProvider.java index 691aa08..1ec5a28 100644 --- a/src/main/java/com/portingdeadmods/researchd/datagen/DatapackRegistryProvider.java +++ b/src/main/java/com/portingdeadmods/researchd/datagen/DatapackRegistryProvider.java @@ -3,6 +3,7 @@ import com.portingdeadmods.researchd.Researchd; import com.portingdeadmods.researchd.ResearchdRegistries; import com.portingdeadmods.researchd.registries.ResearchPacks; +import com.portingdeadmods.researchd.registries.Researches; import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistrySetBuilder; import net.minecraft.data.PackOutput; @@ -20,5 +21,6 @@ public DatapackRegistryProvider(PackOutput output, CompletableFuture, Integer> researchPoints, Optional> parent, boolean requiresParent) implements Research { public static SimpleResearch debug(ItemLike icon) { return new SimpleResearch(icon.asItem(), Map.of(), Optional.empty(), false); } + private static SimpleResearch fromStringMap(Item icon, Map researchPoints, Optional> parent, boolean requiresParent) { + Map, Integer> map = new HashMap<>(); + for (Map.Entry researchPoint : researchPoints.entrySet()) { + ResourceKey researchPack = ResourceKey.create(ResearchdRegistries.RESEARCH_PACK_KEY, ResourceLocation.parse(researchPoint.getKey())); + map.put(researchPack, researchPoint.getValue()); + } + return new SimpleResearch(icon, map, parent, requiresParent); + } + + private Map getStringMap() { + Map map = new HashMap<>(); + for (Map.Entry, Integer> researchPoint : this.researchPoints.entrySet()) { + map.put(researchPoint.getKey().location().toString(), researchPoint.getValue()); + } + return map; + } + @Override public ResearchSerializer getSerializer() { return Serializer.INSTANCE; @@ -34,10 +55,10 @@ public static class Serializer implements ResearchSerializer { public static final Serializer INSTANCE = new Serializer(); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( CodecUtils.registryCodec(BuiltInRegistries.ITEM).fieldOf("icon").forGetter(SimpleResearch::icon), - Codec.unboundedMap(ResearchPack.RESOURCE_KEY_CODEC, Codec.INT).fieldOf("research_points").forGetter(SimpleResearch::researchPoints), + Codec.unboundedMap(Codec.STRING, Codec.INT).fieldOf("research_points").forGetter(SimpleResearch::getStringMap), ExtraCodecs.optionalEmptyMap(Research.RESOURCE_KEY_CODEC).fieldOf("parent").forGetter(SimpleResearch::parent), Codec.BOOL.fieldOf("requires_parent").forGetter(SimpleResearch::requiresParent) - ).apply(instance, SimpleResearch::new)); + ).apply(instance, SimpleResearch::fromStringMap)); private Serializer() { } diff --git a/src/main/java/com/portingdeadmods/researchd/registries/Researches.java b/src/main/java/com/portingdeadmods/researchd/registries/Researches.java index 3882b49..3c1939e 100644 --- a/src/main/java/com/portingdeadmods/researchd/registries/Researches.java +++ b/src/main/java/com/portingdeadmods/researchd/registries/Researches.java @@ -11,15 +11,35 @@ import net.minecraft.util.FastColor; import net.minecraft.world.item.Items; +import java.util.HashMap; import java.util.Map; +import java.util.function.Function; +import java.util.function.UnaryOperator; public final class Researches { - private static final ResourceKey EXAMPLE = key("example"); + private static final Map, Research.Builder> RESEARCHES = new HashMap<>(); + + private static final ResourceKey WOOD = register("wood", builder -> builder + .icon(Items.OAK_LOG) + .researchPacks(Map.of( + ResearchPacks.OVERWORLD, 3 + ))); + private static final ResourceKey STICK = register("stick", builder -> builder + .icon(Items.STICK) + .researchPacks(Map.of( + ResearchPacks.OVERWORLD, 5 + ))); + private static final ResourceKey WOODEN_PICKAXE = register("wooden_pickaxe", builder -> builder + .icon(Items.WOODEN_PICKAXE) + .researchPacks(Map.of(ResearchPacks.OVERWORLD, 6, ResearchPacks.NETHER, 3))); + private static final ResourceKey STONE = register("stone", null); + private static final ResourceKey COPPER = register("copper", null); + private static final ResourceKey COAL = register("coal", null); public static void bootstrap(BootstrapContext context) { - register(context, EXAMPLE, SimpleResearch.Builder.of() - .icon(Items.STICK) - .researchPacks(Map.of(ResearchPacks.OVERWORLD, 3))); + for (Map.Entry, Research.Builder> research : RESEARCHES.entrySet()) { + register(context, research.getKey(), research.getValue()); + } } private static void register(BootstrapContext context, ResourceKey key, Research.Builder builder) { @@ -29,4 +49,10 @@ private static void register(BootstrapContext context, ResourceKey key(String name) { return ResourceKey.create(ResearchdRegistries.RESEARCH_KEY, Researchd.rl(name)); } + + private static ResourceKey register(String name, UnaryOperator builder) { + ResourceKey key = key(name); + RESEARCHES.put(key, builder.apply(SimpleResearch.Builder.of())); + return key; + } }