start work on pointer lock api
This commit is contained in:
parent
f843376f7a
commit
5292e97a8f
|
|
@ -61,7 +61,8 @@ import net.montoyo.wd.WebDisplays;
|
|||
import net.montoyo.wd.block.ScreenBlock;
|
||||
import net.montoyo.wd.client.gui.*;
|
||||
import net.montoyo.wd.client.gui.loading.GuiLoader;
|
||||
import net.montoyo.wd.client.js.WDRouter;
|
||||
import net.montoyo.wd.client.handlers.DisplayHandler;
|
||||
import net.montoyo.wd.client.handlers.js.WDRouter;
|
||||
import net.montoyo.wd.client.renderers.*;
|
||||
import net.montoyo.wd.core.HasAdvancement;
|
||||
import net.montoyo.wd.data.GuiData;
|
||||
|
|
@ -86,9 +87,7 @@ import org.cef.CefSettings;
|
|||
import org.cef.browser.CefBrowser;
|
||||
import org.cef.browser.CefFrame;
|
||||
import org.cef.browser.CefMessageRouter;
|
||||
import org.cef.callback.CefQueryCallback;
|
||||
import org.cef.handler.CefDisplayHandler;
|
||||
import org.cef.handler.CefMessageRouterHandlerAdapter;
|
||||
import org.cef.misc.CefCursorType;
|
||||
import org.joml.Vector3d;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
|
@ -103,7 +102,7 @@ import java.util.*;
|
|||
import java.util.stream.Stream;
|
||||
|
||||
@Mod.EventBusSubscriber(modid = "webdisplays", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
|
||||
public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJSQueryHandler*/, ResourceManagerReloadListener {
|
||||
public class ClientProxy extends SharedProxy implements ResourceManagerReloadListener {
|
||||
|
||||
private static ClientProxy INSTANCE;
|
||||
|
||||
|
|
@ -188,12 +187,20 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
|
||||
ci.cancel();
|
||||
}
|
||||
|
||||
|
||||
public List<ScreenBlockEntity> getScreens() {
|
||||
return screenTracking;
|
||||
}
|
||||
|
||||
public List<PadData> getPads() {
|
||||
return padList;
|
||||
}
|
||||
|
||||
public class PadData {
|
||||
|
||||
public CefBrowser view;
|
||||
public final UUID id;
|
||||
private boolean isInHotbar;
|
||||
private final UUID id;
|
||||
private long lastURLSent;
|
||||
|
||||
public int activeCursor;
|
||||
|
|
@ -215,6 +222,14 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
isInHotbar = true;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public void updateTime() {
|
||||
lastURLSent = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public long lastSent() {
|
||||
return lastURLSent;
|
||||
}
|
||||
}
|
||||
|
||||
private Minecraft mc;
|
||||
|
|
@ -285,7 +300,7 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
);
|
||||
|
||||
// jsDispatcher = new JSQueryDispatcher(this);
|
||||
MCEF.getClient().addDisplayHandler(this);
|
||||
MCEF.getClient().addDisplayHandler(DisplayHandler.INSTANCE);
|
||||
// mcef.registerJSQueryHandler(this);
|
||||
|
||||
MCEF.getClient().getHandle().addMessageRouter(CefMessageRouter.create(WDRouter.INSTANCE));
|
||||
|
|
@ -525,55 +540,6 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
|||
GuiLoader.clearCache();
|
||||
}
|
||||
|
||||
/**************************************** DISPLAY HANDLER METHODS ****************************************/
|
||||
|
||||
|
||||
@Override
|
||||
public void onAddressChange(CefBrowser browser, CefFrame cefFrame, String url) {
|
||||
if (browser != null) {
|
||||
long t = System.currentTimeMillis();
|
||||
|
||||
for (PadData pd : padList) {
|
||||
if (pd.view == browser && t - pd.lastURLSent >= 1000) {
|
||||
if (WebDisplays.isSiteBlacklisted(url))
|
||||
pd.view.loadURL(WebDisplays.BLACKLIST_URL);
|
||||
else {
|
||||
pd.lastURLSent = t; //Avoid spamming the server with porn URLs
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(new C2SMessageMinepadUrl(pd.id, url));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (ScreenBlockEntity tes : screenTracking)
|
||||
tes.updateClientSideURL(browser, url);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTitleChange(CefBrowser cefBrowser, String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTooltip(CefBrowser cefBrowser, String s) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusMessage(CefBrowser cefBrowser, String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onConsoleMessage(CefBrowser cefBrowser, CefSettings.LogSeverity logSeverity, String s, String s1, int i) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCursorChange(CefBrowser cefBrowser, int i) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**************************************** JS HANDLER METHODS ****************************************/
|
||||
|
||||
// @Override
|
||||
|
|
|
|||
|
|
@ -9,12 +9,10 @@ import net.minecraft.world.phys.Vec2;
|
|||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.client.event.ViewportEvent;
|
||||
import net.minecraftforge.event.TickEvent;
|
||||
import net.montoyo.wd.client.js.WDRouter;
|
||||
import net.montoyo.wd.config.CommonConfig;
|
||||
import net.montoyo.wd.client.handlers.js.WDRouter;
|
||||
import net.montoyo.wd.entity.ScreenBlockEntity;
|
||||
import net.montoyo.wd.entity.ScreenData;
|
||||
import net.montoyo.wd.utilities.data.BlockSide;
|
||||
import net.montoyo.wd.utilities.data.Rotation;
|
||||
|
||||
public class KeyboardCamera {
|
||||
private static ScreenBlockEntity tes;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
package net.montoyo.wd.client.handlers;
|
||||
|
||||
import net.montoyo.wd.WebDisplays;
|
||||
import net.montoyo.wd.client.ClientProxy;
|
||||
import net.montoyo.wd.entity.ScreenBlockEntity;
|
||||
import net.montoyo.wd.net.WDNetworkRegistry;
|
||||
import net.montoyo.wd.net.server_bound.C2SMessageMinepadUrl;
|
||||
import org.cef.CefSettings;
|
||||
import org.cef.browser.CefBrowser;
|
||||
import org.cef.browser.CefFrame;
|
||||
import org.cef.handler.CefDisplayHandler;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
public class DisplayHandler implements CefDisplayHandler {
|
||||
|
||||
|
||||
public static final CefDisplayHandler INSTANCE = new DisplayHandler();
|
||||
|
||||
private static final String pointerLock;
|
||||
|
||||
static {
|
||||
try {
|
||||
InputStream is = DisplayHandler.class.getClassLoader().getResourceAsStream("assets/webdisplays/js/pointer_lock.js");
|
||||
pointerLock = new String(is.readAllBytes());
|
||||
is.close();
|
||||
} catch (Throwable err) {
|
||||
throw new RuntimeException(err);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAddressChange(CefBrowser browser, CefFrame cefFrame, String url) {
|
||||
ClientProxy proxy = ((ClientProxy) WebDisplays.PROXY);
|
||||
|
||||
if (browser != null) {
|
||||
long t = System.currentTimeMillis();
|
||||
|
||||
for (ClientProxy.PadData pd : proxy.getPads()) {
|
||||
if (pd.view == browser && t - pd.lastSent() >= 1000) {
|
||||
if (WebDisplays.isSiteBlacklisted(url))
|
||||
pd.view.loadURL(WebDisplays.BLACKLIST_URL);
|
||||
else {
|
||||
pd.updateTime(); //Avoid spamming the server with porn URLs
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(new C2SMessageMinepadUrl(pd.id, url));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (ScreenBlockEntity tes : proxy.getScreens())
|
||||
tes.updateClientSideURL(browser, url);
|
||||
}
|
||||
|
||||
// enables a custom pointer lock api
|
||||
browser.executeJavaScript(pointerLock, "WebDisplays", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTitleChange(CefBrowser cefBrowser, String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTooltip(CefBrowser cefBrowser, String s) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStatusMessage(CefBrowser cefBrowser, String s) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onConsoleMessage(CefBrowser cefBrowser, CefSettings.LogSeverity logSeverity, String s, String s1, int i) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCursorChange(CefBrowser cefBrowser, int i) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +1,16 @@
|
|||
package net.montoyo.wd.client.js;
|
||||
package net.montoyo.wd.client.handlers.js;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.montoyo.wd.entity.ScreenData;
|
||||
import org.cef.browser.CefBrowser;
|
||||
import org.cef.browser.CefFrame;
|
||||
import org.cef.callback.CefQueryCallback;
|
||||
import org.cef.handler.CefMessageRouterHandler;
|
||||
import org.cef.handler.CefMessageRouterHandlerAdapter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class WDRouter extends CefMessageRouterHandlerAdapter {
|
||||
public static final WDRouter INSTANCE = new WDRouter();
|
||||
16
src/main/resources/assets/webdisplays/js/pointer_lock.js
Normal file
16
src/main/resources/assets/webdisplays/js/pointer_lock.js
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
const elemRef = { element: undefined };
|
||||
|
||||
Document.prototype.__defineGetter__("pointerLockElement", () => elemRef['element']);
|
||||
Document.prototype.__defineSetter__("pointerLockElement", (v) => {});
|
||||
|
||||
Element.prototype.requestPointerLock = function(unadjustedMovement = false) {
|
||||
elemRef['element'] = this;
|
||||
document.pointerLockElement = elemRef['element'];
|
||||
document.dispatchEvent(new Event("pointerlockchange"));
|
||||
}
|
||||
Document.prototype.exitPointerLock = () => {
|
||||
elemRef['element'] = undefined;
|
||||
document.pointerLockElement = elemRef['element'];
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user