diff --git a/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java b/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java index a646815..d76e016 100644 --- a/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java +++ b/src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java @@ -1,10 +1,7 @@ package io.github.jumperonjava.customcursor; import com.mojang.blaze3d.systems.RenderSystem; -import io.github.jumperonjava.customcursor.util.AskScreen; -import io.github.jumperonjava.customcursor.util.FolderTextureAskList; -import io.github.jumperonjava.customcursor.util.SliderWidget; -import io.github.jumperonjava.customcursor.util.VersionFunctions; +import io.github.jumperonjava.customcursor.util.*; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; @@ -61,12 +58,10 @@ protected void init() { var confrmButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.confirm"), this::confirm); var cancelButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.cancel"), (f) -> close()); var folderButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.folder"), (b) -> { - AskScreen.ask( + FolderTextureAskList.ask( new FolderTextureAskList( CustomCursorInit.TEXTURE_FOLDER, - this::setIdentifier, - () -> { - } + this::setIdentifier ) ); }); diff --git a/src/main/java/io/github/jumperonjava/customcursor/util/AskScreen.java b/src/main/java/io/github/jumperonjava/customcursor/util/AskScreen.java deleted file mode 100644 index c02dff6..0000000 --- a/src/main/java/io/github/jumperonjava/customcursor/util/AskScreen.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.github.jumperonjava.customcursor.util; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; - -import java.util.function.Consumer; - -public abstract class AskScreen extends Screen { - private final Consumer onSuccess; - private final Runnable onFail; - private Screen parent; - - public AskScreen(Consumer onSuccess, Runnable onFail){ - super(Text.empty()); - this.onSuccess = onSuccess; - this.onFail = onFail; - } - - public void success(T ret){ - onSuccess.accept(ret); - this.initClose(); - } - public void fail(){ - onFail.run(); - this.initClose(); - } - public void initClose(){ - closeScreen(this); - } - @Override - public void close(){ - fail(); - } - public static void ask(AskScreen askScreen){ - var client = MinecraftClient.getInstance(); - var currentScreen = client.currentScreen; - if(currentScreen==null){ - client.setScreen(askScreen); - return; - } - client.setScreen(askScreen); - askScreen.parent = currentScreen; - } - - private static > void closeScreen(AskScreen screen) { - MinecraftClient.getInstance().setScreen(screen.parent); - } -} diff --git a/src/main/java/io/github/jumperonjava/customcursor/util/FolderTextureAskList.java b/src/main/java/io/github/jumperonjava/customcursor/util/FolderTextureAskList.java index 9957d02..3b7a8a6 100644 --- a/src/main/java/io/github/jumperonjava/customcursor/util/FolderTextureAskList.java +++ b/src/main/java/io/github/jumperonjava/customcursor/util/FolderTextureAskList.java @@ -1,6 +1,10 @@ package io.github.jumperonjava.customcursor.util; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.Util; @@ -9,23 +13,78 @@ import java.util.List; import java.util.function.Consumer; -public class FolderTextureAskList extends TextureListAsk{ +public class FolderTextureAskList extends Screen { + public static final int gap = 2; private final TextureFolder folder; + private final Consumer onSuccess; + + ScrollListWidget list; + + protected Identifier EMPTY_TEXTURE = Identifier.of("minecraft", "empty"); private List textures = new ArrayList<>(); - public FolderTextureAskList(TextureFolder folder, Consumer onSuccess, Runnable onFail) { - super(onSuccess, onFail); + private Identifier selectedTexture = EMPTY_TEXTURE; + + private Screen parent; + private String lastFilter = ""; + + public FolderTextureAskList(TextureFolder folder, Consumer onSuccess) { + super(Text.empty()); + this.onSuccess = onSuccess; this.folder = folder; } + public static void ask(FolderTextureAskList askScreen) { + var client = MinecraftClient.getInstance(); + var currentScreen = client.currentScreen; + if (currentScreen == null) { + client.setScreen(askScreen); + return; + } + client.setScreen(askScreen); + askScreen.parent = currentScreen; + } @Override protected void init() { - super.init(); - var cancel = new ButtonWidget.Builder(Text.translatable("customcursor.folder.openfolder"), b->openCursorFolder()) - .dimensions((int) (240+gap*2),height-20-gap,100,20).build(); - addDrawableChild(cancel); + // Initializations + list = new ScrollListWidget(client, width, height - 64, 0, 22, 40); + var search = new TextFieldWidget(client.textRenderer, 0, 0, width, 20, Text.empty()); + var accept = new ButtonWidget.Builder(Text.translatable("customcursor.folder.accept"), b1 -> { + if (selectedTexture != EMPTY_TEXTURE) + success(selectedTexture); + }); + var cancel1 = new ButtonWidget.Builder(Text.translatable("customcursor.folder.cancel"), b1 -> closeScreen()); + var cancel = new ButtonWidget.Builder(Text.translatable("customcursor.folder.openfolder"), b -> openCursorFolder()); + + accept.dimensions(40 + gap, height - 20 - gap, 100, 20); + cancel1.dimensions((int) (140 + gap * 1.5), height - 20 - gap, 100, 20); + cancel.dimensions(240 + gap * 2, height - 20 - gap, 100, 20); + + // Adding Widgets + refreshListByFilter(""); + addDrawableChild(list); + search.setChangedListener(this::refreshListByFilter); + addDrawableChild(search); + addDrawableChild(accept.build()); + addDrawableChild(cancel1.build()); + addDrawableChild(cancel.build()); + addDrawableChild(((context, mouseX, mouseY, delta) -> + { + var texture = selectedTexture == EMPTY_TEXTURE ? Identifier.of("minecraft", "textures/item/barrier.png") : selectedTexture; + TextureWidget.render(context,texture, gap / 2, height - 40 - gap / 2, 40, 40); + })); + + setTexturesCallback(this::setTextures); + addDrawableChild(((context, mouseX, mouseY, delta) -> context.drawText( + textRenderer, + Text.translatable("customcursor.folder.selected").append(": ").append(selectedTexture.toString()), + 45, + height - 30 - 6 - gap / 2, + 0xFFFFFFFF, + true))); } + private void openCursorFolder() { Util.getOperatingSystem().open(folder.path.toFile()); } @@ -39,4 +98,47 @@ public void setTexturesCallback(Consumer> consumer) { }); } + + public void setTextures(List identifiers) { + this.textures = identifiers; + refreshListByFilter(lastFilter); + } + + private void refreshListByFilter(String s) { + lastFilter = s; + list.children().clear(); + //? if < 1.21.4 { + list.setScrollAmount(0); + //?} else { + /*list.setScrollY(0); + *///?} + for (var key : textures) { + if (key == null) continue; + var id = key.toString(); + if (!id.toLowerCase().contains(s.toLowerCase())) + continue; + Identifier finalKey = key; + var entry = new ScrollListWidget.ScrollListEntry(key, () -> { + this.selectedTexture = finalKey; + }); + list.addEntry(entry); + } + } + + //? if <= 1.20.1 { + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + renderBackground(context); + super.render(context, mouseX, mouseY, delta); + } + //?} + + public void success(Identifier ret) { + onSuccess.accept(ret); + this.closeScreen(); + } + + private void closeScreen() { + MinecraftClient.getInstance().setScreen(this.parent); + } } diff --git a/src/main/java/io/github/jumperonjava/customcursor/util/ScrollListWidget.java b/src/main/java/io/github/jumperonjava/customcursor/util/ScrollListWidget.java index cd0e226..193f15d 100644 --- a/src/main/java/io/github/jumperonjava/customcursor/util/ScrollListWidget.java +++ b/src/main/java/io/github/jumperonjava/customcursor/util/ScrollListWidget.java @@ -80,7 +80,7 @@ public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float delta) { - new TextureWidget(key,x,y,entryHeight,entryHeight).render(context, mouseX, mouseY, delta); + TextureWidget.render(context,key,x,y,entryHeight,entryHeight); context.drawText(MinecraftClient.getInstance().textRenderer,key.toString(),x+entryHeight+5,y+entryHeight/2-5,0xFFFFFFFF,true); } diff --git a/src/main/java/io/github/jumperonjava/customcursor/util/TextureListAsk.java b/src/main/java/io/github/jumperonjava/customcursor/util/TextureListAsk.java deleted file mode 100644 index c170d5f..0000000 --- a/src/main/java/io/github/jumperonjava/customcursor/util/TextureListAsk.java +++ /dev/null @@ -1,116 +0,0 @@ -package io.github.jumperonjava.customcursor.util; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.option.LanguageOptionsScreen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.texture.AbstractTexture; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.OpenOption; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.function.Consumer; - - -public abstract class TextureListAsk extends AskScreen { - ScrollListWidget list; - //private static Map textures; - /*static{ - var paths = new LinkedList(); - for(var path : paths) - { - var manager = MinecraftClient.getInstance().getResourceManager(); - var resources = manager.findResources(path,i-> i.toString().endsWith(".png")); - textures.addAll(resources.keySet().stream().toList()); - } - }*/ - protected Identifier EMPTY_TEXTURE = Identifier.of("minecraft","empty"); - private Identifier selectedTexture = EMPTY_TEXTURE; - public static final int gap = 2; - private List textures = new ArrayList<>(); - - protected TextureListAsk(Consumer onSuccess, Runnable onFail){ - super(onSuccess, onFail); - } - public void setTexturesCallback(Consumer> textureGetter){}; - private TextureWidget selectedTextureWidget; - @Override - protected void init() { - list = new ScrollListWidget(client,width,height - 64,0,22,40); - refreshListByFilter(""); - addDrawableChild(list); - - var search = new TextFieldWidget(client.textRenderer,0,0,width,20,Text.empty()); - search.setChangedListener(this::refreshListByFilter); - addDrawableChild(search); - - var accept = new ButtonWidget.Builder(Text.translatable("customcursor.folder.accept"),b->{ - if(selectedTexture!=EMPTY_TEXTURE) - success(selectedTexture); - else - fail(); - }) - .dimensions((int) (40+gap),height-20-gap,100,20).build(); - var cancel = new ButtonWidget.Builder(Text.translatable("customcursor.folder.cancel"),b->fail()) - .dimensions((int) (140+gap*1.5),height-20-gap,100,20).build(); - - addDrawableChild(accept); - addDrawableChild(cancel); - selectedTextureWidget = new TextureWidget(Identifier.of("minecraft","textures/item/barrier.png"),gap/2,height-40-gap/2,40,40); - addDrawableChild(selectedTextureWidget); - setTexturesCallback(this::setTextures); - } - - public void setTextures(List identifiers) { - this.textures = identifiers; - refreshListByFilter(lastFilter); - } - private String lastFilter = ""; - private void refreshListByFilter(String s) { - lastFilter = s; - list.children().clear(); - //? if < 1.21.4 { - list.setScrollAmount(0); - //?} else { - /*list.setScrollY(0); - *///?} - for(var key : textures){ - if(key == null) continue; - var id = key.toString(); - if(!id.toLowerCase().contains(s.toLowerCase())) - continue; - Identifier finalKey = key; - var entry = new ScrollListWidget.ScrollListEntry(key, ()-> { - this.selectedTexture = finalKey; - selectedTextureWidget.setTexture(selectedTexture); - }); - list.addEntry(entry); - } - } - - @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - //? if <= 1.20.1 { - renderBackground(context); - //?} else { - /*renderBackground(context,mouseX,mouseY,delta); - *///?} - super.render(context, mouseX, mouseY, delta); - context.drawText( - textRenderer, - Text.translatable("customcursor.folder.selected").append(": ").append(selectedTexture.toString()), - 45, - height-30-6-gap/2, - 0xFFFFFFFF, - true); - } -} diff --git a/src/main/java/io/github/jumperonjava/customcursor/util/TextureWidget.java b/src/main/java/io/github/jumperonjava/customcursor/util/TextureWidget.java index 8452bab..d34c14d 100644 --- a/src/main/java/io/github/jumperonjava/customcursor/util/TextureWidget.java +++ b/src/main/java/io/github/jumperonjava/customcursor/util/TextureWidget.java @@ -7,82 +7,8 @@ import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.util.Identifier; -public class TextureWidget implements Drawable, Selectable, Element { - public Identifier getTexture() { - return texture; - } - - public void setTexture(Identifier texture) { - this.texture = texture; - } - - public int getX() { - return x; - } - - public void setX(int x) { - this.x = x; - } - - public int getY() { - return y; - } - - public void setY(int y) { - this.y = y; - } - - public int getWidth() { - return width; - } - - public void setWidth(int width) { - this.width = width; - } - - public int getHeight() { - return height; - } - - public void setHeight(int height) { - this.height = height; - } - - private Identifier texture; - private int x; - private int y; - private int width; - private int height; - - public TextureWidget(Identifier texture, int x, int y, int width, int height){ - this.texture = texture; - this.x = x; - this.y = y; - this.width = width; - this.height = height; - } - @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { +public class TextureWidget{ + public static void render(DrawContext context, Identifier texture, int x, int y, int width, int height) { VersionFunctions.drawTexture(context,texture,x,y,0,0,width,height,width,height); } - - @Override - public void setFocused(boolean focused) { - - } - - @Override - public boolean isFocused() { - return false; - } - - @Override - public SelectionType getType() { - return SelectionType.NONE; - } - - @Override - public void appendNarrations(NarrationMessageBuilder builder) { - - } }