From 355054202ab1c98b727441c0857e1b8d06400191 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 16 Oct 2020 14:35:39 +0300 Subject: [PATCH] Structures fix mixin --- .../mixin/common/ChunkSerializerMixin.java | 46 +++++++++++++++++++ .../resources/betterend.mixins.common.json | 1 + 2 files changed, 47 insertions(+) create mode 100644 src/main/java/ru/betterend/mixin/common/ChunkSerializerMixin.java diff --git a/src/main/java/ru/betterend/mixin/common/ChunkSerializerMixin.java b/src/main/java/ru/betterend/mixin/common/ChunkSerializerMixin.java new file mode 100644 index 00000000..7464cf6e --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/ChunkSerializerMixin.java @@ -0,0 +1,46 @@ +package ru.betterend.mixin.common; + +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +import it.unimi.dsi.fastutil.longs.LongSet; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.LongArrayTag; +import net.minecraft.structure.StructureStart; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.ChunkSerializer; +import net.minecraft.world.gen.feature.StructureFeature; + +@Mixin(ChunkSerializer.class) +public class ChunkSerializerMixin { + @Overwrite + private static CompoundTag writeStructures(ChunkPos pos, Map, StructureStart> structureStarts, Map, LongSet> structureReferences) { + CompoundTag tagResult = new CompoundTag(); + CompoundTag tagStarts = new CompoundTag(); + Iterator, StructureStart>> startsIterator = structureStarts.entrySet().iterator(); + + while (startsIterator.hasNext()) { + Entry, StructureStart> start = startsIterator.next(); + tagStarts.put((start.getKey()).getName(), (start.getValue()).toTag(pos.x, pos.z)); + } + + tagResult.put("Starts", tagStarts); + CompoundTag tagReferences = new CompoundTag(); + Iterator, LongSet>> refIterator = structureReferences.entrySet().iterator(); + + while (refIterator.hasNext()) { + Entry, LongSet> feature = refIterator.next(); + // Structures sometimes can be null + if (feature.getKey() != null) { + tagReferences.put((feature.getKey()).getName(), new LongArrayTag(feature.getValue())); + } + } + + tagResult.put("References", tagReferences); + return tagResult; + } +} diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 02e32bc3..1f00138c 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -13,6 +13,7 @@ "ChorusFlowerBlockMixin", "ChorusPlantBlockMixin", "RecipeManagerAccessor", + "ChunkSerializerMixin", "MinecraftServerMixin", "TagGroupLoaderMixin", "EndermanEntityMixin",