ServerChunkManager - Alloc reduction
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package net.gensokyoreimagined.nitori.core;
|
||||
|
||||
import net.minecraft.server.level.ChunkHolder;
|
||||
import net.minecraft.server.level.ServerChunkCache;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
@Mixin(ServerChunkCache.class)
|
||||
public class ServerChunkManagerMixin {
|
||||
private final ArrayList<ChunkHolder> cachedChunkList = new ArrayList<>();
|
||||
|
||||
@Redirect(
|
||||
method = "tickChunks()V",
|
||||
at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lcom/google/common/collect/Lists;newArrayListWithCapacity(I)Ljava/util/ArrayList;",
|
||||
remap = false
|
||||
)
|
||||
)
|
||||
private ArrayList<ChunkHolder> redirectChunksListClone(int initialArraySize) {
|
||||
ArrayList<ChunkHolder> list = this.cachedChunkList;
|
||||
list.clear(); // Ensure the list is empty before re-using it
|
||||
list.ensureCapacity(initialArraySize);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@Inject(method = "tick(Ljava/util/function/BooleanSupplier;Z)V", at = @At("HEAD"))
|
||||
private void preTick(BooleanSupplier shouldKeepTicking, boolean tickChunks, CallbackInfo ci) {
|
||||
// Ensure references aren't leaked through this list
|
||||
this.cachedChunkList.clear();
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,7 @@
|
||||
"MixinPlayerList",
|
||||
"MixinCraftPlayer",
|
||||
"StateMixin",
|
||||
"WorldMixin"
|
||||
"WorldMixin",
|
||||
"ServerChunkManagerMixin"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user