Skip to content

Commit

Permalink
[skip ci] Remove splash screen and add suggestion text (#6)
Browse files Browse the repository at this point in the history
* Re-organize code and disable splash overlay

* Add suggestion text to search bar
  • Loading branch information
ChachyDev committed Dec 1, 2021
1 parent 37749f6 commit c4146eb
Show file tree
Hide file tree
Showing 9 changed files with 91 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package club.chachy.lazylanguageloader.client.impl.utils;

public class Constants {
public static final String SUGGESTION_TEXT = "Search for a language";

public static final String TRUNCATION_MARKER = "...";
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package club.chachy.lazylanguageloader.client.mixin.optimizations;
package club.chachy.lazylanguageloader.client.mixin.optimizations.loading;

import club.chachy.lazylanguageloader.client.impl.state.StateManager;
import net.minecraft.client.gui.screen.option.LanguageOptionsScreen;
Expand All @@ -10,7 +10,6 @@

@Mixin(LanguageOptionsScreen.class)
public class MixinLanguageOptionsScreen {
@SuppressWarnings("UnresolvedMixinReference")
@Inject(
method = "method_19820",
at = @At(
Expand All @@ -23,7 +22,6 @@ public class MixinLanguageOptionsScreen {
StateManager.setResourceLoadViaLanguage(true);
}

@SuppressWarnings("UnresolvedMixinReference")
@Inject(
method = "method_19820",
at = @At(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package club.chachy.lazylanguageloader.client.mixin.optimizations;
package club.chachy.lazylanguageloader.client.mixin.optimizations.loading;

import club.chachy.lazylanguageloader.client.impl.state.StateManager;
import net.minecraft.client.resource.language.LanguageManager;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package club.chachy.lazylanguageloader.client.mixin.optimizations.splash;

import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Overlay;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.SplashOverlay;
import net.minecraft.client.gui.screen.option.LanguageOptionsScreen;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(MinecraftClient.class)
public class MixinMinecraftClient {
@Shadow
@Nullable
public Screen currentScreen;

@Inject(method = "setOverlay", at = @At("HEAD"), cancellable = true)
private void lazyLanguageLoader$$setOverlay(Overlay overlay, CallbackInfo ci) {
if (overlay instanceof SplashOverlay && currentScreen instanceof LanguageOptionsScreen) {
ci.cancel();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package club.chachy.lazylanguageloader.client.mixin.searchbar;
package club.chachy.lazylanguageloader.client.mixin.ui.searchbar;

import club.chachy.lazylanguageloader.client.api.scroll.Scrollable;
import net.minecraft.client.gui.widget.EntryListWidget;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package club.chachy.lazylanguageloader.client.mixin.searchbar;
package club.chachy.lazylanguageloader.client.mixin.ui.searchbar;

import club.chachy.lazylanguageloader.client.api.scroll.Scrollable;
import club.chachy.lazylanguageloader.client.impl.state.StateManager;
import club.chachy.lazylanguageloader.client.mixin.searchbar.accessor.LanguageEntryAccessor;
import club.chachy.lazylanguageloader.client.impl.utils.Constants;
import club.chachy.lazylanguageloader.client.mixin.ui.searchbar.accessor.LanguageEntryAccessor;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.option.LanguageOptionsScreen;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
import net.minecraft.client.resource.language.LanguageDefinition;
import net.minecraft.text.LiteralText;
Expand All @@ -24,8 +26,12 @@ public class MixinLanguageOptionsScreen extends Screen {
@Shadow
private LanguageOptionsScreen.LanguageSelectionListWidget languageSelectionList;

@Unique
private List<LanguageOptionsScreen.LanguageSelectionListWidget.LanguageEntry> initialComponents;

@Unique
private TextFieldWidget searchText;

protected MixinLanguageOptionsScreen(Text title) {
super(title);
}
Expand All @@ -38,17 +44,21 @@ protected MixinLanguageOptionsScreen(Text title) {
shift = At.Shift.AFTER
)
)
private void init(CallbackInfo ci) {
private void lazyLanguageLoader$$init(CallbackInfo ci) {
initialComponents = new ArrayList<>(languageSelectionList.children());

int w = width / 5;
TextFieldWidget searchText = new TextFieldWidget(textRenderer, width - (w + 5), 11, w, 15, LiteralText.EMPTY);
searchText.setChangedListener(this::handleText);

searchText = new TextFieldWidget(textRenderer, width - (w + 5), 11, w, 15, LiteralText.EMPTY);

searchText.setSuggestion(lazyLanguageLoader$$truncateByWidth(Constants.SUGGESTION_TEXT, searchText, Constants.TRUNCATION_MARKER));
searchText.setChangedListener(this::lazyLanguageLoader$$handleText);

addDrawableChild(searchText);
}

private void handleText(String text) {
@Unique
private void lazyLanguageLoader$$handleText(String text) {
List<LanguageOptionsScreen.LanguageSelectionListWidget.LanguageEntry> children = languageSelectionList.children();

if (text.isBlank() || text.isBlank()) {
Expand All @@ -58,22 +68,25 @@ private void handleText(String text) {
if (initialSize != currentSize) {
languageSelectionList.replaceEntries(initialComponents);
}

searchText.setSuggestion(lazyLanguageLoader$$truncateByWidth(Constants.SUGGESTION_TEXT, searchText, Constants.TRUNCATION_MARKER));
} else {
searchText.setSuggestion(LiteralText.EMPTY.asString());
for (LanguageOptionsScreen.LanguageSelectionListWidget.LanguageEntry entry : initialComponents) {
LanguageDefinition def = ((LanguageEntryAccessor) entry).getLanguageDefinition();

if (StateManager.isMatchable(text, def)) {
safeAdd(entry);
lazyLanguageLoader$$safeAdd(entry);
} else {
languageSelectionList.removeEntry(entry);
}
}
}
fixScroll();
lazyLanguageLoader$$fixScroll();
}

@Unique
private void fixScroll() {
private void lazyLanguageLoader$$fixScroll() {
if (((Scrollable) languageSelectionList).hasScrolled()) {
languageSelectionList.setScrollAmount(languageSelectionList.getScrollAmount());
} else {
Expand All @@ -82,9 +95,33 @@ private void fixScroll() {
}

@Unique
private void safeAdd(LanguageOptionsScreen.LanguageSelectionListWidget.LanguageEntry entry) {
private void lazyLanguageLoader$$safeAdd(LanguageOptionsScreen.LanguageSelectionListWidget.LanguageEntry entry) {
if (!languageSelectionList.children().contains(entry)) {
languageSelectionList.addEntry(entry);
}
}

@Unique
private String lazyLanguageLoader$$truncateByWidth(String text, ClickableWidget widget, String marker) {
int textWidth = textRenderer.getWidth(text);
int widgetWidth = widget.getWidth();

if (textWidth > widgetWidth) {
String truncatedText = text;
int truncatedWidth = textWidth;

while (truncatedWidth > widgetWidth) {
truncatedText = truncatedText.substring(0, truncatedText.length() - 1);
truncatedWidth = textRenderer.getWidth(truncatedText);
}

return lazyLanguageLoader$$addTruncationMarker(truncatedText, marker);
} else {
return text;
}
}

private String lazyLanguageLoader$$addTruncationMarker(String text, String marker) {
return text.length() > marker.length() ? text.substring(0, text.length() - marker.length()) : marker;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package club.chachy.lazylanguageloader.client.mixin.searchbar.accessor;
package club.chachy.lazylanguageloader.client.mixin.ui.searchbar.accessor;

import net.minecraft.client.gui.screen.option.LanguageOptionsScreen;
import net.minecraft.client.resource.language.LanguageDefinition;
Expand Down
Empty file.
11 changes: 6 additions & 5 deletions src/main/resources/lazy-language-loader.mixin.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
"package": "club.chachy.lazylanguageloader.client.mixin",
"compatibilityLevel": "JAVA_16",
"client": [
"optimizations.MixinLanguageOptionsScreen",
"optimizations.MixinReloadableResourceManagerImpl",
"searchbar.MixinEntryListWidget",
"searchbar.MixinLanguageOptionsScreen",
"searchbar.accessor.LanguageEntryAccessor"
"optimizations.loading.MixinLanguageOptionsScreen",
"optimizations.loading.MixinReloadableResourceManagerImpl",
"optimizations.splash.MixinMinecraftClient",
"ui.searchbar.MixinEntryListWidget",
"ui.searchbar.MixinLanguageOptionsScreen",
"ui.searchbar.accessor.LanguageEntryAccessor"
],
"injectors": {
"defaultRequire": 1
Expand Down

0 comments on commit c4146eb

Please sign in to comment.