Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 94 lines 4.0 kB view raw
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}