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" ] }