Skip to content

Commit 4a97b1d

Browse files
committed
Backup -- this will be reset
1 parent 1e6ea16 commit 4a97b1d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1552
-679
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 1.3.0
4+
5+
- Enabled server accelerated sorting
6+
37
## 1.2.0-beta.1
48

59
- Fixed version metadata

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ subprojects {
2525
// Alternate license
2626
matching(includes: [
2727
"**/inventory/**",
28+
"**/main/**",
2829
"**/mixin/**",
2930
"**/network/**",
3031
"**/util/inject/**",
@@ -160,7 +161,7 @@ String versionChangelog() {
160161
}
161162

162163
static String capsLoader(String loader) {
163-
switch(loader) {
164+
switch (loader) {
164165
case "fabric": return "Fabric"
165166
case "quilt": return "Quilt"
166167
case "forge": return "Forge"

common/src/main/java/dev/terminalmc/clientsort/ClientSort.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@
1818

1919
import com.mojang.blaze3d.platform.InputConstants;
2020
import dev.terminalmc.clientsort.config.Config;
21-
import dev.terminalmc.clientsort.inventory.sort.SortMode;
21+
import dev.terminalmc.clientsort.inventory.sort.SortOrder;
2222
import dev.terminalmc.clientsort.network.InteractionManager;
2323
import dev.terminalmc.clientsort.util.ModLogger;
2424
import net.minecraft.client.KeyMapping;
2525
import net.minecraft.client.Minecraft;
2626
import net.minecraft.resources.ResourceLocation;
2727

28+
import java.util.concurrent.locks.Lock;
29+
import java.util.concurrent.locks.ReentrantLock;
30+
2831
import static dev.terminalmc.clientsort.util.Localization.translationKey;
2932

3033
public class ClientSort {
@@ -37,31 +40,28 @@ public class ClientSort {
3740

3841
public static boolean searchOrderUpdated = false;
3942

40-
public static boolean emiReloading = false;
43+
public static Lock emiReloadLock = new ReentrantLock();
4144
public static boolean updateBlockedByEmi = false;
4245

4346
public static void init() {
4447
Config.getAndSave();
4548
}
46-
47-
public static void onEndTick(Minecraft mc) {
48-
}
49-
49+
5050
public static void onConfigSaved(Config config) {
5151
Config.Options options = config.options;
52-
options.sortMode = SortMode.SORT_MODES.get(options.sortModeStr);
53-
options.shiftSortMode = SortMode.SORT_MODES.get(options.shiftSortModeStr);
54-
options.ctrlSortMode = SortMode.SORT_MODES.get(options.ctrlSortModeStr);
55-
options.altSortMode = SortMode.SORT_MODES.get(options.altSortModeStr);
52+
options.sortOrder = SortOrder.SORT_MODES.get(options.sortOrderStr);
53+
options.shiftSortOrder = SortOrder.SORT_MODES.get(options.shiftSortOrderStr);
54+
options.ctrlSortOrder = SortOrder.SORT_MODES.get(options.ctrlSortOrderStr);
55+
options.altSortOrder = SortOrder.SORT_MODES.get(options.altSortOrderStr);
5656
options.sortSoundLoc = ResourceLocation.tryParse(options.sortSound);
57-
setInteractionManagerTickRate(config);
57+
setInteractionManagerTickRate(config.options);
5858
}
59-
60-
public static void setInteractionManagerTickRate(Config config) {
59+
60+
public static void setInteractionManagerTickRate(Config.Options options) {
6161
if (Minecraft.getInstance().getSingleplayerServer() == null) {
62-
InteractionManager.setTickRate(config.options.interactionRateServer);
62+
InteractionManager.setTickRate(options.interactionRateServer);
6363
} else {
64-
InteractionManager.setTickRate(config.options.interactionRateClient);
64+
InteractionManager.setTickRate(options.interactionRateClient);
6565
}
6666
}
6767
}

common/src/main/java/dev/terminalmc/clientsort/compat/itemlocks/ItemLocks.java renamed to common/src/main/java/dev/terminalmc/clientsort/compat/itemlocks/ItemLocksCompat.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,22 @@
2424
import static com.kirdow.itemlocks.client.input.KeyBindings.isBypass;
2525
import static com.kirdow.itemlocks.proxy.Components.getComponent;
2626

27-
public class ItemLocks {
27+
public class ItemLocksCompat {
28+
/**
29+
* @param slot the slot to check.
30+
* @return {@code true} if the slot is valid, locked, and the bypass is not
31+
* active.
32+
*/
2833
static boolean isLocked(Slot slot) {
2934
if (!(slot.container instanceof Inventory)) return false;
30-
int index = adjustForInventory(((ISlot) slot).mouseWheelie_getIndexInInv());
35+
int index = adjustForInventory(((ISlot) slot).clientSort$getIndexInInv());
3136
return getComponent(LockManager.class).isLockedSlotRaw(index) && !isBypass();
3237
}
3338

3439
/**
3540
* Moves the hotbar from 0-8 to 27-35.
3641
*/
3742
private static int adjustForInventory(int slot) {
38-
//
3943
if (0 <= slot && slot <= 8) {
4044
return slot + 27;
4145
} else if (9 <= slot && slot <= 35) {

common/src/main/java/dev/terminalmc/clientsort/compat/itemlocks/ItemLocksWrapper.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,17 @@
2121
public class ItemLocksWrapper {
2222
private static boolean hasFailed = false;
2323

24+
/**
25+
* Wraps {@link ItemLocksCompat#isLocked} to catch errors if the ItemLocks
26+
* mod is not loaded or the expected method is not available.
27+
* @param slot the slot to check.
28+
* @return {@code true} if the slot is valid, locked, and the bypass is not
29+
* active.
30+
*/
2431
public static boolean isLocked(Slot slot) {
2532
if (hasFailed) return false;
2633
try {
27-
return ItemLocks.isLocked(slot);
34+
return ItemLocksCompat.isLocked(slot);
2835
} catch (NoClassDefFoundError | NoSuchMethodError ignored) {
2936
hasFailed = true;
3037
return false;

common/src/main/java/dev/terminalmc/clientsort/config/Config.java

Lines changed: 119 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
import com.google.gson.Gson;
2020
import com.google.gson.GsonBuilder;
2121
import dev.terminalmc.clientsort.ClientSort;
22-
import dev.terminalmc.clientsort.inventory.sort.SortMode;
22+
import dev.terminalmc.clientsort.inventory.sort.SortOrder;
23+
import dev.terminalmc.clientsort.platform.Services;
2324
import net.minecraft.resources.ResourceLocation;
2425
import org.jetbrains.annotations.NotNull;
2526
import org.jetbrains.annotations.Nullable;
@@ -31,7 +32,7 @@
3132
import java.nio.file.StandardCopyOption;
3233

3334
public class Config {
34-
private static final Path DIR_PATH = Path.of("config");
35+
private static final Path CONFIG_DIR = Services.PLATFORM.getConfigDir();
3536
private static final String FILE_NAME = ClientSort.MOD_ID + ".json";
3637
private static final String BACKUP_FILE_NAME = ClientSort.MOD_ID + ".unreadable.json";
3738
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
@@ -45,71 +46,63 @@ public static Options options() {
4546
}
4647

4748
public static class Options {
48-
// General
49+
50+
// General options
51+
4952
public static final int interactionRateMin = 1;
5053
public static final int interactionRateMax = 100;
5154
public static final int interactionRateServerDefault = 10;
5255
public int interactionRateServer = interactionRateServerDefault;
5356

5457
public static final int interactionRateClientDefault = 1;
5558
public int interactionRateClient = interactionRateClientDefault;
59+
60+
public static final boolean serverAcceleratedSortingDefault = true;
61+
public boolean serverAcceleratedSorting = serverAcceleratedSortingDefault;
5662

57-
public static final HotbarMode hotbarModeDefault = HotbarMode.HARD;
58-
public HotbarMode hotbarMode = hotbarModeDefault;
59-
public enum HotbarMode {
60-
NONE,
61-
HARD,
62-
SOFT;
63+
public static final boolean optimizedCreativeSortingDefault = true;
64+
public boolean optimizedCreativeSorting = optimizedCreativeSortingDefault;
6365

64-
public String lowerName() {
65-
return switch(this) {
66-
case NONE -> "merge";
67-
case HARD -> "split";
68-
case SOFT -> "off";
69-
};
70-
}
66+
public static final HotbarScope hotbarScopeDefault = HotbarScope.HOTBAR;
67+
public HotbarScope hotbarScope = hotbarScopeDefault;
68+
public enum HotbarScope {
69+
HOTBAR,
70+
INVENTORY,
71+
NONE
7172
}
7273

73-
public static final ExtraSlotMode extraSlotModeDefault = ExtraSlotMode.NONE;
74-
public ExtraSlotMode extraSlotMode = extraSlotModeDefault;
75-
public enum ExtraSlotMode {
76-
NONE,
74+
public static final ExtraSlotScope extraSlotScopeDefault = ExtraSlotScope.EXTRA;
75+
public ExtraSlotScope extraSlotScope = extraSlotScopeDefault;
76+
public enum ExtraSlotScope {
77+
EXTRA,
7778
HOTBAR,
78-
INVENTORY;
79-
80-
public String lowerName() {
81-
return switch(this) {
82-
case NONE -> "none";
83-
case HOTBAR -> "hotbar";
84-
case INVENTORY -> "inventory";
85-
};
86-
}
79+
INVENTORY,
80+
NONE
8781
}
8882

8983
public static final boolean lmbBundleDefault = false;
9084
public boolean lmbBundle = lmbBundleDefault;
9185

92-
// Sorting
93-
public static final String sortModeDefault = SortMode.CREATIVE.name;
94-
public String sortModeStr = sortModeDefault;
95-
public transient SortMode sortMode;
96-
97-
public static final String shiftSortModeDefault = SortMode.QUANTITY.name;
98-
public String shiftSortModeStr = shiftSortModeDefault;
99-
public transient SortMode shiftSortMode;
86+
// Sort mode options
87+
88+
public static final String sortOrderDefault = SortOrder.CREATIVE.name;
89+
public String sortOrderStr = sortOrderDefault;
90+
public transient SortOrder sortOrder;
10091

101-
public static final String ctrlSortModeDefault = SortMode.ALPHABET.name;
102-
public String ctrlSortModeStr = ctrlSortModeDefault;
103-
public transient SortMode ctrlSortMode;
92+
public static final String shiftSortOrderDefault = SortOrder.QUANTITY.name;
93+
public String shiftSortOrderStr = shiftSortOrderDefault;
94+
public transient SortOrder shiftSortOrder;
10495

105-
public static final String altSortModeDefault = SortMode.RAW_ID.name;
106-
public String altSortModeStr = altSortModeDefault;
107-
public transient SortMode altSortMode;
96+
public static final String ctrlSortOrderDefault = SortOrder.ALPHABET.name;
97+
public String ctrlSortOrderStr = ctrlSortOrderDefault;
98+
public transient SortOrder ctrlSortOrder;
10899

109-
public static final boolean optimizedCreativeSortingDefault = true;
110-
public boolean optimizedCreativeSorting = optimizedCreativeSortingDefault;
100+
public static final String altSortOrderDefault = SortOrder.RAW_ID.name;
101+
public String altSortOrderStr = altSortOrderDefault;
102+
public transient SortOrder altSortOrder;
103+
104+
// Sorting sound options
111105

112-
// Sounds
113106
public static final boolean soundEnabledDefault = false;
114107
public boolean soundEnabled = soundEnabledDefault;
115108

@@ -135,11 +128,54 @@ public String lowerName() {
135128

136129
public static final boolean soundAllowOverlapDefault = true;
137130
public boolean soundAllowOverlap = soundAllowOverlapDefault;
131+
132+
// Legacy from pre v1.3.0
133+
134+
public static final HotbarMode hotbarModeDefault = HotbarMode.HARD;
135+
public HotbarMode hotbarMode = hotbarModeDefault;
136+
public enum HotbarMode {
137+
NONE,
138+
HARD,
139+
SOFT;
140+
141+
public HotbarScope update() {
142+
return switch(this) {
143+
case NONE -> HotbarScope.INVENTORY;
144+
case HARD -> HotbarScope.HOTBAR;
145+
case SOFT -> HotbarScope.NONE;
146+
};
147+
}
148+
}
149+
150+
public static final ExtraSlotMode extraSlotModeDefault = ExtraSlotMode.NONE;
151+
public ExtraSlotMode extraSlotMode = extraSlotModeDefault;
152+
public enum ExtraSlotMode {
153+
NONE,
154+
HOTBAR,
155+
INVENTORY;
156+
157+
public ExtraSlotScope update() {
158+
return switch(this) {
159+
case NONE -> ExtraSlotScope.NONE;
160+
case HOTBAR -> ExtraSlotScope.HOTBAR;
161+
case INVENTORY -> ExtraSlotScope.INVENTORY;
162+
};
163+
}
164+
}
165+
166+
public String sortModeStr = sortOrderDefault;
167+
public String shiftSortModeStr = shiftSortOrderDefault;
168+
public String ctrlSortModeStr = ctrlSortOrderDefault;
169+
public String altSortModeStr = altSortOrderDefault;
138170
}
139171

140-
// Cleanup
172+
// Validation
141173

142-
private void cleanup() {
174+
/**
175+
* Ensures that all config values are valid.
176+
*/
177+
private void validate() {
178+
update();
143179
// interactionRateServer
144180
if (options.interactionRateServer < Options.interactionRateMin)
145181
options.interactionRateServer = Options.interactionRateMin;
@@ -174,7 +210,35 @@ private void cleanup() {
174210
if (options.soundVolume > Options.soundVolumeMax)
175211
options.soundVolume = Options.soundVolumeMax;
176212
}
177-
213+
214+
215+
private void update() {
216+
if (options.hotbarMode != Options.hotbarModeDefault) {
217+
options.hotbarScope = options.hotbarMode.update();
218+
options.hotbarMode = Options.hotbarModeDefault;
219+
}
220+
if (options.extraSlotMode != Options.extraSlotModeDefault) {
221+
options.extraSlotScope = options.extraSlotMode.update();
222+
options.extraSlotMode = Options.extraSlotModeDefault;
223+
}
224+
if (!Options.sortOrderDefault.equals(options.sortModeStr)) {
225+
options.sortOrderStr = options.sortModeStr;
226+
options.sortModeStr = Options.sortOrderDefault;
227+
}
228+
if (!Options.shiftSortOrderDefault.equals(options.shiftSortModeStr)) {
229+
options.shiftSortOrderStr = options.shiftSortModeStr;
230+
options.shiftSortModeStr = Options.shiftSortOrderDefault;
231+
}
232+
if (!Options.ctrlSortOrderDefault.equals(options.ctrlSortModeStr)) {
233+
options.ctrlSortOrderStr = options.ctrlSortModeStr;
234+
options.ctrlSortModeStr = Options.ctrlSortOrderDefault;
235+
}
236+
if (!Options.altSortOrderDefault.equals(options.altSortModeStr)) {
237+
options.altSortOrderStr = options.altSortModeStr;
238+
options.altSortModeStr = Options.altSortOrderDefault;
239+
}
240+
}
241+
178242
// Instance management
179243

180244
private static Config instance = null;
@@ -201,7 +265,7 @@ public static Config resetAndSave() {
201265
// Load and save
202266

203267
public static @NotNull Config load() {
204-
Path file = DIR_PATH.resolve(FILE_NAME);
268+
Path file = CONFIG_DIR.resolve(FILE_NAME);
205269
Config config = null;
206270
if (Files.exists(file)) {
207271
config = load(file, GSON);
@@ -228,8 +292,8 @@ public static Config resetAndSave() {
228292
private static void backup() {
229293
try {
230294
ClientSort.LOG.warn("Copying {} to {}", FILE_NAME, BACKUP_FILE_NAME);
231-
if (!Files.isDirectory(DIR_PATH)) Files.createDirectories(DIR_PATH);
232-
Path file = DIR_PATH.resolve(FILE_NAME);
295+
if (!Files.isDirectory(CONFIG_DIR)) Files.createDirectories(CONFIG_DIR);
296+
Path file = CONFIG_DIR.resolve(FILE_NAME);
233297
Path backupFile = file.resolveSibling(BACKUP_FILE_NAME);
234298
Files.move(file, backupFile, StandardCopyOption.ATOMIC_MOVE,
235299
StandardCopyOption.REPLACE_EXISTING);
@@ -240,10 +304,10 @@ private static void backup() {
240304

241305
public static void save() {
242306
if (instance == null) return;
243-
instance.cleanup();
307+
instance.validate();
244308
try {
245-
if (!Files.isDirectory(DIR_PATH)) Files.createDirectories(DIR_PATH);
246-
Path file = DIR_PATH.resolve(FILE_NAME);
309+
if (!Files.isDirectory(CONFIG_DIR)) Files.createDirectories(CONFIG_DIR);
310+
Path file = CONFIG_DIR.resolve(FILE_NAME);
247311
Path tempFile = file.resolveSibling(file.getFileName() + ".tmp");
248312
try (OutputStreamWriter writer = new OutputStreamWriter(
249313
new FileOutputStream(tempFile.toFile()), StandardCharsets.UTF_8)) {

0 commit comments

Comments
 (0)