minepad stuff

This commit is contained in:
GiantLuigi4 2023-09-27 22:33:13 -04:00
parent e0ab3d2495
commit ce718eeea2
4 changed files with 253 additions and 216 deletions

View File

@ -194,6 +194,8 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
private final UUID id;
private long lastURLSent;
public int activeCursor;
private PadData(String url, UUID id) {
String webUrl;
try {
@ -202,8 +204,12 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
throw new RuntimeException(e);
}
view = MCEF.createBrowser(WebDisplays.applyBlacklist(webUrl), false);
if (view instanceof MCEFBrowser browser)
if (view instanceof MCEFBrowser browser) {
browser.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY);
browser.setCursorChangeListener((cursor) -> {
activeCursor = cursor;
});
}
isInHotbar = true;
this.id = id;
}

View File

@ -4,9 +4,13 @@
package net.montoyo.wd.client.gui;
import com.cinemamod.mcef.MCEF;
import com.cinemamod.mcef.MCEFBrowser;
import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraftforge.api.distmarker.OnlyIn;
@ -14,6 +18,7 @@ import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.utilities.BlockSide;
import org.cef.browser.CefBrowserOsr;
import org.cef.misc.CefCursorType;
import org.lwjgl.glfw.GLFW;
import java.util.Optional;
@ -36,11 +41,10 @@ public class GuiMinePad extends WDScreen {
public GuiMinePad(ClientProxy.PadData pad) {
this();
this.pad = pad;
// if (WebDisplays.cursorSupport)
// pad.view.allowCursorChanges(true);
}
int trueWidth, trueHeight;
@Override
public void init() {
vw = ((double) width) - 32.0f;
@ -48,10 +52,19 @@ public class GuiMinePad extends WDScreen {
vx = 16.0f;
vy = (((double) height) - vh) / 2.0f;
trueWidth = width;
trueHeight = height;
this.width = (int) vw;
this.height = (int) vh;
super.init();
((MCEFBrowser) pad.view).setCursor(CefCursorType.fromId(pad.activeCursor));
((MCEFBrowser) pad.view).setCursorChangeListener((id) -> {
pad.activeCursor = id;
((MCEFBrowser) pad.view).setCursor(CefCursorType.fromId(id));
});
}
private static void addRect(BufferBuilder bb, double x, double y, double w, double h) {
@ -61,31 +74,49 @@ public class GuiMinePad extends WDScreen {
bb.vertex(x, y + h, 0.0).color(255, 255, 255, 255).endVertex();
}
// @Override
// public void render(PoseStack poseStack, int mouseX, int mouseY, float ptt) {
// renderBackground(poseStack);
//
// RenderSystem.disableTexture();
// RenderSystem.disableCull();
// RenderSystem.setShaderColor(0.73f, 0.73f, 0.73f, 1.0f);
//
// Tesselator t = Tesselator.getInstance();
// BufferBuilder bb = t.getBuilder();
// bb.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
// addRect(bb, vx, vy - 16, vw, 16);
// addRect(bb, vx, vy + vh, vw, 16);
// addRect(bb, vx - 16, vy, 16, vh);
// addRect(bb, vx + vw, vy, 16, vh);
// t.end();
//
// RenderSystem.enableTexture();
//
// if (pad.view != null) {
@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float ptt) {
width = trueWidth;
height = trueHeight;
renderBackground(graphics);
width = (int) vw;
height = (int) vh;
RenderSystem.disableCull();
RenderSystem.setShaderColor(0.73f, 0.73f, 0.73f, 1.0f);
Tesselator t = Tesselator.getInstance();
BufferBuilder bb = t.getBuilder();
bb.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR);
addRect(bb, vx, vy - 16, vw, 16);
addRect(bb, vx, vy + vh, vw, 16);
addRect(bb, vx - 16, vy, 16, vh);
addRect(bb, vx + vw, vy, 16, vh);
t.end();
if (pad.view != null) {
// pad.view.draw(poseStack, vx, vy + vh, vx + vw, vy);
// }
//
// RenderSystem.enableCull();
// }
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.disableDepthTest();
RenderSystem.setShader(GameRenderer::getPositionTexColorShader);
RenderSystem.setShaderTexture(0, ((MCEFBrowser) pad.view).getRenderer().getTextureID());
t = Tesselator.getInstance();
BufferBuilder buffer = t.getBuilder();
buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR);
double x1 = vx;
double y1 = vy;
double x2 = vx + vw;
double y2 = vy + vh;
buffer.vertex(graphics.pose().last().pose(), (float) x1, (float) y1, 0.0f).uv(0.0F, 0.0F).color(255, 255, 255, 255).endVertex();
buffer.vertex(graphics.pose().last().pose(), (float) x2, (float) y1, 0.0f).uv(1.0F, 0.0F).color(255, 255, 255, 255).endVertex();
buffer.vertex(graphics.pose().last().pose(), (float) x2, (float) y2, 0.0f).uv(1.0F, 1.0F).color(255, 255, 255, 255).endVertex();
buffer.vertex(graphics.pose().last().pose(), (float) x1, (float) y2, 0.0f).uv(0.0F, 1.0F).color(255, 255, 255, 255).endVertex();
t.end();
RenderSystem.enableDepthTest();
}
RenderSystem.enableCull();
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
@ -99,13 +130,12 @@ public class GuiMinePad extends WDScreen {
@Override
public boolean charTyped(char codePoint, int modifiers) {
// if (pad.view != null) {
// pad.view.injectKeyTyped((int) codePoint, modifiers);
// return true;
// } else {
// return super.charTyped(codePoint, modifiers);
// }
return false;
if (pad.view != null) {
((MCEFBrowser) pad.view).sendKeyTyped(codePoint, modifiers);
return true;
} else {
return super.charTyped(codePoint, modifiers);
}
}
/* copied from MCEF */
@ -124,21 +154,21 @@ public class GuiMinePad extends WDScreen {
char key = keystr.charAt(keystr.length() - 1);
if(keystr.equals("Enter")) {
if (keystr.equals("Enter")) {
keyCode = 10;
key = '\n';
}
// if (pad.view != null) {
// if (pressed)
// pad.view.injectKeyPressedByKeyCode(keyCode, key, modifiers);
// else
// pad.view.injectKeyReleasedByKeyCode(keyCode, key, modifiers);
//
// if (pressed && key == '\n')
// if (modifiers != 0) pad.view.injectKeyTyped('\r', modifiers);
// return true;
// }
if (pad.view != null) {
if (pressed)
((MCEFBrowser) pad.view).sendKeyPress(keyCode, scanCode, modifiers);
else
((MCEFBrowser) pad.view).sendKeyRelease(keyCode, scanCode, modifiers);
if (pressed && key == '\n')
if (modifiers != 0) ((MCEFBrowser) pad.view).sendKeyTyped('\r', modifiers);
return true;
}
return false;
}
@ -161,15 +191,15 @@ public class GuiMinePad extends WDScreen {
return super.mouseReleased(mouseX, mouseY, button);
}
@Override
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
mouse(button, true, (int) mouseX, (int) mouseY, 0);
return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
}
@Override
public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
mouse(-1, false, (int) mouseX, (int) mouseY, amount);
double mx = (mouseX - vx) / vw;
double my = (mouseY - vy) / vh;
int sx = (int) (mx * WebDisplays.INSTANCE.padResX);
int sy = (int) (my * WebDisplays.INSTANCE.padResY);
// TODO: this doesn't work, and I don't understand why?
((MCEFBrowser) pad.view).sendMouseWheel(sx, sy, amount, (hasControlDown() && !hasAltDown() && !hasShiftDown()) ? GLFW.GLFW_MOD_CONTROL : 0);
return super.mouseScrolled(mouseX, mouseY, amount);
}
@ -177,31 +207,30 @@ public class GuiMinePad extends WDScreen {
double mx = (sx - vx) / vw;
double my = (sy - vy) / vh;
// if (pad.view != null && mx >= 0 && mx <= 1) {
// int wheel = (int) scrollAmount;
//
// //Scale again according to the webview
// sx = (int) (mx * WebDisplays.INSTANCE.padResX);
// sy = (int) (my * WebDisplays.INSTANCE.padResY);
//
// if (wheel != 0)
// pad.view.injectMouseWheel(sx, sy, (hasControlDown() && ! hasAltDown() && !hasShiftDown()) ? GLFW.GLFW_MOD_CONTROL : 0, wheel, 0);
// if (btn == -1)
// pad.view.injectMouseMove(sx, sy, 0, sy < 0);
// else
// pad.view.injectMouseButton(sx, sy, 0, btn + 1, pressed, 1);
// }
if (pad.view != null && mx >= 0 && mx <= 1) {
//Scale again according to the webview
sx = (int) (mx * WebDisplays.INSTANCE.padResX);
sy = (int) (my * WebDisplays.INSTANCE.padResY);
if (btn == -1)
((MCEFBrowser) pad.view).sendMouseMove(sx, sy);
else if (pressed)
((MCEFBrowser) pad.view).sendMousePress(sx, sy, btn);
else
((MCEFBrowser) pad.view).sendMouseRelease(sx, sy, btn);
pad.view.setFocus(true);
}
}
public static Optional<Character> getChar(int keyCode, int scanCode) {
String keystr = GLFW.glfwGetKeyName(keyCode, scanCode);
if(keystr == null){
if (keystr == null) {
keystr = "\0";
}
if(keyCode == GLFW.GLFW_KEY_ENTER){
if (keyCode == GLFW.GLFW_KEY_ENTER) {
keystr = "\n";
}
if(keystr.length() == 0){
if (keystr.length() == 0) {
return Optional.empty();
}
@ -210,7 +239,7 @@ public class GuiMinePad extends WDScreen {
@Override
public void tick() {
if(pad.view == null)
if (pad.view == null)
minecraft.setScreen(null); //In case the user dies with the pad in the hand
}
@ -222,19 +251,17 @@ public class GuiMinePad extends WDScreen {
@Override
public void removed() {
super.removed();
if (pad.view instanceof CefBrowserOsr osr) {
// osr.allowCursorChanges(true);
osr.onCursorChange(null, 0);
if (pad.view instanceof MCEFBrowser browser) {
browser.setCursor(CefCursorType.POINTER);
browser.setCursorChangeListener((cursor) -> {
pad.activeCursor = cursor;
});
}
}
@Override
public void onClose() {
super.onClose();
// if (WebDisplays.cursorSupport) {
// pad.view.allowCursorChanges(false);
// if (pad.view instanceof CefBrowserOsr osr)
// osr.onCursorChange(null, 0);
// }
removed();
}
}

View File

@ -115,7 +115,7 @@ public final class MinePadRenderer implements IItemRenderer {
double y2 = 14.0 / 32.0 + 0.002;
stack.translate(0.063f, 0.28f, 0.001f);
RenderSystem.setShaderTexture(0, tex);
// RenderSystem.setShaderTexture(0, tex);
RenderSystem.disableDepthTest();
RenderSystem.setShader(GameRenderer::getPositionTexColorShader);

View File

@ -234,6 +234,10 @@ public class TileEntityScreen extends BlockEntity {
else
mcefBrowser.resize(resolution.x, resolution.y);
// uh yes this is intentional
// basically: on my laptop, this line caused an error inexplicably
// reason: the compiler didn't update this file, so it stayed as a Consumer<Integer> in the bytecode
//noinspection RedundantCast
mcefBrowser.setCursorChangeListener((MCEFCursorChangeListener) (type) -> mouseType = type);
}