mirror of
https://github.com/Shiewk/Widgets.git
synced 2026-04-28 11:34:17 +02:00
1.21.5 backport
This commit is contained in:
@@ -7,7 +7,9 @@ import de.shiewk.widgets.client.screen.WidgetConfigScreen;
|
||||
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.fabricmc.fabric.api.client.rendering.v1.HudLayerRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.IdentifiedLayer;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.LayeredDrawerWrapper;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
@@ -17,16 +19,17 @@ import net.minecraft.util.Util;
|
||||
import net.minecraft.util.profiler.Profiler;
|
||||
import net.minecraft.util.profiler.Profilers;
|
||||
|
||||
public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecycleEvents.ClientStarted {
|
||||
public class WidgetRenderer implements ClientTickEvents.StartTick, ClientLifecycleEvents.ClientStarted, HudLayerRegistrationCallback {
|
||||
|
||||
public static final Identifier LAYER_ID = Identifier.of(WidgetsMod.MOD_ID, "widgets-hud-layer");
|
||||
private static MinecraftClient client;
|
||||
|
||||
public WidgetRenderer(){
|
||||
HudElementRegistry.addLast(
|
||||
@Override
|
||||
public void register(LayeredDrawerWrapper layeredDrawerWrapper) {
|
||||
layeredDrawerWrapper.addLayer(IdentifiedLayer.of(
|
||||
LAYER_ID,
|
||||
this::renderWidgets
|
||||
);
|
||||
));
|
||||
}
|
||||
|
||||
public void renderWidgets(DrawContext drawContext, RenderTickCounter tickCounter) {
|
||||
|
||||
@@ -10,6 +10,7 @@ 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.rendering.v1.HudLayerRegistrationCallback;
|
||||
import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
@@ -26,6 +27,7 @@ public class WidgetsModClient implements ClientModInitializer {
|
||||
WidgetRenderer widgetRenderer = new WidgetRenderer();
|
||||
ClientTickEvents.START_CLIENT_TICK.register(widgetRenderer);
|
||||
ClientLifecycleEvents.CLIENT_STARTED.register(widgetRenderer);
|
||||
HudLayerRegistrationCallback.EVENT.register(widgetRenderer);
|
||||
|
||||
// manage widgets keybind
|
||||
configKeyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
|
||||
|
||||
@@ -3,9 +3,9 @@ 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.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
public abstract class AnimatedScreen extends Screen {
|
||||
protected final Screen parent;
|
||||
@@ -23,17 +23,18 @@ public abstract class AnimatedScreen extends Screen {
|
||||
final boolean shouldAnimate = timeMs < animationDurationMs;
|
||||
if (shouldAnimate){
|
||||
double translation = WidgetUtils.computeEasing(timeMs / animationDurationMs) * this.width;
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
MatrixStack stack = context.getMatrices();
|
||||
stack.push();
|
||||
|
||||
stack.translate((float) -translation, 0, stack);
|
||||
stack.translate((float) -translation, 0, 0);
|
||||
parent.render(context, -67, -67, delta);
|
||||
stack.translate(this.width, 0, stack);
|
||||
stack.translate(this.width, 0, 0);
|
||||
mouseX -= (int) translation;
|
||||
}
|
||||
super.render(context, mouseX, mouseY, delta);
|
||||
this.renderScreenContents(context, mouseX, mouseY, delta);
|
||||
if (shouldAnimate){
|
||||
context.getMatrices().popMatrix();
|
||||
context.getMatrices().pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,9 +11,9 @@ 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.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
@@ -93,15 +93,16 @@ public class WidgetConfigScreen extends Screen {
|
||||
assert client != null;
|
||||
final double time = getScreenTimeMs();
|
||||
if (time < 400){
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
MatrixStack stack = context.getMatrices();
|
||||
stack.push();
|
||||
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);
|
||||
stack.translate((float) (width / 2d - (width * v / 2d)), (float) (height / 2d - (height * v / 2d)), 0);
|
||||
stack.scale(v, v, 1);
|
||||
}
|
||||
super.render(context, mouseX, mouseY, delta);
|
||||
|
||||
if (time < 400){
|
||||
context.getMatrices().popMatrix();
|
||||
context.getMatrices().pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ 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.widget.ClickableWidget;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
public class ScaledTextWidget extends ClickableWidget {
|
||||
|
||||
@@ -25,10 +25,11 @@ public class ScaledTextWidget extends ClickableWidget {
|
||||
|
||||
@Override
|
||||
protected void renderWidget(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
|
||||
Matrix3x2fStack stack = context.getMatrices().pushMatrix();
|
||||
stack.scale(scale);
|
||||
MatrixStack stack = context.getMatrices();
|
||||
stack.push();
|
||||
stack.scale(scale, scale, 1);
|
||||
context.drawText(textRenderer, getMessage(), (int) (getX() / scale), (int) (getY() / scale), 0xffffffff, true);
|
||||
stack.popMatrix();
|
||||
stack.pop();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,9 +12,9 @@ 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.client.util.math.MatrixStack;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.text.Text;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -90,12 +90,13 @@ public class WidgetListWidget extends ScrollableWidget {
|
||||
@Override
|
||||
protected void renderWidget(DrawContext 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);
|
||||
MatrixStack stack = context.getMatrices();
|
||||
stack.push();
|
||||
stack.translate(0, (float) -getScrollY(), 0);
|
||||
for (WidgetWidget element : elements) {
|
||||
element.render(context, mouseX, (int) (mouseY + getScrollY()), delta);
|
||||
}
|
||||
stack.popMatrix();
|
||||
stack.pop();
|
||||
context.disableScissor();
|
||||
}
|
||||
|
||||
|
||||
+9
-8
@@ -6,8 +6,8 @@ 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.widget.ScrollableWidget;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
@@ -52,13 +52,14 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
@Override
|
||||
protected void renderWidget(DrawContext 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);
|
||||
matrices.pushMatrix();
|
||||
matrices.scale(2, 2, matrices);
|
||||
matrices.translate(0, (float) -getScrollY(), matrices);
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
matrices.push();
|
||||
matrices.translate(0, (float) -getScrollY(), 0);
|
||||
matrices.push();
|
||||
matrices.scale(2, 2, 1);
|
||||
matrices.translate(0, (float) -getScrollY(), 0);
|
||||
context.drawText(textRenderer, widget.getName(), this.width / 4 - textRenderer.getWidth(widget.getName()) / 2, this.height / 100, COLOR_FG, true);
|
||||
matrices.popMatrix();
|
||||
matrices.pop();
|
||||
int y = textRenderer.fontHeight * 2 + this.height / 50 + 5;
|
||||
for (WidgetSettingOption setting : widget.getSettings().getCustomSettings()) {
|
||||
if (!setting.shouldShow()) continue;
|
||||
@@ -77,7 +78,7 @@ public class WidgetSettingsEditWidget extends ScrollableWidget {
|
||||
y += 5;
|
||||
}
|
||||
this.contentsHeight = y;
|
||||
matrices.popMatrix();
|
||||
matrices.pop();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,10 +8,10 @@ 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.widget.ClickableWidget;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Util;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Iterator;
|
||||
@@ -55,11 +55,12 @@ public class WidgetWidget extends ClickableWidget {
|
||||
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();
|
||||
stack.scale(2, 2, stack);
|
||||
MatrixStack stack = context.getMatrices();
|
||||
stack.push();
|
||||
stack.scale(2, 2, 1);
|
||||
int titleSize = textRenderer.getWidth(widget.getName());
|
||||
context.drawText(textRenderer, widget.getName(), getX() / 2 + getWidth() / 4 - titleSize / 2, getY() / 2 + 4, COLOR_FG, false);
|
||||
stack.popMatrix();
|
||||
stack.pop();
|
||||
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();
|
||||
|
||||
@@ -7,9 +7,9 @@ import de.shiewk.widgets.widgets.settings.RGBAColorWidgetSetting;
|
||||
import de.shiewk.widgets.widgets.settings.ToggleWidgetSetting;
|
||||
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.client.render.RenderLayer;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.text.Text;
|
||||
@@ -98,13 +98,13 @@ public class InventoryWidget extends ResizableWidget {
|
||||
|
||||
private void drawBackground(DrawContext 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.drawTexture(RenderLayer::getGuiTextured, 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.drawTexture(RenderLayer::getGuiTextured, 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.drawTexture(RenderLayer::getGuiTextured, TEXTURE_PACK_INVENTORY, posX, posY - 75, 0, 0, 256, 256, 256, 256);
|
||||
context.disableScissor();
|
||||
}
|
||||
case GRID -> {
|
||||
|
||||
@@ -6,9 +6,9 @@ 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.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Identifier;
|
||||
import org.joml.Matrix3x2fStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -30,13 +30,13 @@ public abstract class ResizableWidget extends ModWidget {
|
||||
@Override
|
||||
public final void render(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY) {
|
||||
if (size != 1f){
|
||||
Matrix3x2fStack matrices = context.getMatrices();
|
||||
matrices.pushMatrix();
|
||||
matrices.translate(-(size-1) * posX, -(size-1) * posY, matrices);
|
||||
matrices.scale(size, size, matrices);
|
||||
MatrixStack matrices = context.getMatrices();
|
||||
matrices.push();
|
||||
matrices.translate(-(size-1) * posX, -(size-1) * posY, 0);
|
||||
matrices.scale(size, size, 1);
|
||||
}
|
||||
this.renderScaled(context, measuringTimeNano, textRenderer, posX, posY);
|
||||
if (size != 1f) context.getMatrices().popMatrix();
|
||||
if (size != 1f) context.getMatrices().pop();
|
||||
}
|
||||
|
||||
public abstract void renderScaled(DrawContext context, long measuringTimeNano, TextRenderer textRenderer, int posX, int posY);
|
||||
|
||||
Reference in New Issue
Block a user