diff --git a/build.gradle b/build.gradle index 0a9792b..d3ee947 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ dependencies { } forge "net.minecraftforge:forge:${project.forge_version}" - modImplementation "com.github.Mysticpasta1:mcef-forge:fb295e48d0" + modImplementation "com.github.Mysticpasta1:mcef-forge:214395775d" modImplementation "curse.maven:cloth_config_forge-348521:3546623" // Uncomment the following line to enable the deprecated Fabric API modules. // These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time. diff --git a/src/main/java/net/montoyo/wd/WebDisplays.java b/src/main/java/net/montoyo/wd/WebDisplays.java index b56c3dc..3e35452 100644 --- a/src/main/java/net/montoyo/wd/WebDisplays.java +++ b/src/main/java/net/montoyo/wd/WebDisplays.java @@ -44,6 +44,7 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.network.PacketDistributor; import net.montoyo.wd.block.WDBlockContainer; import net.montoyo.wd.client.ClientProxy; +import net.montoyo.wd.client.gui.controls.*; import net.montoyo.wd.config.ModConfig; import net.montoyo.wd.core.*; import net.montoyo.wd.init.BlockInit; diff --git a/src/main/java/net/montoyo/wd/client/ClientProxy.java b/src/main/java/net/montoyo/wd/client/ClientProxy.java index b804070..2cdd48f 100644 --- a/src/main/java/net/montoyo/wd/client/ClientProxy.java +++ b/src/main/java/net/montoyo/wd/client/ClientProxy.java @@ -45,15 +45,19 @@ import net.minecraftforge.client.model.IModelLoader; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.montoyo.mcef.api.*; import net.montoyo.wd.SharedProxy; import net.montoyo.wd.WebDisplays; import net.montoyo.wd.block.BlockScreen; import net.montoyo.wd.client.gui.*; +import net.montoyo.wd.client.gui.controls.*; +import net.montoyo.wd.client.gui.controls.List; import net.montoyo.wd.client.gui.loading.GuiLoader; import net.montoyo.wd.client.renderers.*; import net.montoyo.wd.core.DefaultUpgrade; diff --git a/src/main/java/net/montoyo/wd/client/gui/GuiServer.java b/src/main/java/net/montoyo/wd/client/gui/GuiServer.java index 2179f5a..732a7dc 100644 --- a/src/main/java/net/montoyo/wd/client/gui/GuiServer.java +++ b/src/main/java/net/montoyo/wd/client/gui/GuiServer.java @@ -49,7 +49,7 @@ public class GuiServer extends WDScreen { private final Vector3i serverPos; private final NameUUIDPair owner; private final ArrayList lines = new ArrayList<>(); - private String prompt = ""; + private String prompt = "<"; private String userPrompt; private int blinkTime; private String lastCmd; @@ -77,7 +77,6 @@ public class GuiServer extends WDScreen { super(Component.nullToEmpty(null)); serverPos = vec; this.owner = owner; - //userPrompt = owner.name + "@miniserv$ "; userPrompt = "> "; if(COMMAND_MAP.isEmpty()) @@ -214,8 +213,6 @@ public class GuiServer extends WDScreen { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - Supplier predicate = () -> super.keyPressed(keyCode, scanCode, modifiers); - getChar(keyCode, scanCode).ifPresent(c -> { try { keyTyped(c, keyCode); @@ -225,7 +222,7 @@ public class GuiServer extends WDScreen { }); try { - return handleKeyboardInput(keyCode, true, predicate); + return handleKeyboardInput(keyCode, true, () -> true); } catch (IOException e) { e.printStackTrace(); return false; @@ -349,6 +346,7 @@ public class GuiServer extends WDScreen { } else writeLine(userPrompt); } else if(prompt.length() + 1 < MAX_LINE_LEN && typedChar >= 32 && typedChar <= 126) + prompt = prompt + typedChar; blinkTime = 0; @@ -414,7 +412,7 @@ public class GuiServer extends WDScreen { super.onClose(); if(accessSound != null) - minecraft.getSoundManager().stop(accessSound); + Minecraft.getInstance().getSoundManager().stop(accessSound); } private boolean queueTask(ClientTask task) { diff --git a/src/main/java/net/montoyo/wd/client/gui/GuiSetURL2.java b/src/main/java/net/montoyo/wd/client/gui/GuiSetURL2.java index c41f123..9ed668b 100644 --- a/src/main/java/net/montoyo/wd/client/gui/GuiSetURL2.java +++ b/src/main/java/net/montoyo/wd/client/gui/GuiSetURL2.java @@ -9,9 +9,13 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; import net.montoyo.wd.WebDisplays; import net.montoyo.wd.client.ClientProxy; import net.montoyo.wd.client.gui.controls.Button; +import net.montoyo.wd.client.gui.controls.Event; import net.montoyo.wd.client.gui.controls.TextField; import net.montoyo.wd.client.gui.loading.FillControl; import net.montoyo.wd.entity.TileEntityScreen; @@ -25,6 +29,7 @@ import net.montoyo.wd.utilities.Vector3i; import java.util.Map; +@Mod.EventBusSubscriber public class GuiSetURL2 extends WDScreen { //Screen data diff --git a/src/main/java/net/montoyo/wd/client/gui/WDScreen.java b/src/main/java/net/montoyo/wd/client/gui/WDScreen.java index 7d01b91..8643944 100644 --- a/src/main/java/net/montoyo/wd/client/gui/WDScreen.java +++ b/src/main/java/net/montoyo/wd/client/gui/WDScreen.java @@ -25,10 +25,7 @@ import net.montoyo.wd.client.gui.loading.GuiLoader; import net.montoyo.wd.client.gui.loading.JsonOWrapper; import net.montoyo.wd.net.Messages; import net.montoyo.wd.net.server.SMessageACQuery; -import net.montoyo.wd.utilities.BlockSide; -import net.montoyo.wd.utilities.Bounds; -import net.montoyo.wd.utilities.Log; -import net.montoyo.wd.utilities.NameUUIDPair; +import net.montoyo.wd.utilities.*; import org.lwjgl.glfw.GLFW; import javax.annotation.Nullable; @@ -139,7 +136,7 @@ public abstract class WDScreen extends Screen { for(Control ctrl: controls) typed = typed || ctrl.keyTyped(codePoint, modifiers); - return typed || charTyped(codePoint, modifiers); + return typed; } @Override @@ -149,7 +146,7 @@ public abstract class WDScreen extends Screen { for(Control ctrl: controls) clicked = clicked || ctrl.mouseClicked(mouseX, mouseY, button); - return clicked || mouseClicked(mouseX, mouseY, button); + return clicked; } @Override @@ -169,7 +166,7 @@ public abstract class WDScreen extends Screen { for(Control ctrl: controls) dragged = dragged || ctrl.mouseClickMove(mouseX, mouseY, button, dragX, dragX); - return dragged || mouseDragged(mouseX, mouseY, button, dragX, dragY); + return dragged; } @Override @@ -188,7 +185,7 @@ public abstract class WDScreen extends Screen { for(Control ctrl : controls) ctrl.destroy(); - minecraft.keyboardHandler.setSendRepeatsToGui(false); + Minecraft.getInstance().keyboardHandler.setSendRepeatsToGui(false); CURRENT_SCREEN = null; } @@ -219,7 +216,7 @@ public abstract class WDScreen extends Screen { for(Control ctrl : controls) down = down || ctrl.keyDown(keyCode); - return down || super.keyPressed(keyCode, scanCode, modifiers); + return new GuiServer(new Vector3i(), new NameUUIDPair()).keyPressed(keyCode, scanCode, modifiers); } @Override diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/Button.java b/src/main/java/net/montoyo/wd/client/gui/controls/Button.java index c66a644..8f3077f 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/Button.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/Button.java @@ -21,7 +21,7 @@ public class Button extends Control { private final boolean shiftDown; - private ClickEvent(Button btn) { + public ClickEvent(Button btn) { source = btn; shiftDown = btn.shiftDown; } @@ -52,7 +52,6 @@ public class Button extends Control { if(!onClick()) parent.actionPerformed(new ClickEvent(this)); - return true; } @@ -88,6 +87,10 @@ public class Button extends Control { btn.setWidth(width); } + public void setHeight(int height) { + btn.setHeight(height); + } + @Override public int getWidth() { return btn.getWidth(); @@ -95,7 +98,7 @@ public class Button extends Control { @Override public int getHeight() { - return 20; + return btn.getHeight(); } @Override @@ -204,8 +207,9 @@ public class Button extends Control { btn.x = json.getInt("x", 0); btn.y = json.getInt("y", 0); btn.setWidth(json.getInt("width", 200)); + btn.setHeight(json.getInt("height", 20)); btn.setMessage(Component.nullToEmpty(tr(json.getString("label", btn.getMessage().getContents())))); - btn.active = !json.getBool("disabled", !btn.active); + btn.active = json.getBool("active", btn.active); btn.visible = json.getBool("visible", btn.visible); originalColor = json.getColor("color", originalColor); diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/CheckBox.java b/src/main/java/net/montoyo/wd/client/gui/controls/CheckBox.java index a46f647..ea56ae7 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/CheckBox.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/CheckBox.java @@ -10,6 +10,8 @@ import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.montoyo.wd.client.gui.loading.JsonOWrapper; import java.util.stream.Collectors; @@ -26,7 +28,7 @@ public class CheckBox extends BasicControl { private final boolean checked; - private CheckedEvent(CheckBox cb) { + public CheckedEvent(CheckBox cb) { source = cb; checked = cb.checked; } diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/Container.java b/src/main/java/net/montoyo/wd/client/gui/controls/Container.java index c507bfb..d292bc5 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/Container.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/Container.java @@ -24,12 +24,12 @@ public abstract class Container extends BasicControl { } @Override - public boolean keyTyped(char typedChar, int keyCode) { + public boolean keyTyped(int keyCode, int modifiers) { boolean typed = false; if(!disabled) { for(Control ctrl : childs) - typed = typed || ctrl.keyTyped(typedChar, keyCode); + typed = typed || ctrl.keyTyped(keyCode, modifiers); } return typed; diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/Control.java b/src/main/java/net/montoyo/wd/client/gui/controls/Control.java index 119581f..83601f9 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/Control.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/Control.java @@ -16,6 +16,7 @@ import net.minecraft.resources.ResourceLocation; import net.montoyo.wd.client.gui.WDScreen; import net.montoyo.wd.client.gui.loading.JsonOWrapper; import net.montoyo.wd.utilities.Bounds; +import org.lwjgl.glfw.GLFW; import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D; import static org.lwjgl.opengl.GL11.glEnable; @@ -35,7 +36,7 @@ public abstract class Control { protected final Font font; protected final Tesselator tessellator; protected final BufferBuilder vBuffer; - protected final WDScreen parent; + protected static WDScreen parent; protected String name; protected Object userdata; @@ -55,7 +56,7 @@ public abstract class Control { this.userdata = userdata; } - public boolean keyTyped(char typedChar, int keyCode) { + public boolean keyTyped(int keyCode, int modifier) { return false; } diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/Event.java b/src/main/java/net/montoyo/wd/client/gui/controls/Event.java index c41ac3f..28c7b25 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/Event.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/Event.java @@ -11,5 +11,4 @@ public abstract class Event { public T getSource() { return source; } - } diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/List.java b/src/main/java/net/montoyo/wd/client/gui/controls/List.java index 4d13a34..4678369 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/List.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/List.java @@ -9,6 +9,7 @@ import com.mojang.blaze3d.pipeline.TextureTarget; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.TextComponent; import net.montoyo.wd.client.gui.loading.JsonOWrapper; import java.util.ArrayList; @@ -33,7 +34,7 @@ public class List extends BasicControl { private final int id; private final Entry entry; - private EntryClick(List lst) { + public EntryClick(List lst) { source = lst; id = lst.selected; entry = lst.content.get(lst.selected); @@ -69,6 +70,8 @@ public class List extends BasicControl { private double scrollGrab; public List() { + content.add(new Entry("", null)); + selected = 0; } public List(int x, int y, int w, int h) { diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/TextField.java b/src/main/java/net/montoyo/wd/client/gui/controls/TextField.java index b78fca4..483866d 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/TextField.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/TextField.java @@ -18,7 +18,7 @@ public class TextField extends Control { private final String text; - private EnterPressedEvent(TextField field) { + public EnterPressedEvent(TextField field) { source = field; text = field.field.getValue(); } @@ -33,7 +33,7 @@ public class TextField extends Control { private final String beginning; - private TabPressedEvent(TextField field) { + public TabPressedEvent(TextField field) { source = field; String text = field.field.getValue(); @@ -61,7 +61,7 @@ public class TextField extends Control { private final String oldContent; private final String newContent; - private TextChangedEvent(TextField tf, String old) { + public TextChangedEvent(TextField tf, String old) { source = tf; oldContent = old; newContent = tf.field.getValue(); @@ -106,7 +106,29 @@ public class TextField extends Control { } @Override - public boolean keyTyped(char typedChar, int keyCode) { + public boolean keyDown(int key) { + if(key == GLFW.GLFW_KEY_BACKSPACE) { + String old; + if(enabled && field.isFocused()) + old = field.getValue(); + else + old = null; + + field.charTyped((char) key, 0); + + if(enabled && field.isFocused() && !field.getValue().equals(old)) { + for(TextChangeListener tcl : listeners) + tcl.onTextChange(this, old, field.getValue()); + + parent.actionPerformed(new TextChangedEvent(this, old)); + } + } + + return false; + } + + @Override + public boolean keyTyped(int keyCode, int modifier) { if(keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) parent.actionPerformed(new EnterPressedEvent(this)); else if(keyCode == GLFW.GLFW_KEY_TAB) @@ -118,7 +140,7 @@ public class TextField extends Control { else old = null; - field.charTyped(typedChar, keyCode); + field.charTyped((char) keyCode, modifier); if(enabled && field.isFocused() && !field.getValue().equals(old)) { for(TextChangeListener tcl : listeners) diff --git a/src/main/java/net/montoyo/wd/client/gui/controls/UpgradeGroup.java b/src/main/java/net/montoyo/wd/client/gui/controls/UpgradeGroup.java index 7f11a04..a6af41a 100644 --- a/src/main/java/net/montoyo/wd/client/gui/controls/UpgradeGroup.java +++ b/src/main/java/net/montoyo/wd/client/gui/controls/UpgradeGroup.java @@ -8,6 +8,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.eventbus.api.IEventBus; import net.montoyo.wd.client.gui.loading.JsonOWrapper; import java.util.ArrayList; @@ -132,7 +133,7 @@ public class UpgradeGroup extends BasicControl { private final ItemStack clickStack; - private ClickEvent(UpgradeGroup src) { + public ClickEvent(UpgradeGroup src) { source = src; clickStack = src.clickStack; } diff --git a/src/main/java/net/montoyo/wd/client/renderers/ScreenRenderer.java b/src/main/java/net/montoyo/wd/client/renderers/ScreenRenderer.java index 4af9105..d614e3c 100644 --- a/src/main/java/net/montoyo/wd/client/renderers/ScreenRenderer.java +++ b/src/main/java/net/montoyo/wd/client/renderers/ScreenRenderer.java @@ -122,7 +122,6 @@ public class ScreenRenderer implements BlockEntityRenderer { Tesselator tesselator = Tesselator.getInstance(); BufferBuilder builder = tesselator.getBuilder(); - VertexBuffer vb = new VertexBuffer(); //TODO: Use tesselator RenderSystem.setShaderTexture(0, scr.browser.getTextureID()); builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX); @@ -131,7 +130,6 @@ public class ScreenRenderer implements BlockEntityRenderer { builder.vertex(poseStack.last().pose(), sw, -sh, 0.505f).color(1.f, 1.f, 1.f, 1.f).uv(1.f, 1.f).endVertex(); builder.vertex(poseStack.last().pose(), sw, sh, 0.505f).color(1.f, 1.f, 1.f, 1.f).uv(1.f, 0.f).endVertex(); builder.vertex(poseStack.last().pose(),-sw, sh, 0.505f).color(1.f, 1.f, 1.f, 1.f).uv(0.f, 0.f).endVertex(); - vb.draw(); tesselator.end();//Minecraft does shit with mah texture otherwise... RenderSystem.bindTexture(0); poseStack.popPose(); @@ -139,10 +137,10 @@ public class ScreenRenderer implements BlockEntityRenderer { //Bounding box debugging - poseStack.pushPose(); + /*poseStack.pushPose(); poseStack.translate(-te.getBlockPos().getX(), -te.getBlockPos().getY(), -te.getBlockPos().getZ()); renderAABB(te.getRenderBoundingBox()); - poseStack.popPose(); + poseStack.popPose();*/ //Re-enable lighting RenderSystem.enableCull();