Skip to content

Commit b2d7a66

Browse files
committed
2 parents 4638167 + 18b6f79 commit b2d7a66

File tree

6 files changed

+115
-257
lines changed

6 files changed

+115
-257
lines changed

src/main/java/io/github/jumperonjava/customcursor/CursorEditScreen.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package io.github.jumperonjava.customcursor;
22

33
import com.mojang.blaze3d.systems.RenderSystem;
4-
import io.github.jumperonjava.customcursor.util.AskScreen;
5-
import io.github.jumperonjava.customcursor.util.FolderTextureAskList;
6-
import io.github.jumperonjava.customcursor.util.SliderWidget;
7-
import io.github.jumperonjava.customcursor.util.VersionFunctions;
4+
import io.github.jumperonjava.customcursor.util.*;
85
import net.minecraft.client.gui.DrawContext;
96
import net.minecraft.client.gui.screen.Screen;
107
import net.minecraft.client.gui.widget.ButtonWidget;
@@ -61,12 +58,10 @@ protected void init() {
6158
var confrmButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.confirm"), this::confirm);
6259
var cancelButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.cancel"), (f) -> close());
6360
var folderButton = new ButtonWidget.Builder(Text.translatable("customcursor.edit.folder"), (b) -> {
64-
AskScreen.ask(
61+
FolderTextureAskList.ask(
6562
new FolderTextureAskList(
6663
CustomCursorInit.TEXTURE_FOLDER,
67-
this::setIdentifier,
68-
() -> {
69-
}
64+
this::setIdentifier
7065
)
7166
);
7267
});

src/main/java/io/github/jumperonjava/customcursor/util/AskScreen.java

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 109 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package io.github.jumperonjava.customcursor.util;
22

3+
import net.minecraft.client.MinecraftClient;
4+
import net.minecraft.client.gui.DrawContext;
5+
import net.minecraft.client.gui.screen.Screen;
36
import net.minecraft.client.gui.widget.ButtonWidget;
7+
import net.minecraft.client.gui.widget.TextFieldWidget;
48
import net.minecraft.text.Text;
59
import net.minecraft.util.Identifier;
610
import net.minecraft.util.Util;
@@ -9,23 +13,78 @@
913
import java.util.List;
1014
import java.util.function.Consumer;
1115

12-
public class FolderTextureAskList extends TextureListAsk{
16+
public class FolderTextureAskList extends Screen {
17+
public static final int gap = 2;
1318
private final TextureFolder folder;
19+
private final Consumer<Identifier> onSuccess;
20+
21+
ScrollListWidget list;
22+
23+
protected Identifier EMPTY_TEXTURE = Identifier.of("minecraft", "empty");
1424
private List<Identifier> textures = new ArrayList<>();
1525

16-
public FolderTextureAskList(TextureFolder folder, Consumer<Identifier> onSuccess, Runnable onFail) {
17-
super(onSuccess, onFail);
26+
private Identifier selectedTexture = EMPTY_TEXTURE;
27+
28+
private Screen parent;
29+
private String lastFilter = "";
30+
31+
public FolderTextureAskList(TextureFolder folder, Consumer<Identifier> onSuccess) {
32+
super(Text.empty());
33+
this.onSuccess = onSuccess;
1834
this.folder = folder;
1935
}
2036

37+
public static void ask(FolderTextureAskList askScreen) {
38+
var client = MinecraftClient.getInstance();
39+
var currentScreen = client.currentScreen;
40+
if (currentScreen == null) {
41+
client.setScreen(askScreen);
42+
return;
43+
}
44+
client.setScreen(askScreen);
45+
askScreen.parent = currentScreen;
46+
}
2147
@Override
2248
protected void init() {
23-
super.init();
24-
var cancel = new ButtonWidget.Builder(Text.translatable("customcursor.folder.openfolder"), b->openCursorFolder())
25-
.dimensions((int) (240+gap*2),height-20-gap,100,20).build();
26-
addDrawableChild(cancel);
49+
// Initializations
50+
list = new ScrollListWidget(client, width, height - 64, 0, 22, 40);
51+
var search = new TextFieldWidget(client.textRenderer, 0, 0, width, 20, Text.empty());
52+
var accept = new ButtonWidget.Builder(Text.translatable("customcursor.folder.accept"), b1 -> {
53+
if (selectedTexture != EMPTY_TEXTURE)
54+
success(selectedTexture);
55+
});
56+
var cancel1 = new ButtonWidget.Builder(Text.translatable("customcursor.folder.cancel"), b1 -> closeScreen());
57+
var cancel = new ButtonWidget.Builder(Text.translatable("customcursor.folder.openfolder"), b -> openCursorFolder());
58+
59+
accept.dimensions(40 + gap, height - 20 - gap, 100, 20);
60+
cancel1.dimensions((int) (140 + gap * 1.5), height - 20 - gap, 100, 20);
61+
cancel.dimensions(240 + gap * 2, height - 20 - gap, 100, 20);
62+
63+
// Adding Widgets
64+
refreshListByFilter("");
65+
addDrawableChild(list);
66+
search.setChangedListener(this::refreshListByFilter);
67+
addDrawableChild(search);
68+
addDrawableChild(accept.build());
69+
addDrawableChild(cancel1.build());
70+
addDrawableChild(cancel.build());
71+
addDrawableChild(((context, mouseX, mouseY, delta) ->
72+
{
73+
var texture = selectedTexture == EMPTY_TEXTURE ? Identifier.of("minecraft", "textures/item/barrier.png") : selectedTexture;
74+
TextureWidget.render(context,texture, gap / 2, height - 40 - gap / 2, 40, 40);
75+
}));
76+
77+
setTexturesCallback(this::setTextures);
78+
addDrawableChild(((context, mouseX, mouseY, delta) -> context.drawText(
79+
textRenderer,
80+
Text.translatable("customcursor.folder.selected").append(": ").append(selectedTexture.toString()),
81+
45,
82+
height - 30 - 6 - gap / 2,
83+
0xFFFFFFFF,
84+
true)));
2785
}
2886

87+
2988
private void openCursorFolder() {
3089
Util.getOperatingSystem().open(folder.path.toFile());
3190
}
@@ -39,4 +98,47 @@ public void setTexturesCallback(Consumer<List<Identifier>> consumer) {
3998
});
4099

41100
}
101+
102+
public void setTextures(List<Identifier> identifiers) {
103+
this.textures = identifiers;
104+
refreshListByFilter(lastFilter);
105+
}
106+
107+
private void refreshListByFilter(String s) {
108+
lastFilter = s;
109+
list.children().clear();
110+
//? if < 1.21.4 {
111+
list.setScrollAmount(0);
112+
//?} else {
113+
/*list.setScrollY(0);
114+
*///?}
115+
for (var key : textures) {
116+
if (key == null) continue;
117+
var id = key.toString();
118+
if (!id.toLowerCase().contains(s.toLowerCase()))
119+
continue;
120+
Identifier finalKey = key;
121+
var entry = new ScrollListWidget.ScrollListEntry(key, () -> {
122+
this.selectedTexture = finalKey;
123+
});
124+
list.addEntry(entry);
125+
}
126+
}
127+
128+
//? if <= 1.20.1 {
129+
@Override
130+
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
131+
renderBackground(context);
132+
super.render(context, mouseX, mouseY, delta);
133+
}
134+
//?}
135+
136+
public void success(Identifier ret) {
137+
onSuccess.accept(ret);
138+
this.closeScreen();
139+
}
140+
141+
private void closeScreen() {
142+
MinecraftClient.getInstance().setScreen(this.parent);
143+
}
42144
}

src/main/java/io/github/jumperonjava/customcursor/util/ScrollListWidget.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void render(DrawContext context,
8080
int mouseX, int mouseY,
8181
boolean hovered,
8282
float delta) {
83-
new TextureWidget(key,x,y,entryHeight,entryHeight).render(context, mouseX, mouseY, delta);
83+
TextureWidget.render(context,key,x,y,entryHeight,entryHeight);
8484
context.drawText(MinecraftClient.getInstance().textRenderer,key.toString(),x+entryHeight+5,y+entryHeight/2-5,0xFFFFFFFF,true);
8585
}
8686

src/main/java/io/github/jumperonjava/customcursor/util/TextureListAsk.java

Lines changed: 0 additions & 116 deletions
This file was deleted.

0 commit comments

Comments
 (0)