Skip to content
This repository has been archived by the owner on Oct 14, 2023. It is now read-only.

Commit

Permalink
添加基岩样式二次屏幕
Browse files Browse the repository at this point in the history
  • Loading branch information
CaaMoe committed Apr 27, 2023
1 parent f243f66 commit 24120a7
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.google.gson.JsonParser;
import moe.caa.fabric.quitconfirm.client.main.QuitConfirm;
import moe.caa.fabric.quitconfirm.client.screen.confirm.style.BaseStyle;
import moe.caa.fabric.quitconfirm.client.screen.confirm.style.BedrockStyle;
import moe.caa.fabric.quitconfirm.client.screen.confirm.style.ClassicStyle;

import java.io.IOException;
Expand Down Expand Up @@ -85,7 +86,7 @@ public <T extends Enum<T>> T nextEnum(Class<T> tClass, T value) {

public enum ConfirmScreenDisplayTypeEnum {
CLASSIC("经典", ClassicStyle::new),
BEDROCK("基岩", ClassicStyle::new);
BEDROCK("基岩", BedrockStyle::new);
public final String displayName;
public final Supplier<BaseStyle> baseStyleSupplier;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package moe.caa.fabric.quitconfirm.client.screen.confirm.style;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.render.*;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;

public abstract class BaseStyle extends DrawableHelper {

Expand All @@ -17,4 +20,20 @@ public abstract class BaseStyle extends DrawableHelper {

public abstract void render(MinecraftClient client, TextRenderer textRenderer, Screen screen, Text title, Text message,
MatrixStack matrices, int mouseX, int mouseY, float delta);

protected void renderBackground(int startX, int startY, int endX, int endY, Identifier identifier) {
int width = endX - startX;
int height = endY - startY;
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder = tessellator.getBuffer();
RenderSystem.setShader(GameRenderer::getPositionTexColorProgram);
RenderSystem.setShaderTexture(0, identifier);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
bufferBuilder.vertex(startX, endY, 0.0D).texture(0.0F, height / 32.0F).color(64, 64, 64, 255).next();
bufferBuilder.vertex(endX, endY, 0.0D).texture(width / 32.0F, height / 32.0F).color(64, 64, 64, 255).next();
bufferBuilder.vertex(endX, startY, 0.0D).texture(width / 32.0F, 0).color(64, 64, 64, 255).next();
bufferBuilder.vertex(startX, startY, 0.0D).texture(0.0F, 0).color(64, 64, 64, 255).next();
tessellator.draw();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package moe.caa.fabric.quitconfirm.client.screen.confirm.style;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.ScreenTexts;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;

import java.awt.*;

public class BedrockStyle extends BaseStyle {
private static final Identifier WINDOW_TEXTURE = new Identifier("quitconfirm", "textures/gui/bedrock/window.png");
private static final Identifier BACKGROUND = new Identifier("quitconfirm", "textures/gui/bedrock/background.png");

// 窗口宽度
private static final int windowWidth = 252;
// 窗口长度
private static final int windowHeight = 140;
// 按钮旁边距
private static final int buttonLRMargin = 20;
// 按钮下边距
private static final int buttonBMargin = 20;
// 按钮宽度
private static final int buttonWidth = 100;
// 按钮长度
private static final int buttonHeight = 20;
// 信息文本下边距
private static final int messageBMargin = 100;

@Override
public ButtonWidget generateConfirmButtons(Screen screen, ButtonWidget.PressAction onConfirm) {
return ButtonWidget.builder(ScreenTexts.YES, onConfirm)
.dimensions((screen.width - windowWidth) / 2 + windowWidth - buttonWidth - buttonLRMargin,
(screen.height - windowHeight) / 2 + windowHeight - buttonBMargin - buttonHeight,
buttonWidth, buttonHeight).build();
}

@Override
public ButtonWidget generateCancelButtons(Screen screen, ButtonWidget.PressAction onCancel) {
return ButtonWidget.builder(ScreenTexts.NO, onCancel)
.dimensions((screen.width - windowWidth) / 2 + buttonLRMargin,
(screen.height - windowHeight) / 2 + windowHeight - buttonBMargin - buttonHeight,
buttonWidth, buttonHeight).build();
}


@Override
public void render(MinecraftClient client, TextRenderer textRenderer, Screen screen, Text title, Text message,
MatrixStack matrices, int mouseX, int mouseY, float delta) {
drawBackground(client, screen, matrices);
drawWindow(textRenderer, title, matrices, (screen.width - windowWidth) / 2, (screen.height - windowHeight) / 2);
drawMessage(textRenderer, screen, message, matrices);
}

private void drawBackground(MinecraftClient client, Screen screen, MatrixStack matrices) {
if (client.world != null) {
fillGradient(matrices, 0, 0, screen.width, screen.height, -1072689136, -804253680);
} else {
screen.renderBackground(matrices);
DrawableHelper.fill(matrices, 0, 0, screen.width, screen.height, new Color(16, 16, 16, 179).getRGB());
}
}

private void drawWindow(TextRenderer textRenderer, Text title, MatrixStack matrices, int x, int y) {
renderBackground(x, y, x + windowWidth, y + windowHeight, BACKGROUND);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
RenderSystem.enableBlend();
RenderSystem.setShaderTexture(0, WINDOW_TEXTURE);
drawTexture(matrices, x, y, 0, 0, 252, 140);
textRenderer.draw(matrices, title, (float) (x + 8), (float) (y + 6), 4210752);
}


private void drawMessage(TextRenderer textRenderer, Screen screen, Text message, MatrixStack matrices) {
drawCenteredTextWithShadow(matrices, textRenderer, message,
screen.width / 2,
(screen.height - windowHeight) / 2 + windowHeight - messageBMargin,
10526880);
}
}

0 comments on commit 24120a7

Please sign in to comment.