mirror of
https://github.com/TeamMidnightDust/PictureSign.git
synced 2025-12-11 12:05:09 +01:00
Allow defining the media volume via JSON
- Also verify JSON hosting website is safe to avoid IP-Grabbers on multiplayer servers
This commit is contained in:
@@ -26,6 +26,7 @@ public class PictureSignConfig extends MidnightConfig {
|
||||
@Entry(category = advanced) public static List<String> safeProviders = Lists.newArrayList("https://i.imgur.com/", "https://i.ibb.co/", "https://pictshare.net/", "https://iili.io/", "https://media1.tenor.com/");
|
||||
@Entry(category = advanced) public static List<String> safeGifProviders = Lists.newArrayList("https://i.imgur.com/", "https://media1.tenor.com/");
|
||||
@Entry(category = advanced) public static List<String> safeMultimediaProviders = Lists.newArrayList("https://youtube.com/", "https://www.youtube.com/", "https://youtu.be/","https://vimeo.com/");
|
||||
@Entry(category = advanced) public static List<String> safeJsonProviders = Lists.newArrayList("https://github.com/", "https://gist.github.com/", "https://www.jsonkeeper.com/", "https://api.npoint.io/", "https://api.jsonsilo.com/");
|
||||
@Comment(category = general) public static Comment ebeWarning;
|
||||
@Entry(category = advanced) public static MissingImageMode missingImageMode = MissingImageMode.BLACK;
|
||||
@Entry(category = advanced) public static PictureShader pictureShader = PictureShader.PosColTexLight;
|
||||
|
||||
@@ -21,6 +21,7 @@ import static eu.midnightdust.picturesign.PictureSignClient.id;
|
||||
|
||||
public class PictureSignRenderer {
|
||||
private boolean isSafeUrl;
|
||||
private boolean isSafeJsonUrl;
|
||||
|
||||
public void render(SignBlockEntity signBlockEntity, MatrixStack matrixStack, int light, int overlay, boolean front) {
|
||||
PictureSignType type = PictureSignType.getType(signBlockEntity, front);
|
||||
@@ -29,11 +30,21 @@ public class PictureSignRenderer {
|
||||
if (!url.contains("://")) {
|
||||
url = "https://" + url;
|
||||
}
|
||||
if (url.endsWith(".json")) {
|
||||
isSafeJsonUrl = false;
|
||||
String jsonUrl = url;
|
||||
PictureSignConfig.safeJsonProviders.forEach(safe -> {
|
||||
if (!isSafeUrl) isSafeJsonUrl = jsonUrl.startsWith(safe);
|
||||
});
|
||||
if (url.endsWith(".json") || isSafeJsonUrl) {
|
||||
if (PictureSignConfig.safeMode) {
|
||||
if (!isSafeJsonUrl) return;
|
||||
}
|
||||
|
||||
info = PictureURLUtils.infoFromJson(url);
|
||||
if (info == null) return;
|
||||
url = info.url();
|
||||
}
|
||||
|
||||
if (!url.contains("://")) {
|
||||
url = "https://" + url;
|
||||
}
|
||||
@@ -62,8 +73,6 @@ public class PictureSignRenderer {
|
||||
if ((!PictureSignConfig.enableVideoSigns || !PictureSignClient.hasWaterMedia) && type != PictureSignType.PICTURE) return;
|
||||
if (url.startsWith("https://youtube.com/") || url.startsWith("https://www.youtube.com/watch?v=") || url.startsWith("https://youtu.be/")) {
|
||||
url = url.replace("https://www.", "https://");
|
||||
//url = url.replace("youtube.com/watch?v=", PictureSignConfig.invidiousInstance.replace("https://", "").replace("/", "")+"/latest_version?id=");
|
||||
//url = url.replace("youtu.be/", PictureSignConfig.invidiousInstance.replace("https://", "").replace("/", "")+"/latest_version?id=");
|
||||
}
|
||||
World world = signBlockEntity.getWorld();
|
||||
BlockPos pos = signBlockEntity.getPos();
|
||||
@@ -74,7 +83,11 @@ public class PictureSignRenderer {
|
||||
GIFHandler gifHandler = null;
|
||||
if (PictureSignClient.hasWaterMedia) {
|
||||
if (type.isVideo || type.isAudio) mediaHandler = MediaHandler.getOrCreate(videoId, pos);
|
||||
if (type == PictureSignType.GIF) gifHandler = GIFHandler.getOrCreate(videoId);
|
||||
else if (type == PictureSignType.GIF) gifHandler = GIFHandler.getOrCreate(videoId);
|
||||
else {
|
||||
MediaHandler.closePlayer(videoId);
|
||||
GIFHandler.closePlayer(videoId);
|
||||
}
|
||||
}
|
||||
|
||||
if (world != null && ((world.getBlockState(pos.down()).getBlock().equals(Blocks.REDSTONE_TORCH) || world.getBlockState(pos.down()).getBlock().equals(Blocks.REDSTONE_WALL_TORCH))
|
||||
@@ -147,11 +160,12 @@ public class PictureSignRenderer {
|
||||
PictureSignClient.LOGGER.error(e);
|
||||
return;
|
||||
}
|
||||
if (info != null && info.volume() != -1) mediaHandler.setMaxVolume(info.volume());
|
||||
mediaHandler.setVolumeBasedOnDistance();
|
||||
if (info != null && info.start() > 0 && mediaHandler.getTime() < info.start()) mediaHandler.setTime(info.start());
|
||||
if (info != null && info.end() > 0 && mediaHandler.getTime() >= info.end() && !mediaHandler.playbackStarted) mediaHandler.stop();
|
||||
}
|
||||
else if (type == PictureSignType.GIF) {
|
||||
else if (type == PictureSignType.GIF && gifHandler != null) {
|
||||
try {
|
||||
if (!gifHandler.hasMedia() && !gifHandler.playbackStarted) {
|
||||
gifHandler.play(url);
|
||||
|
||||
@@ -25,6 +25,7 @@ public class MediaHandler {
|
||||
public boolean playbackStarted = false;
|
||||
public boolean isDeactivated;
|
||||
private SyncBasePlayer player;
|
||||
private int maxVolume = 100;
|
||||
|
||||
private MediaHandler(Identifier id, BlockPos pos) {
|
||||
this.id = id;
|
||||
@@ -44,11 +45,14 @@ public class MediaHandler {
|
||||
return;
|
||||
}
|
||||
double distance = this.pos.getSquaredDistance(playerPos) / PictureSignConfig.audioDistanceMultiplier;
|
||||
setVolume((int) Math.clamp(100-distance, 0, 100));
|
||||
setVolume((int) Math.clamp(maxVolume-distance, 0, 100));
|
||||
}
|
||||
private void setVolume(int volume) {
|
||||
player.setVolume(volume);
|
||||
}
|
||||
public void setMaxVolume(int volume) {
|
||||
maxVolume = volume;
|
||||
}
|
||||
|
||||
public void closePlayer() {
|
||||
if (player != null) {
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
"picturesign.midnightconfig.safeProviders":"Safe Image Providers",
|
||||
"picturesign.midnightconfig.safeGifProviders":"Safe GIF Providers",
|
||||
"picturesign.midnightconfig.safeMultimediaProviders":"Safe Multimedia Providers",
|
||||
"picturesign.midnightconfig.safeJsonProviders":"Safe JSON Providers",
|
||||
"picturesign.midnightconfig.invidiousInstance":"Invidious Instance",
|
||||
"picturesign.midnightconfig.invidiousInstance.tooltip":"Select the Invidious instance that is being used to play YouTube videos. \nYou can find a list of them at\ndocs.invidious.io/instances/",
|
||||
"picturesign.midnightconfig.missingImageMode":"Missing image mode",
|
||||
|
||||
Reference in New Issue
Block a user