aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md6
-rw-r--r--src/main/java/de/cowtipper/cowlection/command/MooCommand.java12
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/MooConfig.java49
-rw-r--r--src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java7
-rw-r--r--src/main/java/de/cowtipper/cowlection/listener/ChatListener.java2
-rw-r--r--src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java2
-rw-r--r--src/main/resources/assets/cowlection/lang/en_US.lang6
7 files changed, 78 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4cc8fd8..f59e1d3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [1.8.9-0.12.0] - unreleased
+### Added
+- New config options to enable/disable some features:
+ - Auto-replacement of `/r ` with `/w <last sender>`
+ - Short alias `/m` for `/moo` command
+ - Copy inventories to clipboard as JSON with <kbd>CTRL</kbd> + <kbd>C</kbs>
+
### Changed
- Item age: show timestamp in the local timezone instead of "SkyBlock"-timezone (Eastern Time; also fixed the incorrect 12h ↔ 24h clock conversion)
- Improved 'being on SkyBlock' detection
diff --git a/src/main/java/de/cowtipper/cowlection/command/MooCommand.java b/src/main/java/de/cowtipper/cowlection/command/MooCommand.java
index d9ed787..d2f433d 100644
--- a/src/main/java/de/cowtipper/cowlection/command/MooCommand.java
+++ b/src/main/java/de/cowtipper/cowlection/command/MooCommand.java
@@ -51,7 +51,11 @@ public class MooCommand extends CommandBase {
@Override
public List<String> getCommandAliases() {
- return Collections.singletonList("m");
+ if (StringUtils.isEmpty(MooConfig.mooCmdAlias)) {
+ return Collections.emptyList();
+ } else {
+ return Collections.singletonList(MooConfig.mooCmdAlias);
+ }
}
@Override
@@ -145,12 +149,12 @@ public class MooCommand extends CommandBase {
if (cmdArgs.length() > 0) {
cmdArgs = " " + cmdArgs;
}
- Minecraft.getMinecraft().thePlayer.sendChatMessage("/m" + cmdArgs);
+ Minecraft.getMinecraft().thePlayer.sendChatMessage("/" + MooConfig.mooCmdAlias + cmdArgs);
}
// "catch-all" remaining sub-commands
else {
- main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Command " + EnumChatFormatting.DARK_RED + "/" + getCommandName() + " " + args[0] + EnumChatFormatting.RED + " doesn't exist. Use " + EnumChatFormatting.DARK_RED + "/" + getCommandName() + " help " + EnumChatFormatting.RED + "to show command usage.\n"
- + EnumChatFormatting.RED + "Are you trying to use a server-side command " + EnumChatFormatting.DARK_RED + "/m" + EnumChatFormatting.RED + "? Use " + EnumChatFormatting.DARK_RED + "/m cmd [arguments] " + EnumChatFormatting.RED + "instead.");
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Command " + EnumChatFormatting.DARK_RED + "/" + getCommandName() + " " + args[0] + EnumChatFormatting.RED + " doesn't exist. Use " + EnumChatFormatting.DARK_RED + "/" + getCommandName() + " help " + EnumChatFormatting.RED + "to show command usage."
+ + (StringUtils.isNotEmpty(MooConfig.mooCmdAlias) ? "\n" + EnumChatFormatting.RED + "Are you trying to use a server-side command " + EnumChatFormatting.DARK_RED + "/" + MooConfig.mooCmdAlias + EnumChatFormatting.RED + "? Use " + EnumChatFormatting.DARK_RED + "/" + MooConfig.mooCmdAlias + " cmd [arguments] " + EnumChatFormatting.RED + "instead." : ""));
}
}
diff --git a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
index b89f4de..a522dce 100644
--- a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
+++ b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java
@@ -1,6 +1,7 @@
package de.cowtipper.cowlection.config;
import de.cowtipper.cowlection.Cowlection;
+import de.cowtipper.cowlection.command.MooCommand;
import de.cowtipper.cowlection.command.TabCompletableCommand;
import de.cowtipper.cowlection.config.gui.MooConfigGui;
import de.cowtipper.cowlection.config.gui.MooConfigPreview;
@@ -46,6 +47,9 @@ import java.util.regex.Pattern;
public class MooConfig {
// Category: General
private static String configGuiExplanations;
+ public static String mooCmdAlias;
+ public static boolean fixReplyCmd;
+ public static boolean enableCopyInventory;
public static String[] tabCompletableNamesCommands;
private static final String CATEGORY_LOGS_SEARCH = "logssearch";
public static String[] logsDirs;
@@ -84,6 +88,7 @@ public class MooConfig {
private static Configuration cfg = null;
private static final List<MooConfigCategory> configCategories = new ArrayList<>();
private final Cowlection main;
+ private Property propMooCmdAlias;
private Property propTabCompletableNamesCommands;
private List<Property> logSearchProperties;
@@ -196,6 +201,17 @@ public class MooConfig {
"The API key is stored " + EnumChatFormatting.ITALIC + "locally " + EnumChatFormatting.ITALIC + "on your computer.");
subCat.addConfigEntry(main.getMoo().getPropIsMooValid());
+ // Sub-Category: Command settings
+ subCat = configCat.addSubCategory("Command settings");
+
+ propMooCmdAlias = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "mooCmdAlias", "m", "Alias for /moo command")
+ .setValidationPattern(Pattern.compile("^[A-Za-z]*$")));
+ Property propFixReplyCmd = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "fixReplyCmd", true, "Auto-replace /r?"));
+ Property propEnableCopyInventory = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
+ "enableCopyInventory", false, "Enable copy inventory with CTRL + C?"));
+
// Sub-Category: Tab-completable names in commands
subCat = configCat.addSubCategory("Tab-completable usernames");
subCat.addExplanations("For certain commands you can use " + EnumChatFormatting.YELLOW + "TAB " + EnumChatFormatting.RESET + "to autocomplete player names",
@@ -410,11 +426,16 @@ public class MooConfig {
Property propDungPartyFinderPlayerLookup = subCat.addConfigEntry(cfg.get(configCat.getConfigName(),
"dungPartyFinderPlayerLookup", "as a tooltip", "Show armor + dungeons stats of player joining via party finder as a tooltip or in chat?", new String[]{"as a tooltip", "in chat", "disabled"}));
+ boolean modifiedMooCmdAlias = false;
+ String mooCmdAliasPreChange = mooCmdAlias;
boolean modifiedTabCompletableCommandsList = false;
String[] tabCompletableCommandsPreChange = tabCompletableNamesCommands != null ? tabCompletableNamesCommands.clone() : null;
if (readFieldsFromConfig) {
// Category: General
configGuiExplanations = propConfigGuiExplanations.getString();
+ mooCmdAlias = propMooCmdAlias.getString();
+ fixReplyCmd = propFixReplyCmd.getBoolean();
+ enableCopyInventory = propEnableCopyInventory.getBoolean();
tabCompletableNamesCommands = propTabCompletableNamesCommands.getStringList();
logsDirs = propLogsDirs.getStringList();
defaultStartDate = propDefaultStartDate.getString().trim();
@@ -450,6 +471,9 @@ public class MooConfig {
dungPartyFinderPlayerLookup = propDungPartyFinderPlayerLookup.getString();
+ if (!StringUtils.equals(mooCmdAliasPreChange, mooCmdAlias)) {
+ modifiedMooCmdAlias = true;
+ }
if (!Arrays.equals(tabCompletableCommandsPreChange, tabCompletableNamesCommands)) {
modifiedTabCompletableCommandsList = true;
}
@@ -457,6 +481,9 @@ public class MooConfig {
// Category: General
propConfigGuiExplanations.set(configGuiExplanations);
+ propMooCmdAlias.set(mooCmdAlias);
+ propFixReplyCmd.set(fixReplyCmd);
+ propEnableCopyInventory.set(enableCopyInventory);
propTabCompletableNamesCommands.set(tabCompletableNamesCommands);
propLogsDirs.set(logsDirs);
propDefaultStartDate.set(defaultStartDate);
@@ -493,6 +520,24 @@ public class MooConfig {
if (saveToFile && cfg.hasChanged()) {
boolean isPlayerIngame = Minecraft.getMinecraft().thePlayer != null;
+ if (modifiedMooCmdAlias) {
+ Map<String, ICommand> clientCommandsMap = ClientCommandHandler.instance.getCommands();
+ ICommand possibleClientCommand = clientCommandsMap.get(mooCmdAlias);
+ if (possibleClientCommand != null && !(possibleClientCommand instanceof MooCommand)) {
+ // tried to use a command name which is already used by another client side command; however, this would overwrite the original command
+ if (isPlayerIngame) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.GOLD, " ⚠ " + EnumChatFormatting.GOLD + "Client-side commands from other mods cannot be used as a command alias. " + EnumChatFormatting.RED + "This would overwrite the other command! Therefore the alias for " + EnumChatFormatting.DARK_RED + "/moo" + EnumChatFormatting.RED + " was not changed to " + EnumChatFormatting.DARK_RED + "/" + mooCmdAlias);
+ }
+ mooCmdAlias = mooCmdAliasPreChange;
+ propMooCmdAlias.set(mooCmdAlias);
+ } else if (isPlayerIngame) {
+ if (StringUtils.isEmpty(mooCmdAlias)) {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Removed command alias for " + EnumChatFormatting.DARK_RED + "/moo " + EnumChatFormatting.RED + "which takes effect after a game restart.");
+ } else {
+ main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Changed command alias for " + EnumChatFormatting.DARK_RED + "/moo " + EnumChatFormatting.RED + "to " + EnumChatFormatting.DARK_RED + "/" + mooCmdAlias + EnumChatFormatting.RED + " which takes effect after a game restart.");
+ }
+ }
+ }
if (modifiedTabCompletableCommandsList) {
if (isPlayerIngame) {
main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Added or removed commands with tab-completable usernames take effect after a game restart! If player names cannot be tab-completed for a command after a game restart, check the capitalization of the command name.");
@@ -649,6 +694,10 @@ public class MooConfig {
return configCategories;
}
+ public Property getMooCmdAliasProperty() {
+ return propMooCmdAlias;
+ }
+
public Property getTabCompletableNamesCommandsProperty() {
return propTabCompletableNamesCommands;
}
diff --git a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
index c73e27e..4ffa9f0 100644
--- a/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
+++ b/src/main/java/de/cowtipper/cowlection/config/gui/MooConfigCategoryScrolling.java
@@ -126,6 +126,13 @@ public class MooConfigCategoryScrolling extends GuiListExtended {
// special case: moo!
this.listEntries.add(new BooleanConfigEntry(configEntry));
continue;
+ } else if (configEntry.equals(Cowlection.getInstance().getConfig().getMooCmdAliasProperty())) {
+ this.listEntries.add(new GuiSwitchEntry("mooCmdAlias", "➡ modify", () ->
+ mc.displayGuiScreen(new GuiConfig(MooConfigCategoryScrolling.this.parent,
+ Lists.newArrayList(new ConfigElement(Cowlection.getInstance().getConfig().getMooCmdAliasProperty())),
+ Cowlection.MODID, "cowlectionMooCmdAlias", false, false,
+ EnumChatFormatting.GOLD + "Press Done to save changes. " + EnumChatFormatting.RED + "Requires a game restart to take effect!"))));
+ continue;
} else if (configEntry.getValidValues() != null && configEntry.getValidValues().length > 0) {
this.listEntries.add(new CycleConfigEntry(configEntry));
continue;
diff --git a/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java b/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java
index 130c390..df1c673 100644
--- a/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java
+++ b/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java
@@ -128,7 +128,7 @@ public class ChatListener {
@SubscribeEvent
public void onReplyToMsg(GuiScreenEvent.KeyboardInputEvent.Pre e) {
// TODO Switch to more reliable way: GuiTextField#writeText on GuiChat#inputField (protected field) via reflections [using "Open Command"-key isn't detected currently]
- if (lastPMSender != null && e.gui instanceof GuiChat && lastTypedChars.length() < 3 && Keyboard.getEventKeyState()) {
+ if (MooConfig.fixReplyCmd && lastPMSender != null && e.gui instanceof GuiChat && lastTypedChars.length() < 3 && Keyboard.getEventKeyState()) {
char eventCharacter = Keyboard.getEventCharacter();
if (!CharUtils.isAsciiControl(eventCharacter)) {
lastTypedChars += eventCharacter;
diff --git a/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java b/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java
index b62782d..dcf3bbf 100644
--- a/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java
+++ b/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java
@@ -58,7 +58,7 @@ public class PlayerListener {
@SubscribeEvent
public void onKeyboardInput(GuiScreenEvent.KeyboardInputEvent.Pre e) {
- if (Keyboard.getEventKeyState() && Keyboard.getEventKey() == Keyboard.KEY_C && GuiScreen.isCtrlKeyDown()) {
+ if (MooConfig.enableCopyInventory && Keyboard.getEventKeyState() && Keyboard.getEventKey() == Keyboard.KEY_C && GuiScreen.isCtrlKeyDown()) {
// ctrl + C
IInventory inventory;
String inventoryName;
diff --git a/src/main/resources/assets/cowlection/lang/en_US.lang b/src/main/resources/assets/cowlection/lang/en_US.lang
index 1699e2f..c7cc85f 100644
--- a/src/main/resources/assets/cowlection/lang/en_US.lang
+++ b/src/main/resources/assets/cowlection/lang/en_US.lang
@@ -2,6 +2,12 @@ cowlection.config.isMooValid=API key valid? §d§l⚷
cowlection.config.isMooValid.tooltip=You can use /moo apikey to see how to request a new API key from Hypixel\n§eConfig entries marked with §d§l⚷ §erequire a valid API key.
cowlection.config.configGuiExplanations=Show config categories explanations...
cowlection.config.configGuiExplanations.tooltip=How should the explanations (introductory words, hints, and tips) of the individual configuration categories be displayed?
+cowlection.config.mooCmdAlias=Alias for /moo command
+cowlection.config.mooCmdAlias.tooltip=Alternative command alias for §e/moo§f.\nLeave empty to remove alias.
+cowlection.config.fixReplyCmd=Auto-replace /r?
+cowlection.config.fixReplyCmd.tooltip=Auto-replace §e/r §fwith §e/w <latest username> §fto avoid replying to the wrong person.\n\nUse §e/rr <message> §fto prevent the auto-replacement for a message.
+cowlection.config.enableCopyInventory=Copy inventories with CTRL + C?
+cowlection.config.enableCopyInventory.tooltip=If enabled: copy the items in an inventory as JSON with §eCTRL + C
cowlection.config.tabCompletableNamesCommands=Commands with Tab-completable usernames
cowlection.config.tabCompletableNamesCommands.tooltip=List of commands with a username argument that should be Tab-completable.\n§eRequires game restart to take effect!
cowlection.config.gotoLogSearchConfig=Search through your Minecraft logs