Random cleanups to users of Level.OVERWORLD and reduce minecraft_server usage (#1697)

- Use `overworld()` instead of `getLevel(Level.OVERWORLD)` when convenient
- Remove now unnecessary `// OW` comments, from when it had no mappings
- Make spawn chunk size and light batches not depend on global server instance
- Merge all spawn chunk size logic into SpawnChunks instead of methods in the validator
- Remove unneeded `withWorld(OVERWORLD)` with just-created server `CommandSource`s
- Use enhanced for in light batch application
This commit is contained in:
altrisi authored and GitHub committed 2023-04-08 20:01:30 +02:00
1 parent 17c2d601d2
commit 8cd60db5e4
6 files changed
+30 -46

No files matched your search

+6 -26
View File
@@ -12,7 +12,6 @@ import carpet.utils.Messenger;
import carpet.utils.SpawnChunks; import carpet.utils.SpawnChunks;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@@ -21,7 +20,6 @@ import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.GameRules; import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
@@ -34,7 +32,6 @@ import net.minecraft.world.level.border.WorldBorder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Iterator;
import java.util.Optional; import java.util.Optional;
import static carpet.api.settings.RuleCategory.BUGFIX; import static carpet.api.settings.RuleCategory.BUGFIX;
@@ -810,18 +807,6 @@ public class CarpetSettings
public static int simulationDistance = 0; public static int simulationDistance = 0;
public static class ChangeSpawnChunksValidator extends Validator<Integer> { public static class ChangeSpawnChunksValidator extends Validator<Integer> {
public static void changeSpawnSize(int size)
{
ServerLevel overworld = CarpetServer.minecraft_server.getLevel(Level.OVERWORLD); // OW
if (overworld != null) {
ChunkPos centerChunk = new ChunkPos(new BlockPos(
overworld.getLevelData().getXSpawn(),
overworld.getLevelData().getYSpawn(),
overworld.getLevelData().getZSpawn()
));
SpawnChunks.changeSpawnChunks(overworld.getChunkSource(), centerChunk, size);
}
}
@Override public Integer validate(CommandSourceStack source, CarpetRule<Integer> currentRule, Integer newValue, String string) { @Override public Integer validate(CommandSourceStack source, CarpetRule<Integer> currentRule, Integer newValue, String string) {
if (source == null) return newValue; if (source == null) return newValue;
if (newValue < 0 || newValue > 32) if (newValue < 0 || newValue > 32)
@@ -834,11 +819,10 @@ public class CarpetSettings
//must been some startup thing //must been some startup thing
return newValue; return newValue;
} }
if (CarpetServer.minecraft_server == null) return newValue; ServerLevel currentOverworld = source.getServer().overworld();
ServerLevel currentOverworld = CarpetServer.minecraft_server.getLevel(Level.OVERWORLD); // OW
if (currentOverworld != null) if (currentOverworld != null)
{ {
changeSpawnSize(newValue); SpawnChunks.changeSpawnSize(currentOverworld, newValue);
} }
return newValue; return newValue;
} }
@@ -854,14 +838,11 @@ public class CarpetSettings
public static int spawnChunksSize = MinecraftServer.START_CHUNK_RADIUS; public static int spawnChunksSize = MinecraftServer.START_CHUNK_RADIUS;
public static class LightBatchValidator extends Validator<Integer> { public static class LightBatchValidator extends Validator<Integer> {
public static void applyLightBatchSizes(int maxBatchSize) public static void applyLightBatchSizes(MinecraftServer server, int maxBatchSize)
{ {
Iterator<ServerLevel> iterator = CarpetServer.minecraft_server.getAllLevels().iterator(); for (ServerLevel world : server.getAllLevels())
while (iterator.hasNext())
{ {
ServerLevel serverWorld = iterator.next(); world.getChunkSource().getLightEngine().setTaskPerBatch(maxBatchSize);
serverWorld.getChunkSource().getLightEngine().setTaskPerBatch(maxBatchSize);
} }
} }
@Override public Integer validate(CommandSourceStack source, CarpetRule<Integer> currentRule, Integer newValue, String string) { @Override public Integer validate(CommandSourceStack source, CarpetRule<Integer> currentRule, Integer newValue, String string) {
@@ -876,9 +857,8 @@ public class CarpetSettings
//must been some startup thing //must been some startup thing
return newValue; return newValue;
} }
if (CarpetServer.minecraft_server == null) return newValue;
applyLightBatchSizes(newValue); // Apply new settings applyLightBatchSizes(source.getServer(), newValue); // Apply new settings
return newValue; return newValue;
} }
@@ -3,9 +3,12 @@ package carpet.mixins;
import carpet.CarpetServer; import carpet.CarpetServer;
import carpet.CarpetSettings; import carpet.CarpetSettings;
import carpet.utils.CarpetProfiler; import carpet.utils.CarpetProfiler;
import carpet.utils.SpawnChunks;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.server.level.progress.ChunkProgressListener;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
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.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -56,12 +59,15 @@ public abstract class MinecraftServer_coreMixin
CarpetServer.onServerDoneClosing((MinecraftServer) (Object) this); CarpetServer.onServerDoneClosing((MinecraftServer) (Object) this);
} }
@Shadow
public abstract ServerLevel overworld();
@Inject(method = "prepareLevels", at = @At("RETURN")) @Inject(method = "prepareLevels", at = @At("RETURN"))
private void afterSpawnCreated(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci) private void afterSpawnCreated(ChunkProgressListener worldGenerationProgressListener, CallbackInfo ci)
{ {
if (CarpetSettings.spawnChunksSize != 11) if (CarpetSettings.spawnChunksSize != 11)
CarpetSettings.ChangeSpawnChunksValidator.changeSpawnSize(CarpetSettings.spawnChunksSize); SpawnChunks.changeSpawnSize(overworld(), CarpetSettings.spawnChunksSize);
CarpetSettings.LightBatchValidator.applyLightBatchSizes(CarpetSettings.lightEngineMaxBatchSize); CarpetSettings.LightBatchValidator.applyLightBatchSizes((MinecraftServer) (Object) this, CarpetSettings.lightEngineMaxBatchSize);
} }
} }
@@ -110,7 +110,7 @@ public abstract class ServerPlayer_scarpetEventMixin extends Player implements S
{ {
ServerPlayer player = (ServerPlayer) (Object)this; ServerPlayer player = (ServerPlayer) (Object)this;
Vec3 to = null; Vec3 to = null;
if (!wonGame || previousDimension != Level.END || destination.dimension() != Level.OVERWORLD) // end ow if (!wonGame || previousDimension != Level.END || destination.dimension() != Level.OVERWORLD)
{ {
to = position(); to = position();
} }
@@ -447,9 +447,7 @@ public class CarpetEventServer
@Override @Override
public void onTick(MinecraftServer server) public void onTick(MinecraftServer server)
{ {
handler.call(Collections::emptyList, () -> handler.call(Collections::emptyList, server::createCommandSourceStack);
server.createCommandSourceStack().withLevel(server.getLevel(Level.OVERWORLD))
);
} }
}; };
@@ -458,9 +456,7 @@ public class CarpetEventServer
@Override @Override
public void onTick(MinecraftServer server) public void onTick(MinecraftServer server)
{ {
handler.call(Collections::emptyList, () -> handler.call(Collections::emptyList,server::createCommandSourceStack);
server.createCommandSourceStack().withLevel(server.getLevel(Level.OVERWORLD))
);
} }
}; };
@@ -469,9 +465,7 @@ public class CarpetEventServer
@Override @Override
public void onTick(MinecraftServer server) public void onTick(MinecraftServer server)
{ {
handler.call(Collections::emptyList, () -> handler.call(Collections::emptyList,server::createCommandSourceStack);
server.createCommandSourceStack().withLevel(server.getLevel(Level.OVERWORLD))
);
} }
}; };
public static final Event NETHER_TICK = new Event("tick_nether", 0, true) public static final Event NETHER_TICK = new Event("tick_nether", 0, true)
+2 -4
View File
@@ -1,7 +1,6 @@
package carpet.utils; package carpet.utils;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@@ -13,7 +12,6 @@ import net.minecraft.network.chat.TextColor;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -162,7 +160,7 @@ public class Messenger
} }
public static Component tp(String desc, int x, int y, int z) public static Component tp(String desc, int x, int y, int z)
{ {
return getCoordsTextComponent(desc, (float)x, (float)y, (float)z, true); return getCoordsTextComponent(desc, x, y, z, true);
} }
/// to be continued /// to be continued
@@ -233,7 +231,7 @@ public class Messenger
public static void m(CommandSourceStack source, Object ... fields) public static void m(CommandSourceStack source, Object ... fields)
{ {
if (source != null) if (source != null)
source.sendSuccess(Messenger.c(fields),source.getServer() != null && source.getServer().getLevel(Level.OVERWORLD) != null); //OW source.sendSuccess(Messenger.c(fields), source.getServer() != null && source.getServer().overworld() != null);
} }
public static void m(Player player, Object ... fields) public static void m(Player player, Object ... fields)
{ {
+10 -4
View File
@@ -1,15 +1,21 @@
package carpet.utils; package carpet.utils;
import carpet.fakes.ChunkTicketManagerInterface; import carpet.fakes.ChunkTicketManagerInterface;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.DistanceManager; import net.minecraft.server.level.DistanceManager;
import net.minecraft.server.level.ServerChunkCache; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ChunkPos;
public class SpawnChunks public class SpawnChunks
{ {
public static void changeSpawnChunks(ServerChunkCache chunkManager, ChunkPos pos, int size) public static void changeSpawnSize(ServerLevel overworld, int size)
{ {
DistanceManager ticketManager = chunkManager.chunkMap.getDistanceManager(); ChunkPos centerChunk = new ChunkPos(new BlockPos(
((ChunkTicketManagerInterface)ticketManager).changeSpawnChunks(pos, size); overworld.getLevelData().getXSpawn(),
overworld.getLevelData().getYSpawn(),
overworld.getLevelData().getZSpawn()
));
DistanceManager ticketManager = overworld.getChunkSource().chunkMap.getDistanceManager();
((ChunkTicketManagerInterface)ticketManager).changeSpawnChunks(centerChunk, size);
} }
} }