animations and added string configs
This commit is contained in:
@@ -9,6 +9,9 @@ import org.saturnclient.saturnclient.cloaks.Cloaks;
|
|||||||
import org.saturnclient.saturnclient.config.ConfigManager;
|
import org.saturnclient.saturnclient.config.ConfigManager;
|
||||||
import org.saturnclient.saturnclient.event.KeyInputHandler;
|
import org.saturnclient.saturnclient.event.KeyInputHandler;
|
||||||
import org.saturnclient.saturnmods.ModManager;
|
import org.saturnclient.saturnmods.ModManager;
|
||||||
|
import org.saturnclient.ui.SaturnAnimation;
|
||||||
|
import org.saturnclient.ui.animations.FadeIn;
|
||||||
|
import org.saturnclient.ui.animations.Slide;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -29,13 +32,18 @@ public class SaturnClient implements ModInitializer {
|
|||||||
return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF);
|
return ((int) (alpha * 255) << 24) | (NORMAL & 0x00FFFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SaturnAnimation[] getAnimations() {
|
||||||
|
return new SaturnAnimation[] { new FadeIn(1), new Slide(3, 15) };
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
LOGGER.info("Initializing " + MOD_ID);
|
LOGGER.info("Initializing " + MOD_ID);
|
||||||
ModManager.init();
|
ModManager.init();
|
||||||
ConfigManager.load();
|
ConfigManager.load();
|
||||||
|
|
||||||
ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> ConfigManager.save()
|
ClientLifecycleEvents.CLIENT_STOPPING.register(_o ->
|
||||||
|
ConfigManager.save()
|
||||||
);
|
);
|
||||||
|
|
||||||
KeyInputHandler.register();
|
KeyInputHandler.register();
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class SaturnSocket {
|
|||||||
@SuppressWarnings("resource")
|
@SuppressWarnings("resource")
|
||||||
public static boolean authenticate() {
|
public static boolean authenticate() {
|
||||||
// Register shutdown hook ONCE
|
// Register shutdown hook ONCE
|
||||||
ClientLifecycleEvents.CLIENT_STOPPING.register(_ -> close());
|
ClientLifecycleEvents.CLIENT_STOPPING.register(_o -> close());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
MinecraftClient client = MinecraftClient.getInstance();
|
MinecraftClient client = MinecraftClient.getInstance();
|
||||||
|
|||||||
@@ -4,8 +4,12 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.JsonPrimitive;
|
import com.google.gson.JsonPrimitive;
|
||||||
|
|
||||||
public class Property<T> {
|
public class Property<T> {
|
||||||
|
|
||||||
public enum PropertyType {
|
public enum PropertyType {
|
||||||
BOOLEAN, INTEGER, FLOAT, STRING, UNKNOWN
|
BOOLEAN,
|
||||||
|
INTEGER,
|
||||||
|
FLOAT,
|
||||||
|
STRING,
|
||||||
}
|
}
|
||||||
|
|
||||||
public T value;
|
public T value;
|
||||||
@@ -55,20 +59,16 @@ public class Property<T> {
|
|||||||
if (value instanceof String) {
|
if (value instanceof String) {
|
||||||
return PropertyType.STRING;
|
return PropertyType.STRING;
|
||||||
}
|
}
|
||||||
return PropertyType.UNKNOWN;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean matchesJson(JsonElement element) {
|
public boolean matchesJson(JsonElement element) {
|
||||||
if (element.isJsonPrimitive()) {
|
if (element.isJsonPrimitive()) {
|
||||||
JsonPrimitive primitive = element.getAsJsonPrimitive();
|
JsonPrimitive primitive = element.getAsJsonPrimitive();
|
||||||
if (value instanceof Boolean && primitive.isBoolean())
|
if (value instanceof Boolean && primitive.isBoolean()) return true;
|
||||||
return true;
|
if (value instanceof Integer && primitive.isNumber()) return true;
|
||||||
if (value instanceof Integer && primitive.isNumber())
|
if (value instanceof Float && primitive.isNumber()) return true;
|
||||||
return true;
|
if (value instanceof String && primitive.isString()) return true;
|
||||||
if (value instanceof Float && primitive.isNumber())
|
|
||||||
return true;
|
|
||||||
if (value instanceof String && primitive.isString())
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package org.saturnclient.saturnclient.menus;
|
package org.saturnclient.saturnclient.menus;
|
||||||
|
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
import org.saturnclient.saturnclient.auth.SaturnSocket;
|
||||||
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
import org.saturnclient.saturnclient.cloaks.Cloaks;
|
||||||
import org.saturnclient.ui.SaturnUi;
|
import org.saturnclient.ui.SaturnUi;
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.animations.Slide;
|
|
||||||
import org.saturnclient.ui.widgets.SaturnClickableSprite;
|
import org.saturnclient.ui.widgets.SaturnClickableSprite;
|
||||||
import org.saturnclient.ui.widgets.SaturnImage;
|
import org.saturnclient.ui.widgets.SaturnImage;
|
||||||
import org.saturnclient.ui.widgets.SaturnScroll;
|
import org.saturnclient.ui.widgets.SaturnScroll;
|
||||||
@@ -30,7 +30,7 @@ public class CloaksMenu extends SaturnUi {
|
|||||||
.setY(rectY)
|
.setY(rectY)
|
||||||
.setWidth(rectWidth)
|
.setWidth(rectWidth)
|
||||||
.setHeight(rectHeight)
|
.setHeight(rectHeight)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
int tabsX = (width - 43) / 2;
|
int tabsX = (width - 43) / 2;
|
||||||
@@ -42,7 +42,7 @@ public class CloaksMenu extends SaturnUi {
|
|||||||
.setY(tabsY)
|
.setY(tabsY)
|
||||||
.setWidth(43)
|
.setWidth(43)
|
||||||
.setHeight(15)
|
.setHeight(15)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
int cloakWidth = 32;
|
int cloakWidth = 32;
|
||||||
@@ -91,7 +91,7 @@ public class CloaksMenu extends SaturnUi {
|
|||||||
.setY(rectY + 10)
|
.setY(rectY + 10)
|
||||||
.setWidth(rectWidth - 17)
|
.setWidth(rectWidth - 17)
|
||||||
.setHeight(rectHeight - 10)
|
.setHeight(rectHeight - 10)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
super.init();
|
super.init();
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ package org.saturnclient.saturnclient.menus;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.saturnclient.config.ConfigManager;
|
import org.saturnclient.saturnclient.config.ConfigManager;
|
||||||
import org.saturnclient.saturnclient.config.Property;
|
import org.saturnclient.saturnclient.config.Property;
|
||||||
import org.saturnclient.ui.SaturnUi;
|
import org.saturnclient.ui.SaturnUi;
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.animations.Slide;
|
|
||||||
import org.saturnclient.ui.components.SaturnFloat;
|
import org.saturnclient.ui.components.SaturnFloat;
|
||||||
import org.saturnclient.ui.components.SaturnInteger;
|
import org.saturnclient.ui.components.SaturnInteger;
|
||||||
import org.saturnclient.ui.components.SaturnString;
|
import org.saturnclient.ui.components.SaturnString;
|
||||||
@@ -38,7 +38,7 @@ public class ConfigEditor extends SaturnUi {
|
|||||||
.setY(rectY)
|
.setY(rectY)
|
||||||
.setWidth(rectWidth)
|
.setWidth(rectWidth)
|
||||||
.setHeight(rectHeight)
|
.setHeight(rectHeight)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
int tabsX = (width - 43) / 2;
|
int tabsX = (width - 43) / 2;
|
||||||
@@ -50,7 +50,7 @@ public class ConfigEditor extends SaturnUi {
|
|||||||
.setY(tabsY)
|
.setY(tabsY)
|
||||||
.setWidth(43)
|
.setWidth(43)
|
||||||
.setHeight(15)
|
.setHeight(15)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
SaturnScroll configScroll = new SaturnScroll();
|
SaturnScroll configScroll = new SaturnScroll();
|
||||||
@@ -170,6 +170,7 @@ public class ConfigEditor extends SaturnUi {
|
|||||||
.setY(rectY + 10)
|
.setY(rectY + 10)
|
||||||
.setWidth(rectWidth - 17)
|
.setWidth(rectWidth - 17)
|
||||||
.setHeight(rectHeight - 10)
|
.setHeight(rectHeight - 10)
|
||||||
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
super.init();
|
super.init();
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
package org.saturnclient.saturnclient.menus;
|
package org.saturnclient.saturnclient.menus;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
import org.saturnclient.saturnclient.SaturnClient;
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
import org.saturnclient.ui.SaturnUi;
|
import org.saturnclient.ui.SaturnUi;
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.animations.FadeIn;
|
import org.saturnclient.ui.animations.FadeIn;
|
||||||
import org.saturnclient.ui.animations.Slide;
|
import org.saturnclient.ui.animations.Slide;
|
||||||
import org.saturnclient.ui.widgets.SaturnButton;
|
import org.saturnclient.ui.widgets.SaturnButton;
|
||||||
import org.saturnclient.ui.widgets.SaturnImageButton;
|
|
||||||
import org.saturnclient.ui.widgets.SaturnImage;
|
import org.saturnclient.ui.widgets.SaturnImage;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import org.saturnclient.ui.widgets.SaturnImageButton;
|
||||||
import net.minecraft.text.Text;
|
|
||||||
|
|
||||||
public class MainMenu extends SaturnUi {
|
public class MainMenu extends SaturnUi {
|
||||||
|
|
||||||
public MainMenu() {
|
public MainMenu() {
|
||||||
super(Text.literal("Saturn Client"));
|
super(Text.literal("Saturn Client"));
|
||||||
}
|
}
|
||||||
@@ -26,32 +27,35 @@ public class MainMenu extends SaturnUi {
|
|||||||
draw(
|
draw(
|
||||||
new SaturnButton("Mods", () -> {
|
new SaturnButton("Mods", () -> {
|
||||||
client.setScreen(new ModMenu());
|
client.setScreen(new ModMenu());
|
||||||
}).setX((width - buttonWidth) / 2).setY((height - buttonHeight) /
|
})
|
||||||
2).setWidth(buttonWidth)
|
.setX((width - buttonWidth) / 2)
|
||||||
|
.setY((height - buttonHeight) / 2)
|
||||||
|
.setWidth(buttonWidth)
|
||||||
.setHeight(buttonHeight)
|
.setHeight(buttonHeight)
|
||||||
.setAnimations(new FadeIn(2)));
|
.setAnimations(new FadeIn(2))
|
||||||
|
);
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnImageButton(Textures.HUD_ICON, 14, 14,
|
new SaturnImageButton(Textures.HUD_ICON, 14, 14, () -> {
|
||||||
() -> {
|
|
||||||
client.setScreen(new HudEditor());
|
client.setScreen(new HudEditor());
|
||||||
})
|
})
|
||||||
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
|
.setX((width - buttonWidth - (buttonHeight * 2) - 6) / 2)
|
||||||
.setY((height - buttonHeight) / 2)
|
.setY((height - buttonHeight) / 2)
|
||||||
.setWidth(buttonHeight)
|
.setWidth(buttonHeight)
|
||||||
.setHeight(buttonHeight)
|
.setHeight(buttonHeight)
|
||||||
.setAnimations(new FadeIn(2)));
|
.setAnimations(new FadeIn(2))
|
||||||
|
);
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnImageButton(Textures.COSMETICS, 14, 14,
|
new SaturnImageButton(Textures.COSMETICS, 14, 14, () -> {
|
||||||
() -> {
|
|
||||||
client.setScreen(new CloaksMenu());
|
client.setScreen(new CloaksMenu());
|
||||||
})
|
})
|
||||||
.setX((width / 2) + (buttonWidth / 2) + 3)
|
.setX((width / 2) + (buttonWidth / 2) + 3)
|
||||||
.setY((height - buttonHeight) / 2)
|
.setY((height - buttonHeight) / 2)
|
||||||
.setWidth(buttonHeight)
|
.setWidth(buttonHeight)
|
||||||
.setHeight(buttonHeight)
|
.setHeight(buttonHeight)
|
||||||
.setAnimations(new FadeIn(2)));
|
.setAnimations(new FadeIn(2))
|
||||||
|
);
|
||||||
|
|
||||||
int logoSize = 49;
|
int logoSize = 49;
|
||||||
|
|
||||||
@@ -61,7 +65,8 @@ public class MainMenu extends SaturnUi {
|
|||||||
.setY((height - 8) / 2 - 23)
|
.setY((height - 8) / 2 - 23)
|
||||||
.setWidth(logoSize)
|
.setWidth(logoSize)
|
||||||
.setHeight(8)
|
.setHeight(8)
|
||||||
.setAnimations(new FadeIn(2)));
|
.setAnimations(new FadeIn(2))
|
||||||
|
);
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
new SaturnImage(Textures.LOGO)
|
new SaturnImage(Textures.LOGO)
|
||||||
@@ -69,7 +74,8 @@ public class MainMenu extends SaturnUi {
|
|||||||
.setY(height / 2 - logoSize - 24)
|
.setY(height / 2 - logoSize - 24)
|
||||||
.setWidth(logoSize)
|
.setWidth(logoSize)
|
||||||
.setHeight(logoSize)
|
.setHeight(logoSize)
|
||||||
.setAnimations(new Slide(2, 14)));
|
.setAnimations(new Slide(2, 14))
|
||||||
|
);
|
||||||
|
|
||||||
super.init();
|
super.init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import org.saturnclient.saturnmods.ModManager;
|
|||||||
import org.saturnclient.saturnmods.SaturnMod;
|
import org.saturnclient.saturnmods.SaturnMod;
|
||||||
import org.saturnclient.ui.SaturnUi;
|
import org.saturnclient.ui.SaturnUi;
|
||||||
import org.saturnclient.ui.Textures;
|
import org.saturnclient.ui.Textures;
|
||||||
import org.saturnclient.ui.animations.FadeIn;
|
|
||||||
import org.saturnclient.ui.animations.Slide;
|
|
||||||
import org.saturnclient.ui.components.SaturnModComp;
|
import org.saturnclient.ui.components.SaturnModComp;
|
||||||
import org.saturnclient.ui.widgets.SaturnClickableImage;
|
import org.saturnclient.ui.widgets.SaturnClickableImage;
|
||||||
import org.saturnclient.ui.widgets.SaturnScroll;
|
import org.saturnclient.ui.widgets.SaturnScroll;
|
||||||
@@ -33,7 +31,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
.setY(modsY)
|
.setY(modsY)
|
||||||
.setWidth(rectWidth)
|
.setWidth(rectWidth)
|
||||||
.setHeight(rectHeight)
|
.setHeight(rectHeight)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
int tabsX = (width - 43) / 2;
|
int tabsX = (width - 43) / 2;
|
||||||
@@ -45,7 +43,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
.setY(tabsY)
|
.setY(tabsY)
|
||||||
.setWidth(43)
|
.setWidth(43)
|
||||||
.setHeight(15)
|
.setHeight(15)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
int tabSize = 9;
|
int tabSize = 9;
|
||||||
@@ -58,8 +56,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
.setY(tabsY + 3)
|
.setY(tabsY + 3)
|
||||||
.setWidth(tabSize)
|
.setWidth(tabSize)
|
||||||
.setHeight(tabSize)
|
.setHeight(tabSize)
|
||||||
.setAnimations(new FadeIn(2))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
.setAnimations(new Slide(1, 10))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
@@ -70,8 +67,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
.setY(tabsY + 3)
|
.setY(tabsY + 3)
|
||||||
.setWidth(tabSize)
|
.setWidth(tabSize)
|
||||||
.setHeight(tabSize)
|
.setHeight(tabSize)
|
||||||
.setAnimations(new FadeIn(2))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
.setAnimations(new Slide(1, 10))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
draw(
|
draw(
|
||||||
@@ -82,8 +78,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
.setY(tabsY + 3)
|
.setY(tabsY + 3)
|
||||||
.setWidth(tabSize)
|
.setWidth(tabSize)
|
||||||
.setHeight(tabSize)
|
.setHeight(tabSize)
|
||||||
.setAnimations(new FadeIn(2))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
.setAnimations(new Slide(1, 10))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
int modX = 0;
|
int modX = 0;
|
||||||
@@ -119,7 +114,7 @@ public class ModMenu extends SaturnUi {
|
|||||||
.setY(modsY + 10)
|
.setY(modsY + 10)
|
||||||
.setWidth(rectWidth - 17)
|
.setWidth(rectWidth - 17)
|
||||||
.setHeight(rectHeight - 20)
|
.setHeight(rectHeight - 20)
|
||||||
.setAnimations(new Slide(1, 10))
|
.setAnimations(SaturnClient.getAnimations())
|
||||||
);
|
);
|
||||||
|
|
||||||
super.init();
|
super.init();
|
||||||
|
|||||||
@@ -11,49 +11,10 @@ import org.saturnclient.saturnmods.mods.Coordinates;
|
|||||||
|
|
||||||
public class ModManager {
|
public class ModManager {
|
||||||
|
|
||||||
public static SaturnMod[] MODS = {
|
public static SaturnMod[] MODS = { new Coordinates(), new ArmorDisplay() };
|
||||||
new Coordinates(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new ArmorDisplay(),
|
|
||||||
new Coordinates(),
|
|
||||||
};
|
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
HudRenderCallback.EVENT.register((context, _) -> {
|
HudRenderCallback.EVENT.register((context, _o) -> {
|
||||||
MinecraftClient client = MinecraftClient.getInstance();
|
MinecraftClient client = MinecraftClient.getInstance();
|
||||||
TextRenderer textRenderer = client.textRenderer;
|
TextRenderer textRenderer = client.textRenderer;
|
||||||
|
|
||||||
|
|||||||
@@ -63,11 +63,13 @@ public class SaturnUi extends Screen {
|
|||||||
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
||||||
if (!widget.visible) continue;
|
if (!widget.visible) continue;
|
||||||
|
|
||||||
|
double adjustedMouseX = mouseX - widget.x;
|
||||||
|
double adjustedMouseY = mouseY - widget.y;
|
||||||
boolean isMouseInside =
|
boolean isMouseInside =
|
||||||
widget.x < mouseX &&
|
adjustedMouseX >= 0 &&
|
||||||
widget.x + widget.width > mouseX &&
|
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||||
widget.y < mouseY &&
|
adjustedMouseY >= 0 &&
|
||||||
widget.y + widget.height > mouseY;
|
adjustedMouseY <= (widget.height * widget.scale);
|
||||||
|
|
||||||
MatrixStack matrices = context.getMatrices();
|
MatrixStack matrices = context.getMatrices();
|
||||||
matrices.push();
|
matrices.push();
|
||||||
@@ -76,8 +78,8 @@ public class SaturnUi extends Screen {
|
|||||||
widget.render(
|
widget.render(
|
||||||
context,
|
context,
|
||||||
isMouseInside,
|
isMouseInside,
|
||||||
mouseX - widget.x,
|
(int) (adjustedMouseX / widget.scale),
|
||||||
mouseY - widget.y
|
(int) (adjustedMouseY / widget.scale)
|
||||||
);
|
);
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
}
|
}
|
||||||
@@ -90,13 +92,13 @@ public class SaturnUi extends Screen {
|
|||||||
widget.focused = false;
|
widget.focused = false;
|
||||||
if (!widget.visible) continue;
|
if (!widget.visible) continue;
|
||||||
|
|
||||||
double adjustedMouseX = (mouseX - widget.x) / widget.scale;
|
double adjustedMouseX = mouseX - widget.x;
|
||||||
double adjustedMouseY = (mouseY - widget.y) / widget.scale;
|
double adjustedMouseY = mouseY - widget.y;
|
||||||
boolean isMouseInside =
|
boolean isMouseInside =
|
||||||
adjustedMouseX >= 0 &&
|
adjustedMouseX >= 0 &&
|
||||||
adjustedMouseX <= widget.width &&
|
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||||
adjustedMouseY >= 0 &&
|
adjustedMouseY >= 0 &&
|
||||||
adjustedMouseY <= widget.height;
|
adjustedMouseY <= (widget.height * widget.scale);
|
||||||
|
|
||||||
SaturnClient.LOGGER.info(
|
SaturnClient.LOGGER.info(
|
||||||
"CLick mouse X: " +
|
"CLick mouse X: " +
|
||||||
@@ -108,8 +110,8 @@ public class SaturnUi extends Screen {
|
|||||||
if (isMouseInside) {
|
if (isMouseInside) {
|
||||||
widget.focused = true;
|
widget.focused = true;
|
||||||
widget.click(
|
widget.click(
|
||||||
((int) mouseX) - widget.x,
|
(int) (adjustedMouseX / widget.scale),
|
||||||
((int) mouseY) - widget.y
|
(int) (adjustedMouseY / widget.scale)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -141,18 +143,18 @@ public class SaturnUi extends Screen {
|
|||||||
double verticalAmount
|
double verticalAmount
|
||||||
) {
|
) {
|
||||||
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
for (SaturnWidget widget : new ArrayList<>(widgets)) {
|
||||||
double adjustedMouseX = (mouseX - widget.x) / widget.scale;
|
double adjustedMouseX = mouseX - widget.x;
|
||||||
double adjustedMouseY = (mouseY - widget.y) / widget.scale;
|
double adjustedMouseY = mouseY - widget.y;
|
||||||
boolean isMouseInside =
|
boolean isMouseInside =
|
||||||
adjustedMouseX >= 0 &&
|
adjustedMouseX >= 0 &&
|
||||||
adjustedMouseX <= widget.width &&
|
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||||
adjustedMouseY >= 0 &&
|
adjustedMouseY >= 0 &&
|
||||||
adjustedMouseY <= widget.height;
|
adjustedMouseY <= (widget.height * widget.scale);
|
||||||
|
|
||||||
if (isMouseInside) {
|
if (isMouseInside) {
|
||||||
widget.mouseScrolled(
|
widget.mouseScrolled(
|
||||||
((int) mouseX) - widget.x,
|
(int) (adjustedMouseX / widget.scale),
|
||||||
((int) mouseY) - widget.y,
|
(int) (adjustedMouseY / widget.scale),
|
||||||
horizontalAmount,
|
horizontalAmount,
|
||||||
verticalAmount
|
verticalAmount
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class SaturnFloat extends SaturnWidget {
|
|||||||
for (int i = 0; i < visibleText.length(); i++) {
|
for (int i = 0; i < visibleText.length(); i++) {
|
||||||
textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1));
|
textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1));
|
||||||
|
|
||||||
if (textWidth > (mouseX - x)) {
|
if (textWidth > mouseX) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,168 @@
|
|||||||
|
package org.saturnclient.ui.components;
|
||||||
|
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.font.TextRenderer;
|
||||||
|
import net.minecraft.client.gui.DrawContext;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
import org.saturnclient.saturnclient.SaturnClient;
|
||||||
|
import org.saturnclient.saturnclient.config.Property;
|
||||||
|
import org.saturnclient.ui.SaturnUi;
|
||||||
|
import org.saturnclient.ui.SaturnWidget;
|
||||||
|
import org.saturnclient.ui.Textures;
|
||||||
|
|
||||||
|
public class SaturnString extends SaturnWidget {
|
||||||
|
|
||||||
|
public Property<String> prop;
|
||||||
|
public int cursorPosition = 0;
|
||||||
|
private TextRenderer textRenderer = MinecraftClient.getInstance()
|
||||||
|
.textRenderer;
|
||||||
|
|
||||||
|
public SaturnString(Property<String> prop, int x, int y, int width) {
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.width = width;
|
||||||
|
this.prop = prop;
|
||||||
|
this.height = textRenderer.fontHeight + 4;
|
||||||
|
this.scale = 0.8f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void click(int mouseX, int mouseY) {
|
||||||
|
int scrollOffset = getScrollOffset();
|
||||||
|
String visibleText = prop.value.substring(scrollOffset);
|
||||||
|
|
||||||
|
int newCursorPos = scrollOffset;
|
||||||
|
int textWidth = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < visibleText.length(); i++) {
|
||||||
|
textWidth = textRenderer.getWidth(visibleText.substring(0, i + 1));
|
||||||
|
|
||||||
|
if (textWidth > mouseX) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
newCursorPos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
cursorPosition = newCursorPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void charTyped(char chr) {
|
||||||
|
prop.value =
|
||||||
|
prop.value.substring(0, cursorPosition) +
|
||||||
|
chr +
|
||||||
|
prop.value.substring(cursorPosition);
|
||||||
|
|
||||||
|
cursorPosition++;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||||
|
if (keyCode == GLFW.GLFW_KEY_BACKSPACE) {
|
||||||
|
if (cursorPosition > 0) {
|
||||||
|
prop.value =
|
||||||
|
prop.value.substring(0, cursorPosition - 1) +
|
||||||
|
prop.value.substring(cursorPosition);
|
||||||
|
cursorPosition--;
|
||||||
|
}
|
||||||
|
} else if (keyCode == GLFW.GLFW_KEY_LEFT) {
|
||||||
|
if (cursorPosition > 0) {
|
||||||
|
cursorPosition--;
|
||||||
|
}
|
||||||
|
} else if (keyCode == GLFW.GLFW_KEY_RIGHT) {
|
||||||
|
if (cursorPosition < prop.value.length()) {
|
||||||
|
cursorPosition++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(
|
||||||
|
DrawContext context,
|
||||||
|
boolean hovering,
|
||||||
|
int mouseX,
|
||||||
|
int mouseY
|
||||||
|
) {
|
||||||
|
context.drawGuiTexture(
|
||||||
|
RenderLayer::getGuiTextured,
|
||||||
|
Textures.BUTTON_BORDER,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
this.width,
|
||||||
|
this.height,
|
||||||
|
focused ? SaturnClient.COLOR : SaturnClient.getWhite(this.alpha)
|
||||||
|
);
|
||||||
|
|
||||||
|
int scrollOffset = getScrollOffset();
|
||||||
|
String visibleText = getVisibleText(scrollOffset);
|
||||||
|
|
||||||
|
int textColor = focused ? 0xFFFFFF : 0xAAAAAA;
|
||||||
|
context.drawText(
|
||||||
|
textRenderer,
|
||||||
|
SaturnUi.text(visibleText),
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
textColor,
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
if (focused) {
|
||||||
|
int cursorX =
|
||||||
|
2 +
|
||||||
|
textRenderer.getWidth(
|
||||||
|
SaturnUi.text(
|
||||||
|
visibleText.substring(0, cursorPosition - scrollOffset)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
context.fill(
|
||||||
|
cursorX,
|
||||||
|
2,
|
||||||
|
cursorX + 1,
|
||||||
|
textRenderer.fontHeight + 3,
|
||||||
|
0xFFFFFFFF
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearText() {
|
||||||
|
prop.value = "";
|
||||||
|
cursorPosition = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getScrollOffset() {
|
||||||
|
if (prop.value.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int offset = 0;
|
||||||
|
int maxWidth = width - 4; // Available width for prop.value
|
||||||
|
while (offset < cursorPosition) { // Ensure cursor remains visible
|
||||||
|
String visibleText = prop.value.substring(offset, cursorPosition);
|
||||||
|
if (textRenderer.getWidth(SaturnUi.text(visibleText)) > maxWidth) {
|
||||||
|
offset++;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getVisibleText(int scrollOffset) {
|
||||||
|
String visibleText = prop.value.substring(scrollOffset);
|
||||||
|
|
||||||
|
// Ensure prop.value does not overflow past the available width
|
||||||
|
for (int i = 1; i <= visibleText.length(); i++) {
|
||||||
|
if (
|
||||||
|
textRenderer.getWidth(
|
||||||
|
SaturnUi.text(visibleText.substring(0, i))
|
||||||
|
) >
|
||||||
|
width - 4
|
||||||
|
) {
|
||||||
|
return visibleText.substring(0, i - 1); // Trim overflow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return visibleText;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,7 @@ public class SaturnClickableImage extends SaturnWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SaturnClickableImage(Identifier texture, Runnable onPress) {
|
public SaturnClickableImage(Identifier texture, Runnable onPress) {
|
||||||
this(texture, _ -> {
|
this(texture, _o -> {
|
||||||
onPress.run();
|
onPress.run();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class SaturnClickableSprite extends SaturnWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SaturnClickableSprite(Identifier sprite, Runnable onPress) {
|
public SaturnClickableSprite(Identifier sprite, Runnable onPress) {
|
||||||
this(sprite, _ -> {
|
this(sprite, _o -> {
|
||||||
onPress.run();
|
onPress.run();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public class SaturnImageButton extends SaturnButton {
|
|||||||
int imageHeight,
|
int imageHeight,
|
||||||
Consumer<SaturnImageButton> onPress
|
Consumer<SaturnImageButton> onPress
|
||||||
) {
|
) {
|
||||||
super("", _ -> {});
|
super("", _o -> {});
|
||||||
this.sprite = sprite;
|
this.sprite = sprite;
|
||||||
this.imageWidth = imageWidth;
|
this.imageWidth = imageWidth;
|
||||||
this.imageHeight = imageHeight;
|
this.imageHeight = imageHeight;
|
||||||
@@ -32,7 +32,7 @@ public class SaturnImageButton extends SaturnButton {
|
|||||||
int imageHeight,
|
int imageHeight,
|
||||||
Runnable onPress
|
Runnable onPress
|
||||||
) {
|
) {
|
||||||
this(sprite, imageWidth, imageHeight, _ -> {
|
this(sprite, imageWidth, imageHeight, _o -> {
|
||||||
onPress.run();
|
onPress.run();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,13 +42,13 @@ public class SaturnScroll extends SaturnWidget {
|
|||||||
for (SaturnWidget widget : children) {
|
for (SaturnWidget widget : children) {
|
||||||
if (!widget.visible) continue;
|
if (!widget.visible) continue;
|
||||||
|
|
||||||
double adjustedMouseX = (mouseX - widget.x) * scale;
|
double adjustedMouseX = (mouseX - widget.x);
|
||||||
double adjustedMouseY = (mouseY - widget.y + scroll) * scale;
|
double adjustedMouseY = (mouseY - widget.y + scroll);
|
||||||
boolean isMouseInside =
|
boolean isMouseInside =
|
||||||
adjustedMouseX >= 0 &&
|
adjustedMouseX >= 0 &&
|
||||||
adjustedMouseX <= widget.width &&
|
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||||
adjustedMouseY >= 0 &&
|
adjustedMouseY >= 0 &&
|
||||||
adjustedMouseY <= widget.height;
|
adjustedMouseY <= (widget.height * widget.scale);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
widget.y - scroll < height && widget.y + widget.height > scroll
|
widget.y - scroll < height && widget.y + widget.height > scroll
|
||||||
@@ -61,8 +61,8 @@ public class SaturnScroll extends SaturnWidget {
|
|||||||
widget.render(
|
widget.render(
|
||||||
context,
|
context,
|
||||||
isMouseInside,
|
isMouseInside,
|
||||||
(int) adjustedMouseX,
|
(int) (adjustedMouseX / widget.scale),
|
||||||
(int) adjustedMouseY
|
(int) (adjustedMouseY / widget.scale)
|
||||||
);
|
);
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
}
|
}
|
||||||
@@ -126,18 +126,20 @@ public class SaturnScroll extends SaturnWidget {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
double adjustedMouseX = (mouseX - widget.x) * scale;
|
double adjustedMouseX = (mouseX - widget.x);
|
||||||
double adjustedMouseY =
|
double adjustedMouseY = (mouseY - (widget.y - scroll));
|
||||||
(mouseY - (widget.y - scroll)) * widget.scale;
|
|
||||||
boolean isMouseInside =
|
boolean isMouseInside =
|
||||||
adjustedMouseX >= 0 &&
|
adjustedMouseX >= 0 &&
|
||||||
adjustedMouseX <= widget.width &&
|
adjustedMouseX <= (widget.width * widget.scale) &&
|
||||||
adjustedMouseY >= 0 &&
|
adjustedMouseY >= 0 &&
|
||||||
adjustedMouseY <= widget.height;
|
adjustedMouseY <= (widget.height * widget.scale);
|
||||||
|
|
||||||
if (isMouseInside) {
|
if (isMouseInside) {
|
||||||
widget.focused = true;
|
widget.focused = true;
|
||||||
widget.click((int) adjustedMouseX, (int) adjustedMouseY);
|
widget.click(
|
||||||
|
(int) (adjustedMouseX / widget.scale),
|
||||||
|
(int) (adjustedMouseY / widget.scale)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user