diff --git a/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/mixin/chunk_system/FabricDistanceManagerMixin.java b/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/mixin/chunk_system/FabricDistanceManagerMixin.java new file mode 100644 index 0000000..826673d --- /dev/null +++ b/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/mixin/chunk_system/FabricDistanceManagerMixin.java @@ -0,0 +1,33 @@ +package ca.spottedleaf.moonrise.fabric.mixin.chunk_system; + +import ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkSystemDistanceManager; +import net.minecraft.server.level.ChunkLevel; +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.FullChunkStatus; +import net.minecraft.server.level.TicketType; +import net.minecraft.world.level.ChunkPos; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(DistanceManager.class) +abstract class FabricDistanceManagerMixin implements ChunkSystemDistanceManager { + + /** + * @reason Route to new chunk system + * @author Spottedleaf + */ + @Overwrite + public void addRegionTicket(final TicketType type, final ChunkPos pos, final int radius, final T identifier) { + this.moonrise$getChunkHolderManager().addTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier); + } + + /** + * @reason Route to new chunk system + * @author Spottedleaf + */ + @Overwrite + public void removeRegionTicket(final TicketType type, final ChunkPos pos, final int radius, final T identifier) { + this.moonrise$getChunkHolderManager().removeTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier); + } + +} diff --git a/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/mixin/chunk_system/FabricMinecraftServerMixin.java b/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/mixin/chunk_system/FabricMinecraftServerMixin.java new file mode 100644 index 0000000..fcb8ae2 --- /dev/null +++ b/fabric/src/main/java/ca/spottedleaf/moonrise/fabric/mixin/chunk_system/FabricMinecraftServerMixin.java @@ -0,0 +1,27 @@ +package ca.spottedleaf.moonrise.fabric.mixin.chunk_system; + +import ca.spottedleaf.moonrise.common.util.TickThread; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(MinecraftServer.class) +abstract class FabricMinecraftServerMixin { + + /** + * @reason Make server thread an instance of TickThread for thread checks + * @author Spottedleaf + */ + @Redirect( + method = "spin", + at = @At( + value = "NEW", + target = "(Ljava/lang/Runnable;Ljava/lang/String;)Ljava/lang/Thread;" + ) + ) + private static Thread createTickThread(final Runnable target, final String name) { + return new TickThread(target, name); + } + +} diff --git a/fabric/src/main/resources/moonrise-fabric.mixins.json b/fabric/src/main/resources/moonrise-fabric.mixins.json index 48fcedc..c624d4b 100644 --- a/fabric/src/main/resources/moonrise-fabric.mixins.json +++ b/fabric/src/main/resources/moonrise-fabric.mixins.json @@ -2,6 +2,8 @@ "parent": "moonrise.mixins.json", "package": "ca.spottedleaf.moonrise.fabric.mixin", "mixins": [ + "chunk_system.FabricDistanceManagerMixin", + "chunk_system.FabricMinecraftServerMixin" ], "client": [ ] diff --git a/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/mixin/chunk_system/NeoForgeDistanceManagerMixin.java b/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/mixin/chunk_system/NeoForgeDistanceManagerMixin.java new file mode 100644 index 0000000..7f59513 --- /dev/null +++ b/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/mixin/chunk_system/NeoForgeDistanceManagerMixin.java @@ -0,0 +1,33 @@ +package ca.spottedleaf.moonrise.neoforge.mixin.chunk_system; + +import ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkSystemDistanceManager; +import net.minecraft.server.level.ChunkLevel; +import net.minecraft.server.level.DistanceManager; +import net.minecraft.server.level.FullChunkStatus; +import net.minecraft.server.level.TicketType; +import net.minecraft.world.level.ChunkPos; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; + +@Mixin(DistanceManager.class) +abstract class NeoForgeDistanceManagerMixin implements ChunkSystemDistanceManager { + + /** + * @reason Route to new chunk system + * @author Spottedleaf + */ + @Overwrite + public void addRegionTicket(final TicketType type, final ChunkPos pos, final int radius, final T identifier, final boolean forceTicks) { + this.moonrise$getChunkHolderManager().addTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier); + } + + /** + * @reason Route to new chunk system + * @author Spottedleaf + */ + @Overwrite + public void removeRegionTicket(final TicketType type, final ChunkPos pos, final int radius, final T identifier, final boolean forceTicks) { + this.moonrise$getChunkHolderManager().removeTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier); + } + +} diff --git a/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/mixin/chunk_system/NeoForgeMinecraftServerMixin.java b/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/mixin/chunk_system/NeoForgeMinecraftServerMixin.java new file mode 100644 index 0000000..d5e96f0 --- /dev/null +++ b/neoforge/src/main/java/ca/spottedleaf/moonrise/neoforge/mixin/chunk_system/NeoForgeMinecraftServerMixin.java @@ -0,0 +1,27 @@ +package ca.spottedleaf.moonrise.neoforge.mixin.chunk_system; + +import ca.spottedleaf.moonrise.common.util.TickThread; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(MinecraftServer.class) +abstract class NeoForgeMinecraftServerMixin { + + /** + * @reason Make server thread an instance of TickThread for thread checks + * @author Spottedleaf + */ + @Redirect( + method = "spin", + at = @At( + value = "NEW", + target = "(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)Ljava/lang/Thread;" + ) + ) + private static Thread createTickThread(final ThreadGroup group, final Runnable task, final String name) { + return new TickThread(group, task, name); + } + +} diff --git a/neoforge/src/main/resources/moonrise-neoforge.mixins.json b/neoforge/src/main/resources/moonrise-neoforge.mixins.json index eac96c1..7cc05dd 100644 --- a/neoforge/src/main/resources/moonrise-neoforge.mixins.json +++ b/neoforge/src/main/resources/moonrise-neoforge.mixins.json @@ -2,6 +2,8 @@ "parent": "moonrise.mixins.json", "package": "ca.spottedleaf.moonrise.neoforge.mixin", "mixins": [ + "chunk_system.NeoForgeDistanceManagerMixin", + "chunk_system.NeoForgeMinecraftServerMixin" ], "client": [ ] diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java index b096020..217d1f9 100644 --- a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java +++ b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java @@ -77,14 +77,14 @@ public class TickThread extends Thread { } public TickThread(final Runnable run, final String name) { - this(run, name, null); + this(null, run, name); } - public TickThread(final Runnable run, final String name, final ThreadGroup group) { - this(run, name, group, ID_GENERATOR.incrementAndGet()); + public TickThread(final ThreadGroup group, final Runnable run, final String name) { + this(group, run, name, ID_GENERATOR.incrementAndGet()); } - private TickThread(final Runnable run, final String name, final ThreadGroup group, final int id) { + private TickThread(final ThreadGroup group, final Runnable run, final String name, final int id) { super(group, run, name); this.id = id; } diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/DistanceManagerMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/DistanceManagerMixin.java index 1905a5c..a9253e6 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/DistanceManagerMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/DistanceManagerMixin.java @@ -7,11 +7,9 @@ import ca.spottedleaf.moonrise.patches.chunk_system.scheduling.NewChunkHolder; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.longs.LongSet; import net.minecraft.server.level.ChunkHolder; -import net.minecraft.server.level.ChunkLevel; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ChunkTaskPriorityQueueSorter; import net.minecraft.server.level.DistanceManager; -import net.minecraft.server.level.FullChunkStatus; import net.minecraft.server.level.Ticket; import net.minecraft.server.level.TicketType; import net.minecraft.server.level.TickingTracker; @@ -22,7 +20,6 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; 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.Inject; import org.spongepowered.asm.mixin.injection.Redirect; @@ -100,8 +97,8 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager this.simulationDistance = -1; } - @Unique - private ChunkHolderManager getChunkHolderManager() { + @Override + public ChunkHolderManager moonrise$getChunkHolderManager() { return ((ChunkSystemServerLevel)this.moonrise$getChunkMap().level).moonrise$getChunkTaskScheduler().chunkHolderManager; } @@ -111,7 +108,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public void purgeStaleTickets() { - this.getChunkHolderManager().tick(); + this.moonrise$getChunkHolderManager().tick(); } /** @@ -120,7 +117,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public boolean runAllUpdates(final ChunkMap chunkStorage) { - return this.getChunkHolderManager().processTicketUpdates(); + return this.moonrise$getChunkHolderManager().processTicketUpdates(); } /** @@ -129,7 +126,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public void addTicket(final long pos, final Ticket ticket) { - this.getChunkHolderManager().addTicketAtLevel((TicketType)ticket.getType(), pos, ticket.getTicketLevel(), ticket.key); + this.moonrise$getChunkHolderManager().addTicketAtLevel((TicketType)ticket.getType(), pos, ticket.getTicketLevel(), ticket.key); } /** @@ -138,25 +135,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public void removeTicket(final long pos, final Ticket ticket) { - this.getChunkHolderManager().removeTicketAtLevel((TicketType)ticket.getType(), pos, ticket.getTicketLevel(), ticket.key); - } - - /** - * @reason Route to new chunk system - * @author Spottedleaf - */ - @Overwrite - public void addRegionTicket(final TicketType type, final ChunkPos pos, final int radius, final T identifier, boolean forceTicks) { // TODO: Neo added param - this.getChunkHolderManager().addTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier); - } - - /** - * @reason Route to new chunk system - * @author Spottedleaf - */ - @Overwrite - public void removeRegionTicket(final TicketType type, final ChunkPos pos, final int radius, final T identifier, boolean forceTicks) { // TODO: Neo added param - this.getChunkHolderManager().removeTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier); + this.moonrise$getChunkHolderManager().removeTicketAtLevel((TicketType)ticket.getType(), pos, ticket.getTicketLevel(), ticket.key); } /** @@ -175,9 +154,9 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager @Overwrite public void updateChunkForced(final ChunkPos pos, final boolean forced) { if (forced) { - this.getChunkHolderManager().addTicketAtLevel(TicketType.FORCED, pos, ChunkMap.FORCED_TICKET_LEVEL, pos); + this.moonrise$getChunkHolderManager().addTicketAtLevel(TicketType.FORCED, pos, ChunkMap.FORCED_TICKET_LEVEL, pos); } else { - this.getChunkHolderManager().removeTicketAtLevel(TicketType.FORCED, pos, ChunkMap.FORCED_TICKET_LEVEL, pos); + this.moonrise$getChunkHolderManager().removeTicketAtLevel(TicketType.FORCED, pos, ChunkMap.FORCED_TICKET_LEVEL, pos); } } @@ -282,7 +261,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public boolean inEntityTickingRange(final long pos) { - final NewChunkHolder chunkHolder = this.getChunkHolderManager().getChunkHolder(pos); + final NewChunkHolder chunkHolder = this.moonrise$getChunkHolderManager().getChunkHolder(pos); return chunkHolder != null && chunkHolder.isEntityTickingReady(); } @@ -292,7 +271,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public boolean inBlockTickingRange(final long pos) { - final NewChunkHolder chunkHolder = this.getChunkHolderManager().getChunkHolder(pos); + final NewChunkHolder chunkHolder = this.moonrise$getChunkHolderManager().getChunkHolder(pos); return chunkHolder != null && chunkHolder.isTickingReady(); } @@ -302,7 +281,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager */ @Overwrite public String getTicketDebugString(final long pos) { - return this.getChunkHolderManager().getTicketDebugString(pos); + return this.moonrise$getChunkHolderManager().getTicketDebugString(pos); } /** diff --git a/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/MinecraftServerMixin.java b/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/MinecraftServerMixin.java index 06cd728..d797433 100644 --- a/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/MinecraftServerMixin.java +++ b/src/main/java/ca/spottedleaf/moonrise/mixin/chunk_system/MinecraftServerMixin.java @@ -1,7 +1,6 @@ package ca.spottedleaf.moonrise.mixin.chunk_system; import ca.spottedleaf.moonrise.common.util.MoonriseCommon; -import ca.spottedleaf.moonrise.common.util.TickThread; import ca.spottedleaf.moonrise.patches.chunk_system.io.MoonriseRegionFileIO; import ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel; import ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer; @@ -174,39 +173,6 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop