Skip to content

Commit

Permalink
fix: Fixed StringIndexOutOfBoundsException using simple commands
Browse files Browse the repository at this point in the history
resolves #103
  • Loading branch information
4drian3d committed Nov 4, 2024
1 parent 7eaf668 commit 975a0c4
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,5 @@ public void onProxyInitialization(final ProxyInitializeEvent event) {

Listener.register(injector);
PacketAdapter.register(injector, pluginManager);
server.getChannelRegistrar().register(SIGNEDVELOCITY_CHANNEL);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.google.inject.Inject;
import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.EventTask;
import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.player.PlayerChatEvent;
import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.Player;
Expand Down Expand Up @@ -85,7 +84,7 @@ public EventTask executeAsync(final PlayerChatEvent event) {

@Override
public void register() {
eventManager.register(plugin, PlayerChatEvent.class, PostOrder.LAST, this);
eventManager.register(plugin, PlayerChatEvent.class, Short.MIN_VALUE, this);
}

private void allowedData(final Player player, final RegisteredServer server) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.velocitypowered.api.command.CommandManager;
import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.EventTask;
import com.velocitypowered.api.event.PostOrder;
import com.velocitypowered.api.event.command.CommandExecuteEvent;
import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.Player;
Expand All @@ -25,7 +24,7 @@ final class PlayerCommandListener implements Listener<CommandExecuteEvent> {

@Override
public void register() {
eventManager.register(plugin, CommandExecuteEvent.class, PostOrder.LAST, this);
eventManager.register(plugin, CommandExecuteEvent.class, Short.MIN_VALUE, this);
}

@Override
Expand Down Expand Up @@ -112,15 +111,26 @@ private void allowedData(final Player player, final RegisteredServer server) {

private boolean isProxyCommand(final String command) {
final int firstIndexOfSpace = command.indexOf(' ');
// In case the command executed is for example "/ test asd"
if (firstIndexOfSpace == 0) {
final String[] arguments = command.split(" ");
for (final String argument : arguments) {
if (argument.isBlank()) continue;
return this.commandManager.hasCommand(argument);

return switch (firstIndexOfSpace) {
// If the command has no spaces
case -1 -> this.commandManager.hasCommand(command);
// In case the command executed is for example "/ test asd"
case 0 -> {
final String[] arguments = command.split(" ");
// All blanks are filtered out until the first argument is reached
for (final String argument : arguments) {
if (argument.isBlank()) continue;
yield this.commandManager.hasCommand(argument);
}
final String firstArgument = command.substring(0, firstIndexOfSpace);
yield this.commandManager.hasCommand(firstArgument);
}
// Normal execution with multiple arguments "/test asd"
default -> {
final String firstArgument = command.substring(0, firstIndexOfSpace);
yield this.commandManager.hasCommand(firstArgument);
}
}
final String firstArgument = command.substring(0, firstIndexOfSpace);
return this.commandManager.hasCommand(firstArgument);
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,34 @@
import com.velocitypowered.api.event.EventTask;
import com.velocitypowered.api.event.connection.PluginMessageEvent;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
import io.github._4drian3d.signedvelocity.velocity.SignedVelocity;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;

import java.util.Objects;

import static io.github._4drian3d.signedvelocity.velocity.SignedVelocity.SIGNEDVELOCITY_CHANNEL;

public final class PluginMessageListener implements Listener<PluginMessageEvent> {
@Inject
private EventManager eventManager;
@Inject
private ProxyServer proxyServer;
@Inject
private SignedVelocity plugin;


@Override
public void register() {
proxyServer.getChannelRegistrar().register(SIGNEDVELOCITY_CHANNEL);
eventManager.register(plugin, PluginMessageEvent.class, this);
}

@Override
public EventTask executeAsync(PluginMessageEvent event) {
return EventTask.async(() -> {
if (Objects.equals(event.getIdentifier(), SignedVelocity.SIGNEDVELOCITY_CHANNEL)
if (Objects.equals(event.getIdentifier(), SIGNEDVELOCITY_CHANNEL)
&& event.getSource() instanceof Player player) {
player.disconnect(Component.translatable("velocity.error.internal-server-connection-error", NamedTextColor.RED));
event.setResult(PluginMessageEvent.ForwardResult.handled());
Expand Down

0 comments on commit 975a0c4

Please sign in to comment.