Split some mixins to their platforms
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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": [
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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": [
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user