Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.util.loading;
2
3import com.google.common.util.concurrent.AtomicDouble;
4import net.lerariemann.infinity.registry.payload.ModPayloads;
5import net.lerariemann.infinity.util.VersionMethods;
6import net.lerariemann.infinity.util.core.CommonIO;
7import net.lerariemann.infinity.util.platform.InfinityPlatform;
8import net.minecraft.client.Minecraft;
9import net.minecraft.nbt.CompoundTag;
10import net.minecraft.server.packs.repository.PackRepository;
11import org.apache.logging.log4j.LogManager;
12
13import java.io.IOException;
14import java.nio.file.Files;
15import java.nio.file.Path;
16import java.util.Objects;
17import java.util.concurrent.atomic.AtomicInteger;
18
19public interface ShaderLoader {
20 String FILENAME = "current.json";
21 AtomicInteger iridLevel = new AtomicInteger(-1);
22 AtomicDouble iridProgress = new AtomicDouble(0.0);
23
24 static Path shaderDir(Minecraft client) {
25 return client.getResourcePackDirectory().resolve("infinity/assets/infinity/" + (InfinityPlatform.version > 21 ? "post_effect" : "shaders"));
26 }
27
28 static void reloadShaders(Minecraft client, CompoundTag worldShader, boolean isIridescenceShaderPresent) {
29 if (worldShader.isEmpty()) {
30 reloadShaders(client, false, isIridescenceShaderPresent);
31 }
32 else {
33 LogManager.getLogger().info("Payload received");
34 CommonIO.write(worldShader, shaderDir(client), ShaderLoader.FILENAME);
35 reloadShaders(client, true, isIridescenceShaderPresent);
36 if (!Objects.equals(ModPayloads.oldShader, worldShader.toString())) {
37 client.reloadResourcePacks();
38 ModPayloads.oldShader = worldShader.toString();
39 }
40 }
41 }
42
43 static void reloadShaders(Minecraft client, boolean isWorldShaderPresent, boolean isIridescenceShaderPresent) {
44 if (client.player == null) return;
45 if (isIridescenceShaderPresent) {
46 VersionMethods.loadPP(client, (InfinityPlatform.version > 21 ? "" : "post/") + "iridescence");
47 return;
48 }
49 iridLevel.set(-1);
50 iridProgress.set(0.0);
51 try {
52 updateWorldShaderFromDisk(client);
53 } catch (IOException e) {
54 throw new RuntimeException(e);
55 }
56 if(isWorldShaderPresent && shaderDir(client).resolve(FILENAME).toFile().exists()) {
57 VersionMethods.loadPP(client, "current");
58 return;
59 }
60 client.gameRenderer
61 //? if >1.21.2 {
62 .clearPostEffect();
63 //?} else {
64 /*.shutdownEffect();
65 *///?}
66 }
67
68 static void updateWorldShaderFromDisk(Minecraft client) throws IOException {
69 PackRepository m = client.getResourcePackRepository();
70 Path resourcepackPath = client.getResourcePackDirectory().resolve("infinity");
71 Files.createDirectories(shaderDir(client));
72 if (!resourcepackPath.resolve("pack.mcmeta").toFile().exists())
73 CommonIO.write(InfinityPlatform.resourcePackMcmeta("Shader container"), resourcepackPath.toString(), "pack.mcmeta");
74 m.reload();
75 m.addPack("file/" + resourcepackPath.getFileName().toString());
76 }
77}