diff --git a/src/main/java/net/gensokyoreimagined/nitori/common/world/ChunkRandomSource.java b/src/main/java/net/gensokyoreimagined/nitori/common/world/ChunkRandomSource.java
index 61de488..f580f0a 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/common/world/ChunkRandomSource.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/common/world/ChunkRandomSource.java
@@ -1,10 +1,28 @@
+// Nitori Copyright (C) 2024 Gensokyo Reimagined
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
package net.gensokyoreimagined.nitori.common.world;
import net.minecraft.core.BlockPos;
-import net.minecraft.core.BlockPos.MutableBlockPos;
-import net.minecraft.world.level.Level;
+
+// Taken from Lithium
+// https://github.com/CaffeineMC/lithium-fabric/blob/427dd75ffc922cc1858c1db4b283cc54744567e0/src/main/java/me/jellysquid/mods/lithium/common/world/ChunkRandomSource.java
public interface ChunkRandomSource {
-
- void lithium$getRandomPosInChunk(int x, int y, int z, int mask, BlockPos.MutableBlockPos out);
-}
\ No newline at end of file
+ /**
+ * Alternative implementation of {@link net.minecraft.server.level.ServerLevel#getBlockRandomPos(int, int, int, int)} which does not allocate
+ * a new {@link BlockPos}.
+ */
+ void nitori$getRandomPosInChunk(int x, int y, int z, int mask, BlockPos.MutableBlockPos out);
+}
diff --git a/src/main/java/net/gensokyoreimagined/nitori/common/world/blockentity/BlockEntityGetter.java b/src/main/java/net/gensokyoreimagined/nitori/common/world/blockentity/BlockEntityGetter.java
new file mode 100644
index 0000000..c746536
--- /dev/null
+++ b/src/main/java/net/gensokyoreimagined/nitori/common/world/blockentity/BlockEntityGetter.java
@@ -0,0 +1,8 @@
+package net.gensokyoreimagined.nitori.common.world.blockentity;
+
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.core.BlockPos;
+
+public interface BlockEntityGetter {
+ BlockEntity lithium$getLoadedExistingBlockEntity(BlockPos pos);
+}
\ No newline at end of file
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerWorld.java b/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerWorld.java
new file mode 100644
index 0000000..203051b
--- /dev/null
+++ b/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerWorld.java
@@ -0,0 +1,65 @@
+// Nitori Copyright (C) 2024 Gensokyo Reimagined
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+package net.gensokyoreimagined.nitori.core;
+
+import net.gensokyoreimagined.nitori.common.world.ChunkRandomSource;
+import net.minecraft.core.BlockPos;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.util.RandomSource;
+import net.minecraft.world.level.block.state.BlockState;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.Unique;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Redirect;
+
+// Taken from Lithium
+// https://github.com/CaffeineMC/lithium-fabric/blob/427dd75ffc922cc1858c1db4b283cc54744567e0/src/main/java/me/jellysquid/mods/lithium/mixin/alloc/chunk_random/ServerWorldMixin.java#L24
+
+@Mixin(ServerLevel.class)
+public abstract class MixinServerWorld {
+ @Unique
+ private final BlockPos.MutableBlockPos nitori$randomPosInChunkCachedPos = new BlockPos.MutableBlockPos();
+
+ /**
+ * @reason Avoid allocating BlockPos every invocation through using our allocation-free variant
+ */
+ @Redirect(
+ method = "tickChunk",
+ at = @At(
+ value = "INVOKE",
+ target = "Lnet/minecraft/server/level/ServerLevel;getBlockRandomPos(IIII)Lnet/minecraft/core/BlockPos;"
+ )
+ )
+ private BlockPos redirectTickGetRandomPosInChunk(ServerLevel serverWorld, int x, int y, int z, int mask) {
+ ((ChunkRandomSource) serverWorld).nitori$getRandomPosInChunk(x, y, z, mask, this.nitori$randomPosInChunkCachedPos);
+
+ return this.nitori$randomPosInChunkCachedPos;
+ }
+
+ /**
+ * @reason Ensure an immutable block position is passed on block tick
+ */
+ @Redirect(
+ method = "tickChunk",
+ at = @At(
+ value = "INVOKE",
+ target = "Lnet/minecraft/world/level/block/state/BlockState;randomTick(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/util/RandomSource;)V"
+ )
+ )
+ private void redirectBlockStateTick(BlockState blockState, ServerLevel world, BlockPos pos, RandomSource rand) {
+ blockState.randomTick(world, pos.immutable(), rand);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/ChunkMapMixin.java
old mode 100755
new mode 100644
similarity index 99%
rename from src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/ChunkMapMixin.java
index 3ddae71..aab125a
--- a/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/ChunkMapMixin.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.destroystokyo.paper.util.misc.PooledLinkedHashSets;
import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinAABB.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinAABB.java
old mode 100755
new mode 100644
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinAABB.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinAABB.java
index 51125c9..ed58a36
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinAABB.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinAABB.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.core.Direction;
import net.minecraft.world.phys.AABB;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinBlock.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinBlock.java
old mode 100755
new mode 100644
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinBlock.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinBlock.java
index c158ce7..e26c697
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinBlock.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinBlock.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.Block;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinBlockPos.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinBlockPos.java
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinBlockPos.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinBlockPos.java
index 3de70bf..38b7d21 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinBlockPos.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinBlockPos.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import it.unimi.dsi.fastutil.longs.LongList;
import net.gensokyoreimagined.nitori.cached_blockpos_iteration.IterateOutwardsCache;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinChunkEntitySlices.java
similarity index 96%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinChunkEntitySlices.java
index 4bdc964..8560844 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinChunkEntitySlices.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.destroystokyo.paper.util.maplist.EntityList;
import io.papermc.paper.world.ChunkEntitySlices;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinCraftPlayer.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinCraftPlayer.java
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinCraftPlayer.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinCraftPlayer.java
index 78dd35f..8fd425a 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinCraftPlayer.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinCraftPlayer.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.Util;
import net.minecraft.world.entity.player.Player;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinDirection.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinDirection.java
old mode 100755
new mode 100644
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinDirection.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinDirection.java
index c4bc32d..6f58661
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinDirection.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinDirection.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinEntity.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinEntity.java
old mode 100755
new mode 100644
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinEntity.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinEntity.java
index 6f80be4..ddb19c7
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinEntity.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinEntity.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.Entity;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinEntitySectionStorage.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinEntitySectionStorage.java
old mode 100755
new mode 100644
similarity index 99%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinEntitySectionStorage.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinEntitySectionStorage.java
index b32371c..c3c112e
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinEntitySectionStorage.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinEntitySectionStorage.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.llamalad7.mixinextras.sugar.Local;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinGameRules.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinGameRules.java
old mode 100755
new mode 100644
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinGameRules.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinGameRules.java
index b48919e..7b1f0e5
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinGameRules.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinGameRules.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.google.common.collect.ImmutableMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinIteratorSafeOrderedReferenceSet.java
similarity index 93%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinIteratorSafeOrderedReferenceSet.java
index 911ddc3..12049aa 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinIteratorSafeOrderedReferenceSet.java
@@ -12,12 +12,11 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet;
import net.gensokyoreimagined.nitori.access.IMixinIteratorSafeOrderedReferenceSetAccess;
import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(IteratorSafeOrderedReferenceSet.class)
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinLevel.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinLevel.java
old mode 100755
new mode 100644
similarity index 78%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinLevel.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinLevel.java
index 62e6f6d..bac3ad4
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinLevel.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinLevel.java
@@ -12,10 +12,12 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.google.common.collect.Lists;
import net.gensokyoreimagined.nitori.common.util.collections.HashedReferenceList;
+import net.gensokyoreimagined.nitori.common.world.ChunkRandomSource;
+import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.TickingBlockEntity;
import org.spongepowered.asm.mixin.Final;
@@ -29,7 +31,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
@Mixin(Level.class)
-public class MixinLevel {
+public class MixinLevel implements ChunkRandomSource {
// Implementation of 0006-lithium-HashedReferenceList.patch
@Mutable
@Final @Shadow
@@ -40,10 +42,20 @@ public class MixinLevel {
@Final @Shadow
private List pendingBlockEntityTickers;
+ @Shadow
+ protected int randValue;
+
// Implementation of 0006-lithium-HashedReferenceList.patch
@Inject(method = "", at = @At("RETURN"))
private void onInit(CallbackInfo ci) {
this.blockEntityTickers = new HashedReferenceList<>(Lists.newArrayList());
this.pendingBlockEntityTickers = new HashedReferenceList<>(Lists.newArrayList());
}
+
+ @Override
+ public void nitori$getRandomPosInChunk(int x, int y, int z, int mask, BlockPos.MutableBlockPos out) {
+ this.randValue = this.randValue * 3 + 1013904223;
+ int rand = this.randValue >> 2;
+ out.set(x + (rand & 15), y + (rand >> 16 & mask), z + (rand >> 8 & 15));
+ }
}
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinLevelStorageAccess.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinLevelStorageAccess.java
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinLevelStorageAccess.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinLevelStorageAccess.java
index c8b75c4..7e161fd 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinLevelStorageAccess.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinLevelStorageAccess.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.Util;
import net.minecraft.nbt.CompoundTag;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinMob.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinMob.java
old mode 100755
new mode 100644
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinMob.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinMob.java
index 7d8da58..3a638b9
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinMob.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinMob.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.EntityType;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinMth.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinMth.java
old mode 100755
new mode 100644
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinMth.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinMth.java
index 4ed32cf..78820bd
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinMth.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinMth.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.util.Mth;
import org.spongepowered.asm.mixin.Mixin;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinNoiseBasedChunkGenerator.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinNoiseBasedChunkGenerator.java
old mode 100755
new mode 100644
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinNoiseBasedChunkGenerator.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinNoiseBasedChunkGenerator.java
index fed6495..42f14cf
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinNoiseBasedChunkGenerator.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinNoiseBasedChunkGenerator.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinPlayer.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinPlayer.java
old mode 100755
new mode 100644
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinPlayer.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinPlayer.java
index 828b4fe..251cc1f
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinPlayer.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinPlayer.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinPlayerList.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinPlayerList.java
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinPlayerList.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinPlayerList.java
index 6f02988..28481fb 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinPlayerList.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinPlayerList.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.minecraft.Util;
import net.minecraft.server.players.PlayerList;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinReobfServer.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinReobfServer.java
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinReobfServer.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinReobfServer.java
index 7d0a0a4..50fba57 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinReobfServer.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinReobfServer.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerBossEvent.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinServerBossEvent.java
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinServerBossEvent.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinServerBossEvent.java
index 075996b..903d20f 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerBossEvent.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinServerBossEvent.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.google.common.collect.Sets;
import net.minecraft.server.level.ServerBossEvent;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinServerEntity.java
similarity index 99%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinServerEntity.java
index 7fa23d2..4858b6e 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinServerEntity.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import com.google.common.collect.Lists;
import com.llamalad7.mixinextras.sugar.Local;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinSpongeSIMD.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinSpongeSIMD.java
old mode 100755
new mode 100644
similarity index 97%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinSpongeSIMD.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinSpongeSIMD.java
index 49b84f7..2bca161
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinSpongeSIMD.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinSpongeSIMD.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinWorldGenRegion.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinWorldGenRegion.java
old mode 100755
new mode 100644
similarity index 98%
rename from src/main/java/net/gensokyoreimagined/nitori/core/MixinWorldGenRegion.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/MixinWorldGenRegion.java
index 19161de..b6d4717
--- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinWorldGenRegion.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/MixinWorldGenRegion.java
@@ -12,7 +12,7 @@
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin;
import net.gensokyoreimagined.nitori.common.util.Pos;
import net.minecraft.core.BlockPos;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/ServerChunkManagerMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/ServerChunkManagerMixin.java
similarity index 96%
rename from src/main/java/net/gensokyoreimagined/nitori/core/ServerChunkManagerMixin.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/ServerChunkManagerMixin.java
index 7ea8508..f8e5f6a 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/ServerChunkManagerMixin.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/ServerChunkManagerMixin.java
@@ -1,4 +1,4 @@
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin.alloc;
import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ServerChunkCache;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/StateMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/StateMixin.java
similarity index 96%
rename from src/main/java/net/gensokyoreimagined/nitori/core/StateMixin.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/StateMixin.java
index 1e11235..76219a0 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/StateMixin.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/StateMixin.java
@@ -1,4 +1,4 @@
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin.alloc;
import com.google.common.collect.Table;
import net.gensokyoreimagined.nitori.common.state.FastImmutableTable;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/WorldMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/WorldMixin.java
similarity index 92%
rename from src/main/java/net/gensokyoreimagined/nitori/core/WorldMixin.java
rename to src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/WorldMixin.java
index c72e03a..86306ea 100644
--- a/src/main/java/net/gensokyoreimagined/nitori/core/WorldMixin.java
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/alloc/WorldMixin.java
@@ -1,4 +1,4 @@
-package net.gensokyoreimagined.nitori.core;
+package net.gensokyoreimagined.nitori.mixin.alloc;
import net.gensokyoreimagined.nitori.common.world.ChunkRandomSource;
import net.minecraft.core.BlockPos;
diff --git a/src/main/java/net/gensokyoreimagined/nitori/mixin/util/BlockEntityRetrieval_WorldMixin.java b/src/main/java/net/gensokyoreimagined/nitori/mixin/util/BlockEntityRetrieval_WorldMixin.java
new file mode 100644
index 0000000..e6b58dd
--- /dev/null
+++ b/src/main/java/net/gensokyoreimagined/nitori/mixin/util/BlockEntityRetrieval_WorldMixin.java
@@ -0,0 +1,42 @@
+package net.gensokyoreimagined.nitori.mixin.util;
+
+import net.gensokyoreimagined.nitori.common.world.blockentity.BlockEntityGetter;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.Containers;
+import net.minecraft.world.level.ChunkPos;
+import net.minecraft.world.level.chunk.ChunkAccess;
+import net.minecraft.world.level.chunk.LevelChunk;
+import net.minecraft.world.level.block.entity.BlockEntity;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.SectionPos;
+import org.jetbrains.annotations.Nullable;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+
+
+@Mixin(Level.class)
+public abstract class BlockEntityRetrieval_WorldMixin implements BlockEntityGetter, Containers {
+ @Final
+ public boolean isClient;
+
+ @Final
+ private Thread thread;
+
+ public abstract LevelChunk getChunk(int i, int j);
+
+ @Nullable
+ public abstract ChunkPos getChunk(int chunkX, int chunkZ, ChunkAccess leastStatus, boolean create);
+
+ @Override
+ public BlockEntity lithium$getLoadedExistingBlockEntity(BlockPos pos) {
+ if (!this.isOutOfHeightLimit(pos)) {
+ if (this.isClient || Thread.currentThread() == this.thread) {
+ ChunkPos chunk = this.getChunk(SectionPos.posToSectionCoord(pos.getX()), SectionPos.posToSectionCoord(pos.getZ()), ChunkAccess.FULL, false);
+ if (chunk != null) {
+ return chunk.BlockEntityType.getBlockEntity(pos);
+ }
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/mixins.core.json b/src/main/resources/mixins.core.json
index 2a452da..0c2e3a0 100755
--- a/src/main/resources/mixins.core.json
+++ b/src/main/resources/mixins.core.json
@@ -1,37 +1,40 @@
{
"required": true,
"minVersion": "0.8.5",
- "package": "net.gensokyoreimagined.nitori.core",
+ "package": "net.gensokyoreimagined.nitori.mixin",
"plugin": "net.gensokyoreimagined.nitori.plugins.CorePlugin",
"target": "@env(DEFAULT)",
"compatibilityLevel": "JAVA_17",
"server": [
+ "ChunkMapMixin",
+ "ChunkMapMixin$TrackedEntity",
"MixinAABB",
"MixinBlock",
"MixinBlockPos",
"MixinChunkEntitySlices",
+ "MixinCraftPlayer",
"MixinDirection",
"MixinEntity",
"MixinEntitySectionStorage",
"MixinGameRules",
"MixinIteratorSafeOrderedReferenceSet",
"MixinLevel",
+ "MixinLevelStorageAccess",
"MixinMob",
"MixinMth",
"MixinNoiseBasedChunkGenerator",
"MixinPlayer",
+ "MixinPlayerList",
+ "MixinReobfServer",
"MixinServerBossEvent",
"MixinServerEntity",
"MixinSpongeSIMD",
"MixinWorldGenRegion",
- "ChunkMapMixin",
- "ChunkMapMixin$TrackedEntity",
- "MixinReobfServer",
- "MixinLevelStorageAccess",
- "MixinPlayerList",
- "MixinCraftPlayer",
- "StateMixin",
- "WorldMixin",
- "ServerChunkManagerMixin"
+ "alloc.ServerChunkManagerMixin",
+ "alloc.StateMixin",
+ "alloc.WorldMixin"
+ ],
+ "mixins": [
+ "util.BlockEntityRetrieval_WorldMixin"
]
}