diff --git a/CommandFramework/CommandFrameworkSpigot/src/de/steamwar/command/SpigotCommand.java b/CommandFramework/CommandFrameworkSpigot/src/de/steamwar/command/SpigotCommand.java index 204acb51..6dc2e153 100644 --- a/CommandFramework/CommandFrameworkSpigot/src/de/steamwar/command/SpigotCommand.java +++ b/CommandFramework/CommandFrameworkSpigot/src/de/steamwar/command/SpigotCommand.java @@ -31,6 +31,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Locale; import java.util.function.Consumer; import java.util.function.Function; import java.util.logging.Level; @@ -99,7 +100,11 @@ public class SpigotCommand extends AbstractCommand { @Override protected void sendMessage(CommandSender sender, String message, Object[] args) { // TODO: this.message.send(message, sender, args); - sender.sendMessage(MessageFormat.format(message, args)); + Locale locale = Locale.getDefault(); + if (sender instanceof Player) { + locale = Locale.forLanguageTag(((Player) sender).getLocale()); + } + sender.sendMessage(new MessageFormat(message, locale).format(args)); } /* TODO diff --git a/CommandFramework/CommandFrameworkVelocity/build.gradle.kts b/CommandFramework/CommandFrameworkVelocity/build.gradle.kts index 1d9c00b7..cede8ab6 100644 --- a/CommandFramework/CommandFrameworkVelocity/build.gradle.kts +++ b/CommandFramework/CommandFrameworkVelocity/build.gradle.kts @@ -30,5 +30,6 @@ dependencies { implementation(project(":CommandFramework:CommandFrameworkBase", "default")) annotationProcessor(libs.velocityapi) + compileOnly(libs.velocityapi) compileOnly(libs.velocity) } \ No newline at end of file diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommand.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommand.java index f64a2f2e..361c8d27 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommand.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommand.java @@ -19,57 +19,57 @@ package de.steamwar.command; -import de.steamwar.command.mapper.ProxiedPlayerMapper; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; -import net.md_5.bungee.api.plugin.TabExecutor; +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.command.SimpleCommand; +import com.velocitypowered.api.proxy.Player; +import de.steamwar.command.mapper.PlayerMapper; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.function.Consumer; import java.util.function.Function; import java.util.logging.Level; -public class VelocityCommand extends AbstractCommand { +public class VelocityCommand extends AbstractCommand { static { - CommandUtils.addMapper(ProxiedPlayer.class, new ProxiedPlayerMapper()); - addExecutorMapper(VelocityCommand.class, CommandSender.class, Function.identity()); + CommandUtils.addMapper(Player.class, new PlayerMapper()); + addExecutorMapper(VelocityCommand.class, CommandSource.class, Function.identity()); } - private Command command; + private SimpleCommand command; private List defaultHelpMessages = new ArrayList<>(); - public VelocityCommand(String command, Consumer> initializer, String... aliases) { + public VelocityCommand(String command, Consumer> initializer, String... aliases) { super(command, initializer, aliases); } - public VelocityCommand(String command, String permission, Consumer> initializer, String... aliases) { + public VelocityCommand(String command, String permission, Consumer> initializer, String... aliases) { super(command, permission, initializer, aliases); } - private abstract static class TabCompletableCommand extends Command implements TabExecutor { - public TabCompletableCommand(String name, String permission, String... aliases) { - super(name, permission, aliases); - } - } - @Override protected synchronized void initCommand() { if (command != null) return; - command = new TabCompletableCommand(VelocityCommand.super.command, permission, aliases) { + command = new SimpleCommand() { @Override - public void execute(CommandSender commandSender, String[] strings) { - VelocityCommand.this.execute(commandSender, null, strings); + public void execute(Invocation invocation) { + VelocityCommand.this.execute(invocation.source(), invocation.alias(), invocation.arguments()); } @Override - public Iterable onTabComplete(CommandSender commandSender, String[] strings) { - return VelocityCommand.this.tabComplete(commandSender, null, strings); + public List suggest(Invocation invocation) { + return VelocityCommand.this.tabComplete(invocation.source(), invocation.alias(), invocation.arguments()); + } + + @Override + public boolean hasPermission(Invocation invocation) { + if (permission == null) return true; + return invocation.source().hasPermission(permission); } }; } @@ -85,8 +85,8 @@ public class VelocityCommand extends AbstractCommand { } @Override - protected void commandSystemError(CommandSender sender, CommandFrameworkException e) { - ProxyServer.getInstance().getLogger().log(Level.SEVERE, e.getMessage(), e); + protected void commandSystemError(CommandSource sender, CommandFrameworkException e) { + VelocityCommandFrameworkPlugin.getLogger().log(Level.SEVERE, e.getMessage(), e); // TODO: ChatSender.of(sender).prefixless("COMMAND_SYSTEM_ERROR"); } @@ -94,10 +94,19 @@ public class VelocityCommand extends AbstractCommand { defaultHelpMessages.add(message); } + private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.builder().extractUrls().build(); + @Override - protected void sendMessage(CommandSender sender, String message, Object[] args) { + protected void sendMessage(CommandSource sender, String message, Object[] args) { // TODO: ChatSender.of(sender).system(message, args); - sender.sendMessage(MessageFormat.format(message, args)); + Locale locale = null; + if (sender instanceof Player) { + locale = ((Player) sender).getEffectiveLocale(); + } + if (locale == null) { + locale = Locale.getDefault(); + } + sender.sendMessage(SERIALIZER.deserialize(new MessageFormat(message, locale).format(args))); } /* TODO diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandFrameworkPlugin.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandFrameworkPlugin.java index e3741ab6..f676e0ec 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandFrameworkPlugin.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandFrameworkPlugin.java @@ -19,11 +19,35 @@ package de.steamwar.command; +import com.google.inject.Inject; import com.velocitypowered.api.plugin.Plugin; +import com.velocitypowered.api.proxy.ProxyServer; + +import java.util.logging.Logger; @Plugin( id = "commandframework", name = "CommandFramework" ) public class VelocityCommandFrameworkPlugin { + + private static VelocityCommandFrameworkPlugin instance; + + public static ProxyServer getProxy() { + return instance.proxyServer; + } + + public static Logger getLogger() { + return instance.logger; + } + + private final ProxyServer proxyServer; + private final Logger logger; + + @Inject + public VelocityCommandFrameworkPlugin(ProxyServer proxyServer, Logger logger) { + instance = this; + this.proxyServer = proxyServer; + this.logger = logger; + } } diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandRegistering.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandRegistering.java index 0fba8190..baf46394 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandRegistering.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityCommandRegistering.java @@ -19,9 +19,10 @@ package de.steamwar.command; +import com.velocitypowered.api.command.SimpleCommand; +import com.velocitypowered.api.proxy.ProxyServer; +import com.velocitypowered.proxy.Velocity; import lombok.experimental.UtilityClass; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Plugin; @UtilityClass @@ -29,11 +30,12 @@ class VelocityCommandRegistering { private static final Plugin plugin = ProxyServer.getInstance().getPluginManager().getPlugins().iterator().next(); - static void unregister(Command command) { + static void unregister(SimpleCommand command) { + VelocityCommandFrameworkPlugin.getProxy(). ProxyServer.getInstance().getPluginManager().unregisterCommand(command); } - static void register(Command command) { + static void register(SimpleCommand command) { ProxyServer.getInstance().getPluginManager().registerCommand(plugin, command); } } \ No newline at end of file diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeMapper.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeMapper.java index 830da003..3b4153ee 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeMapper.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeMapper.java @@ -19,7 +19,7 @@ package de.steamwar.command; -import net.md_5.bungee.api.CommandSender; +import com.velocitypowered.api.command.CommandSource; -public interface VelocityTypeMapper extends AbstractTypeMapper { +public interface VelocityTypeMapper extends AbstractTypeMapper { } diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeSupplier.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeSupplier.java index 69b1e733..09397066 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeSupplier.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeSupplier.java @@ -19,7 +19,7 @@ package de.steamwar.command; -import net.md_5.bungee.api.CommandSender; +import com.velocitypowered.api.command.CommandSource; -public interface VelocityTypeSupplier extends AbstractTypeSupplier { +public interface VelocityTypeSupplier extends AbstractTypeSupplier { } diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeValidator.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeValidator.java index a0b82800..cc5dcf5e 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeValidator.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/VelocityTypeValidator.java @@ -19,7 +19,7 @@ package de.steamwar.command; -import net.md_5.bungee.api.CommandSender; +import com.velocitypowered.api.command.CommandSource; -public interface VelocityTypeValidator extends AbstractTypeValidator { +public interface VelocityTypeValidator extends AbstractTypeValidator { } diff --git a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/mapper/ProxiedPlayerMapper.java b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/mapper/PlayerMapper.java similarity index 64% rename from CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/mapper/ProxiedPlayerMapper.java rename to CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/mapper/PlayerMapper.java index 99afe8b3..cdd18a13 100644 --- a/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/mapper/ProxiedPlayerMapper.java +++ b/CommandFramework/CommandFrameworkVelocity/src/de/steamwar/command/mapper/PlayerMapper.java @@ -19,26 +19,27 @@ package de.steamwar.command.mapper; -import de.steamwar.command.VelocityTypeMapper; +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.proxy.Player; import de.steamwar.command.PreviousArguments; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.connection.ProxiedPlayer; +import de.steamwar.command.VelocityCommandFrameworkPlugin; +import de.steamwar.command.VelocityTypeMapper; import java.util.Collection; import java.util.stream.Collectors; -public class ProxiedPlayerMapper implements VelocityTypeMapper { +public class PlayerMapper implements VelocityTypeMapper { @Override - public ProxiedPlayer map(CommandSender sender, PreviousArguments previousArguments, String s) { - return ProxyServer.getInstance().getPlayer(s); + public Player map(CommandSource sender, PreviousArguments previousArguments, String s) { + return VelocityCommandFrameworkPlugin.getProxy().getPlayer(s).orElse(null); } @Override - public Collection tabComplete(CommandSender sender, PreviousArguments previousArguments, String s) { - return ProxyServer.getInstance().getPlayers().stream() - .map(ProxiedPlayer::getName) + public Collection tabComplete(CommandSource sender, PreviousArguments previousArguments, String s) { + return VelocityCommandFrameworkPlugin.getProxy().getAllPlayers() + .stream() + .map(Player::getUsername) .collect(Collectors.toList()); } } diff --git a/CommandFramework/build.gradle.kts b/CommandFramework/build.gradle.kts index 8513c822..a8ffa845 100644 --- a/CommandFramework/build.gradle.kts +++ b/CommandFramework/build.gradle.kts @@ -22,6 +22,4 @@ plugins { } dependencies { - testImplementation(libs.junit) - testImplementation(libs.hamcrest) } \ No newline at end of file