Skip to content

Commit

Permalink
codeeeeeecssss
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Jan 11, 2025
1 parent 21df8c3 commit ddd3e83
Show file tree
Hide file tree
Showing 15 changed files with 253 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// 1.21.1 2025-01-10T20:56:41.675605318 Registries
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,5 @@
{
"type": "researchd:simple",
"color": -16711936,
"customTexture": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"type": "researchd:simple",
"color": -16776961,
"customTexture": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"type": "researchd:simple",
"color": -65536,
"customTexture": {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.portingdeadmods.researchd.api.research.serializers.ResearchSerializer;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.Item;

import java.util.Map;
import java.util.Optional;
Expand All @@ -16,6 +17,9 @@ public interface Research {
Codec<Research> CODEC = ResearchdRegistries.RESEARCH_SERIALIZER.byNameCodec().dispatch(Research::getSerializer, ResearchSerializer::codec);
Codec<ResourceKey<Research>> RESOURCE_KEY_CODEC = ResourceKey.codec(ResearchdRegistries.RESEARCH_KEY);

Item icon();

// TODO: Encode this using strings as keys
/**
* @return A map that maps the possible research packs that can be used and the quantity required
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,45 @@
package com.portingdeadmods.researchd.client.screens;

import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.api.research.Research;
import com.portingdeadmods.researchd.client.screens.graph.ResearchNode;
import com.portingdeadmods.researchd.client.screens.list.EntryType;
import com.portingdeadmods.researchd.client.screens.list.TechList;
import com.portingdeadmods.researchd.client.screens.list.TechListEntry;
import com.portingdeadmods.researchd.impl.research.SimpleResearch;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.ContainerObjectSelectionList;
import net.minecraft.client.gui.components.StringWidget;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.layouts.GridLayout;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;

import java.util.List;
import java.util.Map;
import java.util.Optional;

public class ResearchScreen extends Screen {
public static final ResourceLocation BACKGROUND_TEXTURE = Researchd.rl("textures/gui/research_screen.png");

private final TechList techList;

public ResearchScreen() {
super(Component.translatable("screen.researchd.research"));
this.techList = new TechList(100, 100, 7, 7);
this.techList.fillList();
}

@Override
protected void init() {
super.init();

this.techList.visitWidgets(this::addRenderableWidget);
}

@Override
Expand All @@ -22,6 +51,9 @@ public boolean isPauseScreen() {
public void renderBackground(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
super.renderBackground(guiGraphics, mouseX, mouseY, partialTick);

guiGraphics.blit(BACKGROUND_TEXTURE, 0, 0, 256, 256, 256, 256);
float scale = 1f;

guiGraphics.blit(BACKGROUND_TEXTURE, 100, 0, (int) (256 * scale), (int) (242 * scale), 0, 0, 256, 242, 256, 242);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.portingdeadmods.researchd.client.screens.graph;

import com.portingdeadmods.researchd.api.research.Research;
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.List;

public class ResearchNode extends AbstractWidget {
private Research research;
private 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 void addNext(ResearchNode next) {
this.next.add(next);
}

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) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.portingdeadmods.researchd.client.screens.list;

import com.portingdeadmods.researchd.Researchd;
import net.minecraft.resources.ResourceLocation;

public enum EntryType {
RESEARCHED(Researchd.rl("entry_green")),
RESEARCHABLE(Researchd.rl("entry_yellow")),
LOCKED(Researchd.rl("entry_red"));

private final ResourceLocation spriteTexture;

EntryType(ResourceLocation spriteTexture) {
this.spriteTexture = spriteTexture;
}

public ResourceLocation getSpriteTexture() {
return spriteTexture;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.portingdeadmods.researchd.client.screens.list;

import com.portingdeadmods.researchd.impl.research.SimpleResearch;
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 net.minecraft.util.RandomSource;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

public class TechList extends AbstractWidget {
private final List<List<TechListEntry>> researches;
private final int rows;
private final int cols;

// DEBUG
private final List<Item> items = List.of(Items.DIAMOND, Items.IRON_AXE, Items.FURNACE, Items.MINECART);

public TechList(int x, int y, int rows, int cols) {
super(x, y, TechListEntry.WIDTH * rows, TechListEntry.HEIGHT * cols, Component.empty());
this.researches = new ArrayList<>();
this.rows = rows;
this.cols = cols;
}

public void fillList() {
for (int col = 0; col < cols; col++) {
List<TechListEntry> entries = new ArrayList<>();
for (int row = 0; row < rows; row++) {
RandomSource random = Minecraft.getInstance().level.random;
int randInt = random.nextInt(0, items.size());
int randType = random.nextInt(0, 3);
entries.add(new TechListEntry(SimpleResearch.debug(this.items.get(randInt)), EntryType.values()[randType], getX() + row * TechListEntry.WIDTH, getY() + col * TechListEntry.HEIGHT));
}
this.researches.add(entries);
}
}

@Override
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float v) {
}

@Override
protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) {

}

@Override
public void visitWidgets(Consumer<AbstractWidget> consumer) {
for (int col = 0; col < cols; col++) {
for (int row = 0; row < rows; row++) {
consumer.accept(this.researches.get(col).get(row));
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.portingdeadmods.researchd.client.screens.list;

import com.mojang.blaze3d.vertex.PoseStack;
import com.portingdeadmods.researchd.api.research.Research;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.narration.NarrationElementOutput;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.Nullable;

public class TechListEntry extends AbstractWidget {
public static final int WIDTH = 20;
public static final int HEIGHT = 24;

private Research research;
private EntryType type;

public TechListEntry(@Nullable Research research, @Nullable EntryType type, int x, int y) {
super(x, y, WIDTH, HEIGHT, Component.empty());
this.research = research;
this.type = type;
}

public Research getResearch() {
return research;
}

public EntryType getType() {
return type;
}

public void setResearch(Research research) {
this.research = research;
}

public void setType(EntryType type) {
this.type = type;
}

@Override
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) {
if (type != null) {
guiGraphics.blitSprite(type.getSpriteTexture(), getX(), getY(), WIDTH, HEIGHT);

guiGraphics.renderItem(research.icon().getDefaultInstance(), getX() + 2, getY() + 2);

if (isHovered()) {
int color = -2130706433;
guiGraphics.fillGradient(RenderType.guiOverlay(), getX() + 1, getY() + 1, getX() + 20, getY() + 20, color, color, 0);
}
}
}

@Override
protected void updateWidgetNarration(NarrationElementOutput narrationElementOutput) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,26 @@
import com.mojang.serialization.Codec;
import com.mojang.serialization.MapCodec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import com.portingdeadmods.portingdeadlibs.utils.codec.CodecUtils;
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.util.ExtraCodecs;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.ItemLike;

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

public record SimpleResearch(Map<ResourceKey<ResearchPack>, Integer> researchPoints, Optional<ResourceKey<Research>> parent, boolean requiresParent) implements Research {
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);
}

@Override
public ResearchSerializer<?> getSerializer() {
return Serializer.INSTANCE;
Expand All @@ -23,6 +31,7 @@ public ResearchSerializer<?> getSerializer() {
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),
ExtraCodecs.optionalEmptyMap(Research.RESOURCE_KEY_CODEC).fieldOf("parent").forGetter(SimpleResearch::parent),
Codec.BOOL.fieldOf("requires_parent").forGetter(SimpleResearch::requiresParent)
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit ddd3e83

Please sign in to comment.