Skip to content

Commit

Permalink
täääääääch list
Browse files Browse the repository at this point in the history
Thepigcat76 committed Jan 12, 2025
1 parent c81e01d commit 4f224e3
Showing 19 changed files with 247 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "researchd:simple",
"icon": "minecraft:coal",
"parents": [
"researchd:wooden_pickaxe"
],
"requires_parent": true,
"research_points": {
"researchd:end": 4,
"researchd:nether": 7
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"type": "researchd:simple",
"icon": "minecraft:raw_copper",
"parents": [
"researchd:wooden_pickaxe"
],
"requires_parent": true,
"research_points": {
"researchd:nether": 5
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"type": "researchd:simple",
"icon": "minecraft:stick",
"parents": [
"researchd:wood"
],
"requires_parent": false,
"research_points": {
"researchd:overworld": 5
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"type": "researchd:simple",
"icon": "minecraft:stone",
"parents": [
"researchd:wooden_pickaxe"
],
"requires_parent": true,
"research_points": {
"researchd:end": 4,
"researchd:overworld": 3
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"type": "researchd:simple",
"icon": "minecraft:oak_log",
"parents": [],
"requires_parent": false,
"research_points": {
"researchd:overworld": 3
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"type": "researchd:simple",
"icon": "minecraft:wooden_pickaxe",
"parents": [
"researchd:wood",
"researchd:stick"
],
"requires_parent": true,
"research_points": {
"researchd:nether": 3,
"researchd:overworld": 6
}
}
6 changes: 6 additions & 0 deletions src/main/java/com/portingdeadmods/researchd/Researchd.java
Original file line number Diff line number Diff line change
@@ -6,6 +6,9 @@
import com.portingdeadmods.researchd.api.research.serializers.ResearchPredicateSerializer;
import com.portingdeadmods.researchd.commands.ResearchdCommands;
import com.portingdeadmods.researchd.data.ResearchdAttachments;
import com.portingdeadmods.researchd.registries.ResearchdDataComponents;
import com.portingdeadmods.researchd.registries.ResearchdItems;
import com.portingdeadmods.researchd.registries.ResearchdTab;
import com.portingdeadmods.researchd.registries.serializers.ResearchPackSerializers;
import com.portingdeadmods.researchd.registries.serializers.ResearchPredicateSerializers;
import com.portingdeadmods.researchd.registries.serializers.ResearchSerializers;
@@ -44,6 +47,9 @@ public Researchd(IEventBus modEventBus, ModContainer modContainer) {
ResearchPackSerializers.SERIALIZERS.register(modEventBus);
ResearchSerializers.SERIALIZERS.register(modEventBus);
ResearchPredicateSerializers.SERIALIZERS.register(modEventBus);
ResearchdItems.ITEMS.register(modEventBus);
ResearchdDataComponents.COMPONENTS.register(modEventBus);
ResearchdTab.TABS.register(modEventBus);

modEventBus.addListener(this::registerCapabilities);
modEventBus.addListener(this::registerRegistries);
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.portingdeadmods.researchd;

import com.portingdeadmods.researchd.client.ResearchdKeybinds;
import com.portingdeadmods.researchd.registries.ResearchdDataComponents;
import com.portingdeadmods.researchd.registries.ResearchdItems;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent;
import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent;

@Mod(value = ResearchdClient.MODID, dist = Dist.CLIENT)
@@ -14,9 +17,14 @@ public class ResearchdClient {

public ResearchdClient(IEventBus eventBus, ModContainer modContainer) {
eventBus.addListener(this::registerKeybinds);
eventBus.addListener(this::registerColorHandlers);
}

private void registerKeybinds(RegisterKeyMappingsEvent event) {
event.register(ResearchdKeybinds.OPEN_RESEARCH_SCREEN.get());
}

private void registerColorHandlers(RegisterColorHandlersEvent.Item event) {
event.register((stack, layer) -> layer == 1 ? stack.get(ResearchdDataComponents.RESEARCH_PACK).color() : -1, ResearchdItems.RESEARCH_PACK);
}
}
Original file line number Diff line number Diff line change
@@ -4,10 +4,16 @@
import com.portingdeadmods.researchd.ResearchdRegistries;
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 com.portingdeadmods.researchd.registries.Researches;
import net.minecraft.client.Minecraft;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistryAccess;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;

import java.util.*;
@@ -51,24 +57,30 @@ public ResearchManager(Level level) {
}

public void setCoordinates(int paddingX, int paddingY) {
Set<ResearchNode> nodes = new HashSet<>(this.nodes);

int i = 0;
for (ResearchNode node : this.rootNodes) {
Researchd.LOGGER.debug("root: {}", node.getHolder().getKey().location());
setCoordinate(node, paddingX + i * 40, paddingY, 0);
setCoordinate(nodes, node, paddingX + i * 40, paddingY, 0);
i++;
}
}

public void setCoordinate(ResearchNode node, int x, int y, int nesting) {
public void setCoordinate(Set<ResearchNode> remaining, ResearchNode node, int x, int y, int nesting) {
Researchd.LOGGER.debug("node: {}, nesting: {}", node.getHolder().getKey().location(), nesting);
node.setX(x);
node.setY(y);
Researchd.LOGGER.debug("y: {}", y);
List<ResearchNode> next = node.getNext();
for (int i = 0; i < next.size(); i++) {
ResearchNode nextNode = next.get(i);
int newNesting = nesting + 1;
setCoordinate(nextNode, x + i * 30, y + newNesting * 30, newNesting + 1);
Set<ResearchNode> next = node.getNext();
int newNesting = nesting + 1;
int i = 0;
for (ResearchNode nextNode : next) {
if (remaining.contains(nextNode)) {
remaining.remove(nextNode);
setCoordinate(remaining, nextNode, x + i * 30, y + newNesting * 30, newNesting);
}
i++;
}
}

@@ -92,4 +104,31 @@ public Set<Holder<Research>> getResearches() {
public Set<ResearchNode> getRootNodes() {
return rootNodes;
}

public List<List<TechListEntry>> getEntries(int cols) {
return chunkList(this.researches.stream()
.map(holder -> new TechListEntry(holder.value(), EntryType.RESEARCHABLE, 0, 0))
.toList(), cols);
}

public void setEntryCoordinates(List<List<TechListEntry>> entries, int paddingX, int paddingY) {
int size = entries.size();
for (int row = 0; row < size; row++) {
List<TechListEntry> rowList = entries.get(row);
for (int col = 0; col < rowList.size(); col++) {
TechListEntry entry = rowList.get(col);
entry.setX(paddingX + col * TechListEntry.WIDTH);
entry.setY(paddingY + row * TechListEntry.HEIGHT);
}
}
}

public static <T> List<List<T>> chunkList(List<T> list, int chunkSize) {
List<List<T>> chunkedList = new ArrayList<>();
int size = list.size();
for (int i = 0; i < size; i += chunkSize) {
chunkedList.add(new ArrayList<>(list.subList(i, Math.min(size, i + chunkSize))));
}
return chunkedList;
}
}
Original file line number Diff line number Diff line change
@@ -20,20 +20,17 @@ public class ResearchScreen extends Screen {

public ResearchScreen() {
super(Component.translatable("screen.researchd.research"));
this.techList = new TechList(0, 103, 7, 7);
this.techList.fillList();
Minecraft mc = Minecraft.getInstance();
ResearchManager manager = new ResearchManager(mc.level);

this.techList = new TechList(manager, 0, 103, 7, 7);

this.researchQueue = new ResearchQueue(0, 0);
this.researchQueue.fillList();
Minecraft mc = Minecraft.getInstance();
int width = mc.getWindow().getGuiScaledWidth();
Researchd.LOGGER.debug("Width: {}", width);

int x = 174;
ResearchManager manager = new ResearchManager(mc.level);
manager.setCoordinates(174, 10);
this.researchGraph = new ResearchGraph(manager, 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
Original file line number Diff line number Diff line change
@@ -12,15 +12,17 @@
import net.minecraft.resources.ResourceKey;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ResearchNode extends TechListEntry {
private final List<ResearchNode> next;
private final Set<ResearchNode> next;
private final Holder<Research> holder;

public ResearchNode(Holder<Research> research) {
super(research.value(), EntryType.LOCKED, 0, 0);
this.next = new ArrayList<>();
this.next = new HashSet<>();
this.holder = research;
}

@@ -36,7 +38,7 @@ public void removeNext(ResearchNode toRemove) {
this.next.remove(toRemove);
}

public List<ResearchNode> getNext() {
public Set<ResearchNode> getNext() {
return next;
}

Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@

import com.portingdeadmods.portingdeadlibs.utils.renderers.GuiUtils;
import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.client.ResearchManager;
import com.portingdeadmods.researchd.impl.research.SimpleResearch;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
@@ -15,6 +16,7 @@
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.RecipeManager;

import java.util.ArrayList;
import java.util.List;
@@ -31,7 +33,6 @@ public class TechList extends AbstractWidget {
private static final int DISPLAY_ROWS = 5;

private final List<List<TechListEntry>> researches;
private final int rows;
private final int cols;
private int curRow;
private int scrollOffset;
@@ -41,10 +42,12 @@ public class TechList extends AbstractWidget {
// 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) {
public TechList(ResearchManager manager, int x, int y, int rows, int cols) {
super(x, y, BACKGROUND_WIDTH, BACKGROUND_HEIGHT, Component.empty());
this.researches = new ArrayList<>();
this.rows = rows;
this.researches = manager.getEntries(cols);
int paddingX = 12 + getX();
int paddingY = 24 + getY();
manager.setEntryCoordinates(this.researches, paddingX, paddingY);
this.cols = cols;

int padding = 15;
@@ -53,30 +56,13 @@ public TechList(int x, int y, int rows, int cols) {
Researchd.rl("search_button"),
Researchd.rl("search_button_highlighted")
), this::onButtonClicked);
this.button.active = true;
this.button.visible = true;
}

public void onButtonClicked(Button button) {
this.hasSearchBar = !this.hasSearchBar;
Researchd.LOGGER.debug("Click button");
}

public void fillList() {
int padding = 12;
int paddingY = 24;
for (int row = 0; row < rows; row++) {
List<TechListEntry> entries = new ArrayList<>();
for (int col = 0; col < cols; col++) {
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], padding + getX() + col * TechListEntry.WIDTH, paddingY + getY() + row * TechListEntry.HEIGHT));
}
this.researches.add(entries);
}
}

@Override
protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, float v) {
GuiUtils.drawImg(guiGraphics, hasSearchBar ? BACKGROUND_TEXTURE_SEARCH_BAR : BACKGROUND_TEXTURE, getX(), getY(), BACKGROUND_WIDTH, BACKGROUND_HEIGHT);
@@ -103,7 +89,7 @@ protected void renderWidget(GuiGraphics guiGraphics, int mouseX, int mouseY, flo

@Override
public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) {
this.scrollOffset = Math.min((int) Math.max(this.scrollOffset - scrollY, 0), this.researches.size() + 1);
this.scrollOffset = Math.max(Math.min((int) Math.max(this.scrollOffset - scrollY, 0), this.researches.size() - 3), 0);
this.curRow = this.scrollOffset;
Researchd.LOGGER.debug("offset: {}, scrollY: {}", scrollOffset, scrollY);
return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY);
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.portingdeadmods.researchd.content.items;

import net.minecraft.world.item.Item;

public class ResearchPackItem extends Item {
public ResearchPackItem(Properties properties) {
super(properties);
}
}
Original file line number Diff line number Diff line change
@@ -13,6 +13,8 @@
import java.util.Optional;

public record SimpleResearchPack(int color, Optional<ResourceLocation> customTexture) implements ResearchPack {
public static final SimpleResearchPack EMPTY = new SimpleResearchPack(-1, Optional.empty());

public SimpleResearchPack(ResourceLocation customTexture) {
this(-1, Optional.of(customTexture));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.portingdeadmods.researchd.registries;

import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.api.research.ResearchPack;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.core.registries.Registries;
import net.neoforged.neoforge.registries.DeferredRegister;

import java.util.function.Supplier;

public final class ResearchdDataComponents {
public static final DeferredRegister.DataComponents COMPONENTS = DeferredRegister.createDataComponents(Registries.DATA_COMPONENT_TYPE, Researchd.MODID);

// TODO: Sync component
public static final Supplier<DataComponentType<ResearchPack>> RESEARCH_PACK = COMPONENTS.registerComponentType("research_pack", builder -> builder
.persistent(ResearchPack.CODEC));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.portingdeadmods.researchd.registries;

import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.content.items.ResearchPackItem;
import com.portingdeadmods.researchd.impl.research.SimpleResearchPack;
import net.minecraft.world.item.Item;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;

public final class ResearchdItems {
public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Researchd.MODID);

public static final DeferredItem<ResearchPackItem> RESEARCH_PACK = ITEMS.register("research_pack",
() -> new ResearchPackItem(new Item.Properties().component(ResearchdDataComponents.RESEARCH_PACK, SimpleResearchPack.EMPTY)));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.portingdeadmods.researchd.registries;

import com.portingdeadmods.researchd.Researchd;
import com.portingdeadmods.researchd.ResearchdRegistries;
import com.portingdeadmods.researchd.api.research.Research;
import com.portingdeadmods.researchd.api.research.ResearchPack;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.neoforged.neoforge.registries.DeferredRegister;

import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class ResearchdTab {
public static final DeferredRegister<CreativeModeTab> TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Researchd.MODID);

static {
TABS.register("main", () -> CreativeModeTab.builder()
.icon(Items.DIAMOND::getDefaultInstance)
.title(Component.literal(Researchd.MODID))
.displayItems((params, output) -> {
Optional<HolderLookup.RegistryLookup<ResearchPack>> lookup = params.holders().lookup(ResearchdRegistries.RESEARCH_PACK_KEY);
if (lookup.isPresent()) {
Stream<ResourceKey<ResearchPack>> resourceKeyStream = lookup.get().listElementIds();
resourceKeyStream.forEach(researchPack -> {
addResearchPack(output, params.holders(), researchPack);
});
}
})
.build());
}

@SuppressWarnings("OptionalIsPresent")
private static void addResearchPack(CreativeModeTab.Output output, HolderLookup.Provider lookup, ResourceKey<ResearchPack> elem) {
ItemStack stack = ResearchdItems.RESEARCH_PACK.toStack();

Optional<Holder.Reference<ResearchPack>> holder = lookup.holder(elem);
if (holder.isPresent()) {
stack.set(ResearchdDataComponents.RESEARCH_PACK.get(), holder.get().value());
}
output.accept(stack);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer0": "researchd:item/research_pack_empty",
"layer1": "researchd:item/research_pack_fluid"
}
}
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 4f224e3

Please sign in to comment.