Skip to content

Commit

Permalink
Updated mod to use Brigadier
Browse files Browse the repository at this point in the history
  • Loading branch information
Pedro270707 committed Sep 16, 2023
1 parent 3027795 commit 4388888
Show file tree
Hide file tree
Showing 32 changed files with 415 additions and 912 deletions.
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ repositories {
}
metadataSources { artifact() }
}
maven {
url "https://libraries.minecraft.net"
}
ivy {
url = "https://github.com/MartinSVK12"
patternLayout {
Expand All @@ -88,6 +91,8 @@ dependencies {

modImplementation "ModMenu:ModMenu:2.0.0"

implementation 'com.mojang:brigadier:1.0.18'

implementation "org.slf4j:slf4j-api:1.8.0-beta4"
implementation "org.apache.logging.log4j:log4j-slf4j18-impl:2.16.0"

Expand Down

This file was deleted.

50 changes: 0 additions & 50 deletions src/main/java/net/pedroricardo/commander/CommandSuggester.java

This file was deleted.

60 changes: 8 additions & 52 deletions src/main/java/net/pedroricardo/commander/Commander.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package net.pedroricardo.commander;

import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.fabricmc.api.ModInitializer;
import net.minecraft.client.Minecraft;
import net.minecraft.core.net.command.CommandHandler;
import net.minecraft.core.net.command.CommandSender;
import net.pedroricardo.commander.commands.CommanderCommand;
import net.pedroricardo.commander.commands.CommandParameterTypes;
import net.pedroricardo.commander.commands.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import turniplabs.halplibe.helper.CommandHelper;
Expand All @@ -20,55 +25,6 @@ public class Commander implements ModInitializer {
@Override
public void onInitialize() {
LOGGER.info("Commander initialized.");
CommandHelper.createCommand(new CommanderCommand("testCommand1") {
@Override
public boolean execute(CommandHandler commandHandler, CommandSender commandSender, String[] strings) {
return false;
}

@Override
public boolean opRequired(String[] strings) {
return false;
}

@Override
public void sendCommandSyntax(CommandHandler commandHandler, CommandSender commandSender) {

}
}.withParameter(CommandParameterTypes.FLOAT_COORDINATES));
CommandHelper.createCommand(new CommanderCommand("testCommand2") {
@Override
public boolean execute(CommandHandler commandHandler, CommandSender commandSender, String[] strings) {
return false;
}

@Override
public boolean opRequired(String[] strings) {
return false;
}

@Override
public void sendCommandSyntax(CommandHandler commandHandler, CommandSender commandSender) {

}
}.withParameter(CommandParameterTypes.INTEGER_COORDINATES));
CommandHelper.createCommand(new CommanderCommand("testCommand3") {
@Override
public boolean execute(CommandHandler commandHandler, CommandSender commandSender, String[] strings) {
return false;
}

@Override
public boolean opRequired(String[] strings) {
return false;
}

@Override
public void sendCommandSyntax(CommandHandler commandHandler, CommandSender commandSender) {

}
}.withParameter(CommandParameterTypes.BLOCK)
.withParameter(CommandParameterTypes.ITEM)
.withParameter(CommandParameterTypes.ACHIEVEMENT));
CommanderCommandManager.init();
}
}
21 changes: 0 additions & 21 deletions src/main/java/net/pedroricardo/commander/CommanderGuiManager.java

This file was deleted.

102 changes: 17 additions & 85 deletions src/main/java/net/pedroricardo/commander/CommanderHelper.java
Original file line number Diff line number Diff line change
@@ -1,100 +1,32 @@
package net.pedroricardo.commander;

import com.mojang.brigadier.context.StringRange;
import com.mojang.brigadier.suggestion.Suggestion;
import net.minecraft.client.Minecraft;
import net.minecraft.client.render.FontRenderer;
import net.minecraft.core.entity.player.EntityPlayer;
import net.minecraft.core.net.command.Command;
import net.minecraft.core.net.command.Commands;
import net.minecraft.core.util.collection.Pair;
import net.pedroricardo.commander.commands.CommanderCommandManager;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;

public class CommanderHelper {
private static final List<Pair<String, String>> delimiters = new ArrayList<>();

static {
delimiters.add(Pair.of("[", "]"));
delimiters.add(Pair.of("{", "}"));
}

public static boolean checkForUnmatchedCharacters(String string, int i, @Nullable String currentString, @Nullable String currentImportantDelimiter) {
if (currentString != null && !currentString.isEmpty()) {
if ((!string.substring(i).contains(currentString))) {
return true;
}
}
if (currentImportantDelimiter != null && !currentImportantDelimiter.isEmpty()) {
for (Pair<String, String> delimiter : delimiters) {
if (currentImportantDelimiter.equals(delimiter.getLeft()) && !string.substring(i).contains(delimiter.getRight())) {
return true;
}
}
}
return false;
}

public static List<String> getCommandParameterList(String message) {
List<String> parameters = new ArrayList<>();
String currentString = null;
String currentImportantDelimiter = null;
int lastParameterIndex = 0;
String trimmedMessage = message.trim();

for (int i = 0; i < trimmedMessage.length(); i++) {
if ((trimmedMessage.charAt(i) == '"' || trimmedMessage.charAt(i) == '\'') && trimmedMessage.charAt(i - 1) != '\\') {
if (currentString == null) {
currentString = String.valueOf(trimmedMessage.charAt(i));
} else if (currentString.equals(String.valueOf(trimmedMessage.charAt(i)))) {
currentString = null;
}
}

if (currentString == null)
for (Pair<String, String> delimiter : delimiters) {
if (String.valueOf(trimmedMessage.charAt(i)).equals(delimiter.getLeft()) && currentImportantDelimiter == null) {
currentImportantDelimiter = String.valueOf(trimmedMessage.charAt(i));
} else if (String.valueOf(trimmedMessage.charAt(i)).equals(delimiter.getRight()) && (currentImportantDelimiter != null && currentImportantDelimiter.equals(delimiter.getLeft()))) {
currentImportantDelimiter = null;
}
public static List<Suggestion> getLegacySuggestionList(Minecraft mc, String message, int cursor, List<Suggestion> currentSuggestions) {
List<Suggestion> list = new ArrayList<>();
String textBeforeCursor = message.substring(0, cursor);
if (textBeforeCursor.contains("/")) {
for (Command command : Commands.commands) {
List<String> path = new ArrayList<>();
path.add(command.getName());
if (CommanderCommandManager.getDispatcher().findNode(path) == null && command.getName().startsWith(textBeforeCursor.substring(1))) {
list.add(new Suggestion(new StringRange(1, 1 + command.getName().length()), command.getName()));
}

// If the character is a space and is not between delimiters (or is after an unmatched delimiter) and the character after it is not a space (so that the space is also included in the parameter in case there are two spaces) or, instead of all those checks, it's the last character, add this as a parameter.
if (trimmedMessage.charAt(i) == ' ' && (currentImportantDelimiter == null && currentString == null || checkForUnmatchedCharacters(trimmedMessage, i, currentString, currentImportantDelimiter)) && trimmedMessage.charAt(i + 1) != ' ' || i == trimmedMessage.length() - 1) {
parameters.add(trimmedMessage.substring(lastParameterIndex, i + (i == trimmedMessage.length() - 1 ? 1 : 0)));
lastParameterIndex = i + 1;
}
}

if (message.endsWith(" ")) parameters.add("");

return parameters;
}

public static List<String> getCommandParameterListWithoutSlash(String message) {
List<String> parameters = getCommandParameterList(message);

// Remove the leading slash from the first parameter
if (parameters.size() > 0 && parameters.get(0).startsWith("/")) {
String firstParameter = parameters.get(0);
parameters.remove(0);
parameters.add(0, firstParameter.substring(1));
}

return parameters;
}

public static int getLeftMarginForSuggestions(FontRenderer fontRenderer, String message, int cursor) {
int parameterInCursor = CommandParameterParser.getParameterInCursorIndex(message, cursor);
return fontRenderer.getStringWidth(message.startsWith("/") ? (parameterInCursor == 0 ? "/" : "/ ") : "" + ListHelper.join(getCommandParameterListWithoutSlash(message).subList(0, parameterInCursor), " "));
}

public static int getLeftMarginForSuggestionsWithParameterIndex(FontRenderer fontRenderer, String message, int index) {
List<String> commandParameters = CommanderHelper.getCommandParameterList(message);
return fontRenderer.getStringWidth((message.startsWith("/") && index == 0 ? "/" : "") + (index == 0 ? "" : " ") + ListHelper.join(commandParameters.subList(0, index), " "));
}

public static String addToIndex(String originalString, String stringToAdd, int index) {
if (index >= originalString.length()) return originalString + stringToAdd;
return originalString.substring(0, index) +
stringToAdd +
originalString.substring(index);
return list;
}
}
47 changes: 0 additions & 47 deletions src/main/java/net/pedroricardo/commander/ListHelper.java

This file was deleted.

Loading

0 comments on commit 4388888

Please sign in to comment.