diff --git a/build.gradle b/build.gradle index eff94b9..f071b63 100644 --- a/build.gradle +++ b/build.gradle @@ -68,7 +68,7 @@ repositories { dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - implementation 'com.github.WaterMediaTeam.watermedia:build:2.0.69' + implementation 'com.github.WaterMediaTeam:watermedia:2.1.16' } def resourceTargets = ['META-INF/mods.toml', 'pack.mcmeta'] diff --git a/changelog.txt b/changelog.txt index 887444d..9184059 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,6 @@ +3.1.0 +- Use watermedia 2.1.x instead of 2.0.x + 3.0.5 - Fixed fading in playgovideo command diff --git a/gradle.properties b/gradle.properties index ee5bbf1..317538d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ mod_name=Video Player # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All rights reserved # The mod version. See https://semver.org/ -mod_version=3.0.5 +mod_version=3.1.0 base_name=VideoPlayer name_extension=FORGE-1.20.X # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. diff --git a/src/main/java/com/github/NGoedix/watchvideo/VideoPlayer.java b/src/main/java/com/github/NGoedix/watchvideo/VideoPlayer.java index 47d0d87..fc32e93 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/VideoPlayer.java +++ b/src/main/java/com/github/NGoedix/watchvideo/VideoPlayer.java @@ -14,9 +14,9 @@ import com.github.NGoedix.watchvideo.util.cache.TextureCache; import com.github.NGoedix.watchvideo.util.displayers.VideoDisplayer; import com.mojang.logging.LogUtils; -import me.srrapero720.watermedia.api.image.ImageAPI; -import me.srrapero720.watermedia.api.image.ImageRenderer; -import me.srrapero720.watermedia.core.tools.JarTool; +import org.watermedia.api.image.ImageAPI; +import org.watermedia.api.image.ImageRenderer; +import org.watermedia.core.tools.JarTool; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; diff --git a/src/main/java/com/github/NGoedix/watchvideo/client/ClientHandler.java b/src/main/java/com/github/NGoedix/watchvideo/client/ClientHandler.java index a009897..19a6e6c 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/client/ClientHandler.java +++ b/src/main/java/com/github/NGoedix/watchvideo/client/ClientHandler.java @@ -7,7 +7,7 @@ import com.github.NGoedix.watchvideo.client.gui.TVVideoScreen; import com.github.NGoedix.watchvideo.client.gui.VideoScreen; import com.github.NGoedix.watchvideo.item.custom.HandRadioItem; -import me.srrapero720.watermedia.api.player.SyncMusicPlayer; +import org.watermedia.api.player.videolan.MusicPlayer; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -16,9 +16,11 @@ import java.util.ArrayList; import java.util.List; +import java.net.URI; + public class ClientHandler { - private static final List musicPlayers = new ArrayList<>(); + private static final List musicPlayers = new ArrayList<>(); public static void openVideo(String url, int volume, boolean isControlBlocked, boolean canSkip) { Minecraft.getInstance().setScreen(new VideoScreen(url, volume, isControlBlocked, canSkip, false)); @@ -29,8 +31,8 @@ public static void openVideo(String url, int volume, boolean isControlBlocked, b } public static void playMusic(String url, int volume) { - // Until any callback in SyncMusicPlayer I will check if the music is playing when added other music player - for (SyncMusicPlayer musicPlayer : musicPlayers) { + // Until any callback in MusicPlayer I will check if the music is playing when added other music player + for (MusicPlayer musicPlayer : musicPlayers) { if (musicPlayer.isPlaying()) { musicPlayer.stop(); musicPlayer.release(); @@ -39,14 +41,15 @@ public static void playMusic(String url, int volume) { } // Add the new player - SyncMusicPlayer musicPlayer = new SyncMusicPlayer(); + MusicPlayer musicPlayer = new MusicPlayer(); musicPlayers.add(musicPlayer); musicPlayer.setVolume(volume); - musicPlayer.start(url); + URI uri = URI.create(url); + musicPlayer.start(uri); } public static void stopMusicIfPlaying() { - for (SyncMusicPlayer musicPlayer : musicPlayers) { + for (MusicPlayer musicPlayer : musicPlayers) { musicPlayer.stop(); musicPlayer.release(); } diff --git a/src/main/java/com/github/NGoedix/watchvideo/client/gui/TVVideoScreen.java b/src/main/java/com/github/NGoedix/watchvideo/client/gui/TVVideoScreen.java index 35006b4..ca6368d 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/client/gui/TVVideoScreen.java +++ b/src/main/java/com/github/NGoedix/watchvideo/client/gui/TVVideoScreen.java @@ -10,10 +10,10 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import me.srrapero720.watermedia.api.image.ImageAPI; -import me.srrapero720.watermedia.api.image.ImageRenderer; -import me.srrapero720.watermedia.api.math.MathAPI; -import me.srrapero720.watermedia.api.player.SyncVideoPlayer; +import org.watermedia.api.image.ImageAPI; +import org.watermedia.api.image.ImageRenderer; +import org.watermedia.api.math.MathAPI; +import org.watermedia.api.player.videolan.VideoPlayer; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; @@ -157,7 +157,7 @@ protected void init() { timeSlider.setOnSlideListener(value -> { if (be.requestDisplay() == null) return; if (be.requestDisplay() instanceof VideoDisplayer) { - SyncVideoPlayer player = (SyncVideoPlayer) ((VideoDisplayer) be.requestDisplay()).player; + VideoPlayer player = (VideoPlayer) ((VideoDisplayer) be.requestDisplay()).player; if (player.isReady() && !player.isLive()) { player.seekTo((int) ((value / 100D) * player.getDuration())); } @@ -166,7 +166,7 @@ protected void init() { }); if (be.requestDisplay() != null && be.requestDisplay() instanceof VideoDisplayer) { - SyncVideoPlayer player = (SyncVideoPlayer) ((VideoDisplayer) be.requestDisplay()).player; + VideoPlayer player = (VideoPlayer) ((VideoDisplayer) be.requestDisplay()).player; timeSlider.setValue((double) player.getTime() / player.getDuration()); } @@ -201,7 +201,7 @@ public void render(GuiGraphics context, int pMouseX, int pMouseY, float pPartial String actualTimeFormatted = "00:00"; if (be.requestDisplay() instanceof VideoDisplayer) { - SyncVideoPlayer player = (SyncVideoPlayer) ((VideoDisplayer) be.requestDisplay()).player; + VideoPlayer player = (VideoPlayer) ((VideoDisplayer) be.requestDisplay()).player; if (player != null && player.isReady()) { timeSlider.setActive(!player.isLive()); diff --git a/src/main/java/com/github/NGoedix/watchvideo/client/gui/VideoScreen.java b/src/main/java/com/github/NGoedix/watchvideo/client/gui/VideoScreen.java index 61f303e..af5a62a 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/client/gui/VideoScreen.java +++ b/src/main/java/com/github/NGoedix/watchvideo/client/gui/VideoScreen.java @@ -6,10 +6,9 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import me.srrapero720.watermedia.api.image.ImageAPI; -import me.srrapero720.watermedia.api.image.ImageRenderer; -import me.srrapero720.watermedia.api.math.MathAPI; -import me.srrapero720.watermedia.api.player.SyncVideoPlayer; +import org.watermedia.api.image.ImageAPI; +import org.watermedia.api.image.ImageRenderer; +import org.watermedia.api.math.MathAPI; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -28,6 +27,8 @@ import java.util.Objects; import java.util.TimeZone; +import java.net.URI; + public class VideoScreen extends AbstractContainerScreen { private static final DateFormat FORMAT = new SimpleDateFormat("HH:mm:ss"); @@ -54,7 +55,7 @@ public class VideoScreen extends AbstractContainerScreen private int optionOutSecs; // TOOLS - private final SyncVideoPlayer player; + private final org.watermedia.api.player.videolan.VideoPlayer player; // VIDEO INFO int videoTexture = -1; @@ -81,15 +82,16 @@ public VideoScreen(String url, int volume, boolean controlBlocked, boolean canSk this.optionOutMode = -1; this.optionOutSecs = -1; - this.player = new SyncVideoPlayer(null, minecraft); + this.player = new org.watermedia.api.player.videolan.VideoPlayer(minecraft); Reference.LOGGER.info("Playing video (" + (!controlBlocked ? "not" : "") + "blocked) (" + url + " with volume: " + (int) (Minecraft.getInstance().options.getSoundSourceVolume(SoundSource.MASTER) * volume)); player.setVolume((int) (Minecraft.getInstance().options.getSoundSourceVolume(SoundSource.MASTER) * volume)); + URI uri = URI.create(url); if (!fadeIn) { started = true; - player.start(url); + player.start(uri); } else { - player.startPaused(url); + player.startPaused(uri); } } @@ -99,7 +101,7 @@ protected void renderLabels(@NotNull GuiGraphics pPoseguiGraphics, int pMouseX, @Override protected void renderBg(@NotNull GuiGraphics guiGraphics, float pPartialTick, int pMouseX, int pMouseY) { if (started && !closing) { - videoTexture = player.getGlTexture(); + videoTexture = player.preRender(); } // Handle easing for fade-in @@ -162,14 +164,14 @@ protected void renderBg(@NotNull GuiGraphics guiGraphics, float pPartialTick, in // DEBUG RENDERING if (!FMLLoader.isProduction()) { - draw(guiGraphics, String.format("State: %s", player.getRawPlayerState().name()), getHeightCenter(-12)); + draw(guiGraphics, String.format("State: %s", player.getStateName()), getHeightCenter(-12)); draw(guiGraphics, String.format("Time: %s (%s) / %s (%s)", FORMAT.format(new Date(player.getTime())), player.getTime(), FORMAT.format(new Date(player.getDuration())), player.getDuration()), getHeightCenter(0)); draw(guiGraphics, String.format("Media Duration: %s (%s)", FORMAT.format(new Date(player.getMediaInfoDuration())), player.getMediaInfoDuration()), getHeightCenter(12)); } } private void renderTexture(GuiGraphics guiGraphics, int texture) { - if (player.getDimensions() == null) return; // Checking if video available + if (player.dimension() == null) return; // Checking if video available RenderSystem.enableBlend(); guiGraphics.fill(0, 0, width, height, MathAPI.argb(255, 0, 0, 0)); @@ -179,7 +181,7 @@ private void renderTexture(GuiGraphics guiGraphics, int texture) { RenderSystem.setShaderTexture(0, texture); // Get video dimensions - Dimension videoDimensions = player.getDimensions(); + Dimension videoDimensions = player.dimension(); double videoWidth = videoDimensions.getWidth(); double videoHeight = videoDimensions.getHeight(); diff --git a/src/main/java/com/github/NGoedix/watchvideo/client/render/TVBlockRenderer.java b/src/main/java/com/github/NGoedix/watchvideo/client/render/TVBlockRenderer.java index 6e0a70a..c93766d 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/client/render/TVBlockRenderer.java +++ b/src/main/java/com/github/NGoedix/watchvideo/client/render/TVBlockRenderer.java @@ -7,7 +7,7 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import me.srrapero720.watermedia.api.image.ImageAPI; +import org.watermedia.api.image.ImageAPI; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.MultiBufferSource; diff --git a/src/main/java/com/github/NGoedix/watchvideo/util/cache/TextureCache.java b/src/main/java/com/github/NGoedix/watchvideo/util/cache/TextureCache.java index c52ccb0..676724e 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/util/cache/TextureCache.java +++ b/src/main/java/com/github/NGoedix/watchvideo/util/cache/TextureCache.java @@ -4,8 +4,8 @@ import com.github.NGoedix.watchvideo.util.displayers.ImageDisplayer; import com.github.NGoedix.watchvideo.util.displayers.VideoDisplayer; import com.github.NGoedix.watchvideo.util.math.geo.Vec3d; -import me.srrapero720.watermedia.api.image.ImageFetch; -import me.srrapero720.watermedia.api.image.ImageRenderer; +import org.watermedia.api.image.ImageFetch; +import org.watermedia.api.image.ImageRenderer; import net.minecraft.client.Minecraft; import net.minecraft.sounds.SoundSource; @@ -14,6 +14,8 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; +import java.net.URI; + public class TextureCache { private static final Map CACHE = new HashMap<>(); @@ -49,7 +51,8 @@ public ImageRenderer getPicture() { private synchronized void attemptToLoad() { if (this.seeker != null) return; if (!this.url.isEmpty()) { - this.seeker = new FramePictureFetcher(this, url); + URI uri = URI.create(url); + this.seeker = new FramePictureFetcher(this, uri); this.seeker.start(); } } @@ -116,13 +119,13 @@ public void remove() { public static void unload() { for (TextureCache cache : CACHE.values()) cache.remove(); CACHE.clear(); } private static final class FramePictureFetcher extends ImageFetch { - public FramePictureFetcher(TextureCache cache, String originalURL) { + public FramePictureFetcher(TextureCache cache, URI originalURL) { super(originalURL); - setOnSuccessCallback(imageRenderer -> Minecraft.getInstance().executeBlocking(() -> cache.process(imageRenderer))); + setSuccessCallback((imageRenderer, isCache) -> Minecraft.getInstance().executeBlocking(() -> cache.process(imageRenderer))); - setOnFailedCallback(e -> Minecraft.getInstance().executeBlocking(() -> { - if (e instanceof NoPictureException) { + setErrorCallback((e, isVideo) -> Minecraft.getInstance().executeBlocking(() -> { + if (isVideo) { cache.processVideo(); return; } diff --git a/src/main/java/com/github/NGoedix/watchvideo/util/displayers/ImageDisplayer.java b/src/main/java/com/github/NGoedix/watchvideo/util/displayers/ImageDisplayer.java index f6a1f5c..b0efa37 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/util/displayers/ImageDisplayer.java +++ b/src/main/java/com/github/NGoedix/watchvideo/util/displayers/ImageDisplayer.java @@ -1,6 +1,6 @@ package com.github.NGoedix.watchvideo.util.displayers; -import me.srrapero720.watermedia.api.image.ImageRenderer; +import org.watermedia.api.image.ImageRenderer; import net.minecraft.client.Minecraft; import java.awt.*; diff --git a/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoDisplayer.java b/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoDisplayer.java index 2151230..009ce06 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoDisplayer.java +++ b/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoDisplayer.java @@ -3,11 +3,11 @@ import com.github.NGoedix.watchvideo.util.cache.TextureCache; import com.github.NGoedix.watchvideo.util.math.geo.Vec3d; import com.github.NGoedix.watchvideo.util.math.VideoMathUtil; -import me.lib720.watermod.safety.TryCore; -import me.srrapero720.watermedia.api.math.MathAPI; -import me.srrapero720.watermedia.api.player.SyncBasePlayer; -import me.srrapero720.watermedia.api.player.SyncMusicPlayer; -import me.srrapero720.watermedia.api.player.SyncVideoPlayer; +import com.github.NGoedix.watchvideo.Reference; +import org.watermedia.api.math.MathAPI; +import org.watermedia.api.player.videolan.BasePlayer; +import org.watermedia.api.player.videolan.MusicPlayer; +import org.watermedia.api.player.videolan.VideoPlayer; import net.minecraft.client.Minecraft; import java.awt.*; @@ -15,6 +15,8 @@ import java.util.List; import java.util.Objects; +import java.net.URI; + public class VideoDisplayer implements IDisplay { private static final String VLC_FAILED = "https://i.imgur.com/XCcN2uX.png"; @@ -45,17 +47,13 @@ public static void unload() { } public static IDisplay createVideoDisplay(Vec3d pos, String url, float volume, float minDistance, float maxDistance, boolean loop, boolean playing, boolean isOnlyMusic) { - TextureCache cache = TextureCache.get(VLC_FAILED); - - return TryCore.withReturn((defaultVar) -> { - VideoDisplayer display = new VideoDisplayer(pos, url, volume, minDistance, maxDistance, loop, isOnlyMusic); - if (display.player.raw() == null) throw new IllegalStateException("VideoDisplayer uses a broken player"); - OPEN_DISPLAYS.add(display); - return display; - }, cache.ready() ? (IDisplay) new ImageDisplayer(cache.getPicture()) : null); + VideoDisplayer display = new VideoDisplayer(pos, url, volume, minDistance, maxDistance, loop, isOnlyMusic); + if (display.player.raw() == null) throw new IllegalStateException("VideoDisplayer uses a broken player"); + OPEN_DISPLAYS.add(display); + return display; } - public SyncBasePlayer player; + public BasePlayer player; private final Vec3d pos; private String url; @@ -68,13 +66,14 @@ public VideoDisplayer(Vec3d pos, String url, float volume, float minDistance, fl if (!url.isEmpty()) { if (isOnlyMusic) { - player = new SyncMusicPlayer(); + player = new MusicPlayer(); } else { - player = new SyncVideoPlayer(null, Minecraft.getInstance()); + player = new VideoPlayer(Minecraft.getInstance()); } adjustVolume(volume, minDistance, maxDistance); player.setRepeatMode(loop); - player.start(url); + URI uri = URI.create(url); + player.start(uri); } } @@ -157,16 +156,16 @@ public int maxTick() { public int prepare(String url, boolean playing, boolean loop, int tick) { if (player == null) return -1; this.url = url; - if (player instanceof SyncVideoPlayer) - return ((SyncVideoPlayer) player).getGlTexture(); + if (player instanceof VideoPlayer) + return ((VideoPlayer) player).preRender(); return 0; } @Override public int getRenderTexture() { - if (player instanceof SyncVideoPlayer) - return ((SyncVideoPlayer) player).getGlTexture(); + if (player instanceof VideoPlayer) + return ((VideoPlayer) player).preRender(); return 0; } @@ -211,8 +210,8 @@ public void resume(int tick) { @Override public Dimension getDimensions() { if (player == null) return null; - if (player instanceof SyncVideoPlayer) - return ((SyncVideoPlayer) player).getDimensions(); + if (player instanceof VideoPlayer) + return ((VideoPlayer) player).dimension(); return null; } diff --git a/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoScreenDisplay.java b/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoScreenDisplay.java index 31a8e3e..16d70b3 100644 --- a/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoScreenDisplay.java +++ b/src/main/java/com/github/NGoedix/watchvideo/util/displayers/VideoScreenDisplay.java @@ -1,11 +1,11 @@ package com.github.NGoedix.watchvideo.util.displayers; -import me.srrapero720.watermedia.api.player.SyncVideoPlayer; +import org.watermedia.api.player.videolan.VideoPlayer; import net.minecraft.client.Minecraft; public class VideoScreenDisplay { - private final SyncVideoPlayer player; + private final VideoPlayer player; private final String url; private final int volume; private final int position; @@ -15,7 +15,7 @@ public class VideoScreenDisplay { private final int optionOutSecs; public VideoScreenDisplay(String url, int volume, int position, int optionInMode, int optionInSecs, int optionOutMode, int optionOutSecs) { - player = new SyncVideoPlayer(null, Minecraft.getInstance()); + player = new VideoPlayer(Minecraft.getInstance()); this.url = url; this.volume = volume; this.position = position; @@ -33,7 +33,7 @@ public int getPosition() { return position; } - public SyncVideoPlayer getPlayer() { + public VideoPlayer getPlayer() { return player; } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 1ebab77..59df419 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -3,7 +3,7 @@ loaderVersion="[44,)" license="All rights reserved" [[mods]] modId="videoplayer" -version="3.0.5" +version="3.1.0" displayName="VideoPlayer" authors="Goedix" description=''' diff --git a/src/main/resources/assets/videoplayer/lang/pt_br.json b/src/main/resources/assets/videoplayer/lang/pt_br.json new file mode 100644 index 0000000..8c42064 --- /dev/null +++ b/src/main/resources/assets/videoplayer/lang/pt_br.json @@ -0,0 +1,19 @@ +{ + "itemGroup.videoplayer.items": "Video Player", + "gui.tv_video_screen.title": "Tela de TV", + "gui.tv_video_screen.save": "Salvar", + "gui.radio_screen.title": "Rádio", + "item.videoplayer.tv_block": "TV", + "item.videoplayer.radio_block": "Rádio", + "item.videoplayer.hand_radio_block": "Rádio portátil", + "block.videoplayer.tv_block": "TV", + "block.videoplayer.radio_block": "Rádio", + "block.videoplayer.hand_radio_block": "Rádio portátil", + "gui.tv_video_screen.play": "Play", + "gui.tv_video_screen.pause": "Pausar", + "gui.tv_video_screen.stop": "Parar", + "gui.tv_video_screen.url_text": "Url:", + "gui.tv_video_screen.volume": "Volume", + "gui.tv_video_screen.time": "Tempo: %s / %s", + "customslider.videoplayer.value": "%s: %d%%" +} \ No newline at end of file