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

@@ -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 <T> void addRegionTicket(final TicketType<T> 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 <T> void removeRegionTicket(final TicketType<T> type, final ChunkPos pos, final int radius, final T identifier) {
this.moonrise$getChunkHolderManager().removeTicketAtLevel(type, pos, ChunkLevel.byStatus(FullChunkStatus.FULL) - radius, identifier);
}
}

View File

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

View File

@@ -2,6 +2,8 @@
"parent": "moonrise.mixins.json", "parent": "moonrise.mixins.json",
"package": "ca.spottedleaf.moonrise.fabric.mixin", "package": "ca.spottedleaf.moonrise.fabric.mixin",
"mixins": [ "mixins": [
"chunk_system.FabricDistanceManagerMixin",
"chunk_system.FabricMinecraftServerMixin"
], ],
"client": [ "client": [
] ]

View File

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

View File

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

View File

@@ -2,6 +2,8 @@
"parent": "moonrise.mixins.json", "parent": "moonrise.mixins.json",
"package": "ca.spottedleaf.moonrise.neoforge.mixin", "package": "ca.spottedleaf.moonrise.neoforge.mixin",
"mixins": [ "mixins": [
"chunk_system.NeoForgeDistanceManagerMixin",
"chunk_system.NeoForgeMinecraftServerMixin"
], ],
"client": [ "client": [
] ]

View File

@@ -77,14 +77,14 @@ public class TickThread extends Thread {
} }
public TickThread(final Runnable run, final String name) { 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) { public TickThread(final ThreadGroup group, final Runnable run, final String name) {
this(run, name, group, ID_GENERATOR.incrementAndGet()); 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); super(group, run, name);
this.id = id; 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.Long2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.LongSet; import it.unimi.dsi.fastutil.longs.LongSet;
import net.minecraft.server.level.ChunkHolder; import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ChunkLevel;
import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ChunkMap;
import net.minecraft.server.level.ChunkTaskPriorityQueueSorter; import net.minecraft.server.level.ChunkTaskPriorityQueueSorter;
import net.minecraft.server.level.DistanceManager; import net.minecraft.server.level.DistanceManager;
import net.minecraft.server.level.FullChunkStatus;
import net.minecraft.server.level.Ticket; import net.minecraft.server.level.Ticket;
import net.minecraft.server.level.TicketType; import net.minecraft.server.level.TicketType;
import net.minecraft.server.level.TickingTracker; 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.Mixin;
import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
@@ -100,8 +97,8 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager
this.simulationDistance = -1; this.simulationDistance = -1;
} }
@Unique @Override
private ChunkHolderManager getChunkHolderManager() { public ChunkHolderManager moonrise$getChunkHolderManager() {
return ((ChunkSystemServerLevel)this.moonrise$getChunkMap().level).moonrise$getChunkTaskScheduler().chunkHolderManager; return ((ChunkSystemServerLevel)this.moonrise$getChunkMap().level).moonrise$getChunkTaskScheduler().chunkHolderManager;
} }
@@ -111,7 +108,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager
*/ */
@Overwrite @Overwrite
public void purgeStaleTickets() { public void purgeStaleTickets() {
this.getChunkHolderManager().tick(); this.moonrise$getChunkHolderManager().tick();
} }
/** /**
@@ -120,7 +117,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager
*/ */
@Overwrite @Overwrite
public boolean runAllUpdates(final ChunkMap chunkStorage) { 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 @Overwrite
public void addTicket(final long pos, final Ticket<?> ticket) { 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 @Overwrite
public void removeTicket(final long pos, final Ticket<?> ticket) { public void removeTicket(final long pos, final Ticket<?> ticket) {
this.getChunkHolderManager().removeTicketAtLevel((TicketType)ticket.getType(), pos, ticket.getTicketLevel(), ticket.key); this.moonrise$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);
} }
/** /**
@@ -175,9 +154,9 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager
@Overwrite @Overwrite
public void updateChunkForced(final ChunkPos pos, final boolean forced) { public void updateChunkForced(final ChunkPos pos, final boolean forced) {
if (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 { } 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 @Overwrite
public boolean inEntityTickingRange(final long pos) { 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(); return chunkHolder != null && chunkHolder.isEntityTickingReady();
} }
@@ -292,7 +271,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager
*/ */
@Overwrite @Overwrite
public boolean inBlockTickingRange(final long pos) { 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(); return chunkHolder != null && chunkHolder.isTickingReady();
} }
@@ -302,7 +281,7 @@ public abstract class DistanceManagerMixin implements ChunkSystemDistanceManager
*/ */
@Overwrite @Overwrite
public String getTicketDebugString(final long pos) { 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; package ca.spottedleaf.moonrise.mixin.chunk_system;
import ca.spottedleaf.moonrise.common.util.MoonriseCommon; 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.io.MoonriseRegionFileIO;
import ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel; import ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel;
import ca.spottedleaf.moonrise.patches.chunk_system.server.ChunkSystemMinecraftServer; 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 * @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. * 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", method = "addPlayer",
at = @At( at = @At(
value = "INVOKE", 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" 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; package ca.spottedleaf.moonrise.patches.chunk_system.level.chunk;
import ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkHolderManager;
import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ChunkMap;
public interface ChunkSystemDistanceManager { public interface ChunkSystemDistanceManager {
public ChunkMap moonrise$getChunkMap(); public ChunkMap moonrise$getChunkMap();
public ChunkHolderManager moonrise$getChunkHolderManager();
} }