slight tweaks, start looking into a potential way to sync videos
This commit is contained in:
parent
7c7d008589
commit
4ac3edb4af
|
|
@ -179,7 +179,7 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
|||
throw new RuntimeException("MCEF is missing");
|
||||
|
||||
mcef.registerDisplayHandler(this);
|
||||
//mcef.registerJSQueryHandler(this); //TODO why crashing on this method!
|
||||
mcef.registerJSQueryHandler(this);
|
||||
findAdvancementToProgressField();
|
||||
}
|
||||
|
||||
|
|
@ -698,13 +698,17 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
|
|||
|
||||
if(t - lastPointPacket >= 100) {
|
||||
lastPointPacket = t;
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(C2SMessageScreenCtrl.laserMove(tes, side, hit));
|
||||
if (Minecraft.getInstance().player.isShiftKeyDown()) {
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(C2SMessageScreenCtrl.laserDown(tes, side, hit));
|
||||
} else {
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(C2SMessageScreenCtrl.laserMove(tes, side, hit));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
deselectScreen();
|
||||
pointedScreen = tes;
|
||||
pointedScreenSide = side;
|
||||
WDNetworkRegistry.INSTANCE.sendToServer(C2SMessageScreenCtrl.laserDown(tes, side, hit));
|
||||
// WDNetworkRegistry.INSTANCE.sendToServer(C2SMessageScreenCtrl.laserDown(tes, side, hit));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -218,6 +218,8 @@ public final class JSQueryDispatcher {
|
|||
}
|
||||
|
||||
private void registerDefaults() {
|
||||
VideoType.registerQueries(this);
|
||||
|
||||
register("GetSize", (cb, tes, side, args) -> {
|
||||
Vector2i size = tes.getScreen(side).size;
|
||||
cb.success("{\"x\":" + size.x + ",\"y\":" + size.y + "}");
|
||||
|
|
|
|||
|
|
@ -1074,11 +1074,12 @@ public class TileEntityScreen extends BlockEntity {
|
|||
if (scr != null) {
|
||||
if (down) {
|
||||
//Try to acquire laser lock
|
||||
if (getLaserUser(scr) == null) {
|
||||
// if (getLaserUser(scr) == null) {
|
||||
scr.laserUser = ply;
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.click(this, side, S2CMessageScreenUpdate.MOUSE_DOWN, pos));
|
||||
}
|
||||
} else if (getLaserUser(scr) == ply)
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.click(this, side, S2CMessageScreenUpdate.MOUSE_CLICK, pos));
|
||||
// }
|
||||
} else
|
||||
// if (getLaserUser(scr) == ply)
|
||||
WDNetworkRegistry.INSTANCE.send(PacketDistributor.NEAR.with(() -> point(level, getBlockPos())), S2CMessageScreenUpdate.click(this, side, S2CMessageScreenUpdate.MOUSE_MOVE, pos));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ public class C2SMessageScreenCtrl extends Packet {
|
|||
|
||||
public static C2SMessageScreenCtrl laserDown(TileEntityScreen tes, BlockSide side, Vector2i vec) {
|
||||
C2SMessageScreenCtrl ret = base(tes, side);
|
||||
ret.control = new LaserControl(LaserControl.ControlType.MOVE, vec);
|
||||
ret.control = new LaserControl(LaserControl.ControlType.DOWN, vec);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,87 +4,138 @@
|
|||
|
||||
package net.montoyo.wd.utilities;
|
||||
|
||||
import net.montoyo.wd.client.JSQueryDispatcher;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
public enum VideoType {
|
||||
|
||||
YOUTUBE("document.getElementById(\"movie_player\").setVolume(", ")"),
|
||||
YOUTUBE_EMBED("document.getElementsByClassName(\"html5-video-player\")[0].setVolume(", ")");
|
||||
|
||||
private final String volumePrefix;
|
||||
private final String volumeSuffix;
|
||||
private final int volumeCap;
|
||||
|
||||
VideoType(String prefix, String suffix) {
|
||||
volumePrefix = prefix;
|
||||
volumeSuffix = suffix;
|
||||
volumeCap = prefix.length() + 5 + suffix.length();
|
||||
|
||||
YOUTUBE(
|
||||
"document.getElementById(\"movie_player\").",
|
||||
new Function("setVolume(", ")"),
|
||||
new Function("getCurrentTime(", ")"),
|
||||
new Function("seekTo(", ")")
|
||||
),
|
||||
YOUTUBE_EMBED(
|
||||
"document.getElementsByClassName(\"html5-video-player\")[0].",
|
||||
new Function("setVolume(", ")"),
|
||||
new Function("getCurrentTime(", ")"),
|
||||
new Function("seekTo(", ")")
|
||||
);
|
||||
|
||||
private final String base;
|
||||
private final Function volume;
|
||||
private final Function getTime;
|
||||
private final Function setTime;
|
||||
private final int volumeCap;
|
||||
|
||||
VideoType(
|
||||
String base,
|
||||
Function volume,
|
||||
Function getTime,
|
||||
Function setTime
|
||||
) {
|
||||
this.base = base;
|
||||
this.volume = volume;
|
||||
this.getTime = getTime;
|
||||
this.setTime = setTime;
|
||||
// lol, what?
|
||||
volumeCap = volume.prefix.length() + 5 + volume.suffix.length();
|
||||
}
|
||||
|
||||
public static void registerQueries(JSQueryDispatcher jsQueryDispatcher) {
|
||||
// TODO: register GetTime query
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull URL url) {
|
||||
String loHost = url.getHost().toLowerCase();
|
||||
if(loHost.equals("youtu.be"))
|
||||
return url.getPath().length() > 1 ? YOUTUBE : null;
|
||||
else if(!loHost.equals("www.youtube.com") && !loHost.equals("youtube.com"))
|
||||
return null;
|
||||
|
||||
String loPath = url.getPath().toLowerCase();
|
||||
if(loPath.equals("/watch")) {
|
||||
if(url.getQuery() != null && (url.getQuery().startsWith("v=") || url.getQuery().contains("&v=")))
|
||||
return YOUTUBE;
|
||||
} else if(loPath.startsWith("/embed/"))
|
||||
return loPath.length() > 7 ? YOUTUBE_EMBED : null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull String url) {
|
||||
try {
|
||||
return getTypeFromURL(new URL(url));
|
||||
} catch(MalformedURLException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getVideoIDFromURL(@Nonnull URL url) {
|
||||
if(this == YOUTUBE) {
|
||||
if(url.getHost().equalsIgnoreCase("youtu.be"))
|
||||
return url.getPath().substring(1);
|
||||
|
||||
String args[] = url.getQuery().split("&");
|
||||
for(String arg : args) {
|
||||
if(arg.startsWith("v="))
|
||||
return arg.substring(2);
|
||||
}
|
||||
} else if(this == YOUTUBE_EMBED)
|
||||
return url.getPath().substring(7);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getURLFromID(@Nonnull String vid, boolean autoplay) {
|
||||
String format;
|
||||
if(this == YOUTUBE)
|
||||
format = autoplay ? "https://www.youtube.com/watch?v=%s&autoplay=1" : "https://www.youtube.com/watch?v=%s";
|
||||
else if(this == YOUTUBE_EMBED)
|
||||
format = autoplay ? "https://www.youtube.com/embed/%s?autoplay=1" : "https://www.youtube.com/embed/%s";
|
||||
else
|
||||
return "";
|
||||
|
||||
return String.format(format, vid);
|
||||
}
|
||||
|
||||
// TODO: timestamp stuff
|
||||
@Nonnull
|
||||
public String getVolumeJSQuery(int volInt, int volFrac) {
|
||||
return (new StringBuilder(volumeCap)).append(volumePrefix).append(volInt).append('.').append(volFrac).append(volumeSuffix).toString();
|
||||
}
|
||||
|
||||
|
||||
protected static class Function {
|
||||
String prefix, suffix;
|
||||
|
||||
public Function(String prefix, String suffix) {
|
||||
this.prefix = prefix;
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
public String apply() {
|
||||
return prefix + suffix;
|
||||
}
|
||||
|
||||
public String apply(String arg) {
|
||||
return prefix + arg + suffix;
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull URL url) {
|
||||
String loHost = url.getHost().toLowerCase();
|
||||
if (loHost.equals("youtu.be"))
|
||||
return url.getPath().length() > 1 ? YOUTUBE : null;
|
||||
else if (!loHost.equals("www.youtube.com") && !loHost.equals("youtube.com"))
|
||||
return null;
|
||||
|
||||
String loPath = url.getPath().toLowerCase();
|
||||
if (loPath.equals("/watch")) {
|
||||
if (url.getQuery() != null && (url.getQuery().startsWith("v=") || url.getQuery().contains("&v=")))
|
||||
return YOUTUBE;
|
||||
} else if (loPath.startsWith("/embed/"))
|
||||
return loPath.length() > 7 ? YOUTUBE_EMBED : null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static VideoType getTypeFromURL(@Nonnull String url) {
|
||||
try {
|
||||
return getTypeFromURL(new URL(url));
|
||||
} catch (MalformedURLException ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getVideoIDFromURL(@Nonnull URL url) {
|
||||
if (this == YOUTUBE) {
|
||||
if (url.getHost().equalsIgnoreCase("youtu.be"))
|
||||
return url.getPath().substring(1);
|
||||
|
||||
String args[] = url.getQuery().split("&");
|
||||
for (String arg : args) {
|
||||
if (arg.startsWith("v="))
|
||||
return arg.substring(2);
|
||||
}
|
||||
} else if (this == YOUTUBE_EMBED)
|
||||
return url.getPath().substring(7);
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
public String getURLFromID(@Nonnull String vid, boolean autoplay) {
|
||||
String format;
|
||||
if (this == YOUTUBE)
|
||||
format = autoplay ? "https://www.youtube.com/watch?v=%s&autoplay=1" : "https://www.youtube.com/watch?v=%s";
|
||||
else if (this == YOUTUBE_EMBED)
|
||||
format = autoplay ? "https://www.youtube.com/embed/%s?autoplay=1" : "https://www.youtube.com/embed/%s";
|
||||
else
|
||||
return "";
|
||||
|
||||
return String.format(format, vid);
|
||||
}
|
||||
|
||||
// TODO: timestamp stuff
|
||||
@Nonnull
|
||||
public String getVolumeJSQuery(int volInt, int volFrac) {
|
||||
return volume.apply(volInt + "." + volFrac);
|
||||
}
|
||||
|
||||
public String getTimeStampQuery() {
|
||||
return getTime.apply();
|
||||
}
|
||||
|
||||
public String setTimeStampQuery(float ts) {
|
||||
return setTime.apply(String.valueOf(ts));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user