diff --git a/common/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java b/common/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java index 5abbbf7..15b0129 100755 --- a/common/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java +++ b/common/src/main/java/eu/midnightdust/picturesign/render/PictureSignRenderer.java @@ -177,10 +177,13 @@ public class PictureSignRenderer { PictureSignClient.LOGGER.error(e); return; } - if (info != null && info.volume() != -1) mediaHandler.setMaxVolume(info.volume()); + if (info != null && info.volume() >= 0) 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(); + if (info != null && info.end() > 0 && mediaHandler.getTime() > info.end()) { + if (type.isLooped) mediaHandler.setTime(info.start() > 0 ? info.start() : 0); + else mediaHandler.stop(); + } } else if (type == GIF && gifHandler != null) { try { @@ -239,8 +242,15 @@ public class PictureSignRenderer { texture = data.identifier; } else if (type.isVideo && mediaHandler != null) { - if (mediaHandler.isWorking()) RenderSystem.setShaderTexture(0, mediaHandler.getTexture()); - else { + boolean hasVideoTexture = false; + if (mediaHandler.isWorking()) { + int rawTexture = mediaHandler.getTexture(); + if (rawTexture != -1) { + RenderSystem.setShaderTexture(0, rawTexture); + hasVideoTexture = true; + } + } + if (!hasVideoTexture) { var id = MediaHandler.getMissingTexture(); if (id == null) return; texture = id; diff --git a/common/src/main/java/eu/midnightdust/picturesign/util/WaterMediaHandler.java b/common/src/main/java/eu/midnightdust/picturesign/util/WaterMediaHandler.java index 068b67a..b169e42 100644 --- a/common/src/main/java/eu/midnightdust/picturesign/util/WaterMediaHandler.java +++ b/common/src/main/java/eu/midnightdust/picturesign/util/WaterMediaHandler.java @@ -7,6 +7,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.sound.SoundCategory; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; +import org.lwjgl.opengl.GL11; public class WaterMediaHandler extends MediaHandler { private SyncBasePlayer player; @@ -77,7 +78,10 @@ public class WaterMediaHandler extends MediaHandler { } @Override public int getTexture() { - if (player instanceof SyncVideoPlayer videoPlayer) return videoPlayer.getGlTexture(); + if (player instanceof SyncVideoPlayer videoPlayer) { + int tex = videoPlayer.getGlTexture(); + if (GL11.glIsTexture(tex)) return tex; + } return -1; } @Override