diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatInputSuggestorMixin.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatInputSuggestorMixin.java index b23c505..7531b9e 100644 --- a/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatInputSuggestorMixin.java +++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatInputSuggestorMixin.java @@ -10,6 +10,7 @@ import land.chipmunk.chipmunkmod.modules.ChomeNSBotCommandSuggestions; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.command.CommandSource; import org.spongepowered.asm.mixin.Final; @@ -28,10 +29,6 @@ public class ChatInputSuggestorMixin { @Shadow private CompletableFuture pendingSuggestions; - @Final - @Shadow - private boolean slashOptional; - @Shadow public void show (boolean narrateFirstSuggestion) {} @@ -51,56 +48,51 @@ public class ChatInputSuggestorMixin { @Inject(at = @At("TAIL"), method = "refresh()V") public void refresh (CallbackInfo ci) { - try { - if (slashOptional) return; + final CommandManager commandManager = CommandManager.INSTANCE; - final CommandManager commandManager = CommandManager.INSTANCE; + final String text = this.textField.getText(); + final int cursor = this.textField.getCursor(); - final String text = this.textField.getText(); - final int cursor = this.textField.getCursor(); + final ClientPlayerEntity player = MinecraftClient.getInstance().player; - final ClientPlayerEntity player = MinecraftClient.getInstance().player; + final String chomeNSPrefix = ChipmunkMod.CONFIG.bots.chomens.prefix; - final String chomeNSPrefix = ChipmunkMod.CONFIG.bots.chomens.prefix; + if (!text.contains(" ") && text.startsWith(chomeNSPrefix) && player != null) { + final String textUpToCursor = text.substring(0, cursor); - if (!text.contains(" ") && text.startsWith(chomeNSPrefix) && player != null) { - final String textUpToCursor = text.substring(0, cursor); + final List commands = ChomeNSBotCommandSuggestions.INSTANCE.commands + .stream() + .map((command) -> command.name) + .toList(); - final List commands = ChomeNSBotCommandSuggestions.INSTANCE.commands - .stream() - .map((command) -> command.name) - .toList(); + pendingSuggestions = CommandSource.suggestMatching( + commands, + new SuggestionsBuilder( + textUpToCursor, + getStartOfCurrentWord(textUpToCursor) + ) + ); - pendingSuggestions = CommandSource.suggestMatching( - commands, - new SuggestionsBuilder( - textUpToCursor, - getStartOfCurrentWord(textUpToCursor) - ) - ); - - pendingSuggestions.thenRun(() -> { - if (!pendingSuggestions.isDone()) return; - - show(true); - }); - - return; - } - - if (cursor < commandManager.prefix.length() || !text.startsWith(commandManager.prefix)) return; + pendingSuggestions.thenRun(() -> { + if (!pendingSuggestions.isDone()) return; + show(true); + }); + } else if (cursor > commandManager.prefix.length() && text.startsWith(commandManager.prefix)) { final StringReader reader = new StringReader(text); reader.setCursor(commandManager.prefix.length()); // Skip the prefix - final CommandDispatcher dispatcher = commandManager.dispatcher; final MinecraftClient client = MinecraftClient.getInstance(); - final FabricClientCommandSource commandSource = (FabricClientCommandSource) client.getNetworkHandler().getCommandSource(); + + final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler(); + + if (networkHandler == null) return; + + final CommandDispatcher dispatcher = commandManager.dispatcher; + final FabricClientCommandSource commandSource = (FabricClientCommandSource) networkHandler.getCommandSource(); pendingSuggestions = dispatcher.getCompletionSuggestions(dispatcher.parse(reader, commandSource), cursor); show(true); - } catch (Exception e) { - e.printStackTrace(); } } } diff --git a/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatScreenMixin.java b/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatScreenMixin.java index 02f7694..81f84eb 100644 --- a/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatScreenMixin.java +++ b/src/main/java/land/chipmunk/chipmunkmod/mixin/ChatScreenMixin.java @@ -54,6 +54,7 @@ public class ChatScreenMixin extends Screen { this.chatField.setFocusUnlocked(false); this.addSelectableChild(this.chatField); this.chatInputSuggestor = new ChatInputSuggestor(this.client, this, this.chatField, this.textRenderer, false, false, 1, 10, true, -805306368); + this.chatInputSuggestor.setCanLeave(false); this.chatInputSuggestor.refresh(); this.setInitialFocus(this.chatField);