Skip to content

Commit

Permalink
fix codec
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Jan 12, 2025
1 parent 613de0d commit bfa2d8f
Show file tree
Hide file tree
Showing 9 changed files with 132 additions and 38 deletions.
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"type": "researchd:simple",
"parent": {},
"icon": "minecraft:stick",
"requires_parent": false,
"research_points": {
"researchd:overworld": 3
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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"));
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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<ResearchNode> 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) {
}

}
Original file line number Diff line number Diff line change
@@ -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<ResearchNode> next;
public class ResearchNode extends TechListEntry {
private final List<ResearchNode> 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) {
Expand All @@ -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<ResearchNode> getNext() {
return next;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -20,5 +21,6 @@ public DatapackRegistryProvider(PackOutput output, CompletableFuture<HolderLooku

public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder()
// -- RESEARCH PACK --
.add(ResearchdRegistries.RESEARCH_PACK_KEY, ResearchPacks::bootstrap);
.add(ResearchdRegistries.RESEARCH_PACK_KEY, ResearchPacks::bootstrap)
.add(ResearchdRegistries.RESEARCH_KEY, Researches::bootstrap);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,48 @@
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.portingdeadmods.portingdeadlibs.utils.codec.CodecUtils;
import com.portingdeadmods.researchd.ResearchdRegistries;
import com.portingdeadmods.researchd.api.research.Research;
import com.portingdeadmods.researchd.api.research.ResearchPack;
import com.portingdeadmods.researchd.api.research.serializers.ResearchSerializer;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ExtraCodecs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.ItemLike;
import org.jetbrains.annotations.Nullable;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

// TODO: Change icon to Ingredient
public record SimpleResearch(Item icon, Map<ResourceKey<ResearchPack>, Integer> researchPoints, Optional<ResourceKey<Research>> 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<String, Integer> researchPoints, Optional<ResourceKey<Research>> parent, boolean requiresParent) {
Map<ResourceKey<ResearchPack>, Integer> map = new HashMap<>();
for (Map.Entry<String, Integer> researchPoint : researchPoints.entrySet()) {
ResourceKey<ResearchPack> 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<String, Integer> getStringMap() {
Map<String, Integer> map = new HashMap<>();
for (Map.Entry<ResourceKey<ResearchPack>, Integer> researchPoint : this.researchPoints.entrySet()) {
map.put(researchPoint.getKey().location().toString(), researchPoint.getValue());
}
return map;
}

@Override
public ResearchSerializer<?> getSerializer() {
return Serializer.INSTANCE;
Expand All @@ -34,10 +55,10 @@ public static class Serializer implements ResearchSerializer<SimpleResearch> {
public static final Serializer INSTANCE = new Serializer();
public static final MapCodec<SimpleResearch> 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() {
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<Research> EXAMPLE = key("example");
private static final Map<ResourceKey<Research>, Research.Builder<?>> RESEARCHES = new HashMap<>();

private static final ResourceKey<Research> WOOD = register("wood", builder -> builder
.icon(Items.OAK_LOG)
.researchPacks(Map.of(
ResearchPacks.OVERWORLD, 3
)));
private static final ResourceKey<Research> STICK = register("stick", builder -> builder
.icon(Items.STICK)
.researchPacks(Map.of(
ResearchPacks.OVERWORLD, 5
)));
private static final ResourceKey<Research> WOODEN_PICKAXE = register("wooden_pickaxe", builder -> builder
.icon(Items.WOODEN_PICKAXE)
.researchPacks(Map.of(ResearchPacks.OVERWORLD, 6, ResearchPacks.NETHER, 3)));
private static final ResourceKey<Research> STONE = register("stone", null);
private static final ResourceKey<Research> COPPER = register("copper", null);
private static final ResourceKey<Research> COAL = register("coal", null);

public static void bootstrap(BootstrapContext<Research> context) {
register(context, EXAMPLE, SimpleResearch.Builder.of()
.icon(Items.STICK)
.researchPacks(Map.of(ResearchPacks.OVERWORLD, 3)));
for (Map.Entry<ResourceKey<Research>, Research.Builder<?>> research : RESEARCHES.entrySet()) {
register(context, research.getKey(), research.getValue());
}
}

private static void register(BootstrapContext<Research> context, ResourceKey<Research> key, Research.Builder<?> builder) {
Expand All @@ -29,4 +49,10 @@ private static void register(BootstrapContext<Research> context, ResourceKey<Res
private static ResourceKey<Research> key(String name) {
return ResourceKey.create(ResearchdRegistries.RESEARCH_KEY, Researchd.rl(name));
}

private static ResourceKey<Research> register(String name, UnaryOperator<SimpleResearch.Builder> builder) {
ResourceKey<Research> key = key(name);
RESEARCHES.put(key, builder.apply(SimpleResearch.Builder.of()));
return key;
}
}

0 comments on commit bfa2d8f

Please sign in to comment.