9
0
mirror of https://github.com/BX-Team/DivineMC.git synced 2025-12-21 15:59:23 +00:00

resend chunks command

This commit is contained in:
NONPLAYT
2025-03-25 01:18:21 +03:00
parent eef8721115
commit e9faa34e80
2 changed files with 58 additions and 7 deletions

View File

@@ -10,9 +10,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bxteam.divinemc.command.subcommands.MSPTCommand; import org.bxteam.divinemc.command.subcommands.*;
import org.bxteam.divinemc.command.subcommands.ReloadCommand;
import org.bxteam.divinemc.command.subcommands.VersionCommand;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.*; import java.util.*;
@@ -28,15 +26,17 @@ public final class DivineCommand extends Command {
public static final String BASE_PERM = DivineCommands.COMMAND_BASE_PERM + "." + COMMAND_LABEL; public static final String BASE_PERM = DivineCommands.COMMAND_BASE_PERM + "." + COMMAND_LABEL;
private static final Permission basePermission = new Permission(BASE_PERM, PermissionDefault.TRUE); private static final Permission basePermission = new Permission(BASE_PERM, PermissionDefault.TRUE);
private static final DivineSubCommand RELOAD_SUBCOMMAND = new ReloadCommand();
private static final DivineSubCommand VERSION_SUBCOMMAND = new VersionCommand();
private static final DivineSubCommand MSPT_SUBCOMMAND = new MSPTCommand(); private static final DivineSubCommand MSPT_SUBCOMMAND = new MSPTCommand();
private static final DivineSubCommand RELOAD_SUBCOMMAND = new ReloadCommand();
private static final DivineSubCommand RESEND_CHUNKS_SUBCOMMAND = new ResendChunksCommand();
private static final DivineSubCommand VERSION_SUBCOMMAND = new VersionCommand();
private static final Map<String, DivineSubCommand> SUBCOMMANDS = Util.make(() -> { private static final Map<String, DivineSubCommand> SUBCOMMANDS = Util.make(() -> {
final Map<Set<String>, DivineSubCommand> commands = new HashMap<>(); final Map<Set<String>, DivineSubCommand> commands = new HashMap<>();
commands.put(Set.of(ReloadCommand.LITERAL_ARGUMENT), RELOAD_SUBCOMMAND);
commands.put(Set.of(VersionCommand.LITERAL_ARGUMENT), VERSION_SUBCOMMAND);
commands.put(Set.of(MSPTCommand.LITERAL_ARGUMENT), MSPT_SUBCOMMAND); commands.put(Set.of(MSPTCommand.LITERAL_ARGUMENT), MSPT_SUBCOMMAND);
commands.put(Set.of(ReloadCommand.LITERAL_ARGUMENT), RELOAD_SUBCOMMAND);
commands.put(Set.of(ResendChunksCommand.LITERAL_ARGUMENT), RESEND_CHUNKS_SUBCOMMAND);
commands.put(Set.of(VersionCommand.LITERAL_ARGUMENT), VERSION_SUBCOMMAND);
return commands.entrySet().stream() return commands.entrySet().stream()
.flatMap(entry -> entry.getKey().stream().map(s -> Map.entry(s, entry.getValue()))) .flatMap(entry -> entry.getKey().stream().map(s -> Map.entry(s, entry.getValue())))

View File

@@ -0,0 +1,51 @@
package org.bxteam.divinemc.command.subcommands;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.PlayerChunkSender;
import net.minecraft.world.level.ChunkPos;
import org.bukkit.Chunk;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionDefault;
import org.bxteam.divinemc.command.DivineCommand;
import org.bxteam.divinemc.command.DivineSubCommandPermission;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.framework.qual.DefaultQualifier;
import org.jetbrains.annotations.NotNull;
import java.util.stream.Collectors;
@DefaultQualifier(NonNull.class)
public final class ResendChunksCommand extends DivineSubCommandPermission {
public static final String LITERAL_ARGUMENT = "resendchunks";
public static final String PERM = DivineCommand.BASE_PERM + "." + LITERAL_ARGUMENT;
public ResendChunksCommand() {
super(PERM, PermissionDefault.TRUE);
}
@Override
public boolean execute(final CommandSender sender, final String subCommand, final String[] args) {
if (sender instanceof Player player) {
final ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
PlayerChunkSender chunkSender = serverPlayer.connection.chunkSender;
int resent = 0;
for (ChunkPos chunkPos : serverPlayer.getBukkitEntity().getSentChunks().stream().map(ResendChunksCommand::bukkitChunk2ChunkPos).collect(Collectors.toSet())) {
chunkSender.dropChunk(serverPlayer, chunkPos);
PlayerChunkSender.sendChunk(serverPlayer.connection, serverPlayer.serverLevel(), serverPlayer.level().getChunk(chunkPos.x, chunkPos.z));
resent++;
}
serverPlayer.sendSystemMessage(Component.literal("Resent " + resent + " chunks to client"));
} else {
sender.sendMessage("Only a player can execute this command.");
}
return true;
}
public static @NotNull ChunkPos bukkitChunk2ChunkPos(@NotNull Chunk chunk) {
return new ChunkPos(chunk.getX(), chunk.getZ());
}
}