Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.util.screen;
2
3import net.lerariemann.infinity.util.InfinityMethods;
4import net.minecraft.client.gui.GuiGraphics;
5import net.minecraft.client.gui.components.EditBox;
6import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
7//? if >1.21.4 {
8import net.minecraft.client.renderer.RenderPipelines;
9//?}
10import net.minecraft.network.chat.Component;
11import net.minecraft.world.entity.player.Inventory;
12import net.minecraft.world.entity.player.Player;
13import net.minecraft.world.inventory.AbstractContainerMenu;
14import net.minecraft.world.inventory.ContainerListener;
15import net.minecraft.world.item.ItemStack;
16import java.util.concurrent.atomic.AtomicInteger;
17
18public class F4Screen extends AbstractContainerScreen<F4ScreenHandler> {
19 EditBox widthValue;
20 EditBox heightValue;
21
22 public static F4Screen of(Player player) {
23 F4ScreenHandler.Factory factory = new F4ScreenHandler.Factory(player);
24 F4ScreenHandler handler = (F4ScreenHandler)factory.createMenu(0, player.getInventory(), player);
25 return new F4Screen(handler, player.getInventory(), factory.getDisplayName());
26 }
27
28 public F4Screen(F4ScreenHandler screenHandler, Inventory playerInventory, Component text) {
29 super(screenHandler, playerInventory, text);
30 menu.addSlotListener(new ContainerListener() {
31 public void slotChanged(AbstractContainerMenu handlerx, int slotId, ItemStack stack) {
32 }
33
34 public void dataChanged(AbstractContainerMenu handlerx, int property, int value) {
35 if (property == 0) menu.width.set(value);
36 else menu.height.set(value);
37 }
38 });
39 }
40
41 @Override
42 protected void init() {
43 super.init();
44 widthValue = new EditBox(this.font, leftPos + 82, topPos + 30, 12, 8, Component.literal("width"));
45 heightValue = new EditBox(this.font, leftPos + 82, topPos + 57, 12, 8, Component.literal("height"));
46 setupValue(widthValue, menu.width);
47 setupValue(heightValue, menu.height);
48 }
49
50 public void setupValue(EditBox value, AtomicInteger valueReference) {
51 value.setTextColor(-1);
52 value.setTextColorUneditable(-1);
53 value.setBordered(false);
54 value.setMaxLength(2);
55 value.setValue(String.valueOf(valueReference.get()));
56 value.setFilter(string -> (string.isEmpty() ||
57 (string.matches("[0-9]*")
58 && Integer.parseInt(string) > 0
59 && Integer.parseInt(string) < 22)));
60 value.setX(leftPos + (valueReference.get() < 10 ? 85 : 82));
61 value.setResponder(string -> {
62 int v = string.isEmpty() ? 3 : Integer.parseInt(string);
63 valueReference.set(v);
64 value.setX(leftPos + ((string.length() < 2) ? 85 : 82));
65 });
66 addWidget(value);
67 }
68
69 @Override
70 public void render(GuiGraphics context, int mouseX, int mouseY, float delta) {
71 super.render(context, mouseX, mouseY, delta);
72 context.drawString(this.font, Component.literal("Portal width"), leftPos + 59, topPos + 18, 4210752, false);
73 context.drawString(this.font, Component.literal("Portal height"), leftPos + 56, topPos + 45, 4210752, false);
74 this.widthValue.render(context, mouseX, mouseY, delta);
75 this.heightValue.render(context, mouseX, mouseY, delta);
76 this.renderTooltip(context, mouseX, mouseY);
77 }
78
79 @Override
80 protected void renderBg(GuiGraphics context, float delta, int mouseX, int mouseY) {
81 context.blit(
82 //? if >1.21.4 {
83 RenderPipelines.GUI_TEXTURED,
84 //?}
85 InfinityMethods.getId("textures/gui/f4.png"),
86 leftPos, topPos,
87 0, 0,
88 this.imageWidth, this.imageHeight
89 //? if >1.21.4 {
90 , 256, 256
91 //?}
92 );
93 }
94}