Skip to content

Commit

Permalink
✨ Backport to 1.19.4.
Browse files Browse the repository at this point in the history
Signed-off-by: 秋雨落 <[email protected]>
  • Loading branch information
qyl27 committed Sep 16, 2023
1 parent b2f8c54 commit dd58ff3
Show file tree
Hide file tree
Showing 17 changed files with 86 additions and 74 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ Location(位置): `./config/nbtedit.json`
http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-mods/1286750-in-game-nbtedit-edit-mob-spawners-attributes-in

## Screenshots(使用截图)
![使用截图 #1](https://github.com/qyl27/NBTEdit/raw/1.20/img/2.png)
![使用截图 #2](https://github.com/qyl27/NBTEdit/raw/1.20/img/3.png)
![使用截图 #1](https://github.com/qyl27/NBTEdit/raw/1.19.4/img/2.png)
![使用截图 #2](https://github.com/qyl27/NBTEdit/raw/1.19.4/img/3.png)

## Common issues(常见问题)
- I was kicked when I tried to save my edit(在尝试保存时被服务器踢出):
Expand Down
36 changes: 19 additions & 17 deletions common/src/main/java/cx/rain/mc/nbtedit/gui/NBTEditGui.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import cx.rain.mc.nbtedit.NBTEdit;
import cx.rain.mc.nbtedit.gui.component.window.EditValueSubWindow;
import cx.rain.mc.nbtedit.gui.component.NBTNodeComponent;
Expand All @@ -16,7 +18,6 @@
import cx.rain.mc.nbtedit.utility.SortHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
Expand Down Expand Up @@ -629,7 +630,7 @@ public boolean onCharTyped(char character, int keyId) {
// </editor-fold>

// <editor-fold desc="Render.">
public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) {
public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) {
var prevMouseX = mouseX;
var prevMouseY = mouseY;

Expand All @@ -640,23 +641,23 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTi

for (var node : nodes) {
if (node.shouldRender(START_Y - 1, bottom)) {
node.render(graphics, prevMouseX, prevMouseY, partialTick);
node.render(poseStack, prevMouseX, prevMouseY, partialTick);
}
}

renderBackground(graphics);
renderBackground(poseStack);
for (var button : buttons) {
button.render(graphics, prevMouseX, prevMouseY, partialTick);
button.render(poseStack, prevMouseX, prevMouseY, partialTick);
}

renderScrollBar(graphics, prevMouseX, prevMouseY);
renderScrollBar(poseStack, prevMouseX, prevMouseY);

if (hasWindow()) {
getActiveWindow().render(graphics, mouseX, mouseY, partialTick);
getActiveWindow().render(poseStack, mouseX, mouseY, partialTick);
}
}

private void renderScrollBar(GuiGraphics graphics, int mouseX, int mouseY) {
private void renderScrollBar(PoseStack poseStack, int mouseX, int mouseY) {
if (heightDiff > 0) {
if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(),
InputConstants.MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS) { // XXX: bad implementation, it should use AbstractScrollWidget instead.
Expand Down Expand Up @@ -689,7 +690,7 @@ private void renderScrollBar(GuiGraphics graphics, int mouseX, int mouseY) {
yClick = -1;
}

graphics.fill(width - 20, START_Y - 1, width, bottom, Integer.MIN_VALUE);
fill(poseStack, width - 20, START_Y - 1, width, bottom, Integer.MIN_VALUE);

int length = (bottom - (START_Y - 1)) * (bottom - (START_Y - 1)) / getContentHeight();
if (length < 32) {
Expand All @@ -704,19 +705,20 @@ private void renderScrollBar(GuiGraphics graphics, int mouseX, int mouseY) {
y = START_Y - 1;
}

graphics.fillGradient(width - 20, y, width, y + length, 0x80ffffff, 0x80333333);
fillGradient(poseStack, width - 20, y, width, y + length, 0x80ffffff, 0x80333333);
}
}

private void renderBackground(GuiGraphics graphics) {
renderDirtBackground(graphics, 0, 0, width, START_Y - 1);
renderDirtBackground(graphics, 0, bottom, width, height);
private void renderBackground(PoseStack poseStack) {
renderDirtBackground(poseStack, 0, 0, width, START_Y - 1);
renderDirtBackground(poseStack, 0, bottom, width, height);
}

public void renderDirtBackground(GuiGraphics graphics, int xLoc, int yLoc, int width, int height) {
graphics.setColor(0.25F, 0.25F, 0.25F, 1.0F);
graphics.blit(Screen.BACKGROUND_LOCATION, xLoc, yLoc, width, height, 0.0F, 0.0F, width, height, 32, 32);
graphics.setColor(1.0F, 1.0F, 1.0F, 1.0F);
public void renderDirtBackground(PoseStack poseStack, int xLoc, int yLoc, int width, int height) {
RenderSystem.setShaderColor(0.25F, 0.25F, 0.25F, 1.0F);
RenderSystem.setShaderTexture(0, Screen.BACKGROUND_LOCATION);
blit(poseStack, xLoc, yLoc, width, height, 0.0F, 0.0F, width, height, 32, 32);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
}

// </editor-fold>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package cx.rain.mc.nbtedit.gui.component;

import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Button;

Expand All @@ -14,12 +13,12 @@ public interface IWidgetHolder {

void clearWidgets();

default void renderWidgets(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
default void renderWidgets(PoseStack poseStack, int mouseX, int mouseY, float partialTicks) {
for (var widget : getWidgets()) {
if (widget instanceof Button button) {
button.render(graphics, mouseX, mouseY, partialTicks);
button.render(poseStack, mouseX, mouseY, partialTicks);
} else {
widget.render(graphics, mouseX, mouseY, partialTicks);
widget.render(poseStack, mouseX, mouseY, partialTicks);
}
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
import cx.rain.mc.nbtedit.nbt.NBTTree;
import cx.rain.mc.nbtedit.nbt.NBTHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.narration.NarratedElementType;
import net.minecraft.client.gui.narration.NarrationElementOutput;
Expand Down Expand Up @@ -91,14 +89,14 @@ protected void updateWidgetNarration(NarrationElementOutput narration) {
}

@Override
public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTick) {
var isSelected = gui.getFocused() == node;
var isTextHover = isMouseInsideText(mouseX, mouseY);
var isSpoilerHover = isMouseInsideSpoiler(mouseX, mouseY);
var color = isSelected ? 0xff : isTextHover ? 16777120 : (node.hasParent()) ? 14737632 : -6250336;

if (isSelected) {
graphics.fill(getX() + 11, getY(), getX() + width, getY() + height, Integer.MIN_VALUE);
fill(poseStack, getX() + 11, getY(), getX() + width, getY() + height, Integer.MIN_VALUE);
}

var w = 18;
Expand All @@ -119,10 +117,12 @@ public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float par
}

if (node.hasChild()) {
graphics.blit(WIDGET_TEXTURE, getX() - 9, getY(), 9, height, u, 16, w, h, 512, 512);
RenderSystem.setShaderTexture(0, WIDGET_TEXTURE);
blit(poseStack, getX() - 9, getY(), 9, height, u, 16, w, h, 512, 512);
}

graphics.blit(WIDGET_TEXTURE, getX() + 1, getY(), 9, height, (node.getTag().getId() - 1) * 16, 0, 16, 16, 512, 512);
graphics.drawString(getMinecraft().font, text, getX() + 11, getY() + (this.height - 8) / 2, color);
RenderSystem.setShaderTexture(0, WIDGET_TEXTURE);
blit(poseStack, getX() + 1, getY(), 9, height, (node.getTag().getId() - 1) * 16, 0, 16, 16, 512, 512);
getMinecraft().font.draw(poseStack, text, getX() + 11, getY() + (this.height - 8) / 2, color);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package cx.rain.mc.nbtedit.gui.component.button;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import cx.rain.mc.nbtedit.NBTEdit;
import cx.rain.mc.nbtedit.gui.NBTEditGui;
import cx.rain.mc.nbtedit.nbt.NBTHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
Expand Down Expand Up @@ -40,9 +41,9 @@ public byte getButtonId() {
}

@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) {
public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) {
if (isMouseInside(mouseX, mouseY)) { // checks if the mouse is over the button
graphics.fill(getX(), getY(), getX() + width, getY() + height, 0x80ffffff); // draw a grayish background
fill(poseStack, getX(), getY(), getX() + width, getY() + height, 0x80ffffff); // draw a grayish background
if (hoverTime == -1) {
hoverTime = System.currentTimeMillis();
}
Expand All @@ -51,11 +52,19 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTi
}

if (isActive()) {
graphics.blit(BUTTONS_TEXTURE, getX(), getY(), width, height, (buttonId - 1) * 16, 0, 16, 16, 512, 512); //Draw the texture
RenderSystem.setShaderTexture(0, BUTTONS_TEXTURE);
blit(poseStack, getX(), getY(), width, height, (buttonId - 1) * 16, 0, 16, 16, 512, 512); //Draw the texture
}

if (hoverTime != -1 && System.currentTimeMillis() - hoverTime > 300) {
graphics.renderTooltip(getMinecraft().font, getMessage(), mouseX, mouseY);
renderTooltip(poseStack, getMessage(), mouseX, mouseY);
}
}

private void renderTooltip(PoseStack poseStack, Component message, int mouseX, int mouseY) {
var font = getMinecraft().font;
var width = font.width(message);
fill(poseStack, mouseX + 4, mouseY + 7, mouseX + 5 + width, mouseY + 17, 0xff000000);
font.draw(poseStack, message, mouseX + 5, mouseY + 8, 0xffffff);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
import cx.rain.mc.nbtedit.NBTEdit;
import cx.rain.mc.nbtedit.utility.Constants;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
Expand All @@ -29,9 +27,9 @@ protected Minecraft getMinecraft() {
}

@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) {
public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) {
if (isMouseInside(mouseX, mouseY)) {
graphics.fill(getX(), getY(), getX() + width, getY() + height, 0x80ffffff);
fill(poseStack, getX(), getY(), getX() + width, getY() + height, 0x80ffffff);
}

if (isActive()) {
Expand All @@ -40,7 +38,8 @@ public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTi
GlStateManager._clearColor(0.5F, 0.5F, 0.5F, 1.0F);
}

graphics.blit(WIDGET_TEXTURE, getX(), getY(), buttonId * width, 27, width, height);
RenderSystem.setShaderTexture(0, WIDGET_TEXTURE);
blit(poseStack, getX(), getY(), buttonId * width, 27, width, height);
}

public boolean isMouseInside(int mouseX, int mouseY) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package cx.rain.mc.nbtedit.gui.component.window;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import cx.rain.mc.nbtedit.NBTEdit;
import cx.rain.mc.nbtedit.gui.NBTEditGui;
import cx.rain.mc.nbtedit.gui.component.IWidgetHolder;
Expand All @@ -9,7 +11,6 @@
import cx.rain.mc.nbtedit.nbt.NBTHelper;
import cx.rain.mc.nbtedit.nbt.ParseHelper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.EditBox;
Expand Down Expand Up @@ -146,24 +147,25 @@ protected Minecraft getMinecraft() {
}

@Override
public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
graphics.blit(WINDOW_TEXTURE, getX(), getY(), 0, 0, width, height);
public void renderWidget(PoseStack poseStack, int mouseX, int mouseY, float partialTick) {
RenderSystem.setShaderTexture(0, WINDOW_TEXTURE);
blit(poseStack, getX(), getY(), 0, 0, width, height);

if (!canEditName) {
graphics.fill(getX() + 42, getY() + 15, getX() + 169, getY() + 31, 0x80000000);
fill(poseStack, getX() + 42, getY() + 15, getX() + 169, getY() + 31, 0x80000000);
}

if (!canEditValue) {
graphics.fill(getX() + 42, getY() + 41, getX() + 169, getY() + 57, 0x80000000);
fill(poseStack, getX() + 42, getY() + 41, getX() + 169, getY() + 57, 0x80000000);
}

renderWidgets(graphics, mouseX, mouseY, partialTicks);
renderWidgets(poseStack, mouseX, mouseY, partialTick);

if (nameError != null) {
graphics.drawCenteredString(getMinecraft().font, nameError, getX() + width / 2, getY() + 4, 0xFF0000);
getMinecraft().font.draw(poseStack, nameError, getX() + width / 2, getY() + 4, 0xFF0000);
}
if (valueError != null) {
graphics.drawCenteredString(getMinecraft().font, nameError, getX() + width / 2, getY() + 32, 0xFF0000);
getMinecraft().font.draw(poseStack, nameError, getX() + width / 2, getY() + 32, 0xFF0000);
}

// Todo: newline and color button.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import cx.rain.mc.nbtedit.nbt.NBTTree;
import cx.rain.mc.nbtedit.utility.Constants;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.BlockPos;
Expand Down Expand Up @@ -91,15 +90,17 @@ public void tick() {
}

@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) {
renderBackground(graphics);
gui.render(graphics, mouseX, mouseY, partialTick);
graphics.drawCenteredString(getMinecraft().font, title, this.width / 2, 5, 16777215);
public void render(PoseStack poseStack, int mouseX, int mouseY, float partialTick) {
renderBackground(poseStack);
gui.render(poseStack, mouseX, mouseY, partialTick);

var width = font.width(title);
font.draw(poseStack, title, this.width / 2 - width / 2, 5, 16777215);

if (gui.hasWindow()) {
super.render(graphics, mouseX, mouseY, partialTick);
super.render(poseStack, mouseX, mouseY, partialTick);
} else {
super.render(graphics, -1, -1, partialTick);
super.render(poseStack, -1, -1, partialTick);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public void serverOpenClientGui(ServerPlayer player, BlockPos pos) {
if (NBTEdit.getInstance().getPermission().hasPermission(player)) {
NBTEdit.getInstance().getLogger().info("Player " + player.getName().getString() +
" is editing block at XYZ " + pos.getX() + " " + pos.getY() + " " + pos.getZ() + ".");
var blockEntity = player.serverLevel().getBlockEntity(pos);
var blockEntity = player.getLevel().getBlockEntity(pos);
if (blockEntity != null) {
var tag = blockEntity.saveWithFullMetadata();
ServerPlayNetworking.send(player, new S2COpenBlockEntityEditingGuiPacket(pos, tag));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public PacketType<?> getType() {
public static void serverHandle(C2SBlockEntitySavingPacket packet,
ServerPlayer player, PacketSender responseSender) {
var server = player.getServer();
var level = player.serverLevel();
var level = player.getLevel();
server.execute(() -> {
var blockEntity = level.getBlockEntity(packet.blockPos);
if (blockEntity != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public static void serverHandle(C2SEntityEditingRequestPacket packet,
ServerPlayer player, PacketSender responseSender) {
NBTEdit.getInstance().getLogger().info("Player " + player.getName().getString() +
" requested entity with UUID " + packet.entityUuid + ".");
var entity = player.serverLevel().getEntity(packet.entityUuid);
var entity = player.getLevel().getEntity(packet.entityUuid);
player.sendSystemMessage(Component.translatable(Constants.MESSAGE_EDITING_ENTITY, packet.entityUuid)
.withStyle(ChatFormatting.GREEN));
NBTEdit.getInstance().getNetworking().serverOpenClientGui(player, entity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public PacketType<?> getType() {
public static void serverHandle(C2SEntitySavingPacket packet,
ServerPlayer player, PacketSender responseSender) {
var server = player.getServer();
var level = player.serverLevel();
var level = player.getLevel();
server.execute(() -> {
var entity = level.getEntity(packet.entityUuid);
if (!NBTEdit.getInstance().getPermission().hasPermission(player)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public void serverOpenClientGui(ServerPlayer player, BlockPos pos) {
if (NBTEdit.getInstance().getPermission().hasPermission(player)) {
NBTEdit.getInstance().getLogger().info("Player " + player.getName().getString() +
" is editing block at XYZ " + pos.getX() + " " + pos.getY() + " " + pos.getZ() + ".");
var blockEntity = player.serverLevel().getBlockEntity(pos);
var blockEntity = player.getLevel().getBlockEntity(pos);
if (blockEntity != null) {
var tag = blockEntity.serializeNBT();
CHANNEL.sendTo(new S2COpenBlockEntityEditingGuiPacket(pos, tag),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void toBytes(ByteBuf byteBuf) {
public void serverHandleOnMain(Supplier<NetworkEvent.Context> context) {
var player = context.get().getSender();
var server = player.getServer();
var level = player.serverLevel();
var level = player.getLevel();
server.execute(() -> {
var blockEntity = level.getBlockEntity(blockPos);
if (blockEntity != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void serverHandleOnMain(Supplier<NetworkEvent.Context> context) {
var player = context.get().getSender();
NBTEdit.getInstance().getLogger().info("Player " + player.getName().getString() +
" requested entity with UUID " + entityUuid + ".");
var entity = player.serverLevel().getEntity(entityUuid);
var entity = player.getLevel().getEntity(entityUuid);
player.sendSystemMessage(Component.translatable(Constants.MESSAGE_EDITING_ENTITY, entityUuid)
.withStyle(ChatFormatting.GREEN));
NBTEdit.getInstance().getNetworking().serverOpenClientGui(player, entity);
Expand Down
Loading

0 comments on commit dd58ff3

Please sign in to comment.