diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/isolation/net_minecraft_server_level/ChunkMapMixin.java b/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java similarity index 67% rename from src/main/java/net/gensokyoreimagined/nitori/core/isolation/net_minecraft_server_level/ChunkMapMixin.java rename to src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java index 9945549..f2bfb0f 100755 --- a/src/main/java/net/gensokyoreimagined/nitori/core/isolation/net_minecraft_server_level/ChunkMapMixin.java +++ b/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java @@ -12,17 +12,18 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . -package net.gensokyoreimagined.nitori.core.isolation.net_minecraft_server_level; +package net.gensokyoreimagined.nitori.core; import com.destroystokyo.paper.util.misc.PooledLinkedHashSets; import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import it.unimi.dsi.fastutil.objects.ReferenceSets; -import net.gensokyoreimagined.nitori.plugins.NitoriConfig; +//import net.gensokyoreimagined.nitori.plugins.NitoriConfig; +import net.gensokyoreimagined.nitori.core.access.IMixinChunkMapAccess; +import net.gensokyoreimagined.nitori.core.access.IMixinChunkMap_TrackedEntityAccess; import net.gensokyoreimagined.nitori.tracker.MultithreadedTracker; import net.minecraft.server.level.ChunkMap; -import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerPlayerConnection; @@ -32,6 +33,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -42,26 +45,28 @@ import java.util.concurrent.ConcurrentLinkedQueue; import javax.annotation.Nullable; @Mixin(ChunkMap.class) -public class ChunkMapMixin { +public class ChunkMapMixin implements IMixinChunkMapAccess { @Mutable @Shadow @Final public Int2ObjectMap entityMap; // Implementation of 0107-Multithreaded-Tracker.patch - @Shadow @Final - ServerLevel level; + @Final + @Shadow + public ServerLevel level; // Implementation of 0107-Multithreaded-Tracker.patch @Unique - private @Nullable MultithreadedTracker multithreadedTracker; + private @Nullable MultithreadedTracker gensouHacks$multithreadedTracker; // Implementation of 0107-Multithreaded-Tracker.patch - @Unique @Final - private final ConcurrentLinkedQueue trackerMainThreadTasks = new ConcurrentLinkedQueue<>(); + @Final + @Unique + private final ConcurrentLinkedQueue gensouHacks$trackerMainThreadTasks = new ConcurrentLinkedQueue<>(); // Implementation of 0107-Multithreaded-Tracker.patch @Unique - private boolean tracking = false; + private boolean gensouHacks$tracking = false; @Inject(method = "", at = @At("RETURN")) private void reassignEntityTrackers(CallbackInfo ci) { @@ -69,46 +74,46 @@ public class ChunkMapMixin { } // Implementation of 0107-Multithreaded-Tracker.patch + @Override @Unique - public void runOnTrackerMainThread(final Runnable runnable) { - if (this.tracking) { - this.trackerMainThreadTasks.add(runnable); + public void gensouHacks$runOnTrackerMainThread(final Runnable runnable) { + if (this.gensouHacks$tracking) { + this.gensouHacks$trackerMainThreadTasks.add(runnable); } else { runnable.run(); } } - @Inject(method = "processTrackQueue", at = @At("HEAD")) + @Inject(method = "processTrackQueue", at = @At("HEAD"), cancellable = true) private void atProcessTrackQueueHead(CallbackInfo callbackInfo) { // Implementation of 0107-Multithreaded-Tracker.patch //if (NitoriConfig.enableAsyncEntityTracker) { - if (true) { - if (this.multithreadedTracker == null) { - this.multithreadedTracker = new MultithreadedTracker(this.level.chunkSource.entityTickingChunks, this.trackerMainThreadTasks); + if (this.gensouHacks$multithreadedTracker == null) { + this.gensouHacks$multithreadedTracker = new MultithreadedTracker(this.level.chunkSource.entityTickingChunks, this.gensouHacks$trackerMainThreadTasks); } - this.tracking = true; + this.gensouHacks$tracking = true; try { - this.multithreadedTracker.tick(); + this.gensouHacks$multithreadedTracker.tick(); } finally { - this.tracking = false; + this.gensouHacks$tracking = false; } callbackInfo.cancel(); - } + //} // Mirai end } @Mixin(ChunkMap.TrackedEntity.class) - public abstract class TrackedEntity { + public static abstract class TrackedEntity implements IMixinChunkMap_TrackedEntityAccess { // Implementation of 0107-Multithreaded-Tracker.patch - @Shadow @Final - public ServerEntity serverEntity; // Mirai -> public + @Override + @Final + @Accessor + public abstract Entity getEntity(); // Mirai -> public - // Implementation of 0107-Multithreaded-Tracker.patch - @Shadow @Final - public Entity entity; // Mirai -> public - - @Mutable @Shadow @Final + @Final + @Mutable + @Shadow public Set seenBy; @Inject(method = "", at = @At("RETURN")) @@ -118,16 +123,18 @@ public class ChunkMapMixin { } // Implementation of 0107-Multithreaded-Tracker.patch - @Shadow - public final void updatePlayers(PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates) { // Mirai -> public - throw new AssertionError("Mixin failed to apply!"); - } + @Override + @Final + @Invoker + public abstract void callUpdatePlayers(PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates); // Mirai -> public // Implementation of 0107-Multithreaded-Tracker.patch + @SuppressWarnings("EmptyMethod") @Redirect(method = "removePlayer", at = @At(value = "INVOKE", target = "Lorg/spigotmc/AsyncCatcher;catchOp(Ljava/lang/String;)V")) private void skipSpigotAsyncPlayerTrackerClear(String reason) {} // Mirai - we can remove async too // Implementation of 0107-Multithreaded-Tracker.patch + @SuppressWarnings("EmptyMethod") @Redirect(method = "updatePlayer", at = @At(value = "INVOKE", target = "Lorg/spigotmc/AsyncCatcher;catchOp(Ljava/lang/String;)V")) private void skipSpigotAsyncPlayerTrackerUpdate(String reason) {} // Mirai - we can update async } diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java b/src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java index 1f9acff..baa004b 100644 --- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java +++ b/src/main/java/net/gensokyoreimagined/nitori/core/MixinChunkEntitySlices.java @@ -16,13 +16,16 @@ package net.gensokyoreimagined.nitori.core; import com.destroystokyo.paper.util.maplist.EntityList; import io.papermc.paper.world.ChunkEntitySlices; +import net.gensokyoreimagined.nitori.core.access.IMixinChunkEntitySlicesAccess; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(ChunkEntitySlices.class) -public abstract class MixinChunkEntitySlices { +public abstract class MixinChunkEntitySlices implements IMixinChunkEntitySlicesAccess { // Implementation of 0107-Multithreaded-Tracker.patch - @Shadow @Final - public EntityList entities; + @Override + @Final + @Accessor + public abstract EntityList getEntities(); } diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java b/src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java index d320cec..48cd3d6 100644 --- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java +++ b/src/main/java/net/gensokyoreimagined/nitori/core/MixinIteratorSafeOrderedReferenceSet.java @@ -15,14 +15,17 @@ package net.gensokyoreimagined.nitori.core; import io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet; +import net.gensokyoreimagined.nitori.core.access.IMixinIteratorSafeOrderedReferenceSetAccess; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.gen.Accessor; @Mixin(IteratorSafeOrderedReferenceSet.class) -public abstract class MixinIteratorSafeOrderedReferenceSet { +public abstract class MixinIteratorSafeOrderedReferenceSet implements IMixinIteratorSafeOrderedReferenceSetAccess { // Implementation of 0107-Multithreaded-Tracker.patch // @Accessor happens to do exactly what is needed, making for nice shorthand - @Accessor @Unique + @Override + @Unique + @Accessor public abstract int getListSize(); // Mirai - expose listSize } diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java b/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java index 49e1b98..ef25fc2 100644 --- a/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java +++ b/src/main/java/net/gensokyoreimagined/nitori/core/MixinServerEntity.java @@ -16,7 +16,7 @@ package net.gensokyoreimagined.nitori.core; import com.google.common.collect.Lists; import com.llamalad7.mixinextras.sugar.Local; -import net.gensokyoreimagined.nitori.core.isolation.net_minecraft_server_level.ChunkMapMixin; +import net.gensokyoreimagined.nitori.core.access.IMixinChunkMapAccess; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundBundlePacket; @@ -27,7 +27,7 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerCommonPacketListenerImpl; +import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import org.objectweb.asm.Opcodes; @@ -46,7 +46,8 @@ import java.util.function.Consumer; @Mixin(ServerEntity.class) public abstract class MixinServerEntity { - @Shadow @Final + @Final + @Shadow private Entity entity; @Shadow @@ -58,45 +59,51 @@ public abstract class MixinServerEntity { } // Implementation of 0107-Multithreaded-Tracker.patch - @Redirect(method = "removePairing", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerCommonPacketListenerImpl;send(Lnet/minecraft/network/protocol/Packet;)V")) - private void skipSendForOriginalRemovePairing(ServerCommonPacketListenerImpl self, Packet packet) {} + @SuppressWarnings("EmptyMethod") + @Redirect(method = "removePairing", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;send(Lnet/minecraft/network/protocol/Packet;)V")) + private void skipSendForOriginalRemovePairing(ServerGamePacketListenerImpl self, Packet packet) {} // Implementation of 0107-Multithreaded-Tracker.patch @Inject(method = "removePairing", at = @At(value = "TAIL")) private void invokeRemovePairingSendOnMain(ServerPlayer serverplayer, CallbackInfo callbackInfo) { // Mirai start - ensure main thread - ((ChunkMapMixin) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).runOnTrackerMainThread(() -> + ((IMixinChunkMapAccess) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).gensouHacks$runOnTrackerMainThread(() -> serverplayer.connection.send(new ClientboundRemoveEntitiesPacket(this.entity.getId())) ); // Mirai end } // Implementation of 0107-Multithreaded-Tracker.patch + @SuppressWarnings("EmptyMethod") @Redirect(method = "addPairing", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerEntity;sendPairingData(Lnet/minecraft/server/level/ServerPlayer;Ljava/util/function/Consumer;)V")) private void skipSendPrepForOriginalAddPairing(ServerEntity self, ServerPlayer serverplayer, Consumer> consumer) {} // Implementation of 0107-Multithreaded-Tracker.patch - @Redirect(method = "addPairing", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerCommonPacketListenerImpl;send(Lnet/minecraft/network/protocol/Packet;)V")) - private void skipSendForOriginalAddPairing(ServerCommonPacketListenerImpl self, Packet packet) {} + @SuppressWarnings("EmptyMethod") + @Redirect(method = "addPairing", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/network/ServerGamePacketListenerImpl;send(Lnet/minecraft/network/protocol/Packet;)V")) + private void skipSendForOriginalAddPairing(ServerGamePacketListenerImpl self, Packet packet) {} // Implementation of 0107-Multithreaded-Tracker.patch @Inject(method = "addPairing", locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;startSeenByPlayer(Lnet/minecraft/server/level/ServerPlayer;)V")) private void invokeAddPairingSendOnMain(ServerPlayer serverplayer, CallbackInfo callbackInfo, @Local List> list) { - ((ChunkMapMixin) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).runOnTrackerMainThread(() -> { // Mirai - main thread + ((IMixinChunkMapAccess) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).gensouHacks$runOnTrackerMainThread(() -> { // Mirai - main thread this.sendPairingData(serverplayer, list::add); serverplayer.connection.send(new ClientboundBundlePacket(list)); }); } // Implementation of 0107-Multithreaded-Tracker.patch + @SuppressWarnings("SameReturnValue") @Redirect(method = "sendDirtyEntityData", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/syncher/SynchedEntityData;getNonDefaultValues()Ljava/util/List;")) private List> skipGetForGenericNonDefault(SynchedEntityData self) {return null;} // Implementation of 0107-Multithreaded-Tracker.patch + @SuppressWarnings("EmptyMethod") @Redirect(method = "sendDirtyEntityData", at = @At(value = "FIELD", target = "Lnet/minecraft/server/level/ServerEntity;trackedDataValues:Ljava/util/List;", opcode = Opcodes.PUTFIELD)) private void skipSetForGenericNonDefault(ServerEntity self, List> nonDefaultValues) {} // Implementation of 0107-Multithreaded-Tracker.patch + @SuppressWarnings("EmptyMethod") @Redirect(method = "sendDirtyEntityData", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerEntity;broadcastAndSend(Lnet/minecraft/network/protocol/Packet;)V")) private void skipTrasmitForNonDefault(ServerEntity self, Packet packet) {} @@ -104,7 +111,7 @@ public abstract class MixinServerEntity { @Inject(method = "sendDirtyEntityData", locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "FIELD", target = "Lnet/minecraft/server/level/ServerEntity;entity:Lnet/minecraft/world/entity/Entity;", opcode = Opcodes.GETFIELD, ordinal = 2)) private void invokeSendForGenericDirtyEntityDataOnMain(CallbackInfo callbackInfo, @Local SynchedEntityData synchedentitydata, @Local List> list) { // Mirai start - sync - ((ChunkMapMixin) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).runOnTrackerMainThread(() -> { + ((IMixinChunkMapAccess) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).gensouHacks$runOnTrackerMainThread(() -> { this.trackedDataValues = synchedentitydata.getNonDefaultValues(); this.broadcastAndSend(new ClientboundSetEntityDataPacket(this.entity.getId(), list)); }); @@ -118,7 +125,7 @@ public abstract class MixinServerEntity { private void invokeSendForLivingDirtyEntityDataOnMain(CallbackInfo callbackInfo, @Local Set set) { // Mirai start - sync final var copy = Lists.newArrayList(set); - ((ChunkMapMixin) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).runOnTrackerMainThread(() -> { + ((IMixinChunkMapAccess) (Object) ((ServerLevel) this.entity.level()).chunkSource.chunkMap).gensouHacks$runOnTrackerMainThread(() -> { // CraftBukkit start - Send scaled max health if (this.entity instanceof ServerPlayer) { ((ServerPlayer) this.entity).getBukkitEntity().injectScaledMaxHealth(copy, false); diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkEntitySlicesAccess.java b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkEntitySlicesAccess.java new file mode 100644 index 0000000..ceb7b91 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkEntitySlicesAccess.java @@ -0,0 +1,22 @@ +// 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.access; + +import com.destroystokyo.paper.util.maplist.EntityList; + +public interface IMixinChunkEntitySlicesAccess { + @SuppressWarnings("EmptyMethod") + EntityList getEntities(); +} diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkMapAccess.java b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkMapAccess.java new file mode 100644 index 0000000..2c9bd26 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkMapAccess.java @@ -0,0 +1,19 @@ +// 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.access; + +public interface IMixinChunkMapAccess { + void gensouHacks$runOnTrackerMainThread(final Runnable runnable); +} diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkMap_TrackedEntityAccess.java b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkMap_TrackedEntityAccess.java new file mode 100644 index 0000000..f1c8d32 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinChunkMap_TrackedEntityAccess.java @@ -0,0 +1,27 @@ +// 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.access; + +import com.destroystokyo.paper.util.misc.PooledLinkedHashSets; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.Entity; + +public interface IMixinChunkMap_TrackedEntityAccess { + @SuppressWarnings("EmptyMethod") + Entity getEntity(); + + @SuppressWarnings("EmptyMethod") + void callUpdatePlayers(PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates); +} diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinIteratorSafeOrderedReferenceSetAccess.java b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinIteratorSafeOrderedReferenceSetAccess.java new file mode 100644 index 0000000..7c53551 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/core/access/IMixinIteratorSafeOrderedReferenceSetAccess.java @@ -0,0 +1,20 @@ +// 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.access; + +public interface IMixinIteratorSafeOrderedReferenceSetAccess { + @SuppressWarnings("EmptyMethod") + int getListSize(); +} diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/access/README.md b/src/main/java/net/gensokyoreimagined/nitori/core/access/README.md new file mode 100644 index 0000000..3fa8279 --- /dev/null +++ b/src/main/java/net/gensokyoreimagined/nitori/core/access/README.md @@ -0,0 +1,3 @@ +# Mixin Access + +Folders are for isolating mixin access where package visibility is relevant, such as `protected`. diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/isolation/README.md b/src/main/java/net/gensokyoreimagined/nitori/core/isolation/README.md deleted file mode 100644 index f054687..0000000 --- a/src/main/java/net/gensokyoreimagined/nitori/core/isolation/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Isolated Mixins - -This folder serves to isolate mixins where package visibility is relevant, such as `protected`. diff --git a/src/main/java/net/gensokyoreimagined/nitori/plugins/NitoriConfig.java b/src/main/java/net/gensokyoreimagined/nitori/plugins/NitoriConfig.java index dd58993..277b64d 100644 --- a/src/main/java/net/gensokyoreimagined/nitori/plugins/NitoriConfig.java +++ b/src/main/java/net/gensokyoreimagined/nitori/plugins/NitoriConfig.java @@ -19,16 +19,16 @@ package net.gensokyoreimagined.nitori.plugins; * See https://github.com/etil2jz/Mirai/tree/ver/1.19.2 for more information/sources */ -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.List; -import net.minecraft.server.MinecraftServer; -import org.apache.logging.log4j.Level; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.MemoryConfiguration; -import org.jetbrains.annotations.Nullable; +//import java.io.File; +//import java.io.IOException; +//import java.lang.reflect.Method; +//import java.lang.reflect.Modifier; +//import java.util.List; +//import net.minecraft.server.MinecraftServer; +//import org.apache.logging.log4j.Level; +//import org.bukkit.configuration.ConfigurationSection; +//import org.bukkit.configuration.MemoryConfiguration; +//import org.jetbrains.annotations.Nullable; //import org.simpleyaml.configuration.comments.CommentType; //import org.simpleyaml.configuration.file.YamlFile; //import org.simpleyaml.exceptions.InvalidConfigurationException; diff --git a/src/main/java/net/gensokyoreimagined/nitori/tracker/MultithreadedTracker.java b/src/main/java/net/gensokyoreimagined/nitori/tracker/MultithreadedTracker.java index 4836ea7..52e71e6 100644 --- a/src/main/java/net/gensokyoreimagined/nitori/tracker/MultithreadedTracker.java +++ b/src/main/java/net/gensokyoreimagined/nitori/tracker/MultithreadedTracker.java @@ -21,9 +21,9 @@ package net.gensokyoreimagined.nitori.tracker; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet; import io.papermc.paper.world.ChunkEntitySlices; -import net.gensokyoreimagined.nitori.core.MixinIteratorSafeOrderedReferenceSet; -import net.gensokyoreimagined.nitori.core.MixinChunkEntitySlices; -import net.gensokyoreimagined.nitori.core.isolation.net_minecraft_server_level.ChunkMapMixin; +import net.gensokyoreimagined.nitori.core.access.IMixinChunkEntitySlicesAccess; +import net.gensokyoreimagined.nitori.core.access.IMixinChunkMap_TrackedEntityAccess; +import net.gensokyoreimagined.nitori.core.access.IMixinIteratorSafeOrderedReferenceSetAccess; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ChunkMap; import net.minecraft.world.entity.Entity; @@ -74,7 +74,7 @@ public class MultithreadedTracker { trackerExecutor.execute(this::runUpdatePlayers); } - while (this.taskIndex.get() < ((MixinIteratorSafeOrderedReferenceSet) (Object) this.entityTickingChunks).getListSize()) { + while (this.taskIndex.get() < ((IMixinIteratorSafeOrderedReferenceSetAccess) (Object) this.entityTickingChunks).getListSize()) { this.runMainThreadTasks(); this.handleChunkUpdates(5); // assist } @@ -102,7 +102,7 @@ public class MultithreadedTracker { if (chunk != null) { this.updateChunkEntities(chunk, TrackerStage.SEND_CHANGES); } - } while (++iterator < ((MixinIteratorSafeOrderedReferenceSet) (Object) this.entityTickingChunks).getListSize()); + } while (++iterator < ((IMixinIteratorSafeOrderedReferenceSetAccess) (Object) this.entityTickingChunks).getListSize()); } finally { this.entityTickingChunks.finishRawIterator(); } @@ -129,8 +129,8 @@ public class MultithreadedTracker { private boolean handleChunkUpdates(int tasks) { int index; - while ((index = this.taskIndex.getAndAdd(tasks)) < ((MixinIteratorSafeOrderedReferenceSet) (Object) this.entityTickingChunks).getListSize()) { - for (int i = index; i < index + tasks && i < ((MixinIteratorSafeOrderedReferenceSet) (Object) this.entityTickingChunks).getListSize(); i++) { + while ((index = this.taskIndex.getAndAdd(tasks)) < ((IMixinIteratorSafeOrderedReferenceSetAccess) (Object) this.entityTickingChunks).getListSize()) { + for (int i = index; i < index + tasks && i < ((IMixinIteratorSafeOrderedReferenceSetAccess) (Object) this.entityTickingChunks).getListSize(); i++) { LevelChunk chunk = this.entityTickingChunks.rawGet(i); if (chunk != null) { try { @@ -154,7 +154,7 @@ public class MultithreadedTracker { return; } - final Entity[] rawEntities = ((MixinChunkEntitySlices) (Object) entitySlices).entities.getRawData(); + final Entity[] rawEntities = ((IMixinChunkEntitySlicesAccess) (Object) entitySlices).getEntities().getRawData(); final ChunkMap chunkMap = chunk.level.chunkSource.chunkMap; for (int i = 0; i < rawEntities.length; i++) { @@ -165,7 +165,7 @@ public class MultithreadedTracker { if (trackerStage == TrackerStage.SEND_CHANGES) { entityTracker.serverEntity.sendChanges(); } else if (trackerStage == TrackerStage.UPDATE_PLAYERS) { - ((ChunkMapMixin.TrackedEntity) (Object) entityTracker).updatePlayers(((ChunkMapMixin.TrackedEntity) (Object) entityTracker).entity.getPlayersInTrackRange()); + ((IMixinChunkMap_TrackedEntityAccess) (Object) entityTracker).callUpdatePlayers(((IMixinChunkMap_TrackedEntityAccess) (Object) entityTracker).getEntity().getPlayersInTrackRange()); } } } diff --git a/src/main/resources/mixins.core.json b/src/main/resources/mixins.core.json index 5dc7cb6..5438566 100755 --- a/src/main/resources/mixins.core.json +++ b/src/main/resources/mixins.core.json @@ -6,24 +6,25 @@ "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_17", "server": [ - "isolation.net_minecraft_server_level.ChunkMapMixin", - "MixinSpongeSIMD", "MixinAABB", - "MixinDirection", - "MixinLevel", - "MixinEntitySectionStorage", - "MixinMth", "MixinBlock", - "MixinGameRules", - "MixinPlayer", - "MixinEntity", - "MixinMob", - "MixinWorldGenRegion", - "MixinNoiseBasedChunkGenerator", "MixinBlockPos", + "MixinChunkEntitySlices", + "MixinDirection", + "MixinEntity", + "MixinEntitySectionStorage", + "MixinGameRules", "MixinIteratorSafeOrderedReferenceSet", - "MixinChunkEntitySlicess", - "MixinServerBossEvent", - "MixinServerEntity" + "MixinLevel", + "MixinMob", + "MixinMth", + "MixinNoiseBasedChunkGenerator", + "MixinPlayer", + "MixinServerBossEvent", + "MixinServerEntity", + "MixinSpongeSIMD", + "MixinWorldGenRegion", + "ChunkMapMixin", + "ChunkMapMixin$TrackedEntity" ] }