Explorar o código

简单的命名牌 GUI

LTCatt %!s(int64=6) %!d(string=hai) anos
pai
achega
61d4ebf291

+ 1 - 1
src/main/java/com/hexdragon/enchrebirth/block/anvil/AnvilTileEntity.java

@@ -23,7 +23,7 @@ import javax.annotation.Nullable;
 
 // 铁砧 TileEntity,用于引导自定义模型与存储物品 NBT
 public class AnvilTileEntity extends LockableLootTileEntity {
-    protected ITextComponent getDefaultName() {return new TranslationTextComponent("container.anvil.title");}
+    protected ITextComponent getDefaultName() {return new TranslationTextComponent("gui.anvil.title");}
 
     // 构造函数,为了支持不同损坏度的铁砧复读了 6 次
     public static class PerfectAnvilTileEntity extends AnvilTileEntity {

+ 55 - 3
src/main/java/com/hexdragon/enchrebirth/item/name_tag/NameTagScreen.java

@@ -1,11 +1,63 @@
 package com.hexdragon.enchrebirth.item.name_tag;
 
+import com.hexdragon.enchrebirth.Main;
+import com.mojang.blaze3d.matrix.MatrixStack;
 import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.util.text.ITextComponent;
+import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.text.TranslationTextComponent;
+import org.lwjgl.opengl.GL11;
 
 public class NameTagScreen extends Screen {
-    protected NameTagScreen(ITextComponent titleIn) {
-        super(titleIn);
+
+    // 标题、背景、文本框声明
+    public NameTagScreen() {super(new TranslationTextComponent("gui.name_tag.title"));}
+    final ResourceLocation GUI_TEXTURE = new ResourceLocation(Main.MODID, "textures/gui/name_tag.png");
+    TextFieldWidget textField;
+
+    @Override
+    protected void init() {
+        this.minecraft.keyboardListener.enableRepeatEvents(true);
+        this.guiLeft = (this.width - this.xSize) / 2;
+        this.guiTop = (this.height - this.ySize) / 2;
+        // (x,y), (width, height)
+        this.textField = new TextFieldWidget(this.font, guiLeft + 60, guiTop + 33, 100, 20, new TranslationTextComponent("item.name_tag.name"));
+        this.children.add(this.textField);
+        super.init();
+    }
+
+    int xSize = 176, ySize = 56;
+    int titleX = 61, titleY = 12;
+    int guiLeft, guiTop;
+
+    @Override
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
+        this.renderBackground(matrixStack);
+
+        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+        this.minecraft.getTextureManager().bindTexture(GUI_TEXTURE);
+        this.blit(matrixStack, guiLeft, guiTop, 0, 0, this.xSize, this.ySize);
+
+        this.font.func_243248_b(matrixStack, this.title, (float) this.titleX + guiLeft, (float) this.titleY + guiTop, 4210752);
+        this.textField.render(matrixStack, mouseX, mouseY, partialTicks);
+
+        super.render(matrixStack, mouseX, mouseY, partialTicks);
     }
 
+    public boolean isPauseScreen() {
+        return false;
+    }
+    public void tick() {
+        super.tick();
+        if (!this.minecraft.player.isAlive() || this.minecraft.player.removed) {
+            this.minecraft.player.closeScreen();
+        }
+    }
+    public void removed() {
+        this.minecraft.keyboardListener.enableRepeatEvents(false);
+    }
+    public void closeScreen() {
+        this.minecraft.player.closeScreen();
+        super.closeScreen();
+    }
 }

+ 1 - 1
src/main/java/com/hexdragon/enchrebirth/mixin/block/GrindstoneBlockMixin.java

@@ -25,7 +25,7 @@ public abstract class GrindstoneBlockMixin extends HorizontalFaceBlock {
     private void getContainer(BlockState state, World worldIn, BlockPos pos, CallbackInfoReturnable<INamedContainerProvider> cir) {
         cir.setReturnValue(new SimpleNamedContainerProvider(
                 (id, inventory, player) -> new GrindstoneContainerRe(id, inventory, IWorldPosCallable.of(worldIn, pos)),
-                new TranslationTextComponent("container.grindstone.title")));
+                new TranslationTextComponent("gui.grindstone.title")));
         cir.cancel();
     }
 

+ 27 - 0
src/main/java/com/hexdragon/enchrebirth/mixin/item/NameTagItemMixin.java

@@ -0,0 +1,27 @@
+package com.hexdragon.enchrebirth.mixin.item;
+
+import com.hexdragon.enchrebirth.item.name_tag.NameTagScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.NameTagItem;
+import net.minecraft.util.ActionResult;
+import net.minecraft.util.Hand;
+import net.minecraft.world.World;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.fml.DistExecutor;
+import org.spongepowered.asm.mixin.Mixin;
+
+@Mixin(NameTagItem.class)
+public abstract class NameTagItemMixin extends Item {
+    public NameTagItemMixin(Properties properties) {super(properties);}
+
+    @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) {
+        if (worldIn.isRemote) {
+            DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> Minecraft.getInstance().displayGuiScreen(new NameTagScreen()));
+        }
+        return super.onItemRightClick(worldIn, playerIn, handIn);
+    }
+
+}

+ 3 - 2
src/main/resources/assets/enchrebirth/lang/zh_CN.json

@@ -1,6 +1,7 @@
 {
-  "container.grindstone.title": "去除附魔",
-  "container.anvil.title": "修复物品",
+  "gui.grindstone.title": "去除附魔",
+  "gui.anvil.title": "修复物品",
+  "gui.name_tag.title": "重命名",
   "block.enchrebirth.netherite_anvil": "下界合金砧",
   "block.enchrebirth.chipped_netherite_anvil": "开裂的下界合金砧",
   "block.enchrebirth.damaged_netherite_anvil": "损坏的下界合金砧"

BIN=BIN
src/main/resources/assets/enchrebirth/textures/gui/name_tag.png


+ 2 - 1
src/main/resources/mixins.enchrebirth.json

@@ -5,6 +5,7 @@
   "mixins": [
     "RepairItemRecipeMixin",
     "block/GrindstoneBlockMixin",
-    "block/AnvilBlockMixin"
+    "block/AnvilBlockMixin",
+    "item/NameTagItemMixin"
   ]
 }