soiz1's picture
Upload folder using huggingface_hub
d46f4a3 verified
package net.minecraft.server.commands;
import com.google.common.base.Joiner;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.Dynamic2CommandExceptionType;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import it.unimi.dsi.fastutil.longs.LongSet;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.arguments.coordinates.BlockPosArgument;
import net.minecraft.commands.arguments.coordinates.ColumnPosArgument;
import net.minecraft.core.SectionPos;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ColumnPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.Level;
public class ForceLoadCommand {
private static final int MAX_CHUNK_LIMIT = 256;
private static final Dynamic2CommandExceptionType ERROR_TOO_MANY_CHUNKS = new Dynamic2CommandExceptionType(
(p_308708_, p_308709_) -> Component.translatableEscape("commands.forceload.toobig", p_308708_, p_308709_)
);
private static final Dynamic2CommandExceptionType ERROR_NOT_TICKING = new Dynamic2CommandExceptionType(
(p_308720_, p_308721_) -> Component.translatableEscape("commands.forceload.query.failure", p_308720_, p_308721_)
);
private static final SimpleCommandExceptionType ERROR_ALL_ADDED = new SimpleCommandExceptionType(Component.translatable("commands.forceload.added.failure"));
private static final SimpleCommandExceptionType ERROR_NONE_REMOVED = new SimpleCommandExceptionType(Component.translatable("commands.forceload.removed.failure"));
public static void register(CommandDispatcher<CommandSourceStack> p_137677_) {
p_137677_.register(
Commands.literal("forceload")
.requires(p_137703_ -> p_137703_.hasPermission(2))
.then(
Commands.literal("add")
.then(
Commands.argument("from", ColumnPosArgument.columnPos())
.executes(
p_137711_ -> changeForceLoad(
p_137711_.getSource(),
ColumnPosArgument.getColumnPos(p_137711_, "from"),
ColumnPosArgument.getColumnPos(p_137711_, "from"),
true
)
)
.then(
Commands.argument("to", ColumnPosArgument.columnPos())
.executes(
p_137709_ -> changeForceLoad(
p_137709_.getSource(),
ColumnPosArgument.getColumnPos(p_137709_, "from"),
ColumnPosArgument.getColumnPos(p_137709_, "to"),
true
)
)
)
)
)
.then(
Commands.literal("remove")
.then(
Commands.argument("from", ColumnPosArgument.columnPos())
.executes(
p_137707_ -> changeForceLoad(
p_137707_.getSource(),
ColumnPosArgument.getColumnPos(p_137707_, "from"),
ColumnPosArgument.getColumnPos(p_137707_, "from"),
false
)
)
.then(
Commands.argument("to", ColumnPosArgument.columnPos())
.executes(
p_137705_ -> changeForceLoad(
p_137705_.getSource(),
ColumnPosArgument.getColumnPos(p_137705_, "from"),
ColumnPosArgument.getColumnPos(p_137705_, "to"),
false
)
)
)
)
.then(Commands.literal("all").executes(p_137701_ -> removeAll(p_137701_.getSource())))
)
.then(
Commands.literal("query")
.executes(p_137694_ -> listForceLoad(p_137694_.getSource()))
.then(
Commands.argument("pos", ColumnPosArgument.columnPos())
.executes(p_137679_ -> queryForceLoad(p_137679_.getSource(), ColumnPosArgument.getColumnPos(p_137679_, "pos")))
)
)
);
}
private static int queryForceLoad(CommandSourceStack p_137683_, ColumnPos p_137684_) throws CommandSyntaxException {
ChunkPos chunkpos = p_137684_.toChunkPos();
ServerLevel serverlevel = p_137683_.getLevel();
ResourceKey<Level> resourcekey = serverlevel.dimension();
boolean flag = serverlevel.getForcedChunks().contains(chunkpos.toLong());
if (flag) {
p_137683_.sendSuccess(
() -> Component.translatable("commands.forceload.query.success", Component.translationArg(chunkpos), Component.translationArg(resourcekey.location())),
false
);
return 1;
} else {
throw ERROR_NOT_TICKING.create(chunkpos, resourcekey.location());
}
}
private static int listForceLoad(CommandSourceStack p_137681_) {
ServerLevel serverlevel = p_137681_.getLevel();
ResourceKey<Level> resourcekey = serverlevel.dimension();
LongSet longset = serverlevel.getForcedChunks();
int i = longset.size();
if (i > 0) {
String s = Joiner.on(", ").join(longset.stream().sorted().map(ChunkPos::new).map(ChunkPos::toString).iterator());
if (i == 1) {
p_137681_.sendSuccess(() -> Component.translatable("commands.forceload.list.single", Component.translationArg(resourcekey.location()), s), false);
} else {
p_137681_.sendSuccess(() -> Component.translatable("commands.forceload.list.multiple", i, Component.translationArg(resourcekey.location()), s), false);
}
} else {
p_137681_.sendFailure(Component.translatable("commands.forceload.added.none", Component.translationArg(resourcekey.location())));
}
return i;
}
private static int removeAll(CommandSourceStack p_137696_) {
ServerLevel serverlevel = p_137696_.getLevel();
ResourceKey<Level> resourcekey = serverlevel.dimension();
LongSet longset = serverlevel.getForcedChunks();
longset.forEach(p_137675_ -> serverlevel.setChunkForced(ChunkPos.getX(p_137675_), ChunkPos.getZ(p_137675_), false));
p_137696_.sendSuccess(() -> Component.translatable("commands.forceload.removed.all", Component.translationArg(resourcekey.location())), true);
return 0;
}
private static int changeForceLoad(CommandSourceStack p_137686_, ColumnPos p_137687_, ColumnPos p_137688_, boolean p_137689_) throws CommandSyntaxException {
int i = Math.min(p_137687_.x(), p_137688_.x());
int j = Math.min(p_137687_.z(), p_137688_.z());
int k = Math.max(p_137687_.x(), p_137688_.x());
int l = Math.max(p_137687_.z(), p_137688_.z());
if (i >= -30000000 && j >= -30000000 && k < 30000000 && l < 30000000) {
int i1 = SectionPos.blockToSectionCoord(i);
int j1 = SectionPos.blockToSectionCoord(j);
int k1 = SectionPos.blockToSectionCoord(k);
int l1 = SectionPos.blockToSectionCoord(l);
long i2 = ((long)(k1 - i1) + 1L) * ((long)(l1 - j1) + 1L);
if (i2 > 256L) {
throw ERROR_TOO_MANY_CHUNKS.create(256, i2);
} else {
ServerLevel serverlevel = p_137686_.getLevel();
ResourceKey<Level> resourcekey = serverlevel.dimension();
ChunkPos chunkpos = null;
int j2 = 0;
for (int k2 = i1; k2 <= k1; k2++) {
for (int l2 = j1; l2 <= l1; l2++) {
boolean flag = serverlevel.setChunkForced(k2, l2, p_137689_);
if (flag) {
j2++;
if (chunkpos == null) {
chunkpos = new ChunkPos(k2, l2);
}
}
}
}
ChunkPos chunkpos2 = chunkpos;
int i3 = j2;
if (i3 == 0) {
throw (p_137689_ ? ERROR_ALL_ADDED : ERROR_NONE_REMOVED).create();
} else {
if (i3 == 1) {
p_137686_.sendSuccess(
() -> Component.translatable(
"commands.forceload." + (p_137689_ ? "added" : "removed") + ".single",
Component.translationArg(chunkpos2),
Component.translationArg(resourcekey.location())
),
true
);
} else {
ChunkPos chunkpos3 = new ChunkPos(i1, j1);
ChunkPos chunkpos1 = new ChunkPos(k1, l1);
p_137686_.sendSuccess(
() -> Component.translatable(
"commands.forceload." + (p_137689_ ? "added" : "removed") + ".multiple",
i3,
Component.translationArg(resourcekey.location()),
Component.translationArg(chunkpos3),
Component.translationArg(chunkpos1)
),
true
);
}
return i3;
}
}
} else {
throw BlockPosArgument.ERROR_OUT_OF_WORLD.create();
}
}
}