mirror of
https://github.com/Shiewk/Widgets.git
synced 2026-04-28 11:34:17 +02:00
Support Minecraft 26.1
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
package de.shiewk.widgets;
|
||||
|
||||
import de.shiewk.widgets.widgets.settings.WidgetSettingOption;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
public abstract class ModWidget {
|
||||
|
||||
@@ -31,10 +30,10 @@ public abstract class ModWidget {
|
||||
public final WidgetSettings getSettings() {
|
||||
return settings;
|
||||
}
|
||||
public abstract void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY);
|
||||
public abstract void render(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY);
|
||||
public abstract void tick();
|
||||
public abstract Text getName();
|
||||
public abstract Text getDescription();
|
||||
public abstract Component getName();
|
||||
public abstract Component getDescription();
|
||||
public abstract void onSettingsChanged(WidgetSettings settings);
|
||||
|
||||
public void onSettingsChanged() {
|
||||
|
||||
@@ -6,10 +6,9 @@ import com.google.gson.JsonSyntaxException;
|
||||
import de.shiewk.widgets.client.WidgetManager;
|
||||
import de.shiewk.widgets.widgets.settings.WidgetSettingOption;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import static de.shiewk.widgets.WidgetsMod.LOGGER;
|
||||
import static de.shiewk.widgets.client.WidgetManager.gson;
|
||||
|
||||
@@ -7,8 +7,6 @@ import com.google.gson.stream.JsonWriter;
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.WidgetsMod;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
@@ -17,6 +15,8 @@ import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
public class WidgetManager {
|
||||
|
||||
@@ -46,7 +46,7 @@ public class WidgetManager {
|
||||
enabled.remove(widget);
|
||||
}
|
||||
|
||||
static Function<Identifier, File> saveFileFactory = id -> new File(MinecraftClient.getInstance().runDirectory.getPath() + "/config/widgets/" + id.getNamespace() + "/" + id.getPath() + ".json");
|
||||
static Function<Identifier, File> saveFileFactory = id -> new File(Minecraft.getInstance().gameDirectory.getPath() + "/config/widgets/" + id.getNamespace() + "/" + id.getPath() + ".json");
|
||||
public static final Gson gson = new Gson();
|
||||
|
||||
public static void saveWidgets(List<ModWidget> widgets) {
|
||||
|
||||
@@ -8,19 +8,20 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.profiler.Profiler;
|
||||
import net.minecraft.util.profiler.Profilers;
|
||||
import net.minecraft.util.profiling.Profiler;
|
||||
import net.minecraft.util.profiling.ProfilerFiller;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecycleEvents.ClientStarted {
|
||||
|
||||
public static final Identifier LAYER_ID = Identifier.of(WidgetsMod.MOD_ID, "widgets-hud-layer");
|
||||
private static MinecraftClient client;
|
||||
public static final Identifier LAYER_ID = Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "widgets-hud-layer");
|
||||
private static Minecraft client;
|
||||
public static int guiScale = 1;
|
||||
|
||||
public WidgetRenderer(){
|
||||
@@ -30,15 +31,15 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc
|
||||
);
|
||||
}
|
||||
|
||||
public void renderWidgets(DrawContext drawContext, RenderTickCounter tickCounter) {
|
||||
if (client.options.hudHidden) return;
|
||||
if (client.currentScreen instanceof WidgetVisibilityToggle vt && !vt.shouldRenderWidgets()) return;
|
||||
final Profiler profiler = Profilers.get();
|
||||
public void renderWidgets(GuiGraphicsExtractor drawContext, DeltaTracker tickCounter) {
|
||||
if (client.options.hideGui) return;
|
||||
if (client.screen instanceof WidgetVisibilityToggle vt && !vt.shouldRenderWidgets()) return;
|
||||
final ProfilerFiller profiler = Profiler.get();
|
||||
profiler.push("widgets");
|
||||
final TextRenderer textRenderer = client.textRenderer;
|
||||
final long timeNano = Util.getMeasuringTimeNano();
|
||||
final int windowWidth = drawContext.getScaledWindowWidth();
|
||||
final int windowHeight = drawContext.getScaledWindowHeight();
|
||||
final Font textRenderer = client.font;
|
||||
final long timeNano = Util.getNanos();
|
||||
final int windowWidth = drawContext.guiWidth();
|
||||
final int windowHeight = drawContext.guiHeight();
|
||||
|
||||
final ObjectArrayList<ModWidget> enabled = WidgetManager.enabled;
|
||||
for (int i = 0, enabledSize = enabled.size(); i < enabledSize; i++) {
|
||||
@@ -57,11 +58,11 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartTick(MinecraftClient client) {
|
||||
public void onStartTick(Minecraft client) {
|
||||
WidgetRenderer.client = client;
|
||||
final Profiler profiler = Profilers.get();
|
||||
final ProfilerFiller profiler = Profiler.get();
|
||||
profiler.push("widgets");
|
||||
guiScale = client.getWindow().getScaleFactor();
|
||||
guiScale = client.getWindow().getGuiScale();
|
||||
|
||||
final ObjectArrayList<ModWidget> enabled = WidgetManager.enabled;
|
||||
for (int i = 0, enabledSize = enabled.size(); i < enabledSize; i++) {
|
||||
@@ -73,13 +74,13 @@ public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecyc
|
||||
|
||||
profiler.pop();
|
||||
|
||||
if (WidgetsModClient.configKeyBinding.wasPressed()){
|
||||
client.setScreen(new WidgetConfigScreen(client.currentScreen));
|
||||
if (WidgetsModClient.configKeyBinding.consumeClick()){
|
||||
client.setScreen(new WidgetConfigScreen(client.screen));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClientStarted(MinecraftClient client) {
|
||||
public void onClientStarted(@NonNull Minecraft client) {
|
||||
for (ModWidget widget : WidgetManager.getAllWidgets()) {
|
||||
widget.onSettingsChanged();
|
||||
}
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
package de.shiewk.widgets.client;
|
||||
|
||||
import com.mojang.blaze3d.platform.InputConstants;
|
||||
import de.shiewk.widgets.WidgetsMod;
|
||||
import de.shiewk.widgets.client.screen.WidgetConfigScreen;
|
||||
import de.shiewk.widgets.widgets.*;
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommands;
|
||||
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
||||
import net.fabricmc.fabric.api.client.keymapping.v1.KeyMappingHelper;
|
||||
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
public class WidgetsModClient implements ClientModInitializer {
|
||||
|
||||
static KeyBinding configKeyBinding;
|
||||
static KeyMapping configKeyBinding;
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
@@ -28,52 +28,52 @@ public class WidgetsModClient implements ClientModInitializer {
|
||||
ClientLifecycleEvents.CLIENT_STARTED.register(widgetRenderer);
|
||||
|
||||
// manage widgets keybind
|
||||
configKeyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
|
||||
configKeyBinding = KeyMappingHelper.registerKeyMapping(new KeyMapping(
|
||||
"widgets.key.config",
|
||||
InputUtil.Type.KEYSYM,
|
||||
InputConstants.Type.KEYSYM,
|
||||
GLFW.GLFW_KEY_RIGHT_SHIFT,
|
||||
KeyBinding.Category.create(Identifier.of(WidgetsMod.MOD_ID, "main"))
|
||||
KeyMapping.Category.register(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "main"))
|
||||
));
|
||||
|
||||
// in-game /widgetsmod command
|
||||
ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) ->
|
||||
dispatcher.register(ClientCommandManager.literal("widgetsmod").executes(ctx -> {
|
||||
ClientCommandRegistrationCallback.EVENT.register((dispatcher, _) ->
|
||||
dispatcher.register(ClientCommands.literal("widgetsmod").executes(ctx -> {
|
||||
WidgetsMod.LOGGER.info("Ran in-game command");
|
||||
final MinecraftClient client = ctx.getSource().getClient();
|
||||
client.send(() -> client.setScreen(new WidgetConfigScreen(client.currentScreen)));
|
||||
final Minecraft client = ctx.getSource().getClient();
|
||||
client.schedule(() -> client.setScreen(new WidgetConfigScreen(client.screen)));
|
||||
return 0;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ClientEntityEvents.ENTITY_LOAD.register((entity, clientWorld) -> {
|
||||
if (entity == MinecraftClient.getInstance().player){
|
||||
ClientEntityEvents.ENTITY_LOAD.register((entity, _) -> {
|
||||
if (entity == Minecraft.getInstance().player){
|
||||
// player switched world
|
||||
TPSWidget.worldChanged();
|
||||
}
|
||||
});
|
||||
|
||||
WidgetManager.register(new FPSWidget(Identifier.of(WidgetsMod.MOD_ID, "fps")));
|
||||
WidgetManager.register(new ClockWidget(Identifier.of(WidgetsMod.MOD_ID, "clock")));
|
||||
WidgetManager.register(new CoordinatesWidget(Identifier.of(WidgetsMod.MOD_ID, "coordinates")));
|
||||
WidgetManager.register(new BandwidthWidget(Identifier.of(WidgetsMod.MOD_ID, "bandwidth")));
|
||||
WidgetManager.register(new PingWidget(Identifier.of(WidgetsMod.MOD_ID, "ping")));
|
||||
WidgetManager.register(new ServerIPWidget(Identifier.of(WidgetsMod.MOD_ID, "server_ip")));
|
||||
WidgetManager.register(new PlayerCountWidget(Identifier.of(WidgetsMod.MOD_ID, "player_count")));
|
||||
WidgetManager.register(new CPSWidget(Identifier.of(WidgetsMod.MOD_ID, "cps")));
|
||||
WidgetManager.register(new PlayTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "playtime")));
|
||||
WidgetManager.register(new MemoryUsageWidget(Identifier.of(WidgetsMod.MOD_ID, "memory")));
|
||||
WidgetManager.register(new KeyStrokesWidget(Identifier.of(WidgetsMod.MOD_ID, "keystrokes")));
|
||||
WidgetManager.register(new PlainTextWidget(Identifier.of(WidgetsMod.MOD_ID, "plaintext")));
|
||||
WidgetManager.register(new BiomeWidget(Identifier.of(WidgetsMod.MOD_ID, "biome")));
|
||||
WidgetManager.register(new SpeedWidget(Identifier.of(WidgetsMod.MOD_ID, "speed")));
|
||||
WidgetManager.register(new ArmorHudWidget(Identifier.of(WidgetsMod.MOD_ID, "armor")));
|
||||
WidgetManager.register(new InventoryWidget(Identifier.of(WidgetsMod.MOD_ID, "inventory")));
|
||||
WidgetManager.register(new WorldTimeWidget(Identifier.of(WidgetsMod.MOD_ID, "worldtime")));
|
||||
WidgetManager.register(new DirectionWidget(Identifier.of(WidgetsMod.MOD_ID, "direction")));
|
||||
WidgetManager.register(new FPSWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "fps")));
|
||||
WidgetManager.register(new ClockWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "clock")));
|
||||
WidgetManager.register(new CoordinatesWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "coordinates")));
|
||||
WidgetManager.register(new BandwidthWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "bandwidth")));
|
||||
WidgetManager.register(new PingWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "ping")));
|
||||
WidgetManager.register(new ServerIPWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "server_ip")));
|
||||
WidgetManager.register(new PlayerCountWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "player_count")));
|
||||
WidgetManager.register(new CPSWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "cps")));
|
||||
WidgetManager.register(new PlayTimeWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "playtime")));
|
||||
WidgetManager.register(new MemoryUsageWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "memory")));
|
||||
WidgetManager.register(new KeyStrokesWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "keystrokes")));
|
||||
WidgetManager.register(new PlainTextWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "plaintext")));
|
||||
WidgetManager.register(new BiomeWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "biome")));
|
||||
WidgetManager.register(new SpeedWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "speed")));
|
||||
WidgetManager.register(new ArmorHudWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "armor")));
|
||||
WidgetManager.register(new InventoryWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "inventory")));
|
||||
WidgetManager.register(new WorldTimeWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "worldtime")));
|
||||
WidgetManager.register(new DirectionWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "direction")));
|
||||
WidgetManager.register(TPSWidget.INSTANCE);
|
||||
|
||||
ComboWidget comboWidget = new ComboWidget(Identifier.of(WidgetsMod.MOD_ID, "combo"));
|
||||
ComboWidget comboWidget = new ComboWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "combo"));
|
||||
WidgetManager.register(comboWidget);
|
||||
AttackEntityCallback.EVENT.register(comboWidget);
|
||||
}
|
||||
|
||||
@@ -1,41 +1,42 @@
|
||||
package de.shiewk.widgets.client.screen;
|
||||
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
public abstract class AnimatedScreen extends Screen {
|
||||
protected final Screen parent;
|
||||
private final int animationDurationMs;
|
||||
private final long creationTime = Util.getMeasuringTimeNano();
|
||||
protected AnimatedScreen(Text title, Screen parent, int animationDurationMs) {
|
||||
private final long creationTime = Util.getNanos();
|
||||
protected AnimatedScreen(Component title, Screen parent, int animationDurationMs) {
|
||||
super(title);
|
||||
this.parent = parent;
|
||||
this.animationDurationMs = animationDurationMs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
double timeMs = (Util.getMeasuringTimeNano() - creationTime) / 1000000d;
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
double timeMs = (Util.getNanos() - creationTime) / 1000000d;
|
||||
final boolean shouldAnimate = timeMs < animationDurationMs;
|
||||
if (shouldAnimate){
|
||||
double translation = WidgetUtils.computeEasing(timeMs / animationDurationMs) * this.width;
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
Matrix3x2fStack stack = context.pose().pushMatrix();
|
||||
|
||||
stack.translate((float) -translation, 0, stack);
|
||||
parent.render(context, -67, -67, delta);
|
||||
parent.extractRenderState(context, -67, -67, delta);
|
||||
stack.translate(this.width, 0, stack);
|
||||
mouseX -= (int) translation;
|
||||
}
|
||||
super.render(context, mouseX, mouseY, delta);
|
||||
super.extractRenderState(context, mouseX, mouseY, delta);
|
||||
this.renderScreenContents(context, mouseX, mouseY, delta);
|
||||
if (shouldAnimate){
|
||||
context.getMatrices().popMatrix();
|
||||
context.pose().popMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void renderScreenContents(DrawContext context, int mouseX, int mouseY, float delta);
|
||||
public abstract void renderScreenContents(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta);
|
||||
}
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
package de.shiewk.widgets.client.screen;
|
||||
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle {
|
||||
|
||||
public record Option(Text title, boolean highlighted, Runnable action){
|
||||
public record Option(Component title, boolean highlighted, Runnable action){
|
||||
|
||||
public Option(Text title, Runnable action){
|
||||
public Option(Component title, Runnable action){
|
||||
this(title, false, action);
|
||||
}
|
||||
|
||||
@@ -28,7 +29,7 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle
|
||||
private int menuWidth;
|
||||
private int menuHeight;
|
||||
|
||||
public ContextMenuScreen(Text title, Screen parent, int menuX, int menuY, List<Option> options) {
|
||||
public ContextMenuScreen(Component title, Screen parent, int menuX, int menuY, List<Option> options) {
|
||||
super(title);
|
||||
this.parent = parent;
|
||||
this.menuX = menuX;
|
||||
@@ -56,7 +57,7 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle
|
||||
private int computeMenuWidth() {
|
||||
int max = 0;
|
||||
for (Option option : options) {
|
||||
int width = textRenderer.getWidth(option.title);
|
||||
int width = font.width(option.title);
|
||||
if (width > max){
|
||||
max = width;
|
||||
}
|
||||
@@ -70,21 +71,21 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
client.setScreen(parent);
|
||||
public void onClose() {
|
||||
minecraft.setScreen(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
if (!isInBounds(click.x(), click.y())){
|
||||
close();
|
||||
onClose();
|
||||
return false;
|
||||
}
|
||||
int opt = (int) (click.y() - menuY - 1) / 15;
|
||||
if (opt < options.size()){
|
||||
Option option = options.get(opt);
|
||||
close();
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_OFF);
|
||||
onClose();
|
||||
WidgetUtils.playSound(SoundEvents.COPPER_BULB_TURN_OFF);
|
||||
option.action.run();
|
||||
}
|
||||
return false;
|
||||
@@ -95,10 +96,10 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
super.render(context, mouseX, mouseY, deltaTicks);
|
||||
parent.render(context, -67, -67, deltaTicks);
|
||||
context.drawStrokedRectangle(
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks) {
|
||||
super.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
parent.extractRenderState(context, -67, -67, deltaTicks);
|
||||
context.outline(
|
||||
menuX,
|
||||
menuY,
|
||||
menuWidth,
|
||||
@@ -115,7 +116,7 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle
|
||||
renderMenu(context, mouseX, mouseY);
|
||||
}
|
||||
|
||||
public void renderMenu(DrawContext context, int mouseX, int mouseY){
|
||||
public void renderMenu(GuiGraphicsExtractor context, int mouseX, int mouseY){
|
||||
int y = menuY + 1;
|
||||
for (Option option : options) {
|
||||
boolean hover = isInBounds(mouseX, mouseY) && mouseY >= y && mouseY < y + 15;
|
||||
@@ -127,9 +128,9 @@ public class ContextMenuScreen extends Screen implements WidgetVisibilityToggle
|
||||
y + 15,
|
||||
0x30_ff_ff_ff
|
||||
);
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
}
|
||||
context.drawText(textRenderer, option.title, menuX + 5, y + 3, option.highlighted ? 0xff_00_ff_ff : 0xff_ff_ff_ff, false);
|
||||
context.text(font, option.title, menuX + 5, y + 3, option.highlighted ? 0xff_00_ff_ff : 0xff_ff_ff_ff, false);
|
||||
y += 15;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
package de.shiewk.widgets.client.screen;
|
||||
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.Anchor;
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.client.WidgetManager;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.tooltip.Tooltip;
|
||||
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.components.Tooltip;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import org.joml.Vector2i;
|
||||
|
||||
import java.awt.*;
|
||||
@@ -29,15 +29,14 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
private final Consumer<ModWidget> onEdit;
|
||||
|
||||
public EditWidgetPositionsScreen(Screen parent, Consumer<ModWidget> onEdit) {
|
||||
super(Text.translatable("widgets.ui.editPositions"), parent, 500);
|
||||
super(Component.translatable("widgets.ui.editPositions"), parent, 500);
|
||||
this.parent = parent;
|
||||
this.onEdit = onEdit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
assert client != null;
|
||||
client.setScreen(parent);
|
||||
public void onClose() {
|
||||
minecraft.setScreen(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,21 +57,21 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
private int scaledWindowHeight = 1080;
|
||||
|
||||
@Override
|
||||
public void renderScreenContents(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
this.scaledWindowWidth = context.getScaledWindowWidth();
|
||||
this.scaledWindowHeight = context.getScaledWindowHeight();
|
||||
long mt = Util.getMeasuringTimeNano();
|
||||
public void renderScreenContents(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
this.scaledWindowWidth = context.guiWidth();
|
||||
this.scaledWindowHeight = context.guiHeight();
|
||||
long mt = Util.getNanos();
|
||||
renderAnchorArea(context, mouseX, mouseY);
|
||||
|
||||
for (ModWidget widget : WidgetManager.getEnabledWidgets()) {
|
||||
final int ww = (int) (widget.width() * widget.getScaleFactor());
|
||||
int wx = MathHelper.clamp(widget.getX(scaledWindowWidth), 0, this.width - ww);
|
||||
int wx = Mth.clamp(widget.getX(scaledWindowWidth), 0, this.width - ww);
|
||||
final int wh = (int) (widget.height() * widget.getScaleFactor());
|
||||
int wy = MathHelper.clamp(widget.getY(scaledWindowHeight), 0, this.height - wh);
|
||||
int wy = Mth.clamp(widget.getY(scaledWindowHeight), 0, this.height - wh);
|
||||
if (selectedWidget == widget){
|
||||
AlignResult alignedX = alignX(widget);
|
||||
if (alignedX != null){
|
||||
context.drawVerticalLine(
|
||||
context.verticalLine(
|
||||
(int) Math.round(alignedX.result),
|
||||
0,
|
||||
scaledWindowHeight,
|
||||
@@ -81,7 +80,7 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
AlignResult alignedY = alignY(widget);
|
||||
if (alignedY != null){
|
||||
context.drawHorizontalLine(
|
||||
context.horizontalLine(
|
||||
0,
|
||||
scaledWindowWidth,
|
||||
(int) Math.round(alignedY.result),
|
||||
@@ -99,14 +98,14 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
}
|
||||
if (selectedWidget == null ? hoveredWidget == widget : selectedWidget == widget){
|
||||
context.drawStrokedRectangle(wx-1,wy-1, ww+2, wh+2, SELECT_COLOR);
|
||||
context.drawStrokedRectangle(wx, wy, ww, wh, SELECT_COLOR);
|
||||
context.outline(wx-1,wy-1, ww+2, wh+2, SELECT_COLOR);
|
||||
context.outline(wx, wy, ww, wh, SELECT_COLOR);
|
||||
}
|
||||
widget.render(context, mt, textRenderer, wx, wy);
|
||||
widget.render(context, mt, font, wx, wy);
|
||||
}
|
||||
|
||||
if (hoveredWidget != null){
|
||||
context.setCursor(StandardCursors.RESIZE_ALL);
|
||||
context.requestCursor(CursorTypes.RESIZE_ALL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,7 +205,7 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
return null;
|
||||
}
|
||||
|
||||
private void renderAnchorArea(DrawContext context, int mouseX, int mouseY) {
|
||||
private void renderAnchorArea(GuiGraphicsExtractor context, int mouseX, int mouseY) {
|
||||
Anchor anchor = Anchor.getAnchor(
|
||||
scaledWindowWidth,
|
||||
scaledWindowHeight,
|
||||
@@ -226,7 +225,7 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(Click click) {
|
||||
public boolean mouseReleased(MouseButtonEvent click) {
|
||||
if (click.button() == 0 && selectedWidget != null){
|
||||
if (align){
|
||||
AlignResult alignedX = alignX(selectedWidget);
|
||||
@@ -253,7 +252,7 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
if (click.button() == 0 && hoveredWidget != null){
|
||||
selectedWidget = hoveredWidget;
|
||||
focusedExtraX = (int) (click.x() - hoveredWidget.getX(scaledWindowWidth));
|
||||
@@ -262,30 +261,29 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
int x = (int) click.x();
|
||||
int y = (int) click.y();
|
||||
ModWidget hovered = hoveredWidget;
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_ON);
|
||||
assert client != null;
|
||||
WidgetUtils.playSound(SoundEvents.COPPER_BULB_TURN_ON);
|
||||
if (hovered != null){
|
||||
client.setScreen(new ContextMenuScreen(
|
||||
Text.empty(),
|
||||
minecraft.setScreen(new ContextMenuScreen(
|
||||
Component.empty(),
|
||||
this,
|
||||
x,
|
||||
y,
|
||||
List.of(
|
||||
new ContextMenuScreen.Option(
|
||||
Text.translatable("widgets.ui.editPositions.menu.widgetSettings"),
|
||||
() -> client.setScreen(new WidgetSettingsScreen(
|
||||
Component.translatable("widgets.ui.editPositions.menu.widgetSettings"),
|
||||
() -> minecraft.setScreen(new WidgetSettingsScreen(
|
||||
this,
|
||||
hovered,
|
||||
this.onEdit
|
||||
))
|
||||
),
|
||||
new ContextMenuScreen.Option(
|
||||
Text.translatable("widgets.ui.editPositions.menu.setAnchor"),
|
||||
Component.translatable("widgets.ui.editPositions.menu.setAnchor"),
|
||||
() -> {
|
||||
List<ContextMenuScreen.Option> options = new ObjectArrayList<>(Anchor.values().length);
|
||||
for (Anchor anchor : Anchor.values()) {
|
||||
options.add(new ContextMenuScreen.Option(
|
||||
Text.translatable("widgets.ui.anchor." + anchor.name().toLowerCase(Locale.ROOT)),
|
||||
Component.translatable("widgets.ui.anchor." + anchor.name().toLowerCase(Locale.ROOT)),
|
||||
hovered.getSettings().anchor == anchor,
|
||||
() -> {
|
||||
hovered.setPos(
|
||||
@@ -298,8 +296,8 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
));
|
||||
}
|
||||
// Add widget context menu
|
||||
client.setScreen(new ContextMenuScreen(
|
||||
Text.empty(),
|
||||
minecraft.setScreen(new ContextMenuScreen(
|
||||
Component.empty(),
|
||||
this,
|
||||
x,
|
||||
y,
|
||||
@@ -308,7 +306,7 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
),
|
||||
new ContextMenuScreen.Option(
|
||||
Text.translatable("widgets.ui.editPositions.menu.removeWidget"),
|
||||
Component.translatable("widgets.ui.editPositions.menu.removeWidget"),
|
||||
() -> {
|
||||
hovered.getSettings().toggleEnabled(hovered);
|
||||
onEdit.accept(hovered);
|
||||
@@ -317,14 +315,14 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
)
|
||||
));
|
||||
} else {
|
||||
client.setScreen(new ContextMenuScreen(
|
||||
Text.empty(),
|
||||
minecraft.setScreen(new ContextMenuScreen(
|
||||
Component.empty(),
|
||||
this,
|
||||
x,
|
||||
y,
|
||||
List.of(
|
||||
new ContextMenuScreen.Option(
|
||||
Text.translatable("widgets.ui.editPositions.menu.addWidget"),
|
||||
Component.translatable("widgets.ui.editPositions.menu.addWidget"),
|
||||
() -> {
|
||||
List<ContextMenuScreen.Option> options = new ObjectArrayList<>();
|
||||
for (ModWidget widget : WidgetManager.getAllWidgets()) {
|
||||
@@ -340,8 +338,8 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
}
|
||||
// Add widget context menu
|
||||
client.setScreen(new ContextMenuScreen(
|
||||
Text.empty(),
|
||||
minecraft.setScreen(new ContextMenuScreen(
|
||||
Component.empty(),
|
||||
this,
|
||||
x,
|
||||
y,
|
||||
@@ -357,16 +355,15 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(Click click, double deltaX, double deltaY) {
|
||||
public boolean mouseDragged(MouseButtonEvent click, double deltaX, double deltaY) {
|
||||
if (click.button() == 0){
|
||||
assert client != null;
|
||||
final ModWidget widget = selectedWidget;
|
||||
if (widget != null){
|
||||
final WidgetSettings settings = widget.getSettings();
|
||||
final int ww = (int) (widget.width() * widget.getScaleFactor());
|
||||
int wx = MathHelper.clamp(widget.getX(scaledWindowWidth), 0, this.width - ww);
|
||||
int wx = Mth.clamp(widget.getX(scaledWindowWidth), 0, this.width - ww);
|
||||
final int wh = (int) (widget.height() * widget.getScaleFactor());
|
||||
int wy = MathHelper.clamp(widget.getY(scaledWindowHeight), 0, this.height - wh);
|
||||
int wy = Mth.clamp(widget.getY(scaledWindowHeight), 0, this.height - wh);
|
||||
if (click.x() <= wx + ww + deltaX && click.x() >= wx + deltaX){
|
||||
if (click.y() <= wy + wh + deltaY && click.y() >= wy + deltaY){
|
||||
Anchor anchor = Anchor.getAnchor(scaledWindowWidth, scaledWindowHeight, (int) click.x(), (int) click.y());
|
||||
@@ -407,28 +404,28 @@ public class EditWidgetPositionsScreen extends AnimatedScreen implements WidgetV
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
this.addDrawableChild(
|
||||
new ButtonWidget.Builder(
|
||||
Text.translatable(
|
||||
this.addRenderableWidget(
|
||||
new Button.Builder(
|
||||
Component.translatable(
|
||||
"widgets.ui.editPositions.snap",
|
||||
align ?
|
||||
Text.translatable("gui.yes") :
|
||||
Text.translatable("gui.no")
|
||||
Component.translatable("gui.yes") :
|
||||
Component.translatable("gui.no")
|
||||
), button -> {
|
||||
align = !align;
|
||||
button.setMessage(
|
||||
Text.translatable(
|
||||
Component.translatable(
|
||||
"widgets.ui.editPositions.snap",
|
||||
align ?
|
||||
Text.translatable("gui.yes")
|
||||
: Text.translatable("gui.no")
|
||||
Component.translatable("gui.yes")
|
||||
: Component.translatable("gui.no")
|
||||
)
|
||||
);
|
||||
}).position(
|
||||
}).pos(
|
||||
this.width / 2 - 75,
|
||||
this.height / 2 - 10
|
||||
).tooltip(
|
||||
Tooltip.of(Text.translatable("widgets.ui.editPositions.snap.help"))
|
||||
Tooltip.create(Component.translatable("widgets.ui.editPositions.snap.help"))
|
||||
).build()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,15 +5,16 @@ import de.shiewk.widgets.client.WidgetManager;
|
||||
import de.shiewk.widgets.client.screen.components.ScaledTextWidget;
|
||||
import de.shiewk.widgets.client.screen.components.WidgetListWidget;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
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.GridWidget;
|
||||
import net.minecraft.client.gui.widget.SimplePositioningWidget;
|
||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.components.EditBox;
|
||||
import net.minecraft.client.gui.layouts.FrameLayout;
|
||||
import net.minecraft.client.gui.layouts.GridLayout;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
@@ -21,27 +22,26 @@ import java.util.function.Consumer;
|
||||
public class WidgetConfigScreen extends Screen {
|
||||
|
||||
private final Screen parent;
|
||||
private final long creationTime = Util.getMeasuringTimeNano();
|
||||
private final long creationTime = Util.getNanos();
|
||||
private final ArrayList<ModWidget> widgetsEdited = new ArrayList<>();
|
||||
private final Consumer<ModWidget> onWidgetEdit = this::changedSettings;
|
||||
|
||||
private double getScreenTimeMs(){
|
||||
return (Util.getMeasuringTimeNano() - creationTime) / 1000000d;
|
||||
return (Util.getNanos() - creationTime) / 1000000d;
|
||||
}
|
||||
|
||||
public WidgetConfigScreen(Screen parent) {
|
||||
super(Text.translatable("widgets.ui.config"));
|
||||
super(Component.translatable("widgets.ui.config"));
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
public void onClose() {
|
||||
WidgetManager.saveWidgets(widgetsEdited);
|
||||
for (ModWidget widget : widgetsEdited) {
|
||||
widget.onSettingsChanged();
|
||||
}
|
||||
assert client != null;
|
||||
client.setScreen(parent);
|
||||
minecraft.setScreen(parent);
|
||||
}
|
||||
|
||||
int widgetListWidth;
|
||||
@@ -54,55 +54,53 @@ public class WidgetConfigScreen extends Screen {
|
||||
widgetListWidth = widgetColumns * WidgetListWidget.COLUMN_SIZE;
|
||||
|
||||
// Right side
|
||||
final WidgetListWidget widgetList = new WidgetListWidget(width - widgetListWidth - 4, 0, widgetListWidth, height - 24, client, textRenderer, onWidgetEdit);
|
||||
final WidgetListWidget widgetList = new WidgetListWidget(width - widgetListWidth - 4, 0, widgetListWidth, height - 24, minecraft, font, onWidgetEdit);
|
||||
|
||||
final TextFieldWidget searchField = new TextFieldWidget(textRenderer, widgetListWidth, 20, Text.empty());
|
||||
searchField.setPlaceholder(Text.translatable("widgets.ui.search"));
|
||||
searchField.setChangedListener(widgetList::search);
|
||||
final EditBox searchField = new EditBox(font, widgetListWidth, 20, Component.empty());
|
||||
searchField.setHint(Component.translatable("widgets.ui.search"));
|
||||
searchField.setResponder(widgetList::search);
|
||||
searchField.setX(width - widgetListWidth - 4);
|
||||
searchField.setY(height - 24);
|
||||
|
||||
this.addDrawableChild(widgetList);
|
||||
this.addDrawableChild(searchField);
|
||||
this.addRenderableWidget(widgetList);
|
||||
this.addRenderableWidget(searchField);
|
||||
setInitialFocus(searchField);
|
||||
|
||||
// Left side
|
||||
GridWidget gw = new GridWidget(0, 0);
|
||||
gw.getMainPositioner().margin(4, 4, 4, 4);
|
||||
GridWidget.Adder adder = gw.createAdder(1);
|
||||
GridLayout gw = new GridLayout(0, 0);
|
||||
gw.defaultCellSetting().padding(4, 4, 4, 4);
|
||||
GridLayout.RowHelper adder = gw.createRowHelper(1);
|
||||
{
|
||||
ScaledTextWidget title = new ScaledTextWidget(0, 0, Text.literal("ᴡɪᴅɢᴇᴛѕ"), textRenderer, width < 600 ? 4 : 6);
|
||||
adder.add(title);
|
||||
ScaledTextWidget title = new ScaledTextWidget(0, 0, Component.literal("ᴡɪᴅɢᴇᴛѕ"), font, width < 600 ? 4 : 6);
|
||||
adder.addChild(title);
|
||||
|
||||
ButtonWidget editPosButton = ButtonWidget.builder(Text.translatable("widgets.ui.editPositions"), this::switchToEditPositions).build();
|
||||
adder.add(editPosButton);
|
||||
Button editPosButton = Button.builder(Component.translatable("widgets.ui.editPositions"), this::switchToEditPositions).build();
|
||||
adder.addChild(editPosButton);
|
||||
}
|
||||
gw.refreshPositions();
|
||||
SimplePositioningWidget.setPos(gw, 0, 0, width - widgetListWidth, height, .5f, .5f);
|
||||
gw.forEachChild(c -> c.setX((width - widgetListWidth) / 2 - (c.getWidth() / 2)));
|
||||
gw.forEachChild(this::addDrawableChild);
|
||||
gw.arrangeElements();
|
||||
FrameLayout.alignInRectangle(gw, 0, 0, width - widgetListWidth, height, .5f, .5f);
|
||||
gw.visitWidgets(c -> c.setX((width - widgetListWidth) / 2 - (c.getWidth() / 2)));
|
||||
gw.visitWidgets(this::addRenderableWidget);
|
||||
}
|
||||
|
||||
private void switchToEditPositions(ButtonWidget widget) {
|
||||
private void switchToEditPositions(Button widget) {
|
||||
widget.active = false;
|
||||
assert client != null;
|
||||
client.setScreen(new EditWidgetPositionsScreen(this, this.onWidgetEdit));
|
||||
minecraft.setScreen(new EditWidgetPositionsScreen(this, this.onWidgetEdit));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
assert client != null;
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
final double time = getScreenTimeMs();
|
||||
if (time < 400){
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
Matrix3x2fStack stack = context.pose().pushMatrix();
|
||||
final float v = (float) WidgetUtils.computeEasing(time / 400d);
|
||||
stack.translate((float) (width / 2d - (width * v / 2d)), (float) (height / 2d - (height * v / 2d)), stack);
|
||||
stack.scale(v, v, stack);
|
||||
}
|
||||
super.render(context, mouseX, mouseY, delta);
|
||||
super.extractRenderState(context, mouseX, mouseY, delta);
|
||||
|
||||
if (time < 400){
|
||||
context.getMatrices().popMatrix();
|
||||
context.pose().popMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,22 +2,23 @@ package de.shiewk.widgets.client.screen;
|
||||
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.client.screen.components.WidgetSettingsEditWidget;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.Util;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class WidgetSettingsScreen extends AnimatedScreen implements WidgetVisibilityToggle {
|
||||
private static final Text previewText = Text.translatable("widgets.ui.preview");
|
||||
private static final Component previewText = Component.translatable("widgets.ui.preview");
|
||||
private final ModWidget widget;
|
||||
private final Runnable onChange;
|
||||
public WidgetSettingsScreen(Screen parent, ModWidget widget, Consumer<ModWidget> changedWidgetConsumer) {
|
||||
super(Text.translatable("widgets.ui.widgetSettings", widget.getName()), parent, 500);
|
||||
super(Component.translatable("widgets.ui.widgetSettings", widget.getName()), parent, 500);
|
||||
this.widget = widget;
|
||||
onChange = () -> {
|
||||
widget.onSettingsChanged();
|
||||
@@ -28,19 +29,19 @@ public class WidgetSettingsScreen extends AnimatedScreen implements WidgetVisibi
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
addDrawableChild(new WidgetSettingsEditWidget(0, 0, this.width / 2 - 8, this.height, textRenderer, widget, this.onChange));
|
||||
addRenderableWidget(new WidgetSettingsEditWidget(0, 0, this.width / 2 - 8, this.height, font, widget, this.onChange));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderScreenContents(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
context.drawText(textRenderer, previewText, this.width * 3 / 4 - textRenderer.getWidth(previewText) / 2, this.height / 50, 0xffffffff, false);
|
||||
widget.render(context, Util.getMeasuringTimeNano(), textRenderer, (int) ((float) (this.width * 3) / 4 - (widget.width() * widget.getScaleFactor()) / 2), (int) ((float) this.height / 2 - (widget.height() * widget.getScaleFactor()) / 2));
|
||||
public void renderScreenContents(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
context.text(font, previewText, this.width * 3 / 4 - font.width(previewText) / 2, this.height / 50, 0xffffffff, false);
|
||||
widget.render(context, Util.getNanos(), font, (int) ((float) (this.width * 3) / 4 - (widget.width() * widget.getScaleFactor()) / 2), (int) ((float) this.height / 2 - (widget.height() * widget.getScaleFactor()) / 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(Click click) {
|
||||
for (Element child : children()) {
|
||||
if (child instanceof ClickableWidget s){
|
||||
public boolean mouseReleased(@NonNull MouseButtonEvent click) {
|
||||
for (GuiEventListener child : children()) {
|
||||
if (child instanceof AbstractWidget s){
|
||||
s.mouseReleased(click);
|
||||
}
|
||||
}
|
||||
@@ -48,9 +49,8 @@ public class WidgetSettingsScreen extends AnimatedScreen implements WidgetVisibi
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
assert client != null;
|
||||
client.setScreen(parent);
|
||||
public void onClose() {
|
||||
minecraft.setScreen(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,42 +1,43 @@
|
||||
package de.shiewk.widgets.client.screen.components;
|
||||
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
public class ScaledTextWidget extends ClickableWidget {
|
||||
public class ScaledTextWidget extends AbstractWidget {
|
||||
|
||||
private final TextRenderer textRenderer;
|
||||
private final Font textRenderer;
|
||||
private final float scale;
|
||||
|
||||
public ScaledTextWidget(int x, int y, Text message, TextRenderer textRenderer, float scale) {
|
||||
super(x, y, 0, (int) (textRenderer.fontHeight * scale), message);
|
||||
public ScaledTextWidget(int x, int y, Component message, Font textRenderer, float scale) {
|
||||
super(x, y, 0, (int) (textRenderer.lineHeight * scale), message);
|
||||
this.textRenderer = textRenderer;
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return (int) (textRenderer.getWidth(getMessage()) * scale);
|
||||
return (int) (textRenderer.width(getMessage()) * scale);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
protected void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks) {
|
||||
Matrix3x2fStack stack = context.pose().pushMatrix();
|
||||
stack.scale(scale);
|
||||
context.drawText(textRenderer, getMessage(), (int) (getX() / scale), (int) (getY() / scale), 0xffffffff, true);
|
||||
context.text(textRenderer, getMessage(), (int) (getX() / scale), (int) (getY() / scale), 0xffffffff, true);
|
||||
stack.popMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendClickableNarrations(NarrationMessageBuilder builder) {}
|
||||
protected void updateWidgetNarration(@NonNull NarrationElementOutput builder) {}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,22 @@
|
||||
package de.shiewk.widgets.client.screen.components;
|
||||
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationPart;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.narration.NarratedElementType;
|
||||
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||||
import net.minecraft.util.Util;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
public class WidgetDisplayWidget extends ClickableWidget {
|
||||
public class WidgetDisplayWidget extends AbstractWidget {
|
||||
|
||||
protected final ModWidget widget;
|
||||
protected final TextRenderer textRenderer;
|
||||
protected final Font textRenderer;
|
||||
protected final int centerX;
|
||||
protected final int centerY;
|
||||
|
||||
public WidgetDisplayWidget(ModWidget widget, TextRenderer textRenderer, int centerX, int centerY) {
|
||||
public WidgetDisplayWidget(ModWidget widget, Font textRenderer, int centerX, int centerY) {
|
||||
super(0, 0, (int) widget.scaledWidth(), (int) widget.scaledHeight(), widget.getName());
|
||||
this.widget = widget;
|
||||
this.textRenderer = textRenderer;
|
||||
@@ -44,12 +45,12 @@ public class WidgetDisplayWidget extends ClickableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
widget.render(context, Util.getMeasuringTimeNano(), textRenderer, getX(), getY());
|
||||
protected void extractWidgetRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks) {
|
||||
widget.render(context, Util.getNanos(), textRenderer, getX(), getY());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendClickableNarrations(NarrationMessageBuilder builder) {
|
||||
builder.put(NarrationPart.HINT, widget.getName());
|
||||
protected void updateWidgetNarration(NarrationElementOutput builder) {
|
||||
builder.add(NarratedElementType.HINT, widget.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,20 +2,21 @@ package de.shiewk.widgets.client.screen.components;
|
||||
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.client.WidgetManager;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationPart;
|
||||
import net.minecraft.client.gui.widget.GridWidget;
|
||||
import net.minecraft.client.gui.widget.ScrollableWidget;
|
||||
import net.minecraft.client.gui.widget.SimplePositioningWidget;
|
||||
import net.minecraft.client.sound.PositionedSoundInstance;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.AbstractScrollArea;
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import net.minecraft.client.gui.layouts.FrameLayout;
|
||||
import net.minecraft.client.gui.layouts.GridLayout;
|
||||
import net.minecraft.client.gui.narration.NarratedElementType;
|
||||
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
@@ -23,13 +24,13 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class WidgetListWidget extends ScrollableWidget {
|
||||
public class WidgetListWidget extends AbstractScrollArea {
|
||||
|
||||
public static final int COLUMN_SIZE = 208;
|
||||
private final MinecraftClient client;
|
||||
private final Minecraft client;
|
||||
private List<ModWidget> widgets;
|
||||
private final List<WidgetWidget> elements = new ArrayList<>();
|
||||
private final TextRenderer textRenderer;
|
||||
private final Font textRenderer;
|
||||
private final Consumer<ModWidget> onEdit;
|
||||
|
||||
public static boolean searchQueryMatches(String search, ModWidget widget) {
|
||||
@@ -37,8 +38,8 @@ public class WidgetListWidget extends ScrollableWidget {
|
||||
return widget.getName().getString().contains(search) || widget.getDescription().getString().contains(search) || widget.getId().toString().contains(search);
|
||||
}
|
||||
|
||||
public WidgetListWidget(int x, int y, int width, int height, MinecraftClient client, TextRenderer textRenderer, Consumer<ModWidget> onEdit) {
|
||||
super(x, y, width, height, Text.empty());
|
||||
public WidgetListWidget(int x, int y, int width, int height, Minecraft client, Font textRenderer, Consumer<ModWidget> onEdit) {
|
||||
super(x, y, width, height, Component.empty(), AbstractScrollArea.defaultSettings(35));
|
||||
this.client = client;
|
||||
this.widgets = loadWidgets(null);
|
||||
this.textRenderer = textRenderer;
|
||||
@@ -55,16 +56,16 @@ public class WidgetListWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
private void init(){
|
||||
GridWidget gw = new GridWidget();
|
||||
gw.getMainPositioner().margin(4, 4, 4, 4);
|
||||
final GridWidget.Adder adder = gw.createAdder(getColumns());
|
||||
GridLayout gw = new GridLayout();
|
||||
gw.defaultCellSetting().padding(4, 4, 4, 4);
|
||||
final GridLayout.RowHelper adder = gw.createRowHelper(getColumns());
|
||||
for (ModWidget widget : widgets) {
|
||||
adder.add(new WidgetWidget(0, 0, 200, 100, client, widget, textRenderer, onEdit));
|
||||
adder.addChild(new WidgetWidget(0, 0, 200, 100, client, widget, textRenderer, onEdit));
|
||||
}
|
||||
SimplePositioningWidget.setPos(gw, getX(), getY(), this.getWidth(), this.getContentsHeightWithPadding(), 0, 0);
|
||||
gw.refreshPositions();
|
||||
FrameLayout.alignInRectangle(gw, getX(), getY(), this.getWidth(), this.contentHeight(), 0, 0);
|
||||
gw.arrangeElements();
|
||||
this.elements.clear();
|
||||
gw.forEachChild(w -> this.addWidget((WidgetWidget) w));
|
||||
gw.visitWidgets(w -> this.addWidget((WidgetWidget) w));
|
||||
}
|
||||
|
||||
protected void addWidget(WidgetWidget drawableElement) {
|
||||
@@ -72,7 +73,7 @@ public class WidgetListWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getContentsHeightWithPadding() {
|
||||
protected int contentHeight() {
|
||||
final int columns = getColumns();
|
||||
final int rows = (int) Math.ceil((double) widgets.size() / columns);
|
||||
return 10 + (rows * 108);
|
||||
@@ -87,47 +88,42 @@ public class WidgetListWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getDeltaYPerScroll() {
|
||||
return 35;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
protected void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
context.enableScissor(getX(), getY(), getX()+width, getY()+height);
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
stack.translate(0, (float) -getScrollY(), stack);
|
||||
Matrix3x2fStack stack = context.pose().pushMatrix();
|
||||
stack.translate(0, (float) -scrollAmount(), stack);
|
||||
for (WidgetWidget element : elements) {
|
||||
element.render(context, mouseX, (int) (mouseY + getScrollY()), delta);
|
||||
element.extractRenderState(context, mouseX, (int) (mouseY + scrollAmount()), delta);
|
||||
}
|
||||
stack.popMatrix();
|
||||
context.disableScissor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
double mouseY = click.y();
|
||||
double mouseX = click.x();
|
||||
mouseY += getScrollY();
|
||||
Click newClick = new Click(mouseX, mouseY, click.buttonInfo());
|
||||
for (Element element : elements) {
|
||||
mouseY += scrollAmount();
|
||||
MouseButtonEvent newClick = new MouseButtonEvent(mouseX, mouseY, click.buttonInfo());
|
||||
for (GuiEventListener element : elements) {
|
||||
if (element.mouseClicked(newClick, doubled)){
|
||||
client.getSoundManager().play(PositionedSoundInstance.ui(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||
client.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.checkScrollbarDragged(newClick);
|
||||
return super.updateScrolling(newClick);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendClickableNarrations(NarrationMessageBuilder builder) {
|
||||
protected void updateWidgetNarration(@NonNull NarrationElementOutput builder) {
|
||||
for (ModWidget widget : widgets) {
|
||||
builder.put(NarrationPart.HINT, widget.getName());
|
||||
builder.add(NarratedElementType.HINT, widget.getName());
|
||||
}
|
||||
}
|
||||
|
||||
public void search(String query) {
|
||||
widgets = this.loadWidgets(query);
|
||||
setScrollY(0);
|
||||
setScrollAmount(0);
|
||||
init();
|
||||
}
|
||||
}
|
||||
|
||||
+34
-38
@@ -2,28 +2,29 @@ package de.shiewk.widgets.client.screen.components;
|
||||
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.widgets.settings.WidgetSettingOption;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
|
||||
import net.minecraft.client.gui.widget.ScrollableWidget;
|
||||
import net.minecraft.client.input.CharInput;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.AbstractScrollArea;
|
||||
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||||
import net.minecraft.client.input.CharacterEvent;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
public class WidgetSettingsEditWidget extends AbstractScrollArea {
|
||||
private static final int COLOR_FG = Color.WHITE.getRGB(), COLOR_BG = new Color(0, 0, 0, 60).getRGB();
|
||||
private final TextRenderer textRenderer;
|
||||
private final Font textRenderer;
|
||||
private final ModWidget widget;
|
||||
private final Runnable onChange;
|
||||
private WidgetSettingOption<?> focus = null;
|
||||
private int contentsHeight = 10;
|
||||
|
||||
public WidgetSettingsEditWidget(int x, int y, int width, int height, TextRenderer textRenderer, ModWidget widget, Runnable onChange) {
|
||||
super(x, y, width, height, Text.empty());
|
||||
public WidgetSettingsEditWidget(int x, int y, int width, int height, Font textRenderer, ModWidget widget, Runnable onChange) {
|
||||
super(x, y, width, height, Component.empty(), AbstractScrollArea.defaultSettings(20));
|
||||
this.widget = widget;
|
||||
this.textRenderer = textRenderer;
|
||||
this.onChange = onChange;
|
||||
@@ -43,39 +44,34 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int getContentsHeightWithPadding() {
|
||||
protected int contentHeight() {
|
||||
return this.contentsHeight;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getDeltaYPerScroll() {
|
||||
return 20;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
protected void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
context.fill(getX(), getY(), getX()+width, getY()+height, COLOR_BG);
|
||||
Matrix3x2fStack matrices = context.getMatrices().pushMatrix();
|
||||
matrices.translate(0, (float) -getScrollY(), matrices);
|
||||
Matrix3x2fStack matrices = context.pose().pushMatrix();
|
||||
matrices.translate(0, (float) -scrollAmount(), matrices);
|
||||
matrices.pushMatrix();
|
||||
matrices.scale(2, 2, matrices);
|
||||
matrices.translate(0, (float) -getScrollY(), matrices);
|
||||
context.drawText(textRenderer, widget.getName(), this.width / 4 - textRenderer.getWidth(widget.getName()) / 2, this.height / 100, COLOR_FG, true);
|
||||
matrices.translate(0, (float) -scrollAmount(), matrices);
|
||||
context.text(textRenderer, widget.getName(), this.width / 4 - textRenderer.width(widget.getName()) / 2, this.height / 100, COLOR_FG, true);
|
||||
matrices.popMatrix();
|
||||
int y = textRenderer.fontHeight * 2 + this.height / 50 + 5;
|
||||
int y = textRenderer.lineHeight * 2 + this.height / 50 + 5;
|
||||
for (WidgetSettingOption<?> setting : widget.getSettings().getCustomSettings()) {
|
||||
if (!setting.shouldShow()) continue;
|
||||
if (this.width - setting.getWidth() > textRenderer.getWidth(setting.getName()) + 20){
|
||||
if (this.width - setting.getWidth() > textRenderer.width(setting.getName()) + 20){
|
||||
setting.setX(this.getX() + this.width - setting.getWidth() - 5);
|
||||
setting.setY(y);
|
||||
context.drawText(textRenderer, setting.getName(), getX() + 10, y + (setting.getHeight() / 2), COLOR_FG, true);
|
||||
context.text(textRenderer, setting.getName(), getX() + 10, y + (setting.getHeight() / 2), COLOR_FG, true);
|
||||
} else {
|
||||
setting.setX(this.getX() + this.width / 2 - setting.getWidth() / 2);
|
||||
setting.setY(y + 9 + 5);
|
||||
context.drawText(textRenderer, setting.getName(), getX() + getWidth() / 2 - textRenderer.getWidth(setting.getName()) / 2, y, COLOR_FG, true);
|
||||
context.text(textRenderer, setting.getName(), getX() + getWidth() / 2 - textRenderer.width(setting.getName()) / 2, y, COLOR_FG, true);
|
||||
y += 9 + 5;
|
||||
}
|
||||
setting.render(context, mouseX, (int) (mouseY + getScrollY()), delta);
|
||||
setting.extractRenderState(context, mouseX, (int) (mouseY + scrollAmount()), delta);
|
||||
y += setting.getHeight();
|
||||
y += 5;
|
||||
}
|
||||
@@ -84,16 +80,16 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
double mouseY = click.y();
|
||||
double mouseX = click.x();
|
||||
mouseY += getScrollY();
|
||||
mouseY += scrollAmount();
|
||||
for (WidgetSettingOption<?> customSetting : widget.getSettings().getCustomSettings()) {
|
||||
if (!customSetting.shouldShow()) continue;
|
||||
if (customSetting.isHovered(mouseX, mouseY)){
|
||||
focus = customSetting;
|
||||
customSetting.setFocused(true);
|
||||
if (customSetting.mouseClicked(new Click(mouseX, mouseY + getScrollY(), click.buttonInfo()), doubled)){
|
||||
if (customSetting.mouseClicked(new MouseButtonEvent(mouseX, mouseY + scrollAmount(), click.buttonInfo()), doubled)){
|
||||
onChange.run();
|
||||
return true;
|
||||
}
|
||||
@@ -101,14 +97,14 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
customSetting.setFocused(false);
|
||||
}
|
||||
}
|
||||
return checkScrollbarDragged(click);
|
||||
return updateScrolling(click);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(Click click) {
|
||||
public boolean mouseReleased(@NonNull MouseButtonEvent click) {
|
||||
for (WidgetSettingOption<?> customSetting : widget.getSettings().getCustomSettings()) {
|
||||
if (!customSetting.shouldShow()) continue;
|
||||
if (customSetting.mouseReleased(new Click(click.x(), click.y() + getScrollY(), click.buttonInfo()))){
|
||||
if (customSetting.mouseReleased(new MouseButtonEvent(click.x(), click.y() + scrollAmount(), click.buttonInfo()))){
|
||||
onChange.run();
|
||||
return true;
|
||||
}
|
||||
@@ -117,7 +113,7 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean charTyped(CharInput input) {
|
||||
public boolean charTyped(@NonNull CharacterEvent input) {
|
||||
if (this.focus != null){
|
||||
if (this.focus.charTyped(input)){
|
||||
onChange.run();
|
||||
@@ -128,7 +124,7 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
public boolean keyPressed(@NonNull KeyEvent input) {
|
||||
if (this.focus != null){
|
||||
if (this.focus.keyPressed(input)){
|
||||
onChange.run();
|
||||
@@ -139,7 +135,7 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyReleased(KeyInput input) {
|
||||
public boolean keyReleased(@NonNull KeyEvent input) {
|
||||
if (this.focus != null){
|
||||
if (this.focus.keyReleased(input)){
|
||||
onChange.run();
|
||||
@@ -150,7 +146,7 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendClickableNarrations(NarrationMessageBuilder builder) {
|
||||
protected void updateWidgetNarration(@NonNull NarrationElementOutput builder) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,26 @@
|
||||
package de.shiewk.widgets.client.screen.components;
|
||||
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.client.screen.WidgetSettingsScreen;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.FormattedCharSequence;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Iterator;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class WidgetWidget extends ClickableWidget {
|
||||
|
||||
|
||||
public class WidgetWidget extends AbstractWidget {
|
||||
|
||||
protected static final int COLOR_BG = new Color(0, 0, 0, 80).getRGB(),
|
||||
COLOR_BG_HOVER = new Color(40, 40, 40, 80).getRGB(),
|
||||
@@ -32,14 +31,14 @@ public class WidgetWidget extends ClickableWidget {
|
||||
COLOR_ENABLED_HOVER = new Color(0, 255, 0, 200).getRGB(),
|
||||
COLOR_BORDER = 0x80_ff_ff_ff;
|
||||
|
||||
private final MinecraftClient client;
|
||||
private final Minecraft client;
|
||||
private final ModWidget widget;
|
||||
private final TextRenderer textRenderer;
|
||||
private final Font textRenderer;
|
||||
private final Consumer<ModWidget> onEdit;
|
||||
|
||||
private long toggleTime = 0;
|
||||
|
||||
public WidgetWidget(int x, int y, int width, int height, MinecraftClient client, ModWidget widget, TextRenderer textRenderer, Consumer<ModWidget> onEdit) {
|
||||
public WidgetWidget(int x, int y, int width, int height, Minecraft client, ModWidget widget, Font textRenderer, Consumer<ModWidget> onEdit) {
|
||||
super(x, y, width, height, widget.getName());
|
||||
this.client = client;
|
||||
this.widget = widget;
|
||||
@@ -53,36 +52,36 @@ public class WidgetWidget extends ClickableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
protected void extractWidgetRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
boolean hover = this.isMouseOver(mouseX, mouseY);
|
||||
boolean widgetEnabled = widget.getSettings().isEnabled();
|
||||
context.fill(this.getX(), this.getY(), this.getX() + this.getWidth(), this.getY() + this.getHeight(), hover ? COLOR_BG_HOVER : COLOR_BG);
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
Matrix3x2fStack stack = context.pose().pushMatrix();
|
||||
stack.scale(2, 2, stack);
|
||||
int titleSize = textRenderer.getWidth(widget.getName());
|
||||
context.drawText(textRenderer, widget.getName(), getX() / 2 + getWidth() / 4 - titleSize / 2, getY() / 2 + 4, COLOR_FG, false);
|
||||
int titleSize = textRenderer.width(widget.getName());
|
||||
context.text(textRenderer, widget.getName(), getX() / 2 + getWidth() / 4 - titleSize / 2, getY() / 2 + 4, COLOR_FG, false);
|
||||
stack.popMatrix();
|
||||
int y = this.getY() + 12 + textRenderer.fontHeight * 2;
|
||||
for (Iterator<OrderedText> it = textRenderer.wrapLines(widget.getDescription(), this.getWidth() - 10).iterator(); it.hasNext(); y += 9) {
|
||||
OrderedText t = it.next();
|
||||
context.drawText(textRenderer, t, getX() + 5 + ((getWidth() - 5) / 2) - (textRenderer.getWidth(t) / 2), y, COLOR_FG, false);
|
||||
int y = this.getY() + 12 + textRenderer.lineHeight * 2;
|
||||
for (Iterator<FormattedCharSequence> it = textRenderer.split(widget.getDescription(), this.getWidth() - 10).iterator(); it.hasNext(); y += 9) {
|
||||
FormattedCharSequence t = it.next();
|
||||
context.text(textRenderer, t, getX() + 5 + ((getWidth() - 5) / 2) - (textRenderer.width(t) / 2), y, COLOR_FG, false);
|
||||
}
|
||||
this.renderToggleButton(context, mouseX, mouseY, widgetEnabled);
|
||||
|
||||
if (hover || isMouseOverToggle(mouseX, mouseY)){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
}
|
||||
|
||||
context.drawHorizontalLine(getX(), getX() + getWidth() - 1, getY(), COLOR_BORDER);
|
||||
context.drawHorizontalLine(getX() + 1, getX() + getWidth() - 1, getY() + getHeight() - 1, COLOR_BORDER);
|
||||
context.drawVerticalLine(getX(), getY(), getY() + getHeight(), COLOR_BORDER);
|
||||
context.drawVerticalLine(getX() + getWidth() - 1, getY(), getY() + getHeight() - 1, COLOR_BORDER);
|
||||
context.horizontalLine(getX(), getX() + getWidth() - 1, getY(), COLOR_BORDER);
|
||||
context.horizontalLine(getX() + 1, getX() + getWidth() - 1, getY() + getHeight() - 1, COLOR_BORDER);
|
||||
context.verticalLine(getX(), getY(), getY() + getHeight(), COLOR_BORDER);
|
||||
context.verticalLine(getX() + getWidth() - 1, getY(), getY() + getHeight() - 1, COLOR_BORDER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
if (isMouseOver(click.x(), click.y())){
|
||||
client.setScreen(new WidgetSettingsScreen(client.currentScreen, widget, onEdit));
|
||||
client.setScreen(new WidgetSettingsScreen(client.screen, widget, onEdit));
|
||||
return true;
|
||||
} else if (isMouseOverToggle(click.x(), click.y())){
|
||||
this.toggleWidget();
|
||||
@@ -93,11 +92,11 @@ public class WidgetWidget extends ClickableWidget {
|
||||
|
||||
private void toggleWidget() {
|
||||
widget.getSettings().toggleEnabled(widget);
|
||||
toggleTime = Util.getMeasuringTimeNano();
|
||||
toggleTime = Util.getNanos();
|
||||
onEdit.accept(widget);
|
||||
}
|
||||
|
||||
private void renderToggleButton(DrawContext context, int mouseX, int mouseY, boolean widgetEnabled){
|
||||
private void renderToggleButton(GuiGraphicsExtractor context, int mouseX, int mouseY, boolean widgetEnabled){
|
||||
boolean hoverToggle = this.isMouseOverToggle(mouseX, mouseY);
|
||||
final int toggleColor;
|
||||
final int toggleColorInvert;
|
||||
@@ -118,13 +117,13 @@ public class WidgetWidget extends ClickableWidget {
|
||||
toggleColorInvert = COLOR_ENABLED;
|
||||
}
|
||||
}
|
||||
if (toggleTime > Util.getMeasuringTimeNano() - 250000000){
|
||||
if (toggleTime > Util.getNanos() - 250000000){
|
||||
context.fill(this.getX(), this.getY() + this.getHeight() - 24, this.getX() + this.getWidth(), this.getY() + this.getHeight(), toggleColorInvert);
|
||||
context.fill(this.getX(), this.getY() + this.getHeight() - 24, (int) (WidgetUtils.computeEasing((Util.getMeasuringTimeNano() - toggleTime) / 250000000d) * this.getWidth() + this.getX()), this.getY() + this.getHeight(), toggleColor);
|
||||
context.fill(this.getX(), this.getY() + this.getHeight() - 24, (int) (WidgetUtils.computeEasing((Util.getNanos() - toggleTime) / 250000000d) * this.getWidth() + this.getX()), this.getY() + this.getHeight(), toggleColor);
|
||||
} else {
|
||||
context.fill(this.getX(), this.getY() + this.getHeight() - 24, this.getX() + this.getWidth(), this.getY() + this.getHeight(), toggleColor);
|
||||
}
|
||||
context.drawCenteredTextWithShadow(textRenderer, Text.translatable(widgetEnabled ? "widgets.ui.enabled" : "widgets.ui.disabled"), this.getX() + (this.getWidth() / 2), this.getY() + this.getHeight() - 16, COLOR_FG);
|
||||
context.centeredText(textRenderer, Component.translatable(widgetEnabled ? "widgets.ui.enabled" : "widgets.ui.disabled"), this.getX() + (this.getWidth() / 2), this.getY() + this.getHeight() - 16, COLOR_FG);
|
||||
}
|
||||
|
||||
private boolean isMouseOverToggle(double mouseX, double mouseY) {
|
||||
@@ -132,7 +131,7 @@ public class WidgetWidget extends ClickableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendClickableNarrations(NarrationMessageBuilder builder) {
|
||||
protected void updateWidgetNarration(@NonNull NarrationElementOutput builder) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
+42
-41
@@ -1,42 +1,43 @@
|
||||
package de.shiewk.widgets.client.screen.gradienteditor;
|
||||
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.WidgetsMod;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gl.RenderPipelines;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.Element;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.ObjectSelectionList;
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.client.renderer.RenderPipelines;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.IntSupplier;
|
||||
|
||||
import static net.minecraft.text.Text.empty;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.empty;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<GradientEditorColorSection.ListEntry> {
|
||||
public class GradientEditorColorSection extends ObjectSelectionList<GradientEditorColorSection.ListEntry> {
|
||||
|
||||
private final GradientEditorScreen editor;
|
||||
private static final Identifier TEXTURE_BUTTON_PLUS = Identifier.of(WidgetsMod.MOD_ID, "textures/gui/button_plus.png"),
|
||||
TEXTURE_ARROW_DOWN = Identifier.of(WidgetsMod.MOD_ID, "textures/gui/arrow_down.png");
|
||||
private static final Identifier TEXTURE_BUTTON_PLUS = Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "textures/gui/button_plus.png"),
|
||||
TEXTURE_ARROW_DOWN = Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "textures/gui/arrow_down.png");
|
||||
|
||||
private final List<ColorEntry> colorEntries;
|
||||
|
||||
public GradientEditorColorSection(GradientEditorScreen editor, MinecraftClient client, int x, int y, int width, int height, int focusedIndex) {
|
||||
public GradientEditorColorSection(GradientEditorScreen editor, Minecraft client, int x, int y, int width, int height, int focusedIndex) {
|
||||
super(client, width, height, y, 64);
|
||||
setX(x);
|
||||
this.editor = editor;
|
||||
colorEntries = new ObjectArrayList<>(editor.colors.size());
|
||||
addEntry(new HeadingEntry(client.textRenderer), 18);
|
||||
addEntry(new HeadingEntry(client.font), 18);
|
||||
|
||||
IntArrayList colors = editor.colors;
|
||||
for (int i = 0; i < colors.size(); i++) {
|
||||
@@ -57,26 +58,26 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawSelectionHighlight(DrawContext context, ListEntry entry, int color) {}
|
||||
protected void extractSelection(@NonNull GuiGraphicsExtractor context, @NonNull ListEntry entry, int color) {}
|
||||
|
||||
@Override
|
||||
protected void drawMenuListBackground(DrawContext context) {
|
||||
protected void extractListBackground(GuiGraphicsExtractor context) {
|
||||
context.fill(getX(), getY(), getX()+getWidth(), getY()+getHeight(), 0x50_00_00_00);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawHeaderAndFooterSeparators(DrawContext context) {}
|
||||
protected void extractListSeparators(@NonNull GuiGraphicsExtractor context) {}
|
||||
|
||||
@Override
|
||||
protected void drawScrollbar(DrawContext context, int mouseX, int mouseY) {}
|
||||
protected void extractScrollbar(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY) {}
|
||||
|
||||
@Override
|
||||
public void setFocused(@Nullable Element focused) {
|
||||
public void setFocused(@Nullable GuiEventListener focused) {
|
||||
if (focused == null) return;
|
||||
if (focused instanceof ListEntry se && !se.canFocus()) return;
|
||||
|
||||
if (super.getFocused() != focused){
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_ON);
|
||||
WidgetUtils.playSound(SoundEvents.COPPER_BULB_TURN_ON);
|
||||
}
|
||||
if (focused instanceof ColorEntry color){
|
||||
editor.setCurrentColorIndex(colorEntries.indexOf(color));
|
||||
@@ -88,14 +89,14 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
setFocused(colorEntries.getLast());
|
||||
}
|
||||
|
||||
public abstract static class ListEntry extends AlwaysSelectedEntryListWidget.Entry<ListEntry> {
|
||||
public abstract static class ListEntry extends ObjectSelectionList.Entry<ListEntry> {
|
||||
|
||||
public boolean canFocus(){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getNarration() {
|
||||
public @NonNull Component getNarration() {
|
||||
return empty();
|
||||
}
|
||||
}
|
||||
@@ -109,13 +110,13 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
int color = this.color.getAsInt();
|
||||
int x = this.getX();
|
||||
int y = this.getContentY();
|
||||
|
||||
if (hovered && !isFocused()){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
context.fill(x, y, x+getWidth(), y+getHeight(), 0x30_ff_ff_ff);
|
||||
}
|
||||
|
||||
@@ -144,8 +145,8 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
private static class ArrowDownEntry extends ListEntry {
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
context.drawTexture(
|
||||
public void extractContent(GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
context.blit(
|
||||
RenderPipelines.GUI_TEXTURED,
|
||||
TEXTURE_ARROW_DOWN,
|
||||
getX() + 16,
|
||||
@@ -163,29 +164,29 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
|
||||
private static class HeadingEntry extends ListEntry {
|
||||
|
||||
private final TextRenderer textRenderer;
|
||||
private final Font textRenderer;
|
||||
|
||||
private HeadingEntry(TextRenderer textRenderer) {
|
||||
private HeadingEntry(Font textRenderer) {
|
||||
this.textRenderer = textRenderer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
Text text = translatable("widgets.ui.gradientEditor.colors");
|
||||
public void extractContent(GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
Component text = translatable("widgets.ui.gradientEditor.colors");
|
||||
|
||||
int y = this.getContentY() + 2;
|
||||
int rowWidth = 64;
|
||||
|
||||
int textWidth = textRenderer.getWidth(text);
|
||||
int textWidth = textRenderer.width(text);
|
||||
int textX = getX() + (rowWidth - textWidth) / 2;
|
||||
context.drawText(textRenderer, text, textX, y, 0xffffffff, true);
|
||||
context.text(textRenderer, text, textX, y, 0xffffffff, true);
|
||||
}
|
||||
}
|
||||
|
||||
private class AddButtonEntry extends ListEntry {
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
context.drawTexture(
|
||||
public void extractContent(GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
context.blit(
|
||||
RenderPipelines.GUI_TEXTURED,
|
||||
TEXTURE_BUTTON_PLUS,
|
||||
getX(),
|
||||
@@ -199,8 +200,8 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
hovered ? 0xff_cf_cf_cf : 0xff_8d_8d_8d
|
||||
);
|
||||
if (hovered){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.drawTooltip(client.textRenderer, List.of(
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
context.setComponentTooltipForNextFrame(minecraft.font, List.of(
|
||||
translatable("widgets.ui.gradientEditor.colors.add.tooltip.0"),
|
||||
translatable("widgets.ui.gradientEditor.colors.add.tooltip.1")
|
||||
), mouseX, mouseY);
|
||||
@@ -208,7 +209,7 @@ public class GradientEditorColorSection extends AlwaysSelectedEntryListWidget<Gr
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
editor.addNewColor(editor.getCurrentColor());
|
||||
return true;
|
||||
}
|
||||
|
||||
+27
-26
@@ -7,13 +7,14 @@ import de.shiewk.widgets.color.GradientMode;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.GradientWidgetSetting;
|
||||
import it.unimi.dsi.fastutil.ints.IntArrayList;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class GradientEditorScreen extends Screen implements WidgetVisibilityToggle {
|
||||
|
||||
@@ -54,35 +55,35 @@ public class GradientEditorScreen extends Screen implements WidgetVisibilityTogg
|
||||
}
|
||||
|
||||
private int getTopBarHeight() {
|
||||
return 8 + this.textRenderer.fontHeight * 2;
|
||||
return 8 + this.font.lineHeight * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
super.render(context, mouseX, mouseY, deltaTicks);
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks) {
|
||||
super.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
|
||||
Matrix3x2fStack matrices = context.getMatrices();
|
||||
long timeNanos = Util.getMeasuringTimeNano();
|
||||
Matrix3x2fStack matrices = context.pose();
|
||||
long timeNanos = Util.getNanos();
|
||||
|
||||
// Render top bar
|
||||
topBarGradient.fillHorizontal(context, timeNanos, 0, 0, this.width, this.getTopBarHeight());
|
||||
|
||||
Text topBarText = translatable("widgets.ui.gradientEditor");
|
||||
int width = textRenderer.getWidth(topBarText);
|
||||
Component topBarText = translatable("widgets.ui.gradientEditor");
|
||||
int width = font.width(topBarText);
|
||||
|
||||
matrices.pushMatrix().translate(this.width / 2f - width, 5).scale(2);
|
||||
context.drawText(textRenderer, topBarText, 0, 0, 0xff_ff_ff_ff, true);
|
||||
context.text(font, topBarText, 0, 0, 0xff_ff_ff_ff, true);
|
||||
matrices.popMatrix();
|
||||
}
|
||||
|
||||
public void reloadComponents(){
|
||||
clearChildren();
|
||||
clearWidgets();
|
||||
|
||||
double colorScrollY = 0;
|
||||
double settingsScrollY = 0;
|
||||
if (this.colorSection != null){
|
||||
colorScrollY = colorSection.getScrollY();
|
||||
settingsScrollY = settingsSection.getScrollY();
|
||||
colorScrollY = colorSection.scrollAmount();
|
||||
settingsScrollY = settingsSection.scrollAmount();
|
||||
}
|
||||
int topBarHeight = getTopBarHeight();
|
||||
|
||||
@@ -93,29 +94,29 @@ public class GradientEditorScreen extends Screen implements WidgetVisibilityTogg
|
||||
int mainAreaHeight = this.height - topBarHeight;
|
||||
|
||||
// sidebar
|
||||
this.colorSection = new GradientEditorColorSection(this, this.client, 0, topBarHeight, colorSectionWidth, mainAreaHeight, this.getCurrentColorIndex());
|
||||
this.settingsSection = new GradientEditorSettingsSection(this, this.client, colorSectionWidth, topBarHeight, settingsSectionWidth, mainAreaHeight);
|
||||
addDrawableChild(this.colorSection);
|
||||
addDrawableChild(this.settingsSection);
|
||||
colorSection.setScrollY(colorScrollY);
|
||||
settingsSection.setScrollY(settingsScrollY);
|
||||
this.colorSection = new GradientEditorColorSection(this, this.minecraft, 0, topBarHeight, colorSectionWidth, mainAreaHeight, this.getCurrentColorIndex());
|
||||
this.settingsSection = new GradientEditorSettingsSection(this, this.minecraft, colorSectionWidth, topBarHeight, settingsSectionWidth, mainAreaHeight);
|
||||
addRenderableWidget(this.colorSection);
|
||||
addRenderableWidget(this.settingsSection);
|
||||
colorSection.setScrollAmount(colorScrollY);
|
||||
settingsSection.setScrollAmount(settingsScrollY);
|
||||
|
||||
// main area
|
||||
int mainAreaX = colorSectionWidth + settingsSectionWidth;
|
||||
int mainAreaCenterX = mainAreaX + (mainAreaWidth / 2);
|
||||
|
||||
addDrawable(new WidgetDisplayWidget(this.widget, this.textRenderer, mainAreaCenterX, (mainAreaHeight) / 2 + topBarHeight));
|
||||
addRenderableOnly(new WidgetDisplayWidget(this.widget, this.font, mainAreaCenterX, (mainAreaHeight) / 2 + topBarHeight));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderBackground(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
super.renderBackground(context, mouseX, mouseY, deltaTicks);
|
||||
public void extractBackground(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks) {
|
||||
super.extractBackground(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
public void onClose() {
|
||||
refreshSettingValue();
|
||||
client.setScreen(parent);
|
||||
minecraft.setScreen(parent);
|
||||
}
|
||||
|
||||
private void refreshSettingValue() {
|
||||
|
||||
+120
-122
@@ -1,30 +1,28 @@
|
||||
package de.shiewk.widgets.client.screen.gradienteditor;
|
||||
|
||||
import com.mojang.blaze3d.platform.NativeImage;
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.WidgetsMod;
|
||||
import de.shiewk.widgets.client.WidgetManager;
|
||||
import de.shiewk.widgets.client.screen.ContextMenuScreen;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.color.GradientPreset;
|
||||
import de.shiewk.widgets.widgets.settings.GradientWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gl.RenderPipelines;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.tooltip.Tooltip;
|
||||
import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget;
|
||||
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||
import net.minecraft.client.gui.widget.SliderWidget;
|
||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||
import net.minecraft.client.input.CharInput;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.client.texture.NativeImage;
|
||||
import net.minecraft.client.texture.NativeImageBackedTexture;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.*;
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.input.CharacterEvent;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.client.renderer.RenderPipelines;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.Mth;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Arrays;
|
||||
@@ -32,16 +30,16 @@ import java.util.function.IntConsumer;
|
||||
import java.util.function.IntFunction;
|
||||
|
||||
import static de.shiewk.widgets.utils.WidgetUtils.colorARGBToHexRGBA;
|
||||
import static net.minecraft.text.Text.empty;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.empty;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget<GradientEditorSettingsSection.ListEntry> {
|
||||
public class GradientEditorSettingsSection extends ObjectSelectionList<GradientEditorSettingsSection.ListEntry> {
|
||||
|
||||
private final GradientEditorScreen editor;
|
||||
private final HexValueInputEntry hexInput;
|
||||
private final ColorPickerHueSliderEntry hueSlider;
|
||||
|
||||
public GradientEditorSettingsSection(GradientEditorScreen editor, MinecraftClient client, int x, int y, int width, int height) {
|
||||
public GradientEditorSettingsSection(GradientEditorScreen editor, Minecraft client, int x, int y, int width, int height) {
|
||||
super(client, width, height, y, 110);
|
||||
setX(x);
|
||||
this.editor = editor;
|
||||
@@ -77,18 +75,18 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawMenuListBackground(DrawContext context) {
|
||||
protected void extractListBackground(GuiGraphicsExtractor context) {
|
||||
context.fill(getX(), getY(), getX()+getWidth(), getY()+getHeight(), 0x20_00_00_00);
|
||||
}
|
||||
|
||||
@Override protected void drawHeaderAndFooterSeparators(DrawContext context) {}
|
||||
@Override protected void drawSelectionHighlight(DrawContext context, ListEntry entry, int color) {}
|
||||
@Override protected void drawScrollbar(DrawContext context, int mouseX, int mouseY) {}
|
||||
@Override protected void extractListSeparators(@NonNull GuiGraphicsExtractor context) {}
|
||||
@Override protected void extractSelection(@NonNull GuiGraphicsExtractor context, @NonNull ListEntry entry, int color) {}
|
||||
@Override protected void extractScrollbar(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY) {}
|
||||
|
||||
public abstract static class ListEntry extends Entry<ListEntry> {
|
||||
|
||||
@Override
|
||||
public Text getNarration() {
|
||||
public @NonNull Component getNarration() {
|
||||
return empty();
|
||||
}
|
||||
}
|
||||
@@ -111,59 +109,59 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
|
||||
private class HeadingEntry extends ListEntry {
|
||||
|
||||
private final Text text;
|
||||
private final Component text;
|
||||
|
||||
private HeadingEntry(Text text) {
|
||||
private HeadingEntry(Component text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
int y = this.getContentY() + 2;
|
||||
int rowWidth = 110;
|
||||
|
||||
int textWidth = client.textRenderer.getWidth(text);
|
||||
int textWidth = minecraft.font.width(text);
|
||||
int textX = getX() + (rowWidth - textWidth) / 2;
|
||||
context.drawText(client.textRenderer, text, textX, y, 0xffffffff, true);
|
||||
context.text(minecraft.font, text, textX, y, 0xffffffff, true);
|
||||
}
|
||||
}
|
||||
|
||||
private class SliderEntry extends ListEntry {
|
||||
|
||||
private final SliderWidget slider;
|
||||
private final AbstractSliderButton slider;
|
||||
|
||||
private SliderEntry(int min, int max, int initial, IntFunction<Text> textGetter, IntConsumer onUpdateValue) {
|
||||
private SliderEntry(int min, int max, int initial, IntFunction<Component> textGetter, IntConsumer onUpdateValue) {
|
||||
double value = (double) (initial - min) / (max - min);
|
||||
slider = new Slider(textGetter, value, onUpdateValue, min, max);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
slider.active = editor.colors.size() > 1;
|
||||
slider.setDimensionsAndPosition(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
slider.render(context, mouseX, mouseY, deltaTicks);
|
||||
slider.setRectangle(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
slider.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
if (hovered && !slider.active) {
|
||||
context.setCursor(StandardCursors.NOT_ALLOWED);
|
||||
slider.setTooltip(Tooltip.of(translatable("widgets.ui.gradientEditor.gradientSettings.addMoreColors")));
|
||||
context.requestCursor(CursorTypes.NOT_ALLOWED);
|
||||
slider.setTooltip(Tooltip.create(translatable("widgets.ui.gradientEditor.gradientSettings.addMoreColors")));
|
||||
} else {
|
||||
slider.setTooltip(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public boolean mouseClicked(Click click, boolean doubled) { return slider.mouseClicked(click, doubled); }
|
||||
@Override public boolean mouseDragged(Click click, double offsetX, double offsetY) { return slider.mouseDragged(click, offsetX, offsetY); }
|
||||
@Override public boolean mouseReleased(Click click) { return slider.mouseReleased(click); }
|
||||
@Override public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) { return slider.mouseClicked(click, doubled); }
|
||||
@Override public boolean mouseDragged(@NonNull MouseButtonEvent click, double offsetX, double offsetY) { return slider.mouseDragged(click, offsetX, offsetY); }
|
||||
@Override public boolean mouseReleased(@NonNull MouseButtonEvent click) { return slider.mouseReleased(click); }
|
||||
@Override public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { return slider.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); }
|
||||
@Override public void mouseMoved(double mouseX, double mouseY) { slider.mouseMoved(mouseX, mouseY); }
|
||||
|
||||
private static class Slider extends SliderWidget {
|
||||
private static class Slider extends AbstractSliderButton {
|
||||
|
||||
private final IntFunction<Text> textGetter;
|
||||
private final IntFunction<Component> textGetter;
|
||||
private final IntConsumer onUpdateValue;
|
||||
private final int min;
|
||||
private final int max;
|
||||
|
||||
public Slider(IntFunction<Text> textGetter, double value, IntConsumer onUpdateValue, int min, int max) {
|
||||
public Slider(IntFunction<Component> textGetter, double value, IntConsumer onUpdateValue, int min, int max) {
|
||||
super(0, 0, 0, 0, empty(), value);
|
||||
this.textGetter = textGetter;
|
||||
this.onUpdateValue = onUpdateValue;
|
||||
@@ -191,13 +189,13 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
|
||||
private class ToggleModeButtonEntry extends ListEntry {
|
||||
|
||||
private final ButtonWidget button = new ButtonWidget.Builder(empty(), this::press).build();
|
||||
private final Button button = new Button.Builder(empty(), this::press).build();
|
||||
|
||||
public ToggleModeButtonEntry() {
|
||||
refreshButtonValues();
|
||||
}
|
||||
|
||||
private void press(ButtonWidget button) {
|
||||
private void press(Button button) {
|
||||
editor.cycleMode();
|
||||
refreshButtonValues();
|
||||
}
|
||||
@@ -205,34 +203,34 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
private void refreshButtonValues() {
|
||||
button.setMessage(translatable("widgets.ui.gradientEditor.mode", editor.mode.name));
|
||||
if (editor.colors.size() > 1){
|
||||
button.setTooltip(Tooltip.of(editor.mode.description));
|
||||
button.setTooltip(Tooltip.create(editor.mode.description));
|
||||
} else {
|
||||
button.setTooltip(Tooltip.of(translatable("widgets.ui.gradientEditor.gradientSettings.addMoreColors")));
|
||||
button.setTooltip(Tooltip.create(translatable("widgets.ui.gradientEditor.gradientSettings.addMoreColors")));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
button.active = editor.colors.size() > 1;
|
||||
button.setDimensionsAndPosition(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.render(context, mouseX, mouseY, deltaTicks);
|
||||
button.setRectangle(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return button.mouseClicked(click, doubled);
|
||||
}
|
||||
}
|
||||
|
||||
private class ImportButtonEntry extends ListEntry {
|
||||
|
||||
private final ButtonWidget button = new ButtonWidget.Builder(translatable("widgets.ui.gradientEditor.importOther"), this::press).build();
|
||||
private final Button button = new Button.Builder(translatable("widgets.ui.gradientEditor.importOther"), this::press).build();
|
||||
|
||||
private void press(ButtonWidget button) {
|
||||
Screen currentScreen = client.currentScreen;
|
||||
int menuX = (int) client.mouse.getScaledX(client.getWindow());
|
||||
int menuY = (int) client.mouse.getScaledY(client.getWindow());
|
||||
client.setScreen(new ContextMenuScreen(
|
||||
private void press(Button button) {
|
||||
Screen currentScreen = minecraft.screen;
|
||||
int menuX = (int) minecraft.mouseHandler.getScaledXPos(minecraft.getWindow());
|
||||
int menuY = (int) minecraft.mouseHandler.getScaledYPos(minecraft.getWindow());
|
||||
minecraft.setScreen(new ContextMenuScreen(
|
||||
button.getMessage(),
|
||||
currentScreen,
|
||||
menuX, menuY,
|
||||
@@ -240,7 +238,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
.stream()
|
||||
.map(widget -> new ContextMenuScreen.Option(
|
||||
widget.getName(),
|
||||
() -> client.setScreen(new ContextMenuScreen(
|
||||
() -> minecraft.setScreen(new ContextMenuScreen(
|
||||
widget.getName(),
|
||||
currentScreen,
|
||||
menuX,
|
||||
@@ -258,26 +256,26 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
button.setDimensionsAndPosition(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.render(context, mouseX, mouseY, deltaTicks);
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
button.setRectangle(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return button.mouseClicked(click, doubled);
|
||||
}
|
||||
}
|
||||
|
||||
private class UsePresetButtonEntry extends ListEntry {
|
||||
|
||||
private final ButtonWidget button = new ButtonWidget.Builder(translatable("widgets.ui.gradientEditor.usePreset"), this::press).build();
|
||||
private final Button button = new Button.Builder(translatable("widgets.ui.gradientEditor.usePreset"), this::press).build();
|
||||
|
||||
private void press(ButtonWidget button) {
|
||||
Screen currentScreen = client.currentScreen;
|
||||
int menuX = (int) client.mouse.getScaledX(client.getWindow());
|
||||
int menuY = (int) client.mouse.getScaledY(client.getWindow());
|
||||
client.setScreen(new ContextMenuScreen(
|
||||
private void press(Button button) {
|
||||
Screen currentScreen = minecraft.screen;
|
||||
int menuX = (int) minecraft.mouseHandler.getScaledXPos(minecraft.getWindow());
|
||||
int menuY = (int) minecraft.mouseHandler.getScaledYPos(minecraft.getWindow());
|
||||
minecraft.setScreen(new ContextMenuScreen(
|
||||
translatable("widgets.ui.gradientEditor.usePreset"),
|
||||
currentScreen,
|
||||
menuX, menuY,
|
||||
@@ -289,13 +287,13 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
button.setDimensionsAndPosition(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.render(context, mouseX, mouseY, deltaTicks);
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
button.setRectangle(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return button.mouseClicked(click, doubled);
|
||||
}
|
||||
|
||||
@@ -316,7 +314,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
double sliderProg = getComponentValue() / 255d;
|
||||
|
||||
GradientOptions bg = new GradientOptions(100, 0, new int[]{getBackgroundStartColor(), getBackgroundEndColor()});
|
||||
@@ -327,14 +325,14 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
|
||||
bg.fillHorizontal(context, 0, contentX, contentY + 1, contentX + contentWidth, contentY + contentHeight - 1);
|
||||
|
||||
context.drawVerticalLine((int) (contentX + (contentWidth * sliderProg)), contentY - 1, contentY + contentHeight, 0xff_ff_ff_ff);
|
||||
context.verticalLine((int) (contentX + (contentWidth * sliderProg)), contentY - 1, contentY + contentHeight, 0xff_ff_ff_ff);
|
||||
if (showLabel){
|
||||
String label = getLabelWithValue();
|
||||
int w = client.textRenderer.getWidth(label);
|
||||
context.drawText(client.textRenderer, label, contentX + (contentWidth - w) / 2, contentY + 5, 0xffffffff, true);
|
||||
int w = minecraft.font.width(label);
|
||||
context.text(minecraft.font, label, contentX + (contentWidth - w) / 2, contentY + 5, 0xffffffff, true);
|
||||
}
|
||||
if (hovered){
|
||||
context.setCursor(StandardCursors.RESIZE_EW);
|
||||
context.requestCursor(CursorTypes.RESIZE_EW);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,7 +348,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(Click click, double offsetX, double offsetY) {
|
||||
public boolean mouseDragged(MouseButtonEvent click, double offsetX, double offsetY) {
|
||||
double mouseX = click.x();
|
||||
int newComponentValue = (int) ((mouseX - getContentX()) / getContentWidth() * 255);
|
||||
setComponentValue(newComponentValue);
|
||||
@@ -358,12 +356,12 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return mouseDragged(click, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
public boolean keyPressed(KeyEvent input) {
|
||||
if (input.isLeft()) {
|
||||
setComponentValue(getComponentValue() - 1);
|
||||
} else if (input.isRight()) {
|
||||
@@ -373,7 +371,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
private void setComponentValue(int val) {
|
||||
val = MathHelper.clamp(val, 0, 255);
|
||||
val = Mth.clamp(val, 0, 255);
|
||||
final int currentColor = editor.getCurrentColor();
|
||||
int newColor = switch (component){
|
||||
case 0 -> (currentColor & 0xff_00_ff_ff) | val << 16;
|
||||
@@ -420,29 +418,29 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
|
||||
private class RemoveColorButtonEntry extends ListEntry {
|
||||
|
||||
private final ButtonWidget button = new ButtonWidget.Builder(translatable("widgets.ui.gradientEditor.removeColor"), this::press).build();
|
||||
private final Button button = new Button.Builder(translatable("widgets.ui.gradientEditor.removeColor"), this::press).build();
|
||||
|
||||
private void press(ButtonWidget button) {
|
||||
private void press(Button button) {
|
||||
button.active = false;
|
||||
editor.removeCurrentColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
button.active = editor.colors.size() > 1;
|
||||
button.setDimensionsAndPosition(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.render(context, mouseX, mouseY, deltaTicks);
|
||||
button.setRectangle(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
button.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return button.mouseClicked(click, doubled);
|
||||
}
|
||||
}
|
||||
|
||||
private class HexValueInputEntry extends ListEntry {
|
||||
|
||||
private final TextFieldWidget inputField = new TextFieldWidget(client.textRenderer, 0, 0, empty());
|
||||
private final EditBox inputField = new EditBox(minecraft.font, 0, 0, empty());
|
||||
|
||||
public HexValueInputEntry() {
|
||||
this.refreshText();
|
||||
@@ -470,21 +468,21 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
} catch (NumberFormatException ignored) {}
|
||||
}
|
||||
|
||||
inputField.setEditableColor(valid ? 0xffffffff : 0xffff0000);
|
||||
inputField.setTextColor(valid ? 0xffffffff : 0xffff0000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
inputField.setDimensionsAndPosition(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
inputField.render(context, mouseX, mouseY, deltaTicks);
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
inputField.setRectangle(getContentWidth(), getContentHeight(), getContentX(), getContentY());
|
||||
inputField.extractRenderState(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
public void refreshText(){
|
||||
inputField.setChangedListener(null);
|
||||
inputField.setText('#' + colorARGBToHexRGBA(editor.getCurrentColor()));
|
||||
inputField.setCursorToStart(false);
|
||||
inputField.setEditableColor(0xffffffff);
|
||||
inputField.setChangedListener(this::onChangeInputField);
|
||||
inputField.setResponder(_ -> {});
|
||||
inputField.setValue('#' + colorARGBToHexRGBA(editor.getCurrentColor()));
|
||||
inputField.moveCursorToStart(false);
|
||||
inputField.setTextColor(0xffffffff);
|
||||
inputField.setResponder(this::onChangeInputField);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -492,20 +490,20 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
inputField.setFocused(focused);
|
||||
}
|
||||
|
||||
@Override public boolean mouseClicked(Click click, boolean doubled) { return inputField.mouseClicked(click, doubled); }
|
||||
@Override public boolean mouseDragged(Click click, double offsetX, double offsetY) { return inputField.mouseDragged(click, offsetX, offsetY); }
|
||||
@Override public boolean mouseReleased(Click click) { return inputField.mouseReleased(click); }
|
||||
@Override public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) { return inputField.mouseClicked(click, doubled); }
|
||||
@Override public boolean mouseDragged(@NonNull MouseButtonEvent click, double offsetX, double offsetY) { return inputField.mouseDragged(click, offsetX, offsetY); }
|
||||
@Override public boolean mouseReleased(@NonNull MouseButtonEvent click) { return inputField.mouseReleased(click); }
|
||||
@Override public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) { return inputField.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount); }
|
||||
@Override public void mouseMoved(double mouseX, double mouseY) { inputField.mouseMoved(mouseX, mouseY); }
|
||||
@Override public boolean charTyped(CharInput input) { return inputField.charTyped(input); }
|
||||
@Override public boolean keyReleased(KeyInput input) { return inputField.keyReleased(input); }
|
||||
@Override public boolean keyPressed(KeyInput input) { return inputField.keyPressed(input); }
|
||||
@Override public boolean charTyped(@NonNull CharacterEvent input) { return inputField.charTyped(input); }
|
||||
@Override public boolean keyReleased(@NonNull KeyEvent input) { return inputField.keyReleased(input); }
|
||||
@Override public boolean keyPressed(@NonNull KeyEvent input) { return inputField.keyPressed(input); }
|
||||
}
|
||||
|
||||
private class ColorPickerEntry extends ListEntry {
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
context.fill(
|
||||
getContentX(),
|
||||
getContentY(),
|
||||
@@ -513,7 +511,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
getContentY() + getContentHeight(),
|
||||
getBackgroundFillColor()
|
||||
);
|
||||
context.drawTexture(
|
||||
context.blit(
|
||||
RenderPipelines.GUI_TEXTURED,
|
||||
getOverlayTextureIdentifier(),
|
||||
getContentX(), getContentY(),
|
||||
@@ -537,12 +535,12 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
);
|
||||
|
||||
if (hovered){
|
||||
context.setCursor(StandardCursors.ARROW);
|
||||
context.requestCursor(CursorTypes.ARROW);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(Click click, double offsetX, double offsetY) {
|
||||
public boolean mouseDragged(MouseButtonEvent click, double offsetX, double offsetY) {
|
||||
double x = click.x() - getContentX();
|
||||
double y = click.y() - getContentY();
|
||||
float saturation = (float) Math.clamp(x / getContentWidth(), 0d, 1d);
|
||||
@@ -556,7 +554,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return mouseDragged(click, 0, 0);
|
||||
}
|
||||
|
||||
@@ -568,16 +566,16 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
|
||||
public Identifier getOverlayTextureIdentifier(){
|
||||
if (OVERLAY_TEXTURE_ID == null){
|
||||
NativeImageBackedTexture texture = generateOverlayTexture();
|
||||
OVERLAY_TEXTURE_ID = Identifier.of(WidgetsMod.MOD_ID, "textures/gui/generated/color-picker-overlay");
|
||||
client.getTextureManager().registerTexture(OVERLAY_TEXTURE_ID, texture);
|
||||
DynamicTexture texture = generateOverlayTexture();
|
||||
OVERLAY_TEXTURE_ID = Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "textures/gui/generated/color-picker-overlay");
|
||||
minecraft.getTextureManager().register(OVERLAY_TEXTURE_ID, texture);
|
||||
}
|
||||
return OVERLAY_TEXTURE_ID;
|
||||
}
|
||||
|
||||
private NativeImageBackedTexture generateOverlayTexture() {
|
||||
NativeImageBackedTexture texture = new NativeImageBackedTexture("widgets:textures/gui/generated/color-picker-overlay", 256, 256, false);
|
||||
NativeImage image = texture.getImage();
|
||||
private DynamicTexture generateOverlayTexture() {
|
||||
DynamicTexture texture = new DynamicTexture("widgets:textures/gui/generated/color-picker-overlay", 256, 256, false);
|
||||
NativeImage image = texture.getPixels();
|
||||
|
||||
for (int x = 0; x < 256; x++) {
|
||||
for (int y = 0; y < 256; y++) {
|
||||
@@ -588,7 +586,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
int rgb = (int) Math.round(outAlpha > 0 ? (255d * alphaWhite * (1d - alphaBlack)) / outAlpha : 0);
|
||||
int a = (int) Math.round(outAlpha * 255.0);
|
||||
|
||||
image.setColorArgb(x, y, new Color(rgb, rgb, rgb, a).getRGB());
|
||||
image.setPixel(x, y, new Color(rgb, rgb, rgb, a).getRGB());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -612,17 +610,17 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
public void extractContent(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, boolean hovered, float deltaTicks) {
|
||||
sliderGradient.fillHorizontal(context, 0, getContentX(), getContentY() + 1, getContentX() + getContentWidth(), getContentY() + getContentHeight() - 1);
|
||||
context.drawVerticalLine((int) (getContentX() + (getContentWidth() * sliderProgress)), getContentY() - 1, getContentY() + getContentHeight(), 0xff_ff_ff_ff);
|
||||
context.verticalLine( (int) (getContentX() + (getContentWidth() * sliderProgress)), getContentY() - 1, getContentY() + getContentHeight(), 0xff_ff_ff_ff);
|
||||
|
||||
if (hovered){
|
||||
context.setCursor(StandardCursors.RESIZE_EW);
|
||||
context.requestCursor(CursorTypes.RESIZE_EW);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(Click click, double offsetX, double offsetY) {
|
||||
public boolean mouseDragged(MouseButtonEvent click, double offsetX, double offsetY) {
|
||||
double x = click.x() - getContentX();
|
||||
float newHue = (float) Math.clamp(x / getContentWidth(), 0, 1);
|
||||
this.sliderProgress = newHue;
|
||||
@@ -639,7 +637,7 @@ public class GradientEditorSettingsSection extends AlwaysSelectedEntryListWidget
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) {
|
||||
return this.mouseDragged(click, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package de.shiewk.widgets.color;
|
||||
|
||||
import net.minecraft.text.Text;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
public enum GradientMode {
|
||||
SWEEP(translatable("widgets.gradient.sweep"), translatable("widgets.gradient.sweep.description")),
|
||||
PULSE(translatable("widgets.gradient.pulse"), translatable("widgets.gradient.pulse.description"));
|
||||
|
||||
public final Text name;
|
||||
public final Text description;
|
||||
public final Component name;
|
||||
public final Component description;
|
||||
|
||||
GradientMode(Text name, Text description) {
|
||||
GradientMode(Component name, Component description) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package de.shiewk.widgets.color;
|
||||
|
||||
import de.shiewk.widgets.render.state.HorizontalGradientGuiRenderState;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -23,7 +23,7 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
this(GradientMode.SWEEP, gradientSize, gradientSpeed, colors);
|
||||
}
|
||||
|
||||
public void fillHorizontal(DrawContext context, long timeNanos, int x, int y, int endX, int endY) {
|
||||
public void fillHorizontal(GuiGraphicsExtractor context, long timeNanos, int x, int y, int endX, int endY) {
|
||||
if (colors.length == 1) {
|
||||
context.fill(x, y, endX, endY, colors[0]);
|
||||
return;
|
||||
@@ -34,7 +34,7 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
}
|
||||
}
|
||||
|
||||
private void fillHorizonalSweep(DrawContext context, long timeNanos, int x, int y, int endX, int endY) {
|
||||
private void fillHorizonalSweep(GuiGraphicsExtractor context, long timeNanos, int x, int y, int endX, int endY) {
|
||||
context.enableScissor(x, y, endX, endY);
|
||||
|
||||
int width = endX - x;
|
||||
@@ -47,7 +47,7 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
float timeSeconds = timeNanos / 1_000_000_000f;
|
||||
float offset = gradientSpeed == 0 ? 0 : (timeSeconds * speedPxPerSec + x) % totalGradientCycle;
|
||||
|
||||
Matrix3x2fStack matrices = context.getMatrices().pushMatrix();
|
||||
Matrix3x2fStack matrices = context.pose().pushMatrix();
|
||||
matrices.translate(-offset, 0);
|
||||
|
||||
int currentPos = 0;
|
||||
@@ -70,7 +70,7 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
context.disableScissor();
|
||||
}
|
||||
|
||||
private void fillHorizonalPulse(DrawContext context, long timeNanos, int x, int y, int endX, int endY) {
|
||||
private void fillHorizonalPulse(GuiGraphicsExtractor context, long timeNanos, int x, int y, int endX, int endY) {
|
||||
context.fill(x, y, endX, endY, getCurrentPulseColor(timeNanos));
|
||||
}
|
||||
|
||||
@@ -82,13 +82,13 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
return fadeColor(color1, color2, delta);
|
||||
}
|
||||
|
||||
public void drawHorizontalLine(DrawContext context, long mt, int posX, int endX, int posY) {
|
||||
public void drawHorizontalLine(GuiGraphicsExtractor context, long mt, int posX, int endX, int posY) {
|
||||
this.fillHorizontal(context, mt, posX, posY, endX, posY + 1);
|
||||
}
|
||||
|
||||
public void drawText(DrawContext context, TextRenderer textRenderer, long timeNanos, String displayText, int x, int y, boolean shadow) {
|
||||
public void drawText(GuiGraphicsExtractor context, Font textRenderer, long timeNanos, String displayText, int x, int y, boolean shadow) {
|
||||
if (colors.length == 1){
|
||||
context.drawText(textRenderer, displayText, x, y, colors[0], shadow);
|
||||
context.text(textRenderer, displayText, x, y, colors[0], shadow);
|
||||
} else {
|
||||
switch (mode){
|
||||
case SWEEP -> drawTextSweep(context, textRenderer, timeNanos, displayText, x, y, shadow);
|
||||
@@ -97,20 +97,20 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
}
|
||||
}
|
||||
|
||||
public void drawText(DrawContext context, TextRenderer textRenderer, long timeNanos, Text displayText, int x, int y, boolean shadow) {
|
||||
public void drawText(GuiGraphicsExtractor context, Font textRenderer, long timeNanos, Component displayText, int x, int y, boolean shadow) {
|
||||
if (colors.length == 1){
|
||||
context.drawText(textRenderer, displayText, x, y, colors[0], shadow);
|
||||
context.text(textRenderer, displayText, x, y, colors[0], shadow);
|
||||
}
|
||||
this.drawText(context, textRenderer, timeNanos, displayText.getString(), x, y, shadow);
|
||||
}
|
||||
|
||||
private void drawTextSweep(DrawContext context, TextRenderer textRenderer, long timeNanos, String displayText, int x, int y, boolean shadow) {
|
||||
private void drawTextSweep(GuiGraphicsExtractor context, Font textRenderer, long timeNanos, String displayText, int x, int y, boolean shadow) {
|
||||
int pos = 0;
|
||||
for (int i = 0; i < displayText.length(); i++) {
|
||||
String s = String.valueOf(displayText.charAt(i));
|
||||
int w = textRenderer.getWidth(s);
|
||||
int w = textRenderer.width(s);
|
||||
int col = computeSweepTextColorAt(gradientSpeed == 0 ? pos : pos + x, timeNanos);
|
||||
context.drawText(textRenderer, s, x +pos, y, col, shadow);
|
||||
context.text(textRenderer, s, x +pos, y, col, shadow);
|
||||
pos += w;
|
||||
}
|
||||
}
|
||||
@@ -128,15 +128,15 @@ public record GradientOptions(GradientMode mode, float gradientSize, float gradi
|
||||
return fadeColor(color1, color2, off);
|
||||
}
|
||||
|
||||
private void drawTextPulse(DrawContext context, TextRenderer textRenderer, long timeNanos, String displayText, int x, int y, boolean shadow) {
|
||||
context.drawText(textRenderer, displayText, x, y, getCurrentPulseColor(timeNanos), shadow);
|
||||
private void drawTextPulse(GuiGraphicsExtractor context, Font textRenderer, long timeNanos, String displayText, int x, int y, boolean shadow) {
|
||||
context.text(textRenderer, displayText, x, y, getCurrentPulseColor(timeNanos), shadow);
|
||||
}
|
||||
|
||||
public static GradientOptions solidColor(int color) {
|
||||
return new GradientOptions(1, 0, new int[]{color});
|
||||
}
|
||||
|
||||
public void drawVerticalLine(DrawContext context, long timeNanos, int posX, int posY, int endY) {
|
||||
public void drawVerticalLine(GuiGraphicsExtractor context, long timeNanos, int posX, int posY, int endY) {
|
||||
fillHorizontal(context, timeNanos, posX, posY, posX + 1, endY);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package de.shiewk.widgets.color;
|
||||
|
||||
import net.minecraft.text.Text;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
public record GradientPreset(Text name, GradientOptions gradient) {
|
||||
public record GradientPreset(Component name, GradientOptions gradient) {
|
||||
|
||||
public static final GradientPreset[] presets = new GradientPreset[]{
|
||||
new GradientPreset(
|
||||
|
||||
@@ -2,41 +2,41 @@ package de.shiewk.widgets.mixin;
|
||||
|
||||
import de.shiewk.widgets.widgets.ComboWidget;
|
||||
import de.shiewk.widgets.widgets.TPSWidget;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.network.packet.s2c.play.DamageTiltS2CPacket;
|
||||
import net.minecraft.network.packet.s2c.play.EntityDamageS2CPacket;
|
||||
import net.minecraft.network.packet.s2c.play.WorldTimeUpdateS2CPacket;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.protocol.game.ClientboundDamageEventPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundHurtAnimationPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundSetTimePacket;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ClientPlayNetworkHandler.class)
|
||||
@Mixin(ClientPacketListener.class)
|
||||
public class MixinClientPlayNetworkHandler {
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "onWorldTimeUpdate")
|
||||
public void onWorldTimeUpdate(WorldTimeUpdateS2CPacket packet, CallbackInfo ci){
|
||||
if (MinecraftClient.getInstance().isOnThread()) return; // run this on the networking thread as soon as possible
|
||||
@Inject(at = @At("HEAD"), method = "handleSetTime")
|
||||
public void onWorldTimeUpdate(ClientboundSetTimePacket packet, CallbackInfo ci){
|
||||
if (Minecraft.getInstance().isSameThread()) return; // run this on the networking thread as soon as possible
|
||||
// server sends this packet every 20 ticks
|
||||
TPSWidget.worldTimeUpdated(System.nanoTime());
|
||||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "onDamageTilt")
|
||||
public void onDamageTilt(DamageTiltS2CPacket packet, CallbackInfo ci){
|
||||
if (MinecraftClient.getInstance().isOnThread()) return;
|
||||
@Inject(at = @At("HEAD"), method = "handleHurtAnimation")
|
||||
public void onDamageTilt(ClientboundHurtAnimationPacket packet, CallbackInfo ci){
|
||||
if (Minecraft.getInstance().isSameThread()) return;
|
||||
int entityId = packet.id();
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
int playerId = player == null ? Integer.MIN_VALUE : player.getId();
|
||||
ComboWidget.entityTakeDamage(playerId, entityId);
|
||||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "onEntityDamage")
|
||||
public void onEntityDamage(EntityDamageS2CPacket packet, CallbackInfo ci){
|
||||
if (MinecraftClient.getInstance().isOnThread()) return;
|
||||
@Inject(at = @At("HEAD"), method = "handleDamageEvent")
|
||||
public void onEntityDamage(ClientboundDamageEventPacket packet, CallbackInfo ci){
|
||||
if (Minecraft.getInstance().isSameThread()) return;
|
||||
int entityId = packet.entityId();
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
int playerId = player == null ? Integer.MIN_VALUE : player.getId();
|
||||
ComboWidget.entityTakeDamage(playerId, entityId);
|
||||
}
|
||||
|
||||
@@ -1,28 +1,29 @@
|
||||
package de.shiewk.widgets.mixin;
|
||||
|
||||
import de.shiewk.widgets.widgets.CPSWidget;
|
||||
import net.minecraft.client.Mouse;
|
||||
import net.minecraft.client.input.MouseInput;
|
||||
import net.minecraft.client.MouseHandler;
|
||||
import net.minecraft.client.input.MouseButtonInfo;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(Mouse.class)
|
||||
@Mixin(MouseHandler.class)
|
||||
public class MixinMouse {
|
||||
|
||||
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Mouse;leftButtonClicked:Z"), method = "onMouseButton")
|
||||
public void onLeftClick(long window, MouseInput input, int action, CallbackInfo ci){
|
||||
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/MouseHandler;isLeftPressed:Z", opcode = Opcodes.PUTFIELD), method = "onButton")
|
||||
public void onLeftClick(long handle, MouseButtonInfo rawButtonInfo, int action, CallbackInfo ci){
|
||||
if (action == 1) CPSWidget.clickLeft();
|
||||
}
|
||||
|
||||
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Mouse;middleButtonClicked:Z"), method = "onMouseButton")
|
||||
public void onMiddleClick(long window, MouseInput input, int action, CallbackInfo ci){
|
||||
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/MouseHandler;isMiddlePressed:Z", opcode = Opcodes.PUTFIELD), method = "onButton")
|
||||
public void onMiddleClick(long handle, MouseButtonInfo rawButtonInfo, int action, CallbackInfo ci){
|
||||
if (action == 1) CPSWidget.clickMiddle();
|
||||
}
|
||||
|
||||
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/Mouse;rightButtonClicked:Z"), method = "onMouseButton")
|
||||
public void onRightClick(long window, MouseInput input, int action, CallbackInfo ci){
|
||||
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/MouseHandler;isRightPressed:Z", opcode = Opcodes.PUTFIELD), method = "onButton")
|
||||
public void onRightClick(long handle, MouseButtonInfo rawButtonInfo, int action, CallbackInfo ci){
|
||||
if (action == 1) CPSWidget.clickRight();
|
||||
}
|
||||
}
|
||||
|
||||
+27
-26
@@ -1,25 +1,26 @@
|
||||
package de.shiewk.widgets.render.state;
|
||||
|
||||
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.client.gl.RenderPipelines;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.ScreenRect;
|
||||
import net.minecraft.client.gui.render.state.SimpleGuiElementRenderState;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
import net.minecraft.client.texture.TextureSetup;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.navigation.ScreenRectangle;
|
||||
import net.minecraft.client.gui.render.TextureSetup;
|
||||
import net.minecraft.client.renderer.state.gui.GuiElementRenderState;
|
||||
import net.minecraft.client.renderer.RenderPipelines;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.joml.Matrix3x2f;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public final class HorizontalGradientGuiRenderState implements SimpleGuiElementRenderState {
|
||||
public final class HorizontalGradientGuiRenderState implements GuiElementRenderState {
|
||||
|
||||
private final RenderPipeline pipeline;
|
||||
private final TextureSetup textureSetup;
|
||||
private final Matrix3x2f pose;
|
||||
private final ScreenRect scissorArea;
|
||||
private final ScreenRect bounds;
|
||||
private final ScreenRectangle scissorArea;
|
||||
private final ScreenRectangle bounds;
|
||||
|
||||
private final int x;
|
||||
private final int y;
|
||||
@@ -34,7 +35,7 @@ public final class HorizontalGradientGuiRenderState implements SimpleGuiElementR
|
||||
RenderPipeline pipeline,
|
||||
TextureSetup textureSetup,
|
||||
Matrix3x2f pose,
|
||||
ScreenRect scissorArea,
|
||||
ScreenRectangle scissorArea,
|
||||
int x,
|
||||
int y,
|
||||
int endX,
|
||||
@@ -54,46 +55,46 @@ public final class HorizontalGradientGuiRenderState implements SimpleGuiElementR
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupVertices(VertexConsumer vertices) {
|
||||
vertices.vertex(pose, x, y).color(colorLeft);
|
||||
vertices.vertex(pose, x, endY).color(colorLeft);
|
||||
vertices.vertex(pose, endX, endY).color(colorRight);
|
||||
vertices.vertex(pose, endX, y).color(colorRight);
|
||||
public void buildVertices(VertexConsumer vertices) {
|
||||
vertices.addVertexWith2DPose(pose, x, y).setColor(colorLeft);
|
||||
vertices.addVertexWith2DPose(pose, x, endY).setColor(colorLeft);
|
||||
vertices.addVertexWith2DPose(pose, endX, endY).setColor(colorRight);
|
||||
vertices.addVertexWith2DPose(pose, endX, y).setColor(colorRight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RenderPipeline pipeline() {
|
||||
public @NonNull RenderPipeline pipeline() {
|
||||
return pipeline;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureSetup textureSetup() {
|
||||
public @NonNull TextureSetup textureSetup() {
|
||||
return textureSetup;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ScreenRect scissorArea() {
|
||||
public @Nullable ScreenRectangle scissorArea() {
|
||||
return scissorArea;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ScreenRect createBounds(int x0, int y0, int x1, int y1, Matrix3x2f pose, @Nullable ScreenRect scissorArea) {
|
||||
ScreenRect screenRect = (new ScreenRect(x0, y0, x1 - x0 + 1, y1 - y0)).transformEachVertex(pose);
|
||||
private static ScreenRectangle createBounds(int x0, int y0, int x1, int y1, Matrix3x2f pose, @Nullable ScreenRectangle scissorArea) {
|
||||
ScreenRectangle screenRect = (new ScreenRectangle(x0, y0, x1 - x0 + 1, y1 - y0)).transformMaxBounds(pose);
|
||||
return scissorArea != null ? scissorArea.intersection(screenRect) : screenRect;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable ScreenRect bounds() {
|
||||
public @Nullable ScreenRectangle bounds() {
|
||||
return bounds;
|
||||
}
|
||||
|
||||
public static void draw(DrawContext context, int x, int y, int endX, int endY, int colorLeft, int colorRight) {
|
||||
context.state.addSimpleElement(
|
||||
public static void draw(GuiGraphicsExtractor context, int x, int y, int endX, int endY, int colorLeft, int colorRight) {
|
||||
context.guiRenderState.addGuiElement(
|
||||
new HorizontalGradientGuiRenderState(
|
||||
RenderPipelines.GUI,
|
||||
TextureSetup.empty(),
|
||||
new Matrix3x2f(context.getMatrices()),
|
||||
context.scissorStack.peekLast(),
|
||||
TextureSetup.noTexture(),
|
||||
new Matrix3x2f(context.pose()),
|
||||
context.scissorStack.peek(),
|
||||
x, y, endX, endY,
|
||||
colorLeft, colorRight
|
||||
)
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package de.shiewk.widgets.utils;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.sound.PositionedSoundInstance;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.world.tick.TickManager;
|
||||
|
||||
import java.util.function.BooleanSupplier;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
|
||||
import net.minecraft.sounds.SoundEvent;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.TickRateManager;
|
||||
|
||||
public class WidgetUtils {
|
||||
|
||||
@@ -17,30 +16,30 @@ public class WidgetUtils {
|
||||
}
|
||||
|
||||
public static boolean isInSingleplayer(){
|
||||
return MinecraftClient.getInstance().isInSingleplayer();
|
||||
return Minecraft.getInstance().isLocalServer();
|
||||
}
|
||||
|
||||
public static float getClientTickRate(){
|
||||
float tickRate = 20f;
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
if (client.world != null) {
|
||||
TickManager tickManager = client.world.getTickManager();
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
if (client.level != null) {
|
||||
TickRateManager tickManager = client.level.tickRateManager();
|
||||
if (!tickManager.isFrozen()){
|
||||
tickRate = Math.min(tickManager.getTickRate(), 20);
|
||||
tickRate = Math.min(tickManager.tickrate(), 20);
|
||||
}
|
||||
}
|
||||
return tickRate;
|
||||
}
|
||||
|
||||
public static void playSound(SoundEvent ev){
|
||||
MinecraftClient.getInstance().getSoundManager().play(PositionedSoundInstance.ui(ev, 1f, 1f));
|
||||
Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(ev, 1f, 1f));
|
||||
}
|
||||
|
||||
public static int fadeColor(int color1, int color2, double delta) {
|
||||
int alpha = (int) MathHelper.lerp(delta, (color1 >> 24) & 0xff, (color2 >> 24) & 0xff);
|
||||
int red = (int) MathHelper.lerp(delta, (color1 >> 16) & 0xff, (color2 >> 16) & 0xff);
|
||||
int green = (int) MathHelper.lerp(delta, (color1 >> 8) & 0xff, (color2 >> 8) & 0xff);
|
||||
int blue = (int) MathHelper.lerp(delta, color1 & 0xff, color2 & 0xff);
|
||||
int alpha = (int) Mth.lerp(delta, (color1 >> 24) & 0xff, (color2 >> 24) & 0xff);
|
||||
int red = (int) Mth.lerp(delta, (color1 >> 16) & 0xff, (color2 >> 16) & 0xff);
|
||||
int green = (int) Mth.lerp(delta, (color1 >> 8) & 0xff, (color2 >> 8) & 0xff);
|
||||
int blue = (int) Mth.lerp(delta, color1 & 0xff, color2 & 0xff);
|
||||
return (alpha << 24) | (red << 16) | (green << 8) | blue;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,21 +2,24 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.*;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.component.DataComponentTypes;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.GradientWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.core.component.DataComponents;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class ArmorHudWidget extends ResizableWidget {
|
||||
|
||||
@@ -39,7 +42,7 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
NUMBER,
|
||||
PERCENT;
|
||||
|
||||
public Text getDisplayName() {
|
||||
public Component getDisplayName() {
|
||||
return translatable("widgets.widgets.armorHud.durabilityStyle." + name().toLowerCase(Locale.ROOT));
|
||||
}
|
||||
}
|
||||
@@ -56,7 +59,7 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
protected GradientOptions backgroundColor, textColor;
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY) {
|
||||
backgroundColor.fillHorizontal(
|
||||
context,
|
||||
measuringTimeNano,
|
||||
@@ -77,29 +80,29 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
}
|
||||
}
|
||||
|
||||
private void renderItem(DrawContext context, long mt, TextRenderer textRenderer, ItemStack stack, int posX, int posY){
|
||||
context.drawItemWithoutEntity(stack, posX, posY);
|
||||
context.drawStackOverlay(textRenderer, stack, posX, posY);
|
||||
private void renderItem(GuiGraphicsExtractor context, long mt, Font textRenderer, ItemStack stack, int posX, int posY){
|
||||
context.fakeItem(stack, posX, posY);
|
||||
context.itemDecorations(textRenderer, stack, posX, posY);
|
||||
if (showDurability){
|
||||
renderDurability(context, mt, textRenderer, stack, posX, posY);
|
||||
}
|
||||
}
|
||||
|
||||
private void renderDurability(DrawContext context, long mt, TextRenderer textRenderer, ItemStack stack, int posX, int posY) {
|
||||
Integer maxDamage = stack.get(DataComponentTypes.MAX_DAMAGE);
|
||||
private void renderDurability(GuiGraphicsExtractor context, long mt, Font textRenderer, ItemStack stack, int posX, int posY) {
|
||||
Integer maxDamage = stack.get(DataComponents.MAX_DAMAGE);
|
||||
if (maxDamage != null) {
|
||||
int damage = stack.getOrDefault(DataComponentTypes.DAMAGE, 0);
|
||||
int damage = stack.getOrDefault(DataComponents.DAMAGE, 0);
|
||||
String text = switch (durabilityStyle){
|
||||
case NUMBER -> String.valueOf(maxDamage - damage);
|
||||
case PERCENT -> ((maxDamage - damage) * 100 / maxDamage) + "%";
|
||||
};
|
||||
switch (textAlignment){
|
||||
case RIGHT -> {
|
||||
int width = textRenderer.getWidth(text);
|
||||
int width = textRenderer.width(text);
|
||||
textColor.drawText(context, textRenderer, mt, text, posX + width() - width - padding * 2, posY + 5, true);
|
||||
}
|
||||
case CENTER -> {
|
||||
int width = textRenderer.getWidth(text);
|
||||
int width = textRenderer.width(text);
|
||||
textColor.drawText(context, textRenderer, mt, text, posX + ((preferredWidth + padding*2) - width) / 2 + 8, posY + 5, true);
|
||||
}
|
||||
case LEFT -> {
|
||||
@@ -111,25 +114,25 @@ public class ArmorHudWidget extends ResizableWidget {
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
PlayerInventory inventory = player.getInventory();
|
||||
helmet = inventory.getStack(39);
|
||||
chestplate = inventory.getStack(38);
|
||||
leggings = inventory.getStack(37);
|
||||
boots = inventory.getStack(36);
|
||||
Inventory inventory = player.getInventory();
|
||||
helmet = inventory.getItem(39);
|
||||
chestplate = inventory.getItem(38);
|
||||
leggings = inventory.getItem(37);
|
||||
boots = inventory.getItem(36);
|
||||
} else {
|
||||
helmet = chestplate = leggings = boots = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.armorHud");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.armorHud.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -5,16 +5,15 @@ import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.LongFunction;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.debugchart.LocalSampleLogger;
|
||||
|
||||
import static net.minecraft.text.Text.literal;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.literal;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class BandwidthWidget extends BasicTextWidget {
|
||||
|
||||
@@ -48,9 +47,9 @@ public class BandwidthWidget extends BasicTextWidget {
|
||||
|
||||
public BandwidthWidget(Identifier id) {
|
||||
super(id, List.of(
|
||||
new ToggleWidgetSetting("dynamic_color", Text.translatable("widgets.widgets.bandwidth.dynamicColor"), true),
|
||||
new ToggleWidgetSetting("hide_in_singleplayer", Text.translatable("widgets.widgets.common.hideInSingleplayer"), false),
|
||||
new EnumWidgetSetting<>("unit", Text.translatable("widgets.widgets.bandwidth.unit"), Unit.class, Unit.KB, unit -> literal(unit.name)),
|
||||
new ToggleWidgetSetting("dynamic_color", Component.translatable("widgets.widgets.bandwidth.dynamicColor"), true),
|
||||
new ToggleWidgetSetting("hide_in_singleplayer", Component.translatable("widgets.widgets.common.hideInSingleplayer"), false),
|
||||
new EnumWidgetSetting<>("unit", Component.translatable("widgets.widgets.bandwidth.unit"), Unit.class, Unit.KB, unit -> literal(unit.name)),
|
||||
new ToggleWidgetSetting("fastupdate", translatable("widgets.widgets.bandwidth.fastupdate"), false)
|
||||
));
|
||||
getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor);
|
||||
@@ -70,7 +69,7 @@ public class BandwidthWidget extends BasicTextWidget {
|
||||
t++;
|
||||
if (t >= tickRate || fastUpdate){
|
||||
t = 0;
|
||||
long avgBytesPerSecond = getAvgBytesPerSecond(MinecraftClient.getInstance(), tickRate);
|
||||
long avgBytesPerSecond = getAvgBytesPerSecond(Minecraft.getInstance(), tickRate);
|
||||
formatAndSetRenderText(unit.sizeFormatter.apply(avgBytesPerSecond));
|
||||
if (this.dynamicColor){
|
||||
if (avgBytesPerSecond < 100000){
|
||||
@@ -84,9 +83,9 @@ public class BandwidthWidget extends BasicTextWidget {
|
||||
}
|
||||
}
|
||||
|
||||
private static long getAvgBytesPerSecond(MinecraftClient client, float tickRate) {
|
||||
final MultiValueDebugSampleLogImpl packetSizeLog = client.getDebugHud().getPacketSizeLog();
|
||||
final int logLength = packetSizeLog.getLength();
|
||||
private static long getAvgBytesPerSecond(Minecraft client, float tickRate) {
|
||||
final LocalSampleLogger packetSizeLog = client.getDebugOverlay().getBandwidthLogger();
|
||||
final int logLength = packetSizeLog.size();
|
||||
final int avgCompileLength = (int) (3 * tickRate);
|
||||
long size = 0;
|
||||
for (int i = logLength-1; i > logLength-avgCompileLength; i--) {
|
||||
@@ -106,12 +105,12 @@ public class BandwidthWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.bandwidth");
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.bandwidth");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.bandwidth.description");
|
||||
public Component getDescription() {
|
||||
return Component.translatable("widgets.widgets.bandwidth.description");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.*;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.client.WidgetRenderer;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.*;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
import java.util.function.UnaryOperator;
|
||||
|
||||
import static net.minecraft.text.Text.*;
|
||||
import static net.minecraft.network.chat.Component.*;
|
||||
|
||||
public abstract class BasicTextWidget extends ResizableWidget {
|
||||
|
||||
@@ -30,7 +29,7 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public Text displayText(){
|
||||
public Component displayText(){
|
||||
return translatable("widgets.widgets.basictext.alignment." + key);
|
||||
}
|
||||
}
|
||||
@@ -41,28 +40,28 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
PARENTHESES("parentheses", t -> surround("(", t, ")"));
|
||||
|
||||
public final String key;
|
||||
public final UnaryOperator<Text> operator;
|
||||
public final UnaryOperator<Component> operator;
|
||||
|
||||
TextStyle(String key, UnaryOperator<Text> operator) {
|
||||
TextStyle(String key, UnaryOperator<Component> operator) {
|
||||
this.key = key;
|
||||
this.operator = operator;
|
||||
}
|
||||
|
||||
public Text displayText(){
|
||||
public Component displayText(){
|
||||
return translatable("widgets.widgets.basictext.style." + key);
|
||||
}
|
||||
|
||||
public static Text surround(String prefix, Text subject, String suffix){
|
||||
public static Component surround(String prefix, Component subject, String suffix){
|
||||
return literal(prefix).append(subject).append(literal(suffix));
|
||||
}
|
||||
}
|
||||
|
||||
protected Text renderText = empty();
|
||||
protected Component renderText = empty();
|
||||
protected boolean shouldRender = true;
|
||||
private float textX = 0;
|
||||
private float textY = 0;
|
||||
private int padding = 0;
|
||||
private TextRenderer renderer = null;
|
||||
private Font renderer = null;
|
||||
private boolean textShadow = true;
|
||||
|
||||
private static ObjectArrayList<WidgetSettingOption<?>> getCustomSettings(List<WidgetSettingOption<?>> otherCustomOptions) {
|
||||
@@ -102,11 +101,11 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long n, Font textRenderer, int posX, int posY) {
|
||||
if (!shouldRender) return;
|
||||
renderer = textRenderer;
|
||||
this.backgroundColor.fillHorizontal(context, n, posX, posY, posX + width(), posY + height());
|
||||
Matrix3x2fStack matrices = context.getMatrices()
|
||||
Matrix3x2fStack matrices = context.pose()
|
||||
.pushMatrix();
|
||||
matrices.translate(posX + textX, posY + textY, matrices);
|
||||
this.textColor.drawText(context, textRenderer, n, renderText, 0, 0, textShadow);
|
||||
@@ -117,7 +116,7 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
public final void tick() {
|
||||
tickWidget();
|
||||
if (renderer != null){
|
||||
int textWidth = renderer.getWidth(renderText);
|
||||
int textWidth = renderer.width(renderText);
|
||||
switch (textAlignment){
|
||||
case LEFT -> textX = padding;
|
||||
case CENTER -> {
|
||||
@@ -138,7 +137,7 @@ public abstract class BasicTextWidget extends ResizableWidget {
|
||||
}
|
||||
}
|
||||
|
||||
protected void formatAndSetRenderText(Text renderText) {
|
||||
protected void formatAndSetRenderText(Component renderText) {
|
||||
if (textStyle != TextStyle.PLAIN){
|
||||
this.renderText = textStyle.operator.apply(renderText);
|
||||
} else {
|
||||
|
||||
@@ -2,17 +2,16 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import net.minecraft.registry.entry.RegistryEntry;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class BiomeWidget extends BasicTextWidget {
|
||||
|
||||
@@ -28,17 +27,17 @@ public class BiomeWidget extends BasicTextWidget {
|
||||
@Override
|
||||
public void tickWidget() {
|
||||
if (++tickCounter % 20 == 0){
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
ClientPlayerEntity player = client.player;
|
||||
ClientWorld world = client.world;
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
LocalPlayer player = client.player;
|
||||
ClientLevel world = client.level;
|
||||
if (world != null && player != null){
|
||||
RegistryEntry<Biome> biome = world.getBiome(player.getBlockPos());
|
||||
String text = biome.getKeyOrValue().map(
|
||||
Holder<Biome> biome = world.getBiome(player.blockPosition());
|
||||
String text = biome.unwrap().map(
|
||||
(biomeKey) -> {
|
||||
if (showLabel){
|
||||
return translatable("widgets.widgets.biome.label", translatable(biomeKey.getValue().toTranslationKey("biome"))).getString();
|
||||
return translatable("widgets.widgets.biome.label", translatable(biomeKey.identifier().toLanguageKey("biome"))).getString();
|
||||
} else {
|
||||
return translatable(biomeKey.getValue().toTranslationKey("biome")).getString();
|
||||
return translatable(biomeKey.identifier().toLanguageKey("biome")).getString();
|
||||
}
|
||||
},
|
||||
(b) -> "[unregistered " + b + "]"
|
||||
@@ -55,12 +54,12 @@ public class BiomeWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.biome");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.biome.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -4,21 +4,21 @@ import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static net.minecraft.text.Text.literal;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.literal;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class CPSWidget extends BasicTextWidget {
|
||||
|
||||
public static class Click {
|
||||
public int ticks = 0;
|
||||
public final long expiresAt = Util.getMeasuringTimeMs() + 1000;
|
||||
public final long expiresAt = Util.getMillis() + 1000;
|
||||
|
||||
@Deprecated(forRemoval = true, since = "1.2.1")
|
||||
public int tick(){
|
||||
@@ -92,7 +92,7 @@ public class CPSWidget extends BasicTextWidget {
|
||||
int left = 0;
|
||||
int right = 0;
|
||||
int middle = 0;
|
||||
long mtime = Util.getMeasuringTimeMs();
|
||||
long mtime = Util.getMillis();
|
||||
if (countLeftClicks) {
|
||||
leftClicks.removeIf(click -> click.expiresAt <= mtime);
|
||||
left = leftClicks.size();
|
||||
@@ -149,12 +149,12 @@ public class CPSWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.cps");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.cps.description");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,13 +4,12 @@ import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Instant;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
public class ClockWidget extends BasicTextWidget {
|
||||
|
||||
@@ -25,8 +24,8 @@ public class ClockWidget extends BasicTextWidget {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.clock.hourFormat."+key);
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.clock.hourFormat."+key);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,8 +50,8 @@ public class ClockWidget extends BasicTextWidget {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public Text getName(){
|
||||
return this.format == null ? Text.translatable("widgets.widgets.clock.dateFormat.none") : Text.of(new SimpleDateFormat(format).format(Date.from(Instant.now())));
|
||||
public Component getName(){
|
||||
return this.format == null ? Component.translatable("widgets.widgets.clock.dateFormat.none") : Component.nullToEmpty(new SimpleDateFormat(format).format(Date.from(Instant.now())));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,27 +66,27 @@ public class ClockWidget extends BasicTextWidget {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public Text getName(){
|
||||
return this.format == null ? Text.translatable("widgets.widgets.clock.weekFormat.none") : Text.of(new SimpleDateFormat(format).format(Date.from(Instant.now())));
|
||||
public Component getName(){
|
||||
return this.format == null ? Component.translatable("widgets.widgets.clock.weekFormat.none") : Component.nullToEmpty(new SimpleDateFormat(format).format(Date.from(Instant.now())));
|
||||
}
|
||||
}
|
||||
public ClockWidget(Identifier id) {
|
||||
super(id, List.of(
|
||||
new EnumWidgetSetting<>("hour_format",
|
||||
Text.translatable("widgets.widgets.clock.hourFormat"),
|
||||
Component.translatable("widgets.widgets.clock.hourFormat"),
|
||||
TimeOption.class,
|
||||
TimeOption.HOUR_24,
|
||||
TimeOption::getName),
|
||||
new ToggleWidgetSetting("show_seconds",
|
||||
Text.translatable("widgets.widgets.clock.showSeconds"),
|
||||
Component.translatable("widgets.widgets.clock.showSeconds"),
|
||||
true),
|
||||
new EnumWidgetSetting<>("date_format",
|
||||
Text.translatable("widgets.widgets.clock.dateFormat"),
|
||||
Component.translatable("widgets.widgets.clock.dateFormat"),
|
||||
DateOption.class,
|
||||
DateOption.NO_DATE,
|
||||
DateOption::getName),
|
||||
new EnumWidgetSetting<>("week_format",
|
||||
Text.translatable("widgets.widgets.clock.weekFormat"),
|
||||
Component.translatable("widgets.widgets.clock.weekFormat"),
|
||||
WeekOption.class,
|
||||
WeekOption.NO_DAY_OF_WEEK,
|
||||
WeekOption::getName)
|
||||
@@ -135,12 +134,12 @@ public class ClockWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.clock");
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.clock");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.clock.description");
|
||||
public Component getDescription() {
|
||||
return Component.translatable("widgets.widgets.clock.description");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,20 +4,20 @@ import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.ActionResult;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.hit.EntityHitResult;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.EntityHitResult;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class ComboWidget extends BasicTextWidget implements AttackEntityCallback {
|
||||
|
||||
@@ -40,9 +40,9 @@ public class ComboWidget extends BasicTextWidget implements AttackEntityCallback
|
||||
private int displayThreshold = 0;
|
||||
|
||||
@Override
|
||||
public @NonNull ActionResult interact(@NonNull PlayerEntity playerEntity, @NonNull World world, @NonNull Hand hand, Entity entity, @Nullable EntityHitResult entityHitResult) {
|
||||
public @NonNull InteractionResult interact(@NonNull Player playerEntity, @NonNull Level world, @NonNull InteractionHand hand, Entity entity, @Nullable EntityHitResult entityHitResult) {
|
||||
clientHitEntity(entity.getId());
|
||||
return ActionResult.PASS;
|
||||
return InteractionResult.PASS;
|
||||
}
|
||||
|
||||
private void clientHitEntity(int targetEntityId) {
|
||||
@@ -94,12 +94,12 @@ public class ComboWidget extends BasicTextWidget implements AttackEntityCallback
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.combo");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.combo.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -3,17 +3,16 @@ package de.shiewk.widgets.widgets;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.*;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class CoordinatesWidget extends ResizableWidget {
|
||||
public CoordinatesWidget(Identifier id) {
|
||||
@@ -71,7 +70,7 @@ public class CoordinatesWidget extends ResizableWidget {
|
||||
protected DirectionWidget.DisplayFormat directionFormat;
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long mt, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long mt, Font textRenderer, int posX, int posY) {
|
||||
this.backgroundColor.fillHorizontal(context, mt, posX, posY, posX + width(), posY + height());
|
||||
int y = this.paddingY + 1;
|
||||
if (showX){
|
||||
@@ -97,8 +96,8 @@ public class CoordinatesWidget extends ResizableWidget {
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||
final ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
final Font textRenderer = Minecraft.getInstance().font;
|
||||
final LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (hideCoordinates){
|
||||
textX = textHiddenX;
|
||||
textY = textHiddenY;
|
||||
@@ -114,19 +113,19 @@ public class CoordinatesWidget extends ResizableWidget {
|
||||
}
|
||||
textDirection = directionFormat.format().getString();
|
||||
|
||||
txc = width() - textRenderer.getWidth(textX) - paddingX;
|
||||
tyc = width() - textRenderer.getWidth(textY) - paddingX;
|
||||
tzc = width() - textRenderer.getWidth(textZ) - paddingX;
|
||||
tdc = width() - textRenderer.getWidth(textDirection) - paddingX;
|
||||
txc = width() - textRenderer.width(textX) - paddingX;
|
||||
tyc = width() - textRenderer.width(textY) - paddingX;
|
||||
tzc = width() - textRenderer.width(textZ) - paddingX;
|
||||
tdc = width() - textRenderer.width(textDirection) - paddingX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.coordinates");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.coordinates.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -5,19 +5,18 @@ import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.Mth;
|
||||
|
||||
import static net.minecraft.text.Text.literal;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.literal;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class DirectionWidget extends BasicTextWidget {
|
||||
|
||||
@@ -36,13 +35,13 @@ public class DirectionWidget extends BasicTextWidget {
|
||||
this.showsYaw = showsYaw;
|
||||
}
|
||||
|
||||
public Text format(int digits) {
|
||||
public Component format(int digits) {
|
||||
String yaw = "0";
|
||||
String direction = "unknown";
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
yaw = WidgetUtils.reduceDigits(MathHelper.wrapDegrees(player.getYaw()), digits);
|
||||
direction = player.getHorizontalFacing().name().toLowerCase(Locale.ROOT);
|
||||
yaw = WidgetUtils.reduceDigits(Mth.wrapDegrees(player.getYRot()), digits);
|
||||
direction = player.getDirection().name().toLowerCase(Locale.ROOT);
|
||||
}
|
||||
return switch (this){
|
||||
case YAW_ONLY -> literal(yaw);
|
||||
@@ -55,7 +54,7 @@ public class DirectionWidget extends BasicTextWidget {
|
||||
};
|
||||
}
|
||||
|
||||
public Text format(){
|
||||
public Component format(){
|
||||
return format(1);
|
||||
}
|
||||
}
|
||||
@@ -85,7 +84,7 @@ public class DirectionWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long n, Font textRenderer, int posX, int posY) {
|
||||
if (realtime) refresh();
|
||||
super.renderScaled(context, n, textRenderer, posX, posY);
|
||||
}
|
||||
@@ -95,12 +94,12 @@ public class DirectionWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.direction");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.direction.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,16 +2,15 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class FPSWidget extends BasicTextWidget {
|
||||
|
||||
@@ -25,7 +24,7 @@ public class FPSWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long n, Font textRenderer, int posX, int posY) {
|
||||
if (realtime){
|
||||
timedFrames.add(n);
|
||||
while (timedFrames.getFirst() < n - 500_000_100L){
|
||||
@@ -39,17 +38,17 @@ public class FPSWidget extends BasicTextWidget {
|
||||
@Override
|
||||
public void tickWidget() {
|
||||
if (!realtime){
|
||||
formatAndSetRenderText(MinecraftClient.getInstance().getCurrentFps() + " FPS");
|
||||
formatAndSetRenderText(Minecraft.getInstance().getFps() + " FPS");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.fps");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.fps.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,26 +2,28 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.*;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gl.RenderPipelines;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.GradientWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.client.renderer.RenderPipelines;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class InventoryWidget extends ResizableWidget {
|
||||
|
||||
private static final Identifier VANILLA_INVENTORY = Identifier.of("widgets", "textures/vanilla_inventory.png");
|
||||
private static final Identifier TEXTURE_PACK_INVENTORY = Identifier.ofVanilla("textures/gui/container/inventory.png");
|
||||
private static final Identifier VANILLA_INVENTORY = Identifier.fromNamespaceAndPath("widgets", "textures/vanilla_inventory.png");
|
||||
private static final Identifier TEXTURE_PACK_INVENTORY = Identifier.withDefaultNamespace("textures/gui/container/inventory.png");
|
||||
|
||||
public enum InventoryMode {
|
||||
VANILLA,
|
||||
@@ -40,7 +42,7 @@ public class InventoryWidget extends ResizableWidget {
|
||||
this.canDisableHotbar = canDisableHotbar;
|
||||
}
|
||||
|
||||
public Text display() {
|
||||
public Component display() {
|
||||
return translatable("widgets.widgets.inventory.mode." + name().toLowerCase(Locale.ROOT));
|
||||
}
|
||||
}
|
||||
@@ -58,13 +60,13 @@ public class InventoryWidget extends ResizableWidget {
|
||||
}
|
||||
|
||||
private InventoryMode mode = InventoryMode.TEXTURE_PACK;
|
||||
private PlayerInventory inventory;
|
||||
private Inventory inventory;
|
||||
|
||||
private GradientOptions gridColor, boxColor;
|
||||
private boolean showHotbar = false;
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY) {
|
||||
drawBackground(context, measuringTimeNano, posX, posY);
|
||||
if (inventory != null){
|
||||
drawItems(context, textRenderer, switch (mode){
|
||||
@@ -79,15 +81,15 @@ public class InventoryWidget extends ResizableWidget {
|
||||
}
|
||||
}
|
||||
|
||||
private void drawBackground(DrawContext context, long mt, int posX, int posY) {
|
||||
private void drawBackground(GuiGraphicsExtractor context, long mt, int posX, int posY) {
|
||||
switch (mode){
|
||||
case VANILLA -> context.drawTexture(RenderPipelines.GUI_TEXTURED, VANILLA_INVENTORY, posX, posY, 0, 0, 176, 91, 176, 91);
|
||||
case VANILLA -> context.blit(RenderPipelines.GUI_TEXTURED, VANILLA_INVENTORY, posX, posY, 0, 0, 176, 91, 176, 91);
|
||||
case TEXTURE_PACK -> {
|
||||
context.enableScissor(posX, posY, posX + width(), posY + 6);
|
||||
context.drawTexture(RenderPipelines.GUI_TEXTURED, TEXTURE_PACK_INVENTORY, posX, posY, 0, 0, 256, 256, 256, 256);
|
||||
context.blit(RenderPipelines.GUI_TEXTURED, TEXTURE_PACK_INVENTORY, posX, posY, 0, 0, 256, 256, 256, 256);
|
||||
context.disableScissor();
|
||||
context.enableScissor(posX, posY + 6, posX + width(), posY + height());
|
||||
context.drawTexture(RenderPipelines.GUI_TEXTURED, TEXTURE_PACK_INVENTORY, posX, posY - 75, 0, 0, 256, 256, 256, 256);
|
||||
context.blit(RenderPipelines.GUI_TEXTURED, TEXTURE_PACK_INVENTORY, posX, posY - 75, 0, 0, 256, 256, 256, 256);
|
||||
context.disableScissor();
|
||||
}
|
||||
case GRID -> {
|
||||
@@ -127,40 +129,39 @@ public class InventoryWidget extends ResizableWidget {
|
||||
}
|
||||
}
|
||||
|
||||
private void drawItems(DrawContext context, TextRenderer textRenderer, int posX, int posY) {
|
||||
private void drawItems(GuiGraphicsExtractor context, Font textRenderer, int posX, int posY) {
|
||||
for (int ry = 0; ry < 4; ry++) {
|
||||
if (ry == 0 && !showHotbar) continue;
|
||||
for (int rx = 0; rx < 9; rx++) {
|
||||
|
||||
int slot = ry * 9 + rx;
|
||||
ItemStack stack = inventory.getStack(slot);
|
||||
ItemStack stack = inventory.getItem(slot);
|
||||
if (stack.isEmpty()) continue;
|
||||
|
||||
int itemY = ry == 0 ? posY + 58 : posY + (ry-1) * 18;
|
||||
int itemX = posX + rx * 18;
|
||||
|
||||
context.drawItem(stack, itemX, itemY);
|
||||
context.drawStackOverlay(textRenderer, stack, itemX, itemY);
|
||||
context.item(stack, itemX, itemY);
|
||||
context.itemDecorations(textRenderer, stack, itemX, itemY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
PlayerInventory clientPlayerEntityInventory = player.getInventory();
|
||||
if (clientPlayerEntityInventory != null) inventory = clientPlayerEntityInventory;
|
||||
inventory = player.getInventory();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.inventory");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.inventory.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@ import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.GradientWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
|
||||
import java.util.List;
|
||||
@@ -18,11 +18,11 @@ import java.util.Objects;
|
||||
public class KeyStrokesWidget extends ResizableWidget {
|
||||
public KeyStrokesWidget(Identifier id) {
|
||||
super(id, List.of(
|
||||
new ToggleWidgetSetting("showjump", Text.translatable("widgets.widgets.keystrokes.showJumpKey"), true),
|
||||
new GradientWidgetSetting("bgpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundPressed"), 0x50ffffff),
|
||||
new GradientWidgetSetting("bgunpressed", Text.translatable("widgets.widgets.keystrokes.colorBackgroundUnpressed"), 0x50000000),
|
||||
new GradientWidgetSetting("keypressed", Text.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 0xffffffff),
|
||||
new GradientWidgetSetting("keyunpressed", Text.translatable("widgets.widgets.keystrokes.colorKeyUnpressed"), 0xffffffff)
|
||||
new ToggleWidgetSetting("showjump", Component.translatable("widgets.widgets.keystrokes.showJumpKey"), true),
|
||||
new GradientWidgetSetting("bgpressed", Component.translatable("widgets.widgets.keystrokes.colorBackgroundPressed"), 0x50ffffff),
|
||||
new GradientWidgetSetting("bgunpressed", Component.translatable("widgets.widgets.keystrokes.colorBackgroundUnpressed"), 0x50000000),
|
||||
new GradientWidgetSetting("keypressed", Component.translatable("widgets.widgets.keystrokes.colorKeyPressed"), 0xffffffff),
|
||||
new GradientWidgetSetting("keyunpressed", Component.translatable("widgets.widgets.keystrokes.colorKeyUnpressed"), 0xffffffff)
|
||||
));
|
||||
}
|
||||
|
||||
@@ -30,11 +30,11 @@ public class KeyStrokesWidget extends ResizableWidget {
|
||||
private boolean showJumpKey = true;
|
||||
|
||||
protected static class Key {
|
||||
protected final KeyBinding binding;
|
||||
protected final KeyMapping binding;
|
||||
protected boolean isPressed;
|
||||
protected long lastChanged;
|
||||
|
||||
private Key(KeyBinding binding) {
|
||||
private Key(KeyMapping binding) {
|
||||
Objects.requireNonNull(binding);
|
||||
this.binding = binding;
|
||||
}
|
||||
@@ -44,7 +44,7 @@ public class KeyStrokesWidget extends ResizableWidget {
|
||||
protected String boundToKey;
|
||||
protected int boundToLength;
|
||||
|
||||
private KeyLarge(KeyBinding binding) {
|
||||
private KeyLarge(KeyMapping binding) {
|
||||
super(binding);
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class KeyStrokesWidget extends ResizableWidget {
|
||||
private Key KEY_JUMP;
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY) {
|
||||
if (KEY_JUMP == null) return;
|
||||
renderKeyStroke(context, textRenderer, measuringTimeNano, posX + 22, posY, KEY_FWD);
|
||||
renderKeyStroke(context, textRenderer, measuringTimeNano, posX, posY + 22, KEY_LEFT);
|
||||
@@ -62,7 +62,7 @@ public class KeyStrokesWidget extends ResizableWidget {
|
||||
if (showJumpKey) renderSpaceBar(context, measuringTimeNano, posX, posY + 44, KEY_JUMP);
|
||||
}
|
||||
|
||||
protected void renderSpaceBar(final DrawContext context, long mt, int posX, int posY, Key key){
|
||||
protected void renderSpaceBar(final GuiGraphicsExtractor context, long mt, int posX, int posY, Key key){
|
||||
long l = mt - key.lastChanged;
|
||||
if (l < 100000000){
|
||||
double alpha = 0.00000001d * l;
|
||||
@@ -74,7 +74,7 @@ public class KeyStrokesWidget extends ResizableWidget {
|
||||
(key.isPressed ? colorKeyPressed : colorKeyUnpressed).fillHorizontal(context, mt, posX + 5, posY + 4, posX + 59, posY + 5);
|
||||
}
|
||||
|
||||
protected void renderKeyStroke(DrawContext context, TextRenderer textRenderer, long mt, int posX, int posY, KeyLarge key){
|
||||
protected void renderKeyStroke(GuiGraphicsExtractor context, Font textRenderer, long mt, int posX, int posY, KeyLarge key){
|
||||
long l = mt - key.lastChanged;
|
||||
if (l < 100000000){
|
||||
double alpha = 0.00000001d * l;
|
||||
@@ -88,43 +88,43 @@ public class KeyStrokesWidget extends ResizableWidget {
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
if (KEY_FWD == null) KEY_FWD = new KeyLarge(MinecraftClient.getInstance().options.forwardKey);
|
||||
if (KEY_BWD == null) KEY_BWD = new KeyLarge(MinecraftClient.getInstance().options.backKey);
|
||||
if (KEY_LEFT == null) KEY_LEFT = new KeyLarge(MinecraftClient.getInstance().options.leftKey);
|
||||
if (KEY_RIGHT == null) KEY_RIGHT = new KeyLarge(MinecraftClient.getInstance().options.rightKey);
|
||||
if (KEY_JUMP == null) KEY_JUMP = new Key(MinecraftClient.getInstance().options.jumpKey);
|
||||
TextRenderer renderer = MinecraftClient.getInstance().textRenderer;
|
||||
if (KEY_FWD == null) KEY_FWD = new KeyLarge(Minecraft.getInstance().options.keyUp);
|
||||
if (KEY_BWD == null) KEY_BWD = new KeyLarge(Minecraft.getInstance().options.keyDown);
|
||||
if (KEY_LEFT == null) KEY_LEFT = new KeyLarge(Minecraft.getInstance().options.keyLeft);
|
||||
if (KEY_RIGHT == null) KEY_RIGHT = new KeyLarge(Minecraft.getInstance().options.keyRight);
|
||||
if (KEY_JUMP == null) KEY_JUMP = new Key(Minecraft.getInstance().options.keyJump);
|
||||
Font renderer = Minecraft.getInstance().font;
|
||||
for (Key key : new Key[]{KEY_FWD, KEY_BWD, KEY_LEFT, KEY_RIGHT, KEY_JUMP}){
|
||||
if (key instanceof KeyLarge keyLarge){
|
||||
keyLarge.boundToKey = getKeyName(key);
|
||||
keyLarge.boundToLength = renderer.getWidth(keyLarge.boundToKey);
|
||||
keyLarge.boundToLength = renderer.width(keyLarge.boundToKey);
|
||||
}
|
||||
final boolean pressed = key.binding.isPressed();
|
||||
final boolean pressed = key.binding.isDown();
|
||||
if (pressed != key.isPressed){
|
||||
key.isPressed = pressed;
|
||||
key.lastChanged = Util.getMeasuringTimeNano();
|
||||
key.lastChanged = Util.getNanos();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getKeyName(Key key) {
|
||||
return switch (key.binding.getBoundKeyTranslationKey()) {
|
||||
return switch (key.binding.saveString()) {
|
||||
case "key.keyboard.up" -> "\u2191";
|
||||
case "key.keyboard.down" -> "\u2193";
|
||||
case "key.keyboard.left" -> "\u2190";
|
||||
case "key.keyboard.right" -> "\u2192";
|
||||
default -> key.binding.getBoundKeyLocalizedText().getString();
|
||||
default -> key.binding.getTranslatedKeyMessage().getString();
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.keystrokes");
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.keystrokes");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.keystrokes.description");
|
||||
public Component getDescription() {
|
||||
return Component.translatable("widgets.widgets.keystrokes.description");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,14 +2,13 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class MemoryUsageWidget extends BasicTextWidget {
|
||||
|
||||
@@ -26,7 +25,7 @@ public class MemoryUsageWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderScaled(DrawContext context, long n, TextRenderer textRenderer, int posX, int posY) {
|
||||
public void renderScaled(GuiGraphicsExtractor context, long n, Font textRenderer, int posX, int posY) {
|
||||
if (realtime) refresh();
|
||||
super.renderScaled(context, n, textRenderer, posX, posY);
|
||||
}
|
||||
@@ -58,12 +57,12 @@ public class MemoryUsageWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.memory");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.memory.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -4,21 +4,20 @@ import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl;
|
||||
|
||||
import net.minecraft.util.debugchart.LocalSampleLogger;
|
||||
import java.util.List;
|
||||
|
||||
public class PingWidget extends BasicTextWidget {
|
||||
|
||||
public PingWidget(Identifier id) {
|
||||
super(id, List.of(
|
||||
new ToggleWidgetSetting("dynamic_color", Text.translatable("widgets.widgets.ping.dynamicColor"), true),
|
||||
new ToggleWidgetSetting("hide_in_singleplayer", Text.translatable("widgets.widgets.common.hideInSingleplayer"), false)
|
||||
new ToggleWidgetSetting("dynamic_color", Component.translatable("widgets.widgets.ping.dynamicColor"), true),
|
||||
new ToggleWidgetSetting("hide_in_singleplayer", Component.translatable("widgets.widgets.common.hideInSingleplayer"), false)
|
||||
));
|
||||
getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor);
|
||||
}
|
||||
@@ -32,14 +31,14 @@ public class PingWidget extends BasicTextWidget {
|
||||
public void tickWidget() {
|
||||
shouldRender = !(hideInSingleplayer && WidgetUtils.isInSingleplayer());
|
||||
if (!shouldRender) return;
|
||||
final ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
|
||||
final ClientPacketListener networkHandler = Minecraft.getInstance().getConnection();
|
||||
if (networkHandler != null){
|
||||
if (lastPingQuery < Util.getMeasuringTimeMs() - 5000){
|
||||
networkHandler.pingMeasurer.ping();
|
||||
lastPingQuery = Util.getMeasuringTimeMs();
|
||||
if (lastPingQuery < Util.getMillis() - 5000){
|
||||
networkHandler.pingDebugMonitor.tick();
|
||||
lastPingQuery = Util.getMillis();
|
||||
}
|
||||
final MultiValueDebugSampleLogImpl pingLog = networkHandler.pingMeasurer.log;
|
||||
final int logLength = pingLog.getLength();
|
||||
final LocalSampleLogger pingLog = networkHandler.pingDebugMonitor.delayTimer;
|
||||
final int logLength = pingLog.size();
|
||||
final int avgCompileLength = 3;
|
||||
long ping = 0;
|
||||
int valuesRead = 0;
|
||||
@@ -75,12 +74,12 @@ public class PingWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.ping");
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.ping");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.ping.description");
|
||||
public Component getDescription() {
|
||||
return Component.translatable("widgets.widgets.ping.description");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,15 +2,14 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.TextFieldWidgetSettingOption;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
public class PlainTextWidget extends BasicTextWidget {
|
||||
public PlainTextWidget(Identifier id) {
|
||||
super(id, List.of(
|
||||
new TextFieldWidgetSettingOption("text", Text.translatable("widgets.widgets.plaintext.text"), Text.translatable("widgets.widgets.plaintext.initial"), Text.translatable("widgets.widgets.plaintext.placeholder"), true, 200)
|
||||
new TextFieldWidgetSettingOption("text", Component.translatable("widgets.widgets.plaintext.text"), Component.translatable("widgets.widgets.plaintext.initial"), Component.translatable("widgets.widgets.plaintext.placeholder"), true, 200)
|
||||
));
|
||||
}
|
||||
|
||||
@@ -18,13 +17,13 @@ public class PlainTextWidget extends BasicTextWidget {
|
||||
public void tickWidget() {}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.plaintext");
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.plaintext");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.plaintext.description");
|
||||
public Component getDescription() {
|
||||
return Component.translatable("widgets.widgets.plaintext.description");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,13 +2,12 @@ package de.shiewk.widgets.widgets;
|
||||
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import static net.minecraft.text.Text.literal;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.literal;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class PlayTimeWidget extends BasicTextWidget {
|
||||
|
||||
@@ -61,12 +60,12 @@ public class PlayTimeWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.playtime");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.playtime.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -3,15 +3,14 @@ package de.shiewk.widgets.widgets;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import static net.minecraft.text.Text.literal;
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.literal;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class PlayerCountWidget extends BasicTextWidget{
|
||||
public PlayerCountWidget(Identifier id) {
|
||||
@@ -28,18 +27,18 @@ public class PlayerCountWidget extends BasicTextWidget{
|
||||
public void tickWidget() {
|
||||
shouldRender = !(hideInSingleplayer && WidgetUtils.isInSingleplayer());
|
||||
if (!shouldRender) return;
|
||||
final ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
|
||||
String online = networkHandler == null ? "?" : String.valueOf(networkHandler.getListedPlayerListEntries().size());
|
||||
final ClientPacketListener networkHandler = Minecraft.getInstance().getConnection();
|
||||
String online = networkHandler == null ? "?" : String.valueOf(networkHandler.getListedOnlinePlayers().size());
|
||||
formatAndSetRenderText(showLabel ? literal(translatable("widgets.widgets.playerCount.online", online).getString()) : literal(online));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.playerCount");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.playerCount.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -4,14 +4,14 @@ import de.shiewk.widgets.ModWidget;
|
||||
import de.shiewk.widgets.widgets.settings.WidgetSettingOption;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
public abstract class ResizableWidget extends ModWidget {
|
||||
|
||||
@@ -21,25 +21,25 @@ public abstract class ResizableWidget extends ModWidget {
|
||||
|
||||
private static List<WidgetSettingOption<?>> addScaleSetting(List<WidgetSettingOption<?>> target) {
|
||||
ArrayList<WidgetSettingOption<?>> settings = new ArrayList<>(target);
|
||||
settings.add(new IntSliderWidgetSetting("size", Text.translatable("widgets.widgets.common.sizePercent"), 25, 100, 400));
|
||||
settings.add(new IntSliderWidgetSetting("size", Component.translatable("widgets.widgets.common.sizePercent"), 25, 100, 400));
|
||||
return settings;
|
||||
}
|
||||
|
||||
protected float size = 1f;
|
||||
|
||||
@Override
|
||||
public final void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
public final void render(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY) {
|
||||
if (size != 1f){
|
||||
Matrix3x2fStack matrices = context.getMatrices();
|
||||
Matrix3x2fStack matrices = context.pose();
|
||||
matrices.pushMatrix();
|
||||
matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices);
|
||||
matrices.scale(size, size, matrices);
|
||||
}
|
||||
this.renderScaled(context, measuringTimeNano, textRenderer, posX, posY);
|
||||
if (size != 1f) context.getMatrices().popMatrix();
|
||||
if (size != 1f) context.pose().popMatrix();
|
||||
}
|
||||
|
||||
public abstract void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY);
|
||||
public abstract void renderScaled(GuiGraphicsExtractor context, long measuringTimeNano, Font textRenderer, int posX, int posY);
|
||||
|
||||
@Override
|
||||
public void onSettingsChanged(WidgetSettings settings) {
|
||||
|
||||
@@ -3,14 +3,13 @@ package de.shiewk.widgets.widgets;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ServerInfo;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class ServerIPWidget extends BasicTextWidget {
|
||||
public ServerIPWidget(Identifier id) {
|
||||
@@ -31,16 +30,16 @@ public class ServerIPWidget extends BasicTextWidget {
|
||||
public void tickWidget() {
|
||||
shouldRender = !(this.hideInSingleplayer && WidgetUtils.isInSingleplayer());
|
||||
if (!shouldRender) return;
|
||||
final ServerInfo serverEntry = MinecraftClient.getInstance().getCurrentServerEntry();
|
||||
final ServerData serverEntry = Minecraft.getInstance().getCurrentServer();
|
||||
if (serverEntry != null){
|
||||
formatAndSetRenderText(serverEntry.address);
|
||||
formatAndSetRenderText(serverEntry.ip);
|
||||
} else {
|
||||
formatAndSetRenderText(translatable("menu.singleplayer"));
|
||||
}
|
||||
t++;
|
||||
if (dynamicWidth && t >= 20){
|
||||
t = 0;
|
||||
this.width = MinecraftClient.getInstance().textRenderer.getWidth(this.renderText) + 20;
|
||||
this.width = Minecraft.getInstance().font.width(this.renderText) + 20;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,12 +49,12 @@ public class ServerIPWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.serverIP");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.serverIP.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -5,13 +5,12 @@ import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
import static de.shiewk.widgets.utils.WidgetUtils.reduceDigits;
|
||||
|
||||
@@ -33,16 +32,16 @@ public class SpeedWidget extends BasicTextWidget {
|
||||
super(id, List.of(
|
||||
new EnumWidgetSetting<>(
|
||||
"unit",
|
||||
Text.translatable("widgets.widgets.speed.unit"),
|
||||
Component.translatable("widgets.widgets.speed.unit"),
|
||||
Unit.class,
|
||||
Unit.METERS_PER_SECOND,
|
||||
unit -> Text.of(unit.displayName)
|
||||
unit -> Component.nullToEmpty(unit.displayName)
|
||||
),
|
||||
new ToggleWidgetSetting("with_x", Text.translatable("widgets.widgets.speed.withX"), true),
|
||||
new ToggleWidgetSetting("with_y", Text.translatable("widgets.widgets.speed.withY"), false),
|
||||
new ToggleWidgetSetting("with_z", Text.translatable("widgets.widgets.speed.withZ"), true),
|
||||
new IntSliderWidgetSetting("digits", Text.translatable("widgets.widgets.speed.digits"), 0, 1, 3),
|
||||
new IntSliderWidgetSetting("window_size", Text.translatable("widgets.widgets.speed.windowSize"), 3, 10, 60)
|
||||
new ToggleWidgetSetting("with_x", Component.translatable("widgets.widgets.speed.withX"), true),
|
||||
new ToggleWidgetSetting("with_y", Component.translatable("widgets.widgets.speed.withY"), false),
|
||||
new ToggleWidgetSetting("with_z", Component.translatable("widgets.widgets.speed.withZ"), true),
|
||||
new IntSliderWidgetSetting("digits", Component.translatable("widgets.widgets.speed.digits"), 0, 1, 3),
|
||||
new IntSliderWidgetSetting("window_size", Component.translatable("widgets.widgets.speed.windowSize"), 3, 10, 60)
|
||||
));
|
||||
}
|
||||
|
||||
@@ -54,19 +53,19 @@ public class SpeedWidget extends BasicTextWidget {
|
||||
private double[] averagingWindow = new double[10];
|
||||
private int windowPointer = 0;
|
||||
|
||||
private Vec3d lastPos = new Vec3d(0, 0, 0);
|
||||
private Vec3 lastPos = new Vec3(0, 0, 0);
|
||||
|
||||
@Override
|
||||
public void tickWidget() {
|
||||
ClientPlayerEntity player = MinecraftClient.getInstance().player;
|
||||
LocalPlayer player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
Vec3d lastPos = this.lastPos;
|
||||
Vec3d newPos = this.lastPos = player.getEntityPos();
|
||||
Vec3d velocity = lastPos.subtract(newPos);
|
||||
Vec3 lastPos = this.lastPos;
|
||||
Vec3 newPos = this.lastPos = player.position();
|
||||
Vec3 velocity = lastPos.subtract(newPos);
|
||||
double rt = 0;
|
||||
if (withXVelocity) rt += velocity.getX() * velocity.getX();
|
||||
if (withYVelocity) rt += velocity.getY() * velocity.getY();
|
||||
if (withZVelocity) rt += velocity.getZ() * velocity.getZ();
|
||||
if (withXVelocity) rt += velocity.x() * velocity.x();
|
||||
if (withYVelocity) rt += velocity.y() * velocity.y();
|
||||
if (withZVelocity) rt += velocity.z() * velocity.z();
|
||||
averagingWindow[windowPointer++] = switch (unit){
|
||||
case METERS_PER_SECOND, BLOCKS_PER_SECOND -> Math.sqrt(rt) * WidgetUtils.getClientTickRate();
|
||||
case CENTIMETERS_PER_TICK -> Math.sqrt(rt) * 100;
|
||||
@@ -86,13 +85,13 @@ public class SpeedWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
return Text.translatable("widgets.widgets.speed");
|
||||
public Component getName() {
|
||||
return Component.translatable("widgets.widgets.speed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
return Text.translatable("widgets.widgets.speed.description");
|
||||
public Component getDescription() {
|
||||
return Component.translatable("widgets.widgets.speed.description");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,15 +5,14 @@ import de.shiewk.widgets.WidgetsMod;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.widgets.settings.IntSliderWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.server.ServerTickManager;
|
||||
import net.minecraft.server.integrated.IntegratedServer;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.util.List;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.server.IntegratedServer;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.server.ServerTickRateManager;
|
||||
|
||||
import static net.minecraft.text.Text.translatable;
|
||||
import static net.minecraft.network.chat.Component.translatable;
|
||||
|
||||
public class TPSWidget extends BasicTextWidget {
|
||||
private TPSWidget(Identifier id) {
|
||||
@@ -25,7 +24,7 @@ public class TPSWidget extends BasicTextWidget {
|
||||
getSettings().optionById("textcolor").setShowCondition(() -> !this.dynamicColor);
|
||||
}
|
||||
|
||||
public static final TPSWidget INSTANCE = new TPSWidget(Identifier.of(WidgetsMod.MOD_ID, "tps"));
|
||||
public static final TPSWidget INSTANCE = new TPSWidget(Identifier.fromNamespaceAndPath(WidgetsMod.MOD_ID, "tps"));
|
||||
|
||||
private static long[] lastUpdates = new long[5];
|
||||
private static int updatePointer = 0;
|
||||
@@ -40,13 +39,13 @@ public class TPSWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
public static void worldTimeUpdated(long nanoTime) {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
if (client.isInSingleplayer()){
|
||||
IntegratedServer server = client.getServer();
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
if (client.isLocalServer()){
|
||||
IntegratedServer server = client.getSingleplayerServer();
|
||||
if (server != null) {
|
||||
ServerTickManager tickManager = server.getTickManager();
|
||||
float tps = 1000f / server.getAverageTickTime();
|
||||
float targetTickRate = tickManager.getTickRate();
|
||||
ServerTickRateManager tickManager = server.tickRateManager();
|
||||
float tps = 1000f / server.getCurrentSmoothedTickTime();
|
||||
float targetTickRate = tickManager.tickrate();
|
||||
if (tickManager.isSprinting()){
|
||||
INSTANCE.updateTPS(tps, targetTickRate, true);
|
||||
} else {
|
||||
@@ -70,8 +69,8 @@ public class TPSWidget extends BasicTextWidget {
|
||||
float ticksPerSecond = 1000f / mspt;
|
||||
|
||||
boolean loadingFinished = updatesSinceWorldChange > lastUpdates.length;
|
||||
if (client.world != null) {
|
||||
INSTANCE.updateTPS(ticksPerSecond, client.world.getTickManager().getTickRate(), loadingFinished);
|
||||
if (client.level != null) {
|
||||
INSTANCE.updateTPS(ticksPerSecond, client.level.tickRateManager().tickrate(), loadingFinished);
|
||||
} else {
|
||||
INSTANCE.updateTPS(ticksPerSecond, 20, loadingFinished);
|
||||
}
|
||||
@@ -111,12 +110,12 @@ public class TPSWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.tps");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.tps.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -3,14 +3,14 @@ package de.shiewk.widgets.widgets;
|
||||
import de.shiewk.widgets.WidgetSettings;
|
||||
import de.shiewk.widgets.widgets.settings.EnumWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.Identifier;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static net.minecraft.text.Text.*;
|
||||
import static net.minecraft.network.chat.Component.*;
|
||||
|
||||
public class WorldTimeWidget extends BasicTextWidget {
|
||||
|
||||
@@ -30,11 +30,11 @@ public class WorldTimeWidget extends BasicTextWidget {
|
||||
protected boolean showDay;
|
||||
protected ClockWidget.TimeOption timeFormat;
|
||||
|
||||
public Text getDayLabel(long day) {
|
||||
public Component getDayLabel(long day) {
|
||||
return translatable("widgets.widgets.worldtime.day", day);
|
||||
}
|
||||
|
||||
public Text getTimeLabel(long hour, long minute) {
|
||||
public Component getTimeLabel(long hour, long minute) {
|
||||
return switch (timeFormat) {
|
||||
case NO_TIME -> empty();
|
||||
case HOUR_24 -> literal(hour + ":" + (minute < 10 ? "0" + minute : minute));
|
||||
@@ -48,11 +48,11 @@ public class WorldTimeWidget extends BasicTextWidget {
|
||||
|
||||
@Override
|
||||
public void tickWidget() {
|
||||
final World world = MinecraftClient.getInstance().world;
|
||||
final Level world = Minecraft.getInstance().level;
|
||||
if (world == null) {
|
||||
formatAndSetRenderText("?");
|
||||
} else {
|
||||
long time = world.getTimeOfDay() + 6000;
|
||||
long time = world.getGameTime() + 6000;
|
||||
long day = time / 24000;
|
||||
long hour = time / 1000 % 24;
|
||||
long minute = (long) ((time % 1000) / 16.6666);
|
||||
@@ -76,12 +76,12 @@ public class WorldTimeWidget extends BasicTextWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getName() {
|
||||
public Component getName() {
|
||||
return translatable("widgets.widgets.worldtime");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDescription() {
|
||||
public Component getDescription() {
|
||||
return translatable("widgets.widgets.worldtime.description");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,14 +2,15 @@ package de.shiewk.widgets.widgets.settings;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.function.Function;
|
||||
@@ -18,12 +19,12 @@ public class EnumWidgetSetting<T extends Enum<T>> extends WidgetSettingOption<T>
|
||||
|
||||
private final Class<T> enumClass;
|
||||
private T value;
|
||||
private final Function<T, Text> enumNameGetter;
|
||||
private final Function<T, Component> enumNameGetter;
|
||||
private int height = 0;
|
||||
private boolean mouseClick = false;
|
||||
private boolean changed = false;
|
||||
|
||||
public EnumWidgetSetting(String id, Text name, Class<T> enumClass, T defaultValue, Function<T, Text> enumNameGetter) {
|
||||
public EnumWidgetSetting(String id, Component name, Class<T> enumClass, T defaultValue, Function<T, Component> enumNameGetter) {
|
||||
super(id, name);
|
||||
this.enumClass = enumClass;
|
||||
this.value = defaultValue;
|
||||
@@ -58,28 +59,28 @@ public class EnumWidgetSetting<T extends Enum<T>> extends WidgetSettingOption<T>
|
||||
COLOR_TEXT = new Color(255, 255, 255, 255).getRGB();
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
final Font textRenderer = Minecraft.getInstance().font;
|
||||
int y = 0;
|
||||
int nx = 5;
|
||||
final int bx = getX() + getWidth();
|
||||
for (T constant : enumClass.getEnumConstants()) {
|
||||
final Text name = enumNameGetter.apply(constant);
|
||||
final int textRendererWidth = textRenderer.getWidth(name);
|
||||
final Component name = enumNameGetter.apply(constant);
|
||||
final int textRendererWidth = textRenderer.width(name);
|
||||
if (nx != 5 && nx + textRendererWidth + 20 > this.getWidth()){
|
||||
y += 24;
|
||||
nx = 5;
|
||||
}
|
||||
final boolean hover = mouseX <= bx - nx && mouseX >= bx - nx - 10 - textRendererWidth && mouseY <= y + 19 + getY() && mouseY >= y + getY();
|
||||
context.fill(bx - 10 - textRendererWidth - nx, y + getY(), bx - nx, y + 19 + getY(), constant == value ? COLOR_SELECTED : hover ? COLOR_UNSELECTED_HOVER : COLOR_UNSELECTED);
|
||||
context.drawText(textRenderer, name, bx - nx - 5 - textRendererWidth, y + 5 + getY(), COLOR_TEXT, true);
|
||||
context.text(textRenderer, name, bx - nx - 5 - textRendererWidth, y + 5 + getY(), COLOR_TEXT, true);
|
||||
if (hover && mouseClick){
|
||||
this.value = constant;
|
||||
this.changed = true;
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_ON);
|
||||
WidgetUtils.playSound(SoundEvents.COPPER_BULB_TURN_ON);
|
||||
}
|
||||
if (hover){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
}
|
||||
nx += textRendererWidth + 20;
|
||||
}
|
||||
@@ -89,13 +90,13 @@ public class EnumWidgetSetting<T extends Enum<T>> extends WidgetSettingOption<T>
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
mouseClick = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(Click click) {
|
||||
public boolean mouseReleased(MouseButtonEvent click) {
|
||||
mouseClick = false;
|
||||
boolean changed = this.changed;
|
||||
this.changed = false;
|
||||
|
||||
@@ -1,26 +1,27 @@
|
||||
package de.shiewk.widgets.widgets.settings;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.client.screen.WidgetSettingsScreen;
|
||||
import de.shiewk.widgets.client.screen.gradienteditor.GradientEditorScreen;
|
||||
import de.shiewk.widgets.color.GradientMode;
|
||||
import de.shiewk.widgets.color.GradientOptions;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.util.Util;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
import static de.shiewk.widgets.client.WidgetManager.gson;
|
||||
import static de.shiewk.widgets.utils.WidgetUtils.colorARGBToHexRGBA;
|
||||
|
||||
public class GradientWidgetSetting extends WidgetSettingOption<GradientOptions> {
|
||||
|
||||
public GradientWidgetSetting(String id, Text name, GradientMode defaultMode, int defaultGradientSize, int defaultGradientSpeed, int defaultColor) {
|
||||
public GradientWidgetSetting(String id, Component name, GradientMode defaultMode, int defaultGradientSize, int defaultGradientSpeed, int defaultColor) {
|
||||
super(id, name);
|
||||
this.value = new GradientOptions(
|
||||
defaultMode,
|
||||
@@ -30,7 +31,7 @@ public class GradientWidgetSetting extends WidgetSettingOption<GradientOptions>
|
||||
);
|
||||
}
|
||||
|
||||
public GradientWidgetSetting(String id, Text name, int defaultColor) {
|
||||
public GradientWidgetSetting(String id, Component name, int defaultColor) {
|
||||
this(id, name, GradientMode.SWEEP, 40, 10, defaultColor);
|
||||
}
|
||||
|
||||
@@ -61,9 +62,9 @@ public class GradientWidgetSetting extends WidgetSettingOption<GradientOptions>
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||
final long n = Util.getMeasuringTimeNano();
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float deltaTicks) {
|
||||
final Font textRenderer = Minecraft.getInstance().font;
|
||||
final long n = Util.getNanos();
|
||||
GradientOptions gradient = this.getValue();
|
||||
gradient.fillHorizontal(
|
||||
context,
|
||||
@@ -81,15 +82,15 @@ public class GradientWidgetSetting extends WidgetSettingOption<GradientOptions>
|
||||
displayText = "#" + colorARGBToHexRGBA(colors[0]);
|
||||
} else {
|
||||
outlineColor = 0xff_ff_ff_ff;
|
||||
displayText = Text.translatable("widgets.ui.widgetSettings.colors", colors.length).getString();
|
||||
displayText = Component.translatable("widgets.ui.widgetSettings.colors", colors.length).getString();
|
||||
}
|
||||
context.drawHorizontalLine(getX(), getX()+getWidth(), getY(), outlineColor);
|
||||
context.drawHorizontalLine(getX(), getX()+getWidth(), getY()+getHeight(), outlineColor);
|
||||
context.drawVerticalLine(getX(), getY(), getY() + getHeight(), outlineColor);
|
||||
context.drawVerticalLine(getX() + getWidth(), getY(), getY() + getHeight(), outlineColor);
|
||||
context.horizontalLine(getX(), getX()+getWidth(), getY(), outlineColor);
|
||||
context.horizontalLine(getX(), getX()+getWidth(), getY()+getHeight(), outlineColor);
|
||||
context.verticalLine(getX(), getY(), getY() + getHeight(), outlineColor);
|
||||
context.verticalLine(getX() + getWidth(), getY(), getY() + getHeight(), outlineColor);
|
||||
|
||||
int width = textRenderer.getWidth(displayText);
|
||||
context.drawText(
|
||||
int width = textRenderer.width(displayText);
|
||||
context.text(
|
||||
textRenderer,
|
||||
displayText,
|
||||
getX() + (getWidth() / 2 - (width / 2)),
|
||||
@@ -99,7 +100,7 @@ public class GradientWidgetSetting extends WidgetSettingOption<GradientOptions>
|
||||
);
|
||||
|
||||
if (this.isHovered(mouseX, mouseY)){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,11 +115,11 @@ public class GradientWidgetSetting extends WidgetSettingOption<GradientOptions>
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
if (client.currentScreen instanceof WidgetSettingsScreen screen) {
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_ON);
|
||||
client.setScreen(new GradientEditorScreen(client.currentScreen, screen.getWidget(), this, screen.getOnChange()));
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
if (client.screen instanceof WidgetSettingsScreen screen) {
|
||||
WidgetUtils.playSound(SoundEvents.COPPER_BULB_TURN_ON);
|
||||
client.setScreen(new GradientEditorScreen(client.screen, screen.getWidget(), this, screen.getOnChange()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ package de.shiewk.widgets.widgets.settings;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.util.Mth;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class IntSliderWidgetSetting extends WidgetSettingOption<Integer> {
|
||||
@@ -20,7 +20,7 @@ public class IntSliderWidgetSetting extends WidgetSettingOption<Integer> {
|
||||
private boolean changed = false;
|
||||
private boolean clicked = false;
|
||||
|
||||
public IntSliderWidgetSetting(String id, Text name, int minValue, int defaultValue, int maxValue) {
|
||||
public IntSliderWidgetSetting(String id, Component name, int minValue, int defaultValue, int maxValue) {
|
||||
super(id, name);
|
||||
this.value = defaultValue;
|
||||
this.minValue = minValue;
|
||||
@@ -28,7 +28,7 @@ public class IntSliderWidgetSetting extends WidgetSettingOption<Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
public boolean keyPressed(KeyEvent input) {
|
||||
if (maxValue > value && input.isRight()) {
|
||||
value++;
|
||||
return true;
|
||||
@@ -52,28 +52,28 @@ public class IntSliderWidgetSetting extends WidgetSettingOption<Integer> {
|
||||
}
|
||||
|
||||
private int valueToXPos(int value){
|
||||
return MathHelper.lerp((float) (value - minValue) / (maxValue - minValue), getX() + 5, getX() + 155);
|
||||
return Mth.lerpInt((float) (value - minValue) / (maxValue - minValue), getX() + 5, getX() + 155);
|
||||
}
|
||||
|
||||
private int xPosToValue(int xpos){
|
||||
return MathHelper.lerp((xpos - getX() - 5) / 150f, minValue, maxValue);
|
||||
return Mth.lerpInt((xpos - getX() - 5) / 150f, minValue, maxValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
public void extractRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
int xp = valueToXPos(getValue());
|
||||
context.drawHorizontalLine(getX() + 5, getX() + 155, getY() + 6, 0xffffffff);
|
||||
context.drawVerticalLine(getX() + 4, getY() + 3, getY() + 10, 0xffffffff);
|
||||
context.drawVerticalLine(getX() + 155, getY() + 3, getY() + 10, 0xffffffff);
|
||||
context.horizontalLine(getX() + 5, getX() + 155, getY() + 6, 0xffffffff);
|
||||
context.verticalLine(getX() + 4, getY() + 3, getY() + 10, 0xffffffff);
|
||||
context.verticalLine(getX() + 155, getY() + 3, getY() + 10, 0xffffffff);
|
||||
context.fill(xp-2, getY() + 3, xp+2, getY() + 10, 0xffffffff);
|
||||
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||
context.drawText(textRenderer, String.valueOf(getValue()), getX() + 160, getY() + 3, 0xffffffff, true);
|
||||
final Font textRenderer = Minecraft.getInstance().font;
|
||||
context.text(textRenderer, String.valueOf(getValue()), getX() + 160, getY() + 3, 0xffffffff, true);
|
||||
if (clicked){
|
||||
this.changed = true;
|
||||
this.value = MathHelper.clamp(xPosToValue(mouseX), minValue, maxValue);
|
||||
this.value = Mth.clamp(xPosToValue(mouseX), minValue, maxValue);
|
||||
}
|
||||
if (isHovering(mouseX, mouseY)){
|
||||
context.setCursor(StandardCursors.RESIZE_EW);
|
||||
context.requestCursor(CursorTypes.RESIZE_EW);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,13 +85,13 @@ public class IntSliderWidgetSetting extends WidgetSettingOption<Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
this.clicked = true;
|
||||
return super.mouseClicked(click, doubled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(Click click) {
|
||||
public boolean mouseReleased(MouseButtonEvent click) {
|
||||
this.clicked = false;
|
||||
boolean t = this.changed;
|
||||
this.changed = false;
|
||||
|
||||
@@ -1,349 +0,0 @@
|
||||
package de.shiewk.widgets.widgets.settings;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import de.shiewk.widgets.client.screen.WidgetVisibilityToggle;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link GradientWidgetSetting}
|
||||
*/
|
||||
@Deprecated(forRemoval = true, since = "2.3.0")
|
||||
public class RGBAColorWidgetSetting extends WidgetSettingOption<Integer> {
|
||||
public RGBAColorWidgetSetting(String id, Text name, int defaultR, int defaultG, int defaultB, int defaultAlpha) {
|
||||
super(id, name);
|
||||
this.r = defaultR;
|
||||
this.g = defaultG;
|
||||
this.b = defaultB;
|
||||
this.a = defaultAlpha;
|
||||
}
|
||||
|
||||
private int r;
|
||||
private int g;
|
||||
private int b;
|
||||
private int a;
|
||||
|
||||
@Override
|
||||
public JsonElement saveState() {
|
||||
return new JsonPrimitive(getColor());
|
||||
}
|
||||
|
||||
public int getColor(){
|
||||
return a << 24 | r << 16 | g << 8 | b;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Integer getValue(){
|
||||
return getColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadState(JsonElement state) {
|
||||
if (state.isJsonPrimitive() && state.getAsJsonPrimitive().isNumber()){
|
||||
final Color color = new Color(state.getAsJsonPrimitive().getAsInt(), true);
|
||||
this.r = color.getRed();
|
||||
this.g = color.getGreen();
|
||||
this.b = color.getBlue();
|
||||
this.a = color.getAlpha();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth() {
|
||||
return 72;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return 24;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
|
||||
context.fill(
|
||||
getX(),
|
||||
getY(),
|
||||
getX() + getWidth(),
|
||||
getY() + getHeight(),
|
||||
getColor()
|
||||
);
|
||||
context.drawHorizontalLine(getX(), getX()+getWidth(), getY(), getColor() | 0xff_00_00_00);
|
||||
context.drawHorizontalLine(getX(), getX()+getWidth(), getY()+getHeight(), getColor() | 0xff_00_00_00);
|
||||
context.drawVerticalLine(getX(), getY(), getY() + getHeight(), getColor() | 0xff_00_00_00);
|
||||
context.drawVerticalLine(getX() + getWidth(), getY(), getY() + getHeight(), getColor() | 0xff_00_00_00);
|
||||
|
||||
String colorText = "#" + toHexString();
|
||||
int width = textRenderer.getWidth(colorText);
|
||||
context.drawText(
|
||||
textRenderer,
|
||||
colorText,
|
||||
getX() + (getWidth() / 2 - (width / 2)),
|
||||
getY() + (getHeight() / 2 - 4),
|
||||
0xff_ff_ff_ff,
|
||||
true
|
||||
);
|
||||
|
||||
if (this.isHovered(mouseX, mouseY)){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
}
|
||||
}
|
||||
|
||||
private String toHexSingle(int comp){
|
||||
String s = Integer.toHexString(comp);
|
||||
return "0".repeat(2 - s.length()) + s;
|
||||
}
|
||||
|
||||
public String toHexString() {
|
||||
return toHexSingle(r) + toHexSingle(g) + toHexSingle(b) + toHexSingle(a);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
MinecraftClient client = MinecraftClient.getInstance();
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_ON);
|
||||
client.setScreen(
|
||||
new ChangeScreen(client.currentScreen, (int) client.mouse.getScaledX(client.getWindow()), (int) client.mouse.getScaledY(client.getWindow()))
|
||||
);
|
||||
return true;
|
||||
}
|
||||
|
||||
public class ChangeScreen extends Screen implements WidgetVisibilityToggle {
|
||||
|
||||
private final Screen parent;
|
||||
private int x;
|
||||
private int y;
|
||||
|
||||
protected ChangeScreen(Screen parent, int x, int y) {
|
||||
super(Text.empty());
|
||||
this.parent = parent;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
private static final int PADDING = 16;
|
||||
private static final int BAR_WIDTH = 18;
|
||||
private static final int BAR_HEIGHT = 127 + 20;
|
||||
|
||||
private static final int RECT_WIDTH = 5 * PADDING + 4 * BAR_WIDTH;
|
||||
private static final int RECT_HEIGHT = 2 * PADDING + BAR_HEIGHT;
|
||||
|
||||
@Override
|
||||
protected void init() {
|
||||
super.init();
|
||||
if (y + RECT_HEIGHT > height){
|
||||
y = height - RECT_HEIGHT;
|
||||
}
|
||||
if (x + RECT_WIDTH > width){
|
||||
x = width - RECT_WIDTH;
|
||||
}
|
||||
// Color components
|
||||
// Red color
|
||||
addDrawableChild(new ColorBar(
|
||||
x + PADDING,
|
||||
y + PADDING,
|
||||
BAR_WIDTH,
|
||||
BAR_HEIGHT,
|
||||
0
|
||||
));
|
||||
// Green color
|
||||
addDrawableChild(new ColorBar(
|
||||
x + 2* PADDING + BAR_WIDTH,
|
||||
y + PADDING,
|
||||
BAR_WIDTH,
|
||||
BAR_HEIGHT,
|
||||
1
|
||||
));
|
||||
// Blue color
|
||||
addDrawableChild(new ColorBar(
|
||||
x + 3* PADDING + 2* BAR_WIDTH,
|
||||
y + PADDING,
|
||||
BAR_WIDTH,
|
||||
BAR_HEIGHT,
|
||||
2
|
||||
));
|
||||
// Alpha
|
||||
addDrawableChild(new ColorBar(
|
||||
x + 4* PADDING + 3* BAR_WIDTH,
|
||||
y + PADDING,
|
||||
BAR_WIDTH,
|
||||
BAR_HEIGHT,
|
||||
3
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
parent.render(context, 0, 0, deltaTicks);
|
||||
context.fill(x, y, x+ RECT_WIDTH, y+ RECT_HEIGHT,0xc0_00_00_00);
|
||||
context.drawStrokedRectangle(x, y, RECT_WIDTH, RECT_HEIGHT, 0x67_ff_ff_ff);
|
||||
super.render(context, mouseX, mouseY, deltaTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
client.setScreen(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
if (click.x() < x || click.y() < y || click.x() > x + RECT_WIDTH || click.y() > y + RECT_HEIGHT){
|
||||
close();
|
||||
WidgetUtils.playSound(SoundEvents.BLOCK_COPPER_BULB_TURN_OFF);
|
||||
return false;
|
||||
}
|
||||
return super.mouseClicked(click, doubled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRenderWidgets() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public class ColorBar extends ClickableWidget {
|
||||
|
||||
private final int component;
|
||||
|
||||
public ColorBar(int x, int y, int width, int height, int component) {
|
||||
super(x, y, width, height, Text.empty());
|
||||
this.component = component;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) {
|
||||
if (isHovered()){
|
||||
setValue((int) (getValue() + verticalAmount * 2));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getValue(){
|
||||
return switch (component){
|
||||
case 0 -> RGBAColorWidgetSetting.this.r; // Red
|
||||
case 1 -> RGBAColorWidgetSetting.this.g; // Green
|
||||
case 2 -> RGBAColorWidgetSetting.this.b; // Blue
|
||||
case 3 -> RGBAColorWidgetSetting.this.a; // Alpha
|
||||
default -> throw new IllegalStateException("Component out of range: " + component);
|
||||
};
|
||||
}
|
||||
|
||||
public void setValue(int val){
|
||||
val = MathHelper.clamp(val, 0, 255);
|
||||
switch (component){
|
||||
case 0 -> RGBAColorWidgetSetting.this.r = val; // Red
|
||||
case 1 -> RGBAColorWidgetSetting.this.g = val; // Green
|
||||
case 2 -> RGBAColorWidgetSetting.this.b = val; // Blue
|
||||
case 3 -> RGBAColorWidgetSetting.this.a = val; // Alpha
|
||||
default -> throw new IllegalStateException("Component out of range: " + component);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
context.fillGradient(
|
||||
getX() + 2,
|
||||
getY() + 10,
|
||||
getX() + getWidth() - 2,
|
||||
getY() + getHeight() - 10,
|
||||
topColor(),
|
||||
bottomColor()
|
||||
);
|
||||
context.drawHorizontalLine(
|
||||
getX(),
|
||||
getX() + getWidth() - 1,
|
||||
getY() + 10 + (255 - getValue()) / 2,
|
||||
0xffffffff
|
||||
);
|
||||
{
|
||||
String text = ""+getValue();
|
||||
int textWidth = textRenderer.getWidth(text);
|
||||
context.drawText(textRenderer, text, getX() + (getWidth() / 2 - textWidth / 2), getY() - 2, 0xffffffff, true);
|
||||
}
|
||||
{
|
||||
String text = componentLabel();
|
||||
int textWidth = textRenderer.getWidth(text);
|
||||
context.drawText(textRenderer, text, getX() + (getWidth() / 2 - textWidth / 2), getY() + 142, 0xffffffff, true);
|
||||
}
|
||||
if (isHovered()){
|
||||
context.setCursor(StandardCursors.RESIZE_NS);
|
||||
}
|
||||
}
|
||||
|
||||
private String componentLabel() {
|
||||
return switch (component){
|
||||
case 0 -> "R"; // Red
|
||||
case 1 -> "G"; // Green
|
||||
case 2 -> "B"; // Blue
|
||||
case 3 -> "A"; // Alpha
|
||||
default -> throw new IllegalStateException("Component out of range: " + component);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
return this.mouseDragged(click, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(Click click, double offsetX, double offsetY) {
|
||||
if (isHovered()){
|
||||
double pos = click.y() - this.getY() - 10;
|
||||
int val = (int) (255 - pos * 2);
|
||||
setValue(val);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private int componentMask(){
|
||||
return switch (component){
|
||||
case 0 -> 0x00_ff_00_00; // Red
|
||||
case 1 -> 0x00_00_ff_00; // Green
|
||||
case 2 -> 0x00_00_00_ff; // Blue
|
||||
case 3 -> 0xff_00_00_00; // Alpha
|
||||
default -> throw new IllegalStateException("Component out of range: " + component);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
if (input.isUp()) {
|
||||
setValue(getValue() + 1);
|
||||
return true;
|
||||
} else if (input.isDown()) {
|
||||
setValue(getValue() - 1);
|
||||
return true;
|
||||
} else {
|
||||
return super.keyPressed(input);
|
||||
}
|
||||
}
|
||||
|
||||
private int bottomColor() {
|
||||
return RGBAColorWidgetSetting.this.getColor() & ~componentMask();
|
||||
}
|
||||
|
||||
private int topColor() {
|
||||
return RGBAColorWidgetSetting.this.getColor() | componentMask();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendClickableNarrations(NarrationMessageBuilder builder) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
-25
@@ -3,20 +3,21 @@ package de.shiewk.widgets.widgets.settings;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import de.shiewk.widgets.WidgetsMod;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||
import net.minecraft.client.input.CharInput;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.components.EditBox;
|
||||
import net.minecraft.client.input.CharacterEvent;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
public class TextFieldWidgetSettingOption extends WidgetSettingOption<String> {
|
||||
|
||||
private TextField textField = null;
|
||||
private final Text initialValue;
|
||||
private final Text placeholder;
|
||||
private final Component initialValue;
|
||||
private final Component placeholder;
|
||||
private final boolean trim;
|
||||
private final int maxLength;
|
||||
private String value = "";
|
||||
@@ -25,11 +26,11 @@ public class TextFieldWidgetSettingOption extends WidgetSettingOption<String> {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public class TextField extends TextFieldWidget {
|
||||
public class TextField extends EditBox {
|
||||
|
||||
public TextField(TextRenderer textRenderer, int width, int height, Text text) {
|
||||
public TextField(Font textRenderer, int width, int height, Component text) {
|
||||
super(textRenderer, width, height, text);
|
||||
this.setChangedListener(value -> TextFieldWidgetSettingOption.this.setValue(TextFieldWidgetSettingOption.this.trim ? value.trim() : value));
|
||||
this.setResponder(value -> TextFieldWidgetSettingOption.this.setValue(TextFieldWidgetSettingOption.this.trim ? value.trim() : value));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,7 +39,7 @@ public class TextFieldWidgetSettingOption extends WidgetSettingOption<String> {
|
||||
}
|
||||
}
|
||||
|
||||
public TextFieldWidgetSettingOption(String id, Text name, Text initialValue, Text placeholder, boolean trim, int maxLength) {
|
||||
public TextFieldWidgetSettingOption(String id, Component name, Component initialValue, Component placeholder, boolean trim, int maxLength) {
|
||||
super(id, name);
|
||||
this.initialValue = initialValue;
|
||||
this.placeholder = placeholder;
|
||||
@@ -48,10 +49,10 @@ public class TextFieldWidgetSettingOption extends WidgetSettingOption<String> {
|
||||
|
||||
private void initializeTextField() {
|
||||
if (textField != null) return;
|
||||
textField = new TextField(MinecraftClient.getInstance().textRenderer, this.getWidth(), this.getHeight(), Text.empty());
|
||||
textField.setPlaceholder(placeholder);
|
||||
textField = new TextField(Minecraft.getInstance().font, this.getWidth(), this.getHeight(), Component.empty());
|
||||
textField.setHint(placeholder);
|
||||
textField.setMaxLength(maxLength);
|
||||
textField.setText(value.isEmpty() ? initialValue.getString() : value);
|
||||
textField.setValue(value.isEmpty() ? initialValue.getString() : value);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -67,7 +68,7 @@ public class TextFieldWidgetSettingOption extends WidgetSettingOption<String> {
|
||||
@Override
|
||||
public void loadState(JsonElement state) {
|
||||
if (state.isJsonPrimitive() && state.getAsJsonPrimitive().isString()){
|
||||
if (textField != null) textField.setText(state.getAsString());
|
||||
if (textField != null) textField.setValue(state.getAsString());
|
||||
this.value = state.getAsString();
|
||||
} else {
|
||||
WidgetsMod.LOGGER.warn("Failed to load text field widget setting option for state {}", state);
|
||||
@@ -89,33 +90,33 @@ public class TextFieldWidgetSettingOption extends WidgetSettingOption<String> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
public void extractRenderState(@NonNull GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
initializeTextField();
|
||||
textField.render(context, mouseX, mouseY, delta);
|
||||
textField.extractRenderState(context, mouseX, mouseY, delta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
return isFocused() && textField.mouseClicked(click, doubled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(Click click) {
|
||||
public boolean mouseReleased(MouseButtonEvent click) {
|
||||
return isFocused() && textField.mouseReleased(click);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean charTyped(CharInput input) {
|
||||
public boolean charTyped(CharacterEvent input) {
|
||||
return isFocused() && textField.charTyped(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
public boolean keyPressed(KeyEvent input) {
|
||||
return isFocused() && textField.keyPressed(input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyReleased(KeyInput input) {
|
||||
public boolean keyReleased(KeyEvent input) {
|
||||
return isFocused() && textField.keyReleased(input);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@ package de.shiewk.widgets.widgets.settings;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.mojang.blaze3d.platform.cursor.CursorTypes;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.cursor.StandardCursors;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.*;
|
||||
@@ -19,7 +19,7 @@ public class ToggleWidgetSetting extends WidgetSettingOption<Boolean> {
|
||||
private boolean value;
|
||||
private long toggleTime = 0;
|
||||
|
||||
public ToggleWidgetSetting(String id, Text name, boolean defaultValue) {
|
||||
public ToggleWidgetSetting(String id, Component name, boolean defaultValue) {
|
||||
super(id, name);
|
||||
this.value = defaultValue;
|
||||
}
|
||||
@@ -47,11 +47,11 @@ public class ToggleWidgetSetting extends WidgetSettingOption<Boolean> {
|
||||
COLOR_DISABLED_THUMB = new Color(255, 200, 200, 255).getRGB();
|
||||
|
||||
@Override
|
||||
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
|
||||
public void extractRenderState(GuiGraphicsExtractor context, int mouseX, int mouseY, float delta) {
|
||||
int col = value ? COLOR_ENABLED : COLOR_DISABLED;
|
||||
int thumb = value ? COLOR_ENABLED_THUMB : COLOR_DISABLED_THUMB;
|
||||
int thumbLoc = (Util.getMeasuringTimeNano() - toggleTime) < 300000000f ?
|
||||
(int) (getX() + MathHelper.lerp(WidgetUtils.computeEasing((Util.getMeasuringTimeNano() - toggleTime) / 300000000f),
|
||||
int thumbLoc = (Util.getNanos() - toggleTime) < 300000000f ?
|
||||
(int) (getX() + Mth.lerp(WidgetUtils.computeEasing((Util.getNanos() - toggleTime) / 300000000f),
|
||||
value ? 2 : getWidth() - 4 - 12,
|
||||
value ? getWidth() - 4 - 12 : 4))
|
||||
: value ? getX() + getWidth() - 4 - 12 : getX() + 4;
|
||||
@@ -59,20 +59,20 @@ public class ToggleWidgetSetting extends WidgetSettingOption<Boolean> {
|
||||
context.fill(thumbLoc, getY() + 4, thumbLoc + 12, getY() + getHeight() - 4, thumb);
|
||||
|
||||
if (this.isHovered(mouseX, mouseY)){
|
||||
context.setCursor(StandardCursors.POINTING_HAND);
|
||||
context.requestCursor(CursorTypes.POINTING_HAND);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
toggle();
|
||||
return true;
|
||||
}
|
||||
|
||||
public void toggle(){
|
||||
this.value = !value;
|
||||
WidgetUtils.playSound(value ? SoundEvents.BLOCK_COPPER_BULB_TURN_ON : SoundEvents.BLOCK_COPPER_BULB_TURN_OFF);
|
||||
this.toggleTime = Util.getMeasuringTimeNano();
|
||||
WidgetUtils.playSound(value ? SoundEvents.COPPER_BULB_TURN_ON : SoundEvents.COPPER_BULB_TURN_OFF);
|
||||
this.toggleTime = Util.getNanos();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -2,28 +2,28 @@ package de.shiewk.widgets.widgets.settings;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import de.shiewk.widgets.utils.WidgetUtils;
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.Drawable;
|
||||
import net.minecraft.client.gui.widget.ClickableWidget;
|
||||
import net.minecraft.client.gui.widget.Widget;
|
||||
import net.minecraft.client.input.CharInput;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
import java.util.function.BooleanSupplier;
|
||||
import java.util.function.Consumer;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.client.gui.components.Renderable;
|
||||
import net.minecraft.client.gui.layouts.LayoutElement;
|
||||
import net.minecraft.client.input.CharacterEvent;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.input.MouseButtonEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
public abstract class WidgetSettingOption<T> implements Drawable, Widget {
|
||||
public abstract class WidgetSettingOption<T> implements Renderable, LayoutElement {
|
||||
|
||||
private final String id;
|
||||
private final Text name;
|
||||
private final Component name;
|
||||
private int x = 0;
|
||||
private int y = 0;
|
||||
private int maxRenderWidth = 200; // this will always be changed before rendering
|
||||
private boolean focused = false;
|
||||
private BooleanSupplier shouldShow = WidgetUtils.TRUE_SUPPLIER;
|
||||
|
||||
protected WidgetSettingOption(String id, Text name) {
|
||||
protected WidgetSettingOption(String id, Component name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
@@ -40,7 +40,7 @@ public abstract class WidgetSettingOption<T> implements Drawable, Widget {
|
||||
return id;
|
||||
}
|
||||
|
||||
public final Text getName() {
|
||||
public final Component getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@@ -48,23 +48,23 @@ public abstract class WidgetSettingOption<T> implements Drawable, Widget {
|
||||
public abstract void loadState(JsonElement state);
|
||||
public abstract T getValue();
|
||||
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
public boolean mouseClicked(MouseButtonEvent click, boolean doubled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean mouseReleased(Click click){
|
||||
public boolean mouseReleased(MouseButtonEvent click){
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean charTyped(CharInput input) {
|
||||
public boolean charTyped(CharacterEvent input) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
public boolean keyPressed(KeyEvent input) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean keyReleased(KeyInput input) {
|
||||
public boolean keyReleased(KeyEvent input) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ public abstract class WidgetSettingOption<T> implements Drawable, Widget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void forEachChild(Consumer<ClickableWidget> consumer) {
|
||||
public final void visitWidgets(@NonNull Consumer<AbstractWidget> consumer) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
},
|
||||
"license": "LGPL-3.0-only",
|
||||
"icon": "assets/widgets/icon.png",
|
||||
"accessWidener": "widgets.accesswidener",
|
||||
"accessWidener": "widgets.classtweaker",
|
||||
"environment": "client",
|
||||
"entrypoints": {
|
||||
"client": [
|
||||
@@ -29,7 +29,7 @@
|
||||
],
|
||||
"depends": {
|
||||
"fabricloader": ">=${loader_version}",
|
||||
"fabric": "*",
|
||||
"fabric-api": "*",
|
||||
"minecraft": "~${minecraft_version}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
accessWidener v2 named
|
||||
|
||||
accessible field net/minecraft/client/network/ClientPlayNetworkHandler pingMeasurer Lnet/minecraft/client/network/PingMeasurer;
|
||||
accessible field net/minecraft/client/network/PingMeasurer log Lnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;
|
||||
@@ -0,0 +1,4 @@
|
||||
classTweaker v1 official
|
||||
|
||||
accessible field net/minecraft/client/multiplayer/ClientPacketListener pingDebugMonitor Lnet/minecraft/client/multiplayer/PingDebugMonitor;
|
||||
accessible field net/minecraft/client/multiplayer/PingDebugMonitor delayTimer Lnet/minecraft/util/debugchart/LocalSampleLogger;
|
||||
Reference in New Issue
Block a user