Last active
January 13, 2024 12:37
-
-
Save brickwall2900/c4dc2609e6a60c44849e43113f22cceb to your computer and use it in GitHub Desktop.
bad apple minecraft
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.mojang.blaze3d.platform.NativeImage; | |
import net.minecraft.client.Minecraft; | |
import net.minecraft.client.gui.GuiGraphics; | |
import net.minecraft.client.gui.screens.Screen; | |
import net.minecraft.client.renderer.texture.*; | |
import net.minecraft.network.chat.Component; | |
import net.minecraft.resources.ResourceLocation; | |
import uk.co.caprica.vlcj.factory.MediaPlayerFactory; | |
import uk.co.caprica.vlcj.player.base.MediaPlayer; | |
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; | |
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.BufferFormat; | |
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.BufferFormatCallback; | |
import uk.co.caprica.vlcj.player.embedded.videosurface.callback.RenderCallbackAdapter; | |
import java.nio.ByteBuffer; | |
public class BadAppleScreen extends Screen { | |
private DynamicTexture texture; | |
private ResourceLocation registeredTexture; | |
private MediaPlayerFactory factory; | |
private EmbeddedMediaPlayer mediaPlayer; | |
protected BadAppleScreen() { | |
super(Component.literal("Bad Apple")); | |
texture = new DynamicTexture(640, 480, true); | |
registeredTexture = Minecraft.getInstance().getTextureManager().register("bad_apple", texture); | |
factory = new MediaPlayerFactory(); | |
mediaPlayer = factory.mediaPlayers().newEmbeddedMediaPlayer(); | |
mediaPlayer.videoSurface().set(factory.videoSurfaces().newVideoSurface( | |
new RGBABufferFormatCallback(), | |
new ScreenCallbackAdapter(texture.getPixels()), | |
false | |
)); | |
mediaPlayer.media().play("D:\\bad_apple.mp4"); | |
} | |
@Override | |
public void render(GuiGraphics guiGraphics, int i, int j, float f) { | |
super.render(guiGraphics, i, j, f); | |
texture.upload(); | |
guiGraphics.setColor(1, 1, 1, 1); | |
guiGraphics.blit(registeredTexture, 0, 0, 0, 0, 0, width, height, width, height); | |
} | |
@Override | |
public void onClose() { | |
super.onClose(); | |
mediaPlayer.release(); | |
factory.release(); | |
Minecraft.getInstance().execute(() -> texture.close()); | |
} | |
private static final class RGBABufferFormatCallback implements BufferFormatCallback { | |
@Override | |
public BufferFormat getBufferFormat(int sourceWidth, int sourceHeight) { | |
return new BufferFormat("RGBA", 640, 480, new int[] {640 * 4}, new int[] {480}); | |
} | |
@Override | |
public void allocatedBuffers(ByteBuffer[] buffers) { | |
} | |
} | |
public static class ScreenCallbackAdapter extends RenderCallbackAdapter { | |
private final NativeImage texture; | |
public ScreenCallbackAdapter(NativeImage texture) { | |
super(new int[texture.getWidth() * texture.getHeight()]); | |
this.texture = texture; | |
} | |
@Override | |
protected void onDisplay(MediaPlayer mediaPlayer, int[] buffer) { | |
for (int i = 0; i < buffer.length; i++) { | |
int x = (i % texture.getWidth()); | |
int y = (i / texture.getWidth()); | |
texture.setPixelRGBA(x, y, buffer[i]); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment