From a9c079661d4cd2396b6a4986d6df7594a8a5d70d Mon Sep 17 00:00:00 2001 From: mcrcortex <{ID}+{username}@users.noreply.github.com> Date: Sat, 20 Jul 2024 20:27:17 +1000 Subject: [PATCH] Automaticly ingest chunks created by chunky --- build.gradle | 11 ++++- .../client/mixin/chunky/MixinFabricWorld.java | 44 +++++++++++++++++++ src/main/resources/voxy.mixins.json | 5 ++- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/main/java/me/cortex/voxy/client/mixin/chunky/MixinFabricWorld.java diff --git a/build.gradle b/build.gradle index ff07cc7b..7c67fd04 100644 --- a/build.gradle +++ b/build.gradle @@ -62,8 +62,15 @@ dependencies { modCompileOnly("maven.modrinth:starlight:1.1.3+1.20.4") //modCompileOnly("maven.modrinth:immersiveportals:v5.1.7-mc1.20.4") modCompileOnly("maven.modrinth:vivecraft:1.20.4-1.1.6-fabric") - modCompileOnly("maven.modrinth:chunky:1.3.138") - modRuntimeOnly("maven.modrinth:chunky:1.3.138") + + modCompileOnly("maven.modrinth:chunky:1.4.16-fabric") + modRuntimeOnly("maven.modrinth:chunky:1.4.16-fabric") + + modRuntimeOnly("maven.modrinth:spark:1.10.73-fabric") + modRuntimeOnly("maven.modrinth:fabric-permissions-api:0.3.1") + //modRuntimeOnly("maven.modrinth:nsight-loader:1.2.0") + + modImplementation('io.github.douira:glsl-transformer:2.0.1') } diff --git a/src/main/java/me/cortex/voxy/client/mixin/chunky/MixinFabricWorld.java b/src/main/java/me/cortex/voxy/client/mixin/chunky/MixinFabricWorld.java new file mode 100644 index 00000000..1d008b45 --- /dev/null +++ b/src/main/java/me/cortex/voxy/client/mixin/chunky/MixinFabricWorld.java @@ -0,0 +1,44 @@ +package me.cortex.voxy.client.mixin.chunky; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import me.cortex.voxy.client.Voxy; +import me.cortex.voxy.client.config.VoxyConfig; +import me.cortex.voxy.client.core.IGetVoxelCore; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.server.world.ChunkHolder; +import net.minecraft.server.world.OptionalChunk; +import net.minecraft.server.world.ServerChunkLoadingManager; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.ChunkStatus; +import net.minecraft.world.chunk.WorldChunk; +import org.joml.Matrix4f; +import org.popcraft.chunky.platform.FabricWorld; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.BiConsumer; + +@Mixin(FabricWorld.class) +public class MixinFabricWorld { + @WrapOperation(method = "getChunkAtAsync", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ChunkHolder;load(Lnet/minecraft/world/chunk/ChunkStatus;Lnet/minecraft/server/world/ServerChunkLoadingManager;)Ljava/util/concurrent/CompletableFuture;")) + private CompletableFuture> captureGeneratedChunk(ChunkHolder instance, ChunkStatus chunkStatus, ServerChunkLoadingManager serverChunkLoadingManager, Operation>> original) { + var future = original.call(instance, chunkStatus, serverChunkLoadingManager); + return future.thenApplyAsync(res->{ + res.ifPresent(chunk -> { + var core = ((IGetVoxelCore)(MinecraftClient.getInstance().worldRenderer)).getVoxelCore(); + if (core != null && VoxyConfig.CONFIG.ingestEnabled) { + core.enqueueIngest((WorldChunk) chunk); + } + }); + return res; + }); + } +} diff --git a/src/main/resources/voxy.mixins.json b/src/main/resources/voxy.mixins.json index df537eb7..efe79540 100644 --- a/src/main/resources/voxy.mixins.json +++ b/src/main/resources/voxy.mixins.json @@ -15,5 +15,8 @@ ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + "chunky.MixinFabricWorld" + ] }