From ba179c09910d5b6c6be8c05c153ad77927e0bfb0 Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 16 Jun 2022 16:37:14 -0700 Subject: [PATCH] add BeeMoveGoalsUnsynchronizedRandomAccessFix --- ...oveGoalsUnsynchronizedRandomAccessFix.java | 29 +++++++++++++++++++ .../src/main/resources/terra.mixins.json | 5 ++-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java new file mode 100644 index 000000000..5f1cf35d4 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/fix/BeeMoveGoalsUnsynchronizedRandomAccessFix.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.fabric.mixin.fix; + +import com.dfsek.terra.fabric.FabricEntryPoint; +import com.dfsek.terra.fabric.util.FabricUtil; + +import net.minecraft.entity.passive.BeeEntity.MoveToFlowerGoal; +import net.minecraft.entity.passive.BeeEntity.MoveToHiveGoal; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.random.CheckedRandom; +import net.minecraft.util.math.random.Random; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + + +/** + * Bees spawning uses world.random without synchronization. This causes issues when spawning bees during world generation. + */ +@Mixin({ + MoveToHiveGoal.class, + MoveToFlowerGoal.class +}) +public class BeeMoveGoalsUnsynchronizedRandomAccessFix { + @Redirect(method = "", at = @At(value = "FIELD", target = "Lnet/minecraft/world/World;random:Lnet/minecraft/util/math/random/Random;")) + public Random redirectRandomAccess(World instance) { + return new CheckedRandom(FabricEntryPoint.getPlatform().getServer().getTicks()); // replace with new random seeded by tick time. + } +} diff --git a/platforms/fabric/src/main/resources/terra.mixins.json b/platforms/fabric/src/main/resources/terra.mixins.json index 5d8ed8c86..1a5f4ce8b 100644 --- a/platforms/fabric/src/main/resources/terra.mixins.json +++ b/platforms/fabric/src/main/resources/terra.mixins.json @@ -8,13 +8,14 @@ "access.MobSpawnerLogicAccessor", "access.StateAccessor", "access.StructureAccessorAccessor", + "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", + "fix.NetherFossilOptimization", "implementations.cache.ChunkRegionMixin", "implementations.cache.ProtoChunkMixin", "implementations.compat.GenerationSettingsFloraFeaturesMixin", "implementations.entity_holder.ProtoChunkMixin", - "fix.NetherFossilOptimization", "implementations.terra.BiomeMixin", - "implementations.terra.HandleImplementationMixin", + "implementations.terra.HandleImplementationMixin", "implementations.terra.block.BlockMixin", "implementations.terra.block.entity.BlockEntityMixin", "implementations.terra.block.entity.LootableContainerBlockEntityMixin",