Packet for turning off a screen, start working on schema stuff
This commit is contained in:
parent
3548b5806c
commit
a4f8b630ef
Binary file not shown.
|
|
@ -85,6 +85,7 @@ import org.cef.CefSettings;
|
||||||
import org.cef.browser.CefBrowser;
|
import org.cef.browser.CefBrowser;
|
||||||
import org.cef.browser.CefFrame;
|
import org.cef.browser.CefFrame;
|
||||||
import org.cef.handler.CefDisplayHandler;
|
import org.cef.handler.CefDisplayHandler;
|
||||||
|
import org.cef.network.CefRequest;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
@ -262,16 +263,21 @@ public class ClientProxy extends SharedProxy implements CefDisplayHandler/*, IJS
|
||||||
@Override
|
@Override
|
||||||
public void onCefInit(/*CefInitEvent event*/) {
|
public void onCefInit(/*CefInitEvent event*/) {
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
// if (mcef != null)
|
|
||||||
// mcef.registerScheme("wd", WDScheme.class, true, false, false, true, true, false, false);
|
if (!MCEF.isInitialized()) return;
|
||||||
|
|
||||||
|
MCEF.getApp().getHandle().registerSchemeHandlerFactory(
|
||||||
|
"webdisplays", "",
|
||||||
|
(browser, frame, url, request) -> {
|
||||||
|
// TODO: check if it's a webdisplays browser?
|
||||||
|
return new WDScheme(request.getURL());
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// jsDispatcher = new JSQueryDispatcher(this);
|
// jsDispatcher = new JSQueryDispatcher(this);
|
||||||
minePadRenderer = new MinePadRenderer();
|
minePadRenderer = new MinePadRenderer();
|
||||||
laserPointerRenderer = new LaserPointerRenderer();
|
laserPointerRenderer = new LaserPointerRenderer();
|
||||||
|
|
||||||
// if (mcef == null)
|
|
||||||
// throw new RuntimeException("MCEF is missing");
|
|
||||||
|
|
||||||
MCEF.getClient().addDisplayHandler(this);
|
MCEF.getClient().addDisplayHandler(this);
|
||||||
// mcef.registerJSQueryHandler(this);
|
// mcef.registerJSQueryHandler(this);
|
||||||
findAdvancementToProgressField();
|
findAdvancementToProgressField();
|
||||||
|
|
|
||||||
|
|
@ -1,149 +1,196 @@
|
||||||
///*
|
/*
|
||||||
// * Copyright (C) 2018 BARBOTIN Nicolas
|
* Copyright (C) 2018 BARBOTIN Nicolas
|
||||||
// */
|
*/
|
||||||
//
|
|
||||||
//package net.montoyo.wd.client;
|
package net.montoyo.wd.client;
|
||||||
//
|
|
||||||
//import net.montoyo.mcef.api.IScheme;
|
import net.montoyo.wd.miniserv.Constants;
|
||||||
//import net.montoyo.mcef.api.ISchemeResponseData;
|
import net.montoyo.wd.miniserv.client.Client;
|
||||||
//import net.montoyo.mcef.api.ISchemeResponseHeaders;
|
import net.montoyo.wd.miniserv.client.ClientTaskGetFile;
|
||||||
//import net.montoyo.mcef.api.SchemePreResponse;
|
import net.montoyo.wd.utilities.Log;
|
||||||
//import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.utilities.Util;
|
||||||
//import net.montoyo.wd.miniserv.Constants;
|
import org.cef.callback.CefCallback;
|
||||||
//import net.montoyo.wd.miniserv.client.Client;
|
import org.cef.handler.CefResourceHandler;
|
||||||
//import net.montoyo.wd.miniserv.client.ClientTaskGetFile;
|
import org.cef.misc.IntRef;
|
||||||
//import net.montoyo.wd.utilities.Log;
|
import org.cef.misc.StringRef;
|
||||||
//import net.montoyo.wd.utilities.Util;
|
import org.cef.network.CefRequest;
|
||||||
//
|
import org.cef.network.CefResponse;
|
||||||
//import java.io.UnsupportedEncodingException;
|
|
||||||
//import java.net.URLDecoder;
|
import java.io.UnsupportedEncodingException;
|
||||||
//import java.util.UUID;
|
import java.net.URLDecoder;
|
||||||
//
|
import java.util.UUID;
|
||||||
//public class WDScheme implements IScheme {
|
|
||||||
//
|
public class WDScheme implements CefResourceHandler {
|
||||||
// private static final String ERROR_PAGE = "<!DOCTYPE html><html><head></head><body><h1>%d %s</h1><hr /><i>Miniserv powered by WebDisplays</i></body></html>";
|
|
||||||
// private ClientTaskGetFile task;
|
private static final String ERROR_PAGE = "<!DOCTYPE html><html><head></head><body><h1>%d %s</h1><hr /><i>Miniserv powered by WebDisplays</i></body></html>";
|
||||||
// private boolean isErrorPage;
|
private ClientTaskGetFile task;
|
||||||
//
|
private boolean isErrorPage;
|
||||||
// @Override
|
|
||||||
// public SchemePreResponse processRequest(String url) {
|
String url;
|
||||||
// url = url.substring("wd://".length());
|
|
||||||
//
|
public WDScheme(String url) {
|
||||||
// int pos = url.indexOf('/');
|
this.url = url;
|
||||||
// if(pos < 0)
|
}
|
||||||
// return SchemePreResponse.NOT_HANDLED;
|
|
||||||
//
|
@Override
|
||||||
// String uuidStr = url.substring(0, pos);
|
public boolean processRequest(CefRequest cefRequest, CefCallback cefCallback) {
|
||||||
// String fileStr = url.substring(pos + 1);
|
url = cefRequest.getURL();
|
||||||
//
|
|
||||||
// try {
|
int pos = url.indexOf('/');
|
||||||
// fileStr = URLDecoder.decode(fileStr, "UTF-8");
|
if(pos < 0)
|
||||||
// } catch(UnsupportedEncodingException ex) {
|
return false;
|
||||||
// Log.warningEx("UTF-8 isn't supported... yeah... and I'm a billionaire...", ex);
|
|
||||||
// }
|
String uuidStr = url.substring(0, pos);
|
||||||
//
|
String fileStr = url.substring(pos + 1);
|
||||||
// if(uuidStr.isEmpty() || Util.isFileNameInvalid(fileStr))
|
|
||||||
// return SchemePreResponse.NOT_HANDLED;
|
try {
|
||||||
//
|
fileStr = URLDecoder.decode(fileStr, "UTF-8");
|
||||||
// UUID uuid;
|
} catch(UnsupportedEncodingException ex) {
|
||||||
// try {
|
Log.warningEx("UTF-8 isn't supported... yeah... and I'm a billionaire...", ex);
|
||||||
// uuid = UUID.fromString(uuidStr);
|
}
|
||||||
// } catch(IllegalArgumentException ex) {
|
|
||||||
// return SchemePreResponse.NOT_HANDLED; //Invalid UUID
|
if(uuidStr.isEmpty() || Util.isFileNameInvalid(fileStr))
|
||||||
// }
|
return false;
|
||||||
//
|
|
||||||
// task = new ClientTaskGetFile(uuid, fileStr);
|
UUID uuid;
|
||||||
// return Client.getInstance().addTask(task) ? SchemePreResponse.HANDLED_CONTINUE : SchemePreResponse.NOT_HANDLED;
|
try {
|
||||||
// }
|
uuid = UUID.fromString(uuidStr);
|
||||||
//
|
} catch(IllegalArgumentException ex) {
|
||||||
// @Override
|
return false; //Invalid UUID
|
||||||
// public void getResponseHeaders(ISchemeResponseHeaders resp) {
|
}
|
||||||
// Log.info("Waiting for response...");
|
|
||||||
// int status = task.waitForResponse();
|
task = new ClientTaskGetFile(uuid, fileStr);
|
||||||
// Log.info("Got response %d", status);
|
return Client.getInstance().addTask(task) ? true : false;
|
||||||
//
|
}
|
||||||
// if(status == 0) {
|
|
||||||
// //OK
|
@Override
|
||||||
// int extPos = task.getFileName().lastIndexOf('.');
|
public void getResponseHeaders(CefResponse cefResponse, IntRef intRef, StringRef stringRef) {
|
||||||
// if(extPos >= 0) {
|
Log.info("Waiting for response...");
|
||||||
// String mime = ((ClientProxy) WebDisplays.PROXY).getMCEF().mimeTypeFromExtension(task.getFileName().substring(extPos + 1));
|
int status = task.waitForResponse();
|
||||||
//
|
Log.info("Got response %d", status);
|
||||||
// if(mime != null)
|
|
||||||
// resp.setMimeType(mime);
|
if(status == 0) {
|
||||||
// }
|
//OK
|
||||||
//
|
int extPos = task.getFileName().lastIndexOf('.');
|
||||||
// resp.setStatus(200);
|
if(extPos >= 0) {
|
||||||
// resp.setStatusText("OK");
|
String mime = mapMime(task.getFileName().substring(extPos + 1));
|
||||||
// resp.setResponseLength(-1);
|
|
||||||
// return;
|
if(mime != null)
|
||||||
// }
|
cefResponse.setMimeType(mime);
|
||||||
//
|
}
|
||||||
// int errCode;
|
|
||||||
// String errStr;
|
cefResponse.setStatus(200);
|
||||||
//
|
cefResponse.setStatusText("OK");
|
||||||
// if(status == Constants.GETF_STATUS_NOT_FOUND) {
|
cefResponse.setHeaderByName("content-length", "" + -1, true);
|
||||||
// errCode = 404;
|
return;
|
||||||
// errStr = "Not Found";
|
}
|
||||||
// } else {
|
|
||||||
// errCode = 500;
|
int errCode;
|
||||||
// errStr = "Internal Server Error";
|
String errStr;
|
||||||
// }
|
|
||||||
//
|
if(status == Constants.GETF_STATUS_NOT_FOUND) {
|
||||||
// resp.setStatus(errCode);
|
errCode = 404;
|
||||||
// resp.setStatusText(errStr);
|
errStr = "Not Found";
|
||||||
//
|
} else {
|
||||||
// try {
|
errCode = 500;
|
||||||
// dataToWrite = String.format(ERROR_PAGE, errCode, errStr).getBytes("UTF-8");
|
errStr = "Internal Server Error";
|
||||||
// dataOffset = 0;
|
}
|
||||||
// amountToWrite = dataToWrite.length;
|
|
||||||
// isErrorPage = true;
|
cefResponse.setStatus(errCode);
|
||||||
// resp.setResponseLength(amountToWrite);
|
cefResponse.setStatusText(errStr);
|
||||||
// } catch(UnsupportedEncodingException ex) {
|
|
||||||
// resp.setResponseLength(0);
|
try {
|
||||||
// }
|
dataToWrite = String.format(ERROR_PAGE, errCode, errStr).getBytes("UTF-8");
|
||||||
// }
|
dataOffset = 0;
|
||||||
//
|
amountToWrite = dataToWrite.length;
|
||||||
// private byte[] dataToWrite;
|
isErrorPage = true;
|
||||||
// private int dataOffset;
|
cefResponse.setHeaderByName("content-length", "" + amountToWrite, true);
|
||||||
// private int amountToWrite;
|
} catch(UnsupportedEncodingException ex) {
|
||||||
//
|
cefResponse.setHeaderByName("content-length", "" + 0, true);
|
||||||
// @Override
|
// cefResponse.setResponseLength(0);
|
||||||
// public boolean readResponse(ISchemeResponseData data) {
|
}
|
||||||
// if(dataToWrite == null) {
|
}
|
||||||
// if(isErrorPage) {
|
|
||||||
|
private byte[] dataToWrite;
|
||||||
|
private int dataOffset;
|
||||||
|
private int amountToWrite;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean readResponse(byte[] bytes, int i, IntRef intRef, CefCallback cefCallback) {
|
||||||
|
if(dataToWrite == null) {
|
||||||
|
if(isErrorPage) {
|
||||||
// data.setAmountRead(0);
|
// data.setAmountRead(0);
|
||||||
// return false;
|
return false;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// dataToWrite = task.waitForData();
|
dataToWrite = task.waitForData();
|
||||||
// dataOffset = 3; //packet ID + size
|
dataOffset = 3; //packet ID + size
|
||||||
// amountToWrite = task.getDataLength();
|
amountToWrite = task.getDataLength();
|
||||||
//
|
|
||||||
// if(amountToWrite <= 0) {
|
if(amountToWrite <= 0) {
|
||||||
// dataToWrite = null;
|
dataToWrite = null;
|
||||||
// data.setAmountRead(0);
|
// data.setAmountRead(0);
|
||||||
// return false;
|
return false;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// int toWrite = data.getBytesToRead();
|
// int toWrite = data.getBytesToRead();
|
||||||
// if(toWrite > amountToWrite)
|
// if(toWrite > amountToWrite)
|
||||||
// toWrite = amountToWrite;
|
// toWrite = amountToWrite;
|
||||||
//
|
|
||||||
// System.arraycopy(dataToWrite, dataOffset, data.getDataArray(), 0, toWrite);
|
// System.arraycopy(dataToWrite, dataOffset, data.getDataArray(), 0, toWrite);
|
||||||
// data.setAmountRead(toWrite);
|
// data.setAmountRead(toWrite);
|
||||||
//
|
|
||||||
// dataOffset += toWrite;
|
// dataOffset += toWrite;
|
||||||
// amountToWrite -= toWrite;
|
// amountToWrite -= toWrite;
|
||||||
//
|
|
||||||
// if(amountToWrite <= 0) {
|
if(amountToWrite <= 0) {
|
||||||
// if(!isErrorPage)
|
if(!isErrorPage)
|
||||||
// task.nextData();
|
task.nextData();
|
||||||
//
|
|
||||||
// dataToWrite = null;
|
dataToWrite = null;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// return true;
|
return true;
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
//}
|
@Override
|
||||||
|
public void cancel() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String mapMime(String ext) {
|
||||||
|
switch (ext) {
|
||||||
|
case "htm":
|
||||||
|
case "html":
|
||||||
|
return "text/html";
|
||||||
|
|
||||||
|
case "css":
|
||||||
|
return "text/css";
|
||||||
|
|
||||||
|
case "js":
|
||||||
|
return "text/javascript";
|
||||||
|
|
||||||
|
case "png":
|
||||||
|
return "image/png";
|
||||||
|
|
||||||
|
case "jpg":
|
||||||
|
case "jpeg":
|
||||||
|
return "image/jpeg";
|
||||||
|
|
||||||
|
case "gif":
|
||||||
|
return "image/gif";
|
||||||
|
|
||||||
|
case "svg":
|
||||||
|
return "image/svg+xml";
|
||||||
|
|
||||||
|
case "xml":
|
||||||
|
return "text/xml";
|
||||||
|
|
||||||
|
case "txt":
|
||||||
|
return "text/plain";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -110,12 +110,12 @@ public class ControlGroup extends Container {
|
||||||
RenderSystem.enableBlend();
|
RenderSystem.enableBlend();
|
||||||
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
|
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
double x1 = (double) x;
|
double x1 = x;
|
||||||
double y1 = (double) y;
|
double y1 = y;
|
||||||
double x2 = (double) (x + width);
|
double x2 = (x + width);
|
||||||
double y2 = (double) (y + height);
|
double y2 = (y + height);
|
||||||
double bp = 4.0;
|
double bp = 4.0;
|
||||||
double lw = (double) labelW;
|
double lw = labelW;
|
||||||
|
|
||||||
x1 += bp;
|
x1 += bp;
|
||||||
y1 += bp;
|
y1 += bp;
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ public class ScreenControlRegistry {
|
||||||
register(ManageRightsAndUpdgradesControl.id, new ScreenControlType<>(ManageRightsAndUpdgradesControl.class, ManageRightsAndUpdgradesControl::new));
|
register(ManageRightsAndUpdgradesControl.id, new ScreenControlType<>(ManageRightsAndUpdgradesControl.class, ManageRightsAndUpdgradesControl::new));
|
||||||
register(ClickControl.id, new ScreenControlType<>(ClickControl.class, ClickControl::new));
|
register(ClickControl.id, new ScreenControlType<>(ClickControl.class, ClickControl::new));
|
||||||
register(OwnerControl.id, new ScreenControlType<>(OwnerControl.class, OwnerControl::new));
|
register(OwnerControl.id, new ScreenControlType<>(OwnerControl.class, OwnerControl::new));
|
||||||
|
register(TurnOffControl.id, new ScreenControlType<>(TurnOffControl.class, (buf) -> TurnOffControl.INSTANCE));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ScreenControl parse(FriendlyByteBuf buf) {
|
public static ScreenControl parse(FriendlyByteBuf buf) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
package net.montoyo.wd.controls.builtin;
|
||||||
|
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
|
import net.montoyo.wd.WebDisplays;
|
||||||
|
import net.montoyo.wd.controls.ScreenControl;
|
||||||
|
import net.montoyo.wd.core.MissingPermissionException;
|
||||||
|
import net.montoyo.wd.entity.TileEntityScreen;
|
||||||
|
import net.montoyo.wd.utilities.BlockSide;
|
||||||
|
import net.montoyo.wd.utilities.NameUUIDPair;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public class TurnOffControl extends ScreenControl {
|
||||||
|
public static final ResourceLocation id = new ResourceLocation("webdisplays:deactivate");
|
||||||
|
|
||||||
|
public static final TurnOffControl INSTANCE = new TurnOffControl();
|
||||||
|
|
||||||
|
public TurnOffControl() {
|
||||||
|
super(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void write(FriendlyByteBuf buf) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handleServer(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx, Function<Integer, Boolean> permissionChecker) throws MissingPermissionException {
|
||||||
|
throw new RuntimeException("Cannot handle deactivation packet from server");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@OnlyIn(Dist.CLIENT)
|
||||||
|
public void handleClient(BlockPos pos, BlockSide side, TileEntityScreen tes, NetworkEvent.Context ctx) {
|
||||||
|
if (side != null) {
|
||||||
|
WebDisplays.PROXY.closeGui(pos, side);
|
||||||
|
tes.disableScreen(side);
|
||||||
|
} else {
|
||||||
|
for (BlockSide value : BlockSide.values()) {
|
||||||
|
WebDisplays.PROXY.closeGui(pos, value);
|
||||||
|
tes.disableScreen(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -64,7 +64,7 @@ public class TileEntityScreen extends BlockEntity {
|
||||||
public TileEntityScreen(BlockPos arg2, BlockState arg3) {
|
public TileEntityScreen(BlockPos arg2, BlockState arg3) {
|
||||||
super(TileInit.SCREEN_BLOCK_ENTITY.get(), arg2, arg3);
|
super(TileInit.SCREEN_BLOCK_ENTITY.get(), arg2, arg3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Screen {
|
public static class Screen {
|
||||||
|
|
||||||
public BlockSide side;
|
public BlockSide side;
|
||||||
|
|
@ -1140,7 +1140,27 @@ public class TileEntityScreen extends BlockEntity {
|
||||||
scr.upgrades.clear();
|
scr.upgrades.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), new S2CMessageCloseGui(getBlockPos()));
|
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.turnOff(getBlockPos(), null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disableScreen(BlockSide side) {
|
||||||
|
Screen remove = null;
|
||||||
|
for (Screen screen : screens) {
|
||||||
|
if (screen.side == side) {
|
||||||
|
remove = screen;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (remove == null) return;
|
||||||
|
|
||||||
|
if (level != null && !level.isClientSide) {
|
||||||
|
final Screen scrn = remove;
|
||||||
|
remove.upgrades.forEach(is -> dropUpgrade(is, scrn.side, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
remove.upgrades.clear();
|
||||||
|
screens.remove(remove);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOwner(BlockSide side, Player newOwner) {
|
public void setOwner(BlockSide side, Player newOwner) {
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,13 @@ public class S2CMessageScreenUpdate extends Packet {
|
||||||
screenUpdate.control = new OwnerControl(owner);
|
screenUpdate.control = new OwnerControl(owner);
|
||||||
return screenUpdate;
|
return screenUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static S2CMessageScreenUpdate turnOff(BlockPos blockPos, BlockSide side) {
|
||||||
|
S2CMessageScreenUpdate screenUpdate = new S2CMessageScreenUpdate(blockPos, side);
|
||||||
|
screenUpdate.control = TurnOffControl.INSTANCE;
|
||||||
|
return screenUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(FriendlyByteBuf buf) {
|
public void write(FriendlyByteBuf buf) {
|
||||||
buf.writeBlockPos(pos);
|
buf.writeBlockPos(pos);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user