mirror of
https://github.com/TeamMidnightDust/PictureSign.git
synced 2025-12-13 04:45:10 +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> 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> 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> 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;
|
@Comment(category = general) public static Comment ebeWarning;
|
||||||
@Entry(category = advanced) public static MissingImageMode missingImageMode = MissingImageMode.BLACK;
|
@Entry(category = advanced) public static MissingImageMode missingImageMode = MissingImageMode.BLACK;
|
||||||
@Entry(category = advanced) public static PictureShader pictureShader = PictureShader.PosColTexLight;
|
@Entry(category = advanced) public static PictureShader pictureShader = PictureShader.PosColTexLight;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import static eu.midnightdust.picturesign.PictureSignClient.id;
|
|||||||
|
|
||||||
public class PictureSignRenderer {
|
public class PictureSignRenderer {
|
||||||
private boolean isSafeUrl;
|
private boolean isSafeUrl;
|
||||||
|
private boolean isSafeJsonUrl;
|
||||||
|
|
||||||
public void render(SignBlockEntity signBlockEntity, MatrixStack matrixStack, int light, int overlay, boolean front) {
|
public void render(SignBlockEntity signBlockEntity, MatrixStack matrixStack, int light, int overlay, boolean front) {
|
||||||
PictureSignType type = PictureSignType.getType(signBlockEntity, front);
|
PictureSignType type = PictureSignType.getType(signBlockEntity, front);
|
||||||
@@ -29,11 +30,21 @@ public class PictureSignRenderer {
|
|||||||
if (!url.contains("://")) {
|
if (!url.contains("://")) {
|
||||||
url = "https://" + url;
|
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);
|
info = PictureURLUtils.infoFromJson(url);
|
||||||
if (info == null) return;
|
if (info == null) return;
|
||||||
url = info.url();
|
url = info.url();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!url.contains("://")) {
|
if (!url.contains("://")) {
|
||||||
url = "https://" + url;
|
url = "https://" + url;
|
||||||
}
|
}
|
||||||
@@ -62,8 +73,6 @@ public class PictureSignRenderer {
|
|||||||
if ((!PictureSignConfig.enableVideoSigns || !PictureSignClient.hasWaterMedia) && type != PictureSignType.PICTURE) return;
|
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/")) {
|
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("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();
|
World world = signBlockEntity.getWorld();
|
||||||
BlockPos pos = signBlockEntity.getPos();
|
BlockPos pos = signBlockEntity.getPos();
|
||||||
@@ -74,7 +83,11 @@ public class PictureSignRenderer {
|
|||||||
GIFHandler gifHandler = null;
|
GIFHandler gifHandler = null;
|
||||||
if (PictureSignClient.hasWaterMedia) {
|
if (PictureSignClient.hasWaterMedia) {
|
||||||
if (type.isVideo || type.isAudio) mediaHandler = MediaHandler.getOrCreate(videoId, pos);
|
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))
|
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);
|
PictureSignClient.LOGGER.error(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (info != null && info.volume() != -1) mediaHandler.setMaxVolume(info.volume());
|
||||||
mediaHandler.setVolumeBasedOnDistance();
|
mediaHandler.setVolumeBasedOnDistance();
|
||||||
if (info != null && info.start() > 0 && mediaHandler.getTime() < info.start()) mediaHandler.setTime(info.start());
|
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();
|
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 {
|
try {
|
||||||
if (!gifHandler.hasMedia() && !gifHandler.playbackStarted) {
|
if (!gifHandler.hasMedia() && !gifHandler.playbackStarted) {
|
||||||
gifHandler.play(url);
|
gifHandler.play(url);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public class MediaHandler {
|
|||||||
public boolean playbackStarted = false;
|
public boolean playbackStarted = false;
|
||||||
public boolean isDeactivated;
|
public boolean isDeactivated;
|
||||||
private SyncBasePlayer player;
|
private SyncBasePlayer player;
|
||||||
|
private int maxVolume = 100;
|
||||||
|
|
||||||
private MediaHandler(Identifier id, BlockPos pos) {
|
private MediaHandler(Identifier id, BlockPos pos) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
@@ -44,11 +45,14 @@ public class MediaHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double distance = this.pos.getSquaredDistance(playerPos) / PictureSignConfig.audioDistanceMultiplier;
|
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) {
|
private void setVolume(int volume) {
|
||||||
player.setVolume(volume);
|
player.setVolume(volume);
|
||||||
}
|
}
|
||||||
|
public void setMaxVolume(int volume) {
|
||||||
|
maxVolume = volume;
|
||||||
|
}
|
||||||
|
|
||||||
public void closePlayer() {
|
public void closePlayer() {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
"picturesign.midnightconfig.safeProviders":"Safe Image Providers",
|
"picturesign.midnightconfig.safeProviders":"Safe Image Providers",
|
||||||
"picturesign.midnightconfig.safeGifProviders":"Safe GIF Providers",
|
"picturesign.midnightconfig.safeGifProviders":"Safe GIF Providers",
|
||||||
"picturesign.midnightconfig.safeMultimediaProviders":"Safe Multimedia Providers",
|
"picturesign.midnightconfig.safeMultimediaProviders":"Safe Multimedia Providers",
|
||||||
|
"picturesign.midnightconfig.safeJsonProviders":"Safe JSON Providers",
|
||||||
"picturesign.midnightconfig.invidiousInstance":"Invidious Instance",
|
"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.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",
|
"picturesign.midnightconfig.missingImageMode":"Missing image mode",
|
||||||
|
|||||||
Reference in New Issue
Block a user