From 0ae2319ddc00850129825fb91ef4ce7a93411e08 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Mon, 10 Mar 2025 19:02:02 +0700 Subject: [PATCH] Replace getBlockRandomPos implementation --- .../dbotthepony/mc/prng/mixin/LevelMixin.java | 18 ++++++++++++++++++ src/main/resources/better_random.mixins.json | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/dbotthepony/mc/prng/mixin/LevelMixin.java diff --git a/src/main/java/ru/dbotthepony/mc/prng/mixin/LevelMixin.java b/src/main/java/ru/dbotthepony/mc/prng/mixin/LevelMixin.java new file mode 100644 index 0000000..cde9e47 --- /dev/null +++ b/src/main/java/ru/dbotthepony/mc/prng/mixin/LevelMixin.java @@ -0,0 +1,18 @@ +package ru.dbotthepony.mc.prng.mixin; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(Level.class) +public abstract class LevelMixin { + @Overwrite + public BlockPos getBlockRandomPos(int x, int y, int z, int yMask) { + long value = ((Level) (Object) this).random.nextLong(); + int selectX = (int) (value & 15); + int selectZ = (int) ((value >>> 8) & 15); + int selectY = (int) ((value >>> 16) & yMask); + return new BlockPos(selectX + x, selectY + y, selectZ + z); + } +} diff --git a/src/main/resources/better_random.mixins.json b/src/main/resources/better_random.mixins.json index 2b0a98c..af5f6a9 100644 --- a/src/main/resources/better_random.mixins.json +++ b/src/main/resources/better_random.mixins.json @@ -5,7 +5,8 @@ "compatibilityLevel": "JAVA_21", "minVersion": "0.8", "mixins": [ - "RandomSourceMixin" + "RandomSourceMixin", + "LevelMixin" ], "client": [] }