chore(resource-pack-entry-widgets): add testmod and clean up a bit
All checks were successful
ci/woodpecker/push/docs Pipeline was successful
ci/woodpecker/push/jfmod Pipeline was successful

This commit is contained in:
Johannes Frohnmeyer 2024-07-17 20:54:09 +02:00
parent 80db37575f
commit c271ac5c10
Signed by: Johannes
GPG Key ID: E76429612C2929F4
6 changed files with 91 additions and 8 deletions

View File

@ -1,11 +1,11 @@
package io.gitlab.jfronny.libjf.entrywidgets.api.v0;
import io.gitlab.jfronny.libjf.entrywidgets.impl.EntrypointComparator;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer;
import java.util.Comparator;
import java.util.List;
/**
@ -18,7 +18,7 @@ public interface ResourcePackEntryWidget {
List<ResourcePackEntryWidget> WIDGETS = FabricLoader.getInstance()
.getEntrypointContainers("libjf:resource_pack_entry_widget", ResourcePackEntryWidget.class)
.stream()
.sorted(Comparator.comparing(entrypoint -> entrypoint.getProvider().getMetadata().getId()))
.sorted(new EntrypointComparator())
.map(EntrypointContainer::getEntrypoint)
.toList();

View File

@ -0,0 +1,15 @@
package io.gitlab.jfronny.libjf.entrywidgets.impl;
import io.gitlab.jfronny.libjf.entrywidgets.api.v0.ResourcePackEntryWidget;
import net.fabricmc.loader.api.entrypoint.EntrypointContainer;
import java.util.Comparator;
public class EntrypointComparator implements Comparator<EntrypointContainer<ResourcePackEntryWidget>> {
@Override
public int compare(EntrypointContainer<ResourcePackEntryWidget> o1, EntrypointContainer<ResourcePackEntryWidget> o2) {
return Comparator.<EntrypointContainer<ResourcePackEntryWidget>, String>comparing(entrypoint -> entrypoint.getProvider().getMetadata().getId())
.thenComparing(s -> s.getEntrypoint().getClass().getName())
.compare(o1, o2);
}
}

View File

@ -15,12 +15,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(PackListWidget.ResourcePackEntry.class)
public abstract class ResourcePackEntryMixin {
@Shadow
protected abstract boolean isSelectable();
@Shadow @Final
private ResourcePackOrganizer.Pack pack;
@Unique
int libjf$selected = -1;
@Shadow protected abstract boolean isSelectable();
@Shadow @Final private ResourcePackOrganizer.Pack pack;
@Unique int libjf$selected = -1;
@Inject(at = @At("TAIL"), method = "render(Lnet/minecraft/client/gui/DrawContext;IIIIIIIZF)V")
private void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta, CallbackInfo info) {
@ -36,6 +33,7 @@ public abstract class ResourcePackEntryMixin {
int height = widget.getHeight(pack, entryHeight);
int entryX = x + entryWidth - deltaX - width;
int entryY = y + widget.getY(pack, entryHeight);
deltaX += width;
boolean widgetHovered = mouseX <= entryX + width && mouseX >= entryX && mouseY <= entryY + height && mouseY >= entryY;
widget.render(pack, context, entryX, entryY, widgetHovered, tickDelta);
if (widgetHovered) libjf$selected = i;

View File

@ -0,0 +1,27 @@
package io.gitlab.jfronny.libjf.entrywidgets.test;
import io.gitlab.jfronny.libjf.entrywidgets.api.v0.ResourcePackEntryWidget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer;
public class TestWidget1 implements ResourcePackEntryWidget {
@Override
public int getWidth(ResourcePackOrganizer.Pack pack) {
return (int) ((System.currentTimeMillis() % 5_000) / 100 + 10);
}
@Override
public int getXMargin(ResourcePackOrganizer.Pack pack) {
return (int) (Math.abs((System.currentTimeMillis() % 1_200) / 50 - 12) + 5);
}
@Override
public void render(ResourcePackOrganizer.Pack pack, DrawContext context, int x, int y, boolean hovered, float tickDelta) {
context.fill(x, y, x + getWidth(pack), y + getHeight(pack, 20), hovered ? 0x8000FF80 : 0x8000FF00);
}
@Override
public void onClick(ResourcePackOrganizer.Pack pack) {
System.out.println("Clicked on Widget1");
}
}

View File

@ -0,0 +1,22 @@
package io.gitlab.jfronny.libjf.entrywidgets.test;
import io.gitlab.jfronny.libjf.entrywidgets.api.v0.ResourcePackEntryWidget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer;
public class TestWidget2 implements ResourcePackEntryWidget {
@Override
public boolean isVisible(ResourcePackOrganizer.Pack pack, boolean selectable) {
return System.currentTimeMillis() % 1_000 < 500;
}
@Override
public void render(ResourcePackOrganizer.Pack pack, DrawContext context, int x, int y, boolean hovered, float tickDelta) {
context.fill(x, y, x + getWidth(pack), y + getHeight(pack, 20), hovered ? 0x80FF0080 : 0x80FF0000);
}
@Override
public void onClick(ResourcePackOrganizer.Pack pack) {
System.out.println("Clicked on Widget2");
}
}

View File

@ -0,0 +1,21 @@
{
"schemaVersion": 1,
"id": "libjf-resource-pack-entry-widgets-v0-testmod",
"name": "LibJF Web",
"version": "1.0",
"environment": "*",
"entrypoints": {
"libjf:resource_pack_entry_widget": [
"io.gitlab.jfronny.libjf.entrywidgets.test.TestWidget1",
"io.gitlab.jfronny.libjf.entrywidgets.test.TestWidget2"
]
},
"custom": {
"libjf": {
"web": true
},
"modmenu": {
"parent": "libjf-testmod"
}
}
}