From 32d618e99bd1d8857307ff664597687eb99b4a59 Mon Sep 17 00:00:00 2001 From: Kosma Moczek Date: Thu, 16 Dec 2021 20:18:33 +0100 Subject: [PATCH] fabric-1.18: add CustomServerChunkEvents.CHUNK_GENERATE --- .../access/ProtoChunkAccessor.java | 5 ++++ .../event/CustomServerChunkEvents.java | 21 +++++++++++++ .../fabric_1_18/mixin/ProtoChunkMixin.java | 30 +++++++++++++++++++ .../src/main/resources/dynmap.mixins.json | 1 + 4 files changed, 57 insertions(+) create mode 100644 fabric-1.18/src/main/java/org/dynmap/fabric_1_18/access/ProtoChunkAccessor.java create mode 100644 fabric-1.18/src/main/java/org/dynmap/fabric_1_18/event/CustomServerChunkEvents.java create mode 100644 fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ProtoChunkMixin.java diff --git a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/access/ProtoChunkAccessor.java b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/access/ProtoChunkAccessor.java new file mode 100644 index 00000000..e0408808 --- /dev/null +++ b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/access/ProtoChunkAccessor.java @@ -0,0 +1,5 @@ +package org.dynmap.fabric_1_18.access; + +public interface ProtoChunkAccessor { + boolean getTouchedByWorldGen(); +} diff --git a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/event/CustomServerChunkEvents.java b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/event/CustomServerChunkEvents.java new file mode 100644 index 00000000..13e0cf85 --- /dev/null +++ b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/event/CustomServerChunkEvents.java @@ -0,0 +1,21 @@ +package org.dynmap.fabric_1_18.event; + +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.chunk.Chunk; + +public class CustomServerChunkEvents { + public static Event CHUNK_GENERATE = EventFactory.createArrayBacked(ChunkGenerate.class, + (listeners) -> (world, chunk) -> { + for (ChunkGenerate callback : listeners) { + callback.onChunkGenerate(world, chunk); + } + } + ); + + @FunctionalInterface + public interface ChunkGenerate { + void onChunkGenerate(ServerWorld world, Chunk chunk); + } +} \ No newline at end of file diff --git a/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ProtoChunkMixin.java b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ProtoChunkMixin.java new file mode 100644 index 00000000..60fd0ca3 --- /dev/null +++ b/fabric-1.18/src/main/java/org/dynmap/fabric_1_18/mixin/ProtoChunkMixin.java @@ -0,0 +1,30 @@ +package org.dynmap.fabric_1_18.mixin; + +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.chunk.ProtoChunk; +import org.dynmap.fabric_1_18.access.ProtoChunkAccessor; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ProtoChunk.class) +public class ProtoChunkMixin implements ProtoChunkAccessor { + private boolean touchedByWorldGen = false; + + @Inject( + method = "setBlockState", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/chunk/ChunkSection;setBlockState(IIILnet/minecraft/block/BlockState;)Lnet/minecraft/block/BlockState;" + ) + ) + public void setBlockState(BlockPos pos, BlockState state, boolean moved, CallbackInfoReturnable info) { + touchedByWorldGen = true; + } + + public boolean getTouchedByWorldGen() { + return touchedByWorldGen; + } +} \ No newline at end of file diff --git a/fabric-1.18/src/main/resources/dynmap.mixins.json b/fabric-1.18/src/main/resources/dynmap.mixins.json index 9e8d2f97..67da3f92 100644 --- a/fabric-1.18/src/main/resources/dynmap.mixins.json +++ b/fabric-1.18/src/main/resources/dynmap.mixins.json @@ -7,6 +7,7 @@ "BiomeEffectsAccessor", "MinecraftServerMixin", "PlayerManagerMixin", + "ProtoChunkMixin", "ServerPlayerEntityMixin", "ServerPlayNetworkHandlerMixin", "ThreadedAnvilChunkStorageAccessor",