Split some mixins to their platforms

This commit is contained in:
Jason Penilla
2024-08-04 20:17:15 -07:00
parent a87cf17bd1
commit c8d18ca479
11 changed files with 143 additions and 70 deletions

View File

@@ -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;
}

View File

@@ -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 <T> void addRegionTicket(final TicketType<T> 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 <T> void removeRegionTicket(final TicketType<T> 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);
}
/**

View File

@@ -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<T
}
}
/**
* @reason Make server thread an instance of TickThread for thread checks
* @author Spottedleaf
*/
/* TODO NeoForge adds ThreadGroup
@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);
}
*/
/**
* @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 createTickThreadNeo(final ThreadGroup group, final Runnable task, final String name) {
return new TickThread(task, name, group);
}
/**
* @reason Close logic is re-written so that we do not wait for tasks to complete and unload everything
* but rather we halt all task processing and then save.

View File

@@ -454,6 +454,7 @@ public abstract class ServerLevelMixin extends Level implements ChunkSystemServe
method = "addPlayer",
at = @At(
value = "INVOKE",
// TODO - this is currently covering addEntity & addNewEntityWithoutEvent on NeoForge - split into Fabric & Neo mixins?
target = "Lnet/minecraft/world/level/entity/PersistentEntitySectionManager;*(Lnet/minecraft/world/level/entity/EntityAccess;)Z"
)
)

View File

@@ -1,9 +1,12 @@
package ca.spottedleaf.moonrise.patches.chunk_system.level.chunk;
import ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkHolderManager;
import net.minecraft.server.level.ChunkMap;
public interface ChunkSystemDistanceManager {
public ChunkMap moonrise$getChunkMap();
public ChunkHolderManager moonrise$getChunkHolderManager();
}