This commit is contained in:
Mysticpasta1 2023-03-08 10:59:12 -06:00
parent cd31a5efab
commit f4dbd00f9d
13 changed files with 217 additions and 129 deletions

View File

@ -90,8 +90,12 @@ public class ClientProxy extends SharedProxy implements IDisplayHandler, IJSQuer
private long lastURLSent;
private PadData(String url, int id) {
Messages.sendUrlUpdate(url);
String webUrl = SyncedUrl.getUrl();
String webUrl;
try {
webUrl = TileEntityScreen.url(url);
} catch (IOException e) {
throw new RuntimeException(e);
}
view = mcef.createBrowser(WebDisplays.applyBlacklist(webUrl));
view.resize((int) WebDisplays.INSTANCE.padResX, (int) WebDisplays.INSTANCE.padResY);
isInHotbar = true;

View File

@ -24,7 +24,6 @@ import net.montoyo.wd.net.Messages;
import net.montoyo.wd.net.server.SMessagePadCtrl;
import net.montoyo.wd.net.server.SMessageScreenCtrl;
import net.montoyo.wd.utilities.BlockSide;
import net.montoyo.wd.utilities.SyncedUrl;
import net.montoyo.wd.utilities.Util;
import net.montoyo.wd.utilities.Vector3i;
@ -106,8 +105,11 @@ public class GuiSetURL2 extends WDScreen {
private void validate(String url) {
if(!url.isEmpty()) {
Messages.sendUrlUpdate(url);
url = SyncedUrl.getUrl();
try {
TileEntityScreen.url(url);
} catch (IOException e) {
throw new RuntimeException(e);
}
url = Util.addProtocol(url);
url = ((ClientProxy) WebDisplays.PROXY).getMCEF().punycode(url);

View File

@ -4,21 +4,27 @@
package net.montoyo.wd.client.renderers;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.phys.AABB;
import net.montoyo.wd.SharedProxy;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.client.ClientProxy;
import net.montoyo.wd.entity.ServerEventHandler;
import net.montoyo.wd.entity.TileEntityScreen;
import net.montoyo.wd.miniserv.SyncPlugin;
import net.montoyo.wd.utilities.Vector3f;
import net.montoyo.wd.utilities.Vector3i;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import static com.mojang.math.Vector3f.*;
import static org.lwjgl.opengl.GL11.*;

View File

@ -3,31 +3,30 @@ package net.montoyo.wd.entity;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.montoyo.wd.client.renderers.ScreenRenderer;
import net.montoyo.wd.net.Messages;
import net.montoyo.wd.utilities.SyncedUrl;
import net.montoyo.wd.miniserv.SyncPlugin;
import java.util.HashMap;
import java.util.Map;
public class ServerEventHandler extends ScreenRenderer{
public static final Map<ServerPlayer, ScreenRenderer> playerScreens = new HashMap<>();
@Mod.EventBusSubscriber(modid = "webdisplays", bus = Mod.EventBusSubscriber.Bus.FORGE)
public class ServerEventHandler {
@SubscribeEvent
public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) {
// Send current URL to player
String url = SyncedUrl.getUrl();
new ScreenRenderer(Messages.sendUrlToPlayer(url));
public void onPlayerConnect(PlayerEvent.PlayerLoggedInEvent event) {
// create a new instance of the ScreenRenderer class for the player
ServerPlayer player = (ServerPlayer) event.getEntity();
String url = SyncPlugin.getPlayerString(player);
ScreenRenderer screen = new ScreenRenderer(url);
// store the ScreenRenderer instance in the playerScreens map
playerScreens.put(player, screen);
}
@SubscribeEvent
public static void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event) {
// Re-sync URL when player logs back in
String url = SyncedUrl.getUrl();
Messages.sendUrlUpdate(url);
}
@SubscribeEvent
public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
// Send current URL to player
String url = SyncedUrl.getUrl();
new ScreenRenderer(Messages.sendUrlToPlayer(url));
public void onPlayerDisconnect(PlayerEvent.PlayerLoggedOutEvent event) {
// remove the ScreenRenderer instance for the player
ServerPlayer player = (ServerPlayer) event.getEntity();
playerScreens.remove(player);
}
}

View File

@ -4,10 +4,19 @@
package net.montoyo.wd.entity;
import com.mojang.authlib.minecraft.client.MinecraftClient;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.multiplayer.PlayerInfo;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.multiplayer.resolver.ServerAddress;
import net.minecraft.client.player.AbstractClientPlayer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.network.Connection;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
@ -22,6 +31,7 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.network.PacketDistributor;
import net.montoyo.mcef.api.IBrowser;
import net.montoyo.wd.SharedProxy;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.block.BlockScreen;
import net.montoyo.wd.client.ClientProxy;
@ -33,15 +43,21 @@ import net.montoyo.wd.data.ScreenConfigData;
import net.montoyo.wd.init.BlockInit;
import net.montoyo.wd.init.ItemInit;
import net.montoyo.wd.init.TileInit;
import net.montoyo.wd.miniserv.SyncPlugin;
import net.montoyo.wd.net.Messages;
import net.montoyo.wd.net.client.*;
import net.montoyo.wd.net.server.SMessageGetUrl;
import net.montoyo.wd.net.server.SMessageRequestTEData;
import net.montoyo.wd.net.server.URLMessage;
import net.montoyo.wd.utilities.*;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.net.*;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.function.Consumer;
import static net.montoyo.wd.block.BlockPeripheral.point;
@ -363,6 +379,20 @@ public class TileEntityScreen extends BlockEntity {
Messages.INSTANCE.send(PacketDistributor.PLAYER.with(() -> ep), new CMessageAddScreen(this));
}
public static String url(String url) throws IOException {
System.out.println("URL received: " + url);
if (!(WebDisplays.PROXY instanceof ClientProxy)) {
List<ServerPlayer> serverPlayers = WebDisplays.PROXY.getServer().getPlayerList().getPlayers();
SyncPlugin.syncPlayers(serverPlayers);
for (ServerPlayer serverPlayer : serverPlayers) {
SyncPlugin.setPlayerString(serverPlayer, url);
}
return url;
} else {
return null;
}
}
public void setScreenURL(BlockSide side, String url) throws IOException {
Screen scr = getScreen(side);
if (scr == null) {
@ -370,8 +400,7 @@ public class TileEntityScreen extends BlockEntity {
return;
}
Messages.sendUrlUpdate(url);
String weburl = SyncedUrl.getUrl();
String weburl = url(url);
weburl = WebDisplays.applyBlacklist(weburl);
scr.url = weburl;
@ -692,10 +721,14 @@ public class TileEntityScreen extends BlockEntity {
public void updateClientSideURL(IBrowser target, String url) {
for (Screen scr : screens) {
if (scr.browser == target) {
Messages.sendUrlUpdate(url);
String weburl = SyncedUrl.getUrl();
boolean blacklisted = WebDisplays.isSiteBlacklisted(weburl);
scr.url = blacklisted ? WebDisplays.BLACKLIST_URL : weburl; //FIXME: This is an invalid fix for something that CANNOT be fixed
String webUrl;
try {
webUrl = TileEntityScreen.url(url);
} catch (IOException e) {
throw new RuntimeException(e);
}
boolean blacklisted = WebDisplays.isSiteBlacklisted(url);
scr.url = blacklisted ? WebDisplays.BLACKLIST_URL : url; //FIXME: This is an invalid fix for something that CANNOT be fixed
scr.videoType = VideoType.getTypeFromURL(scr.url);
ytVolume = Float.POSITIVE_INFINITY; //Force volume update

View File

@ -0,0 +1,43 @@
package net.montoyo.wd.miniserv;
import net.minecraft.server.level.ServerPlayer;
import net.montoyo.wd.net.Messages;
import net.montoyo.wd.net.server.SMessageGetUrl;
import net.montoyo.wd.net.server.URLMessage;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SyncPlugin {
private static final Map<ServerPlayer, List<ServerPlayer>> syncedPlayers = new HashMap<>();
private static final Map<ServerPlayer, String> URL = new HashMap<>();
public static void syncPlayers(List<ServerPlayer> players) {
for (ServerPlayer player : players) {
List<ServerPlayer> syncedPlayersList = new ArrayList<>(players);
syncedPlayersList.remove(player);
syncedPlayers.put(player, syncedPlayersList);
}
}
public static String getPlayerString(ServerPlayer player) {
if(URL.get(player) == null) {
setPlayerString(player, new URLMessage().getURL());
}
return URL.get(player);
}
public static void setPlayerString(ServerPlayer player, String value) {
URL.put(player, value);
List<ServerPlayer> syncedPlayersList = syncedPlayers.get(player);
if (syncedPlayersList != null) {
for (ServerPlayer syncedPlayer : syncedPlayersList) {
if(!syncedPlayer.hasDisconnected()) {
Messages.INSTANCE.sendToServer(new SMessageGetUrl(URL.get(syncedPlayer)));
}
}
}
}
}

View File

@ -4,25 +4,18 @@
package net.montoyo.wd.net;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.simple.SimpleChannel;
import net.montoyo.wd.net.client.*;
import net.montoyo.wd.net.server.*;
import net.montoyo.wd.utilities.SyncedUrl;
import org.jline.utils.Log;
@Mod.EventBusSubscriber
public class Messages {
private static final String CHANNEL_NAME = "webdisplays:packetsystem";
private static final String PROTOCOL_VERSION = "1";
private static int index = 0;
public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(
@ -48,33 +41,7 @@ public class Messages {
INSTANCE.registerMessage(index++, SMessageScreenCtrl.class, SMessageScreenCtrl::encode, SMessageScreenCtrl::decode, SMessageScreenCtrl::handle);
INSTANCE.registerMessage(index++, SMessagePadCtrl.class, SMessagePadCtrl::encode, SMessagePadCtrl::decode, SMessagePadCtrl::handle);
INSTANCE.registerMessage(index++, CMessageOpenGui.class, CMessageOpenGui::encode, CMessageOpenGui::decode, CMessageOpenGui::handle);
INSTANCE.registerMessage(index++, SyncedUrlPacket.class, SyncedUrlPacket::encode, SyncedUrlPacket::decode, SyncedUrlPacket::handle);
}
public static void sendUrlUpdate(String newUrl) {
if (newUrl != null && Minecraft.getInstance().getConnection() != null) {
if(newUrl.equals("https://www.google.com") || newUrl.equals("https://www.google.com/")) {
Messages.INSTANCE.sendToServer(new SyncedUrlPacket(newUrl, true));
} else {
Messages.INSTANCE.sendToServer(new SyncedUrlPacket(newUrl, false));
}
}
}
public static String sendUrlToPlayer(String url) {
if(url == null) {
url = "https://www.google.com";
}
SyncedUrl.setUrl(url);
return SyncedUrl.getUrl();
}
@SubscribeEvent
public static void onPacketReceived(NetworkEvent.ServerCustomPayloadEvent event) {
if (event.getSource().get().getDirection().getReceptionSide() == LogicalSide.SERVER && CHANNEL_NAME.equals(event.getPayload().readUtf())) {
String newUrl = event.getPayload().readUtf();
SyncedUrl.updateUrl(newUrl);
Log.debug("Received URL update from client: {}", newUrl);
}
INSTANCE.registerMessage(index++, SMessageGetUrl.class, SMessageGetUrl::encode, SMessageGetUrl::decode, SMessageGetUrl::handle);
INSTANCE.registerMessage(index++, URLMessage.class, URLMessage::encode, URLMessage::decode, URLMessage::handle);
}
}

View File

@ -11,7 +11,6 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.entity.TileEntityScreen;
import net.montoyo.wd.net.Messages;
import net.montoyo.wd.utilities.*;
import java.io.IOException;
@ -106,13 +105,20 @@ public class CMessageAddScreen {
for (TileEntityScreen.Screen entry : screens) {
TileEntityScreen.Screen scr = tes.addScreen(entry.side, entry.size, entry.resolution, null, false);
scr.rotation = entry.rotation;
Messages.sendUrlUpdate(entry.url);
scr.url = SyncedUrl.getUrl();
String webUrl;
try {
webUrl = TileEntityScreen.url(entry.url);
} catch (IOException e) {
throw new RuntimeException(e);
}
scr.url = webUrl;
scr.owner = entry.owner;
scr.upgrades = entry.upgrades;
if (scr.browser != null)
scr.browser.loadURL(scr.url);
scr.browser.loadURL(webUrl);
}
});

View File

@ -1,36 +0,0 @@
package net.montoyo.wd.net.client;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.net.Messages;
import java.util.function.Supplier;
public class SyncedUrlPacket {
private String url;
private boolean isDefault;
public SyncedUrlPacket(String url, boolean isDefault) {
this.url = url;
this.isDefault = isDefault;
}
public void encode(FriendlyByteBuf buffer) {
buffer.writeUtf(url);
buffer.writeBoolean(isDefault);
}
public static SyncedUrlPacket decode(FriendlyByteBuf buffer) {
String url = buffer.readUtf();
boolean isDefault = buffer.readBoolean();
return new SyncedUrlPacket(url, isDefault);
}
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get();
if (url != null && !url.isEmpty() && !isDefault) {
Messages.sendUrlToPlayer(url);
}
context.setPacketHandled(true);
}
}

View File

@ -0,0 +1,40 @@
package net.montoyo.wd.net.server;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.network.PacketDistributor;
import net.montoyo.wd.net.Messages;
import java.util.Objects;
import java.util.function.Supplier;
public class SMessageGetUrl {
String url;
public SMessageGetUrl() {
}
public SMessageGetUrl(String url) {
this.url = url;
}
public static SMessageGetUrl decode(FriendlyByteBuf buf) {
SMessageGetUrl message = new SMessageGetUrl();
message.url = buf.readUtf();
return message;
}
public void encode(FriendlyByteBuf buf) {
buf.writeUtf(url);
}
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
contextSupplier.get().enqueueWork(() -> {
if(Objects.requireNonNull(contextSupplier.get().getSender()).connection.getConnection().isConnected()) {
Messages.INSTANCE.send(PacketDistributor.PLAYER.with(() -> contextSupplier.get().getSender()), new URLMessage(url));
}
Messages.INSTANCE.send(PacketDistributor.ALL.noArg(), new URLMessage(url));
});
contextSupplier.get().setPacketHandled(true);
}
}

View File

@ -14,8 +14,6 @@ import net.minecraftforge.network.NetworkEvent;
import net.montoyo.wd.WebDisplays;
import net.montoyo.wd.entity.TileEntityScreen;
import net.montoyo.wd.init.ItemInit;
import net.montoyo.wd.net.Messages;
import net.montoyo.wd.utilities.SyncedUrl;
import java.io.IOException;
import java.util.function.Supplier;
@ -58,8 +56,12 @@ public class SMessagePadCtrl implements Runnable {
if(!is.getTag().contains("PadID"))
is.getTag().putInt("PadID", WebDisplays.getNextAvailablePadID());
Messages.sendUrlUpdate(url);
String webUrl = SyncedUrl.getUrl();
String webUrl;
try {
webUrl = TileEntityScreen.url(url);
} catch (IOException e) {
throw new RuntimeException(e);
}
is.getTag().putString("PadURL", WebDisplays.applyBlacklist(webUrl));
}
}
@ -78,8 +80,12 @@ public class SMessagePadCtrl implements Runnable {
target = player.getInventory().offhand.get(0);
if(target != null) {
Messages.sendUrlUpdate(url);
String webUrl = SyncedUrl.getUrl();
String webUrl;
try {
webUrl = TileEntityScreen.url(url);
} catch (IOException e) {
throw new RuntimeException(e);
}
target.getTag().putString("PadURL", WebDisplays.applyBlacklist(webUrl));
}
}

View File

@ -0,0 +1,35 @@
package net.montoyo.wd.net.server;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent;
import java.util.function.Supplier;
public class URLMessage {
private String url;
public URLMessage() {}
public URLMessage(String url) {
this.url = url;
}
public String getURL() {
return url;
}
public static URLMessage decode(FriendlyByteBuf buf) {
URLMessage message = new URLMessage();
message.url = buf.readUtf();
return message;
}
public void encode(FriendlyByteBuf buf) {
buf.writeUtf(url);
}
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
contextSupplier.get().setPacketHandled(true);
}
}

View File

@ -1,17 +0,0 @@
package net.montoyo.wd.utilities;
public class SyncedUrl {
private static String url;
public static String getUrl() {
return url;
}
public static void setUrl(String newUrl) {
url = newUrl;
}
public static void updateUrl(String newUrl) {
url = newUrl;
}
}