Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Expand Down
3 changes: 3 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -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

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/github/NGoedix/watchvideo/VideoPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -16,9 +16,11 @@
import java.util.ArrayList;
import java.util.List;

import java.net.URI;

public class ClientHandler {

private static final List<SyncMusicPlayer> musicPlayers = new ArrayList<>();
private static final List<MusicPlayer> 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));
Expand All @@ -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();
Expand All @@ -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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()));
}
Expand All @@ -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());
}

Expand Down Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,6 +27,8 @@
import java.util.Objects;
import java.util.TimeZone;

import java.net.URI;

public class VideoScreen extends AbstractContainerScreen<AbstractContainerMenu> {

private static final DateFormat FORMAT = new SimpleDateFormat("HH:mm:ss");
Expand All @@ -54,7 +55,7 @@ public class VideoScreen extends AbstractContainerScreen<AbstractContainerMenu>
private int optionOutSecs;

// TOOLS
private final SyncVideoPlayer player;
private final org.watermedia.api.player.videolan.VideoPlayer player;

// VIDEO INFO
int videoTexture = -1;
Expand All @@ -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);
}
}

Expand All @@ -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
Expand Down Expand Up @@ -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));
Expand All @@ -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();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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<String, TextureCache> CACHE = new HashMap<>();

Expand Down Expand Up @@ -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();
}
}
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@
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.*;
import java.util.ArrayList;
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";
Expand Down Expand Up @@ -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;
Expand All @@ -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);
}
}

Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
Loading