chore(resource-pack-entry-widgets): add testmod and clean up a bit
This commit is contained in:
parent
80db37575f
commit
c271ac5c10
@ -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();
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user