Skip to content

Commit 00b9526

Browse files
committed
Update to mc1.21.3
1 parent 824a204 commit 00b9526

File tree

6 files changed

+66
-29
lines changed

6 files changed

+66
-29
lines changed

common/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@ plugins {
33
id("net.neoforged.moddev")
44
}
55

6+
// Workaround for NeoForge transitive deps conflict
7+
configurations.all {
8+
resolutionStrategy {
9+
force "org.ow2.asm:asm:9.7"
10+
force "org.ow2.asm:asm-commons:9.7"
11+
force "org.ow2.asm:asm-tree:9.7"
12+
force "org.ow2.asm:asm-util:9.7"
13+
}
14+
}
15+
616
dependencies {
717
compileOnly("org.spongepowered:mixin:${mixin_version}")
818
compileOnly("io.github.llamalad7:mixinextras-common:${mixinextras_version}")

common/src/main/java/dev/terminalmc/clientsort/inventory/ContainerScreenHelper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import dev.terminalmc.clientsort.util.inject.ISlot;
2424
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
2525
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
26-
import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen;
2726
import net.minecraft.world.entity.player.Inventory;
2827
import net.minecraft.world.inventory.ClickType;
2928
import net.minecraft.world.inventory.Slot;
@@ -63,7 +62,7 @@ public int getScope(Slot slot, boolean preferSmallerScopes) {
6362
if (slot.container == null || ((ISlot) slot).mouseWheelie_getIndexInInv() >= slot.container.getContainerSize() || !slot.mayPlace(ItemStack.EMPTY)) {
6463
return INVALID_SCOPE;
6564
}
66-
if (screen instanceof EffectRenderingInventoryScreen) {
65+
if (screen instanceof AbstractContainerScreen) {
6766
if (slot.container instanceof Inventory) {
6867
if (isHotbarSlot(slot)) {
6968
Config.Options options = Config.get().options;

common/src/main/java/dev/terminalmc/clientsort/inventory/sort/InventorySorter.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
2323
import net.minecraft.world.inventory.ClickType;
2424
import net.minecraft.world.inventory.Slot;
25-
import net.minecraft.world.item.ItemStack;
25+
import net.minecraft.world.item.*;
2626

2727
import java.util.ArrayDeque;
2828
import java.util.ArrayList;
@@ -136,6 +136,17 @@ protected void sortOnClient(int[] sortedIds) {
136136
}
137137
if (stacks[i].isEmpty()) doneSlashEmpty.set(slotCount + i); // mark if it's empty
138138
}
139+
140+
// Bundles require special handling. Specifically, to perform a swap between the carried
141+
// item and the target slot, you normally use left-click (0), but if holding a bundle
142+
// you must use right-click (1).
143+
// It isn't possible to always use right-click because right-clicking a bundle on an empty
144+
// slot does nothing, and right-clicking on a stack while carrying nothing takes half.
145+
// The current workaround is to maintain a copy of the theoretical inventory state to inform
146+
// the click decision. This will break if items enter or leave the inventory unexpectedly.
147+
Item carriedItem = Items.AIR;
148+
Item[] backingStacks = Arrays.stream(stacks.clone()).map(ItemStack::getItem).toArray(Item[]::new);
149+
139150
// Iterate all slots, with i as the target slot index
140151
// sortedIds[i] is therefore the origin slot
141152
for (int i = 0; i < slotCount; i++) {
@@ -149,8 +160,11 @@ protected void sortOnClient(int[] sortedIds) {
149160

150161
// This is where the action happens.
151162
// Pick up the stack at the origin slot.
152-
InteractionManager.push(screenHelper.createClickEvent(inventorySlots[sortedIds[i]], 0, ClickType.PICKUP));
153-
doneSlashEmpty.set(slotCount + sortedIds[i]); // Mark the origin slot as empty (because we picked the stack up, duh)
163+
Item temp = backingStacks[sortedIds[i]];
164+
backingStacks[sortedIds[i]] = carriedItem;
165+
carriedItem = temp;
166+
InteractionManager.push(screenHelper.createClickEvent(inventorySlots[sortedIds[i]], 0, ClickType.PICKUP));
167+
doneSlashEmpty.set(slotCount + sortedIds[i]); // Mark the origin slot as empty (because we picked the stack up, duh)
154168
currentStack = stacks[sortedIds[i]]; // Save the stack we're currently working with
155169
Slot workingSlot = inventorySlots[sortedIds[i]]; // A slot that we can use when fiddling around with swapping stacks
156170
int id = i; // id will reflect the target slot in the following loop
@@ -170,6 +184,9 @@ protected void sortOnClient(int[] sortedIds) {
170184
if (currentStack.getCount() < stacks[id].getCount()) { // Clicking with a low stack on a full stack does nothing
171185
// The workaround is: click working slot, click target slot, click working slot, click target slot, click working slot
172186
Slot targetSlot = inventorySlots[id];
187+
temp = backingStacks[id];
188+
backingStacks[id] = carriedItem;
189+
carriedItem = temp;
173190
InteractionManager.push(screenHelper.createClickEvent(workingSlot, 0, ClickType.PICKUP));
174191
InteractionManager.push(screenHelper.createClickEvent(targetSlot, 0, ClickType.PICKUP));
175192
InteractionManager.push(screenHelper.createClickEvent(workingSlot, 0, ClickType.PICKUP));
@@ -184,7 +201,18 @@ protected void sortOnClient(int[] sortedIds) {
184201
}
185202

186203
// swap the current stack with the target stack
187-
InteractionManager.push(screenHelper.createClickEvent(inventorySlots[id], 0, ClickType.PICKUP));
204+
if ((backingStacks[id] instanceof BundleItem && !(carriedItem instanceof AirItem))
205+
|| (carriedItem instanceof BundleItem && !(backingStacks[id] instanceof AirItem))) {
206+
temp = backingStacks[id];
207+
backingStacks[id] = carriedItem;
208+
carriedItem = temp;
209+
InteractionManager.push(screenHelper.createClickEvent(inventorySlots[id], 1, ClickType.PICKUP));
210+
} else {
211+
temp = backingStacks[id];
212+
backingStacks[id] = carriedItem;
213+
carriedItem = temp;
214+
InteractionManager.push(screenHelper.createClickEvent(inventorySlots[id], 0, ClickType.PICKUP));
215+
}
188216
currentStack = stacks[id];
189217
doneSlashEmpty.set(id); // mark the current target as done
190218
// If the target that we just swapped with was empty before, then this breaks the chain.

common/src/main/java/dev/terminalmc/clientsort/mixin/MixinClientPacketListener.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import net.minecraft.network.Connection;
2727
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
2828
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
29-
import net.minecraft.network.protocol.game.ClientboundSetCarriedItemPacket;
29+
import net.minecraft.network.protocol.game.ClientboundSetCursorItemPacket;
3030
import org.spongepowered.asm.mixin.Mixin;
3131
import org.spongepowered.asm.mixin.injection.At;
3232
import org.spongepowered.asm.mixin.injection.Inject;
@@ -43,8 +43,8 @@ private void onLogin(ClientboundLoginPacket packet, CallbackInfo ci) {
4343
ClientSort.searchOrderUpdated = false;
4444
}
4545

46-
@Inject(method = "handleSetCarriedItem", at = @At("HEAD"))
47-
public void onHeldItemChangeBegin(ClientboundSetCarriedItemPacket packet, CallbackInfo ci) {
46+
@Inject(method = "handleSetCursorItem", at = @At("HEAD"))
47+
public void onHeldItemChangeBegin(ClientboundSetCursorItemPacket packet, CallbackInfo ci) {
4848
InteractionManager.triggerSend(InteractionManager.TriggerType.HELD_ITEM_CHANGE);
4949
}
5050

gradle.properties

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Neo/Forge version ranges: https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html
33

44
# Project
5-
mod_version=1.0.1+1.21
5+
mod_version=1.0.1+1.21.3
66
mod_group=dev.terminalmc
77
mod_id=clientsort
88
mod_name=ClientSort
@@ -24,35 +24,35 @@ java_versions_fabric=>=21
2424
java_versions_neoforge=[21,)
2525

2626
# Minecraft
27-
minecraft_version=1.21
28-
minecraft_versions_fabric=>1.20.6 <1.22
29-
minecraft_versions_neoforge=(1.20.6, 1.22)
27+
minecraft_version=1.21.3
28+
minecraft_versions_fabric=>1.21.1 <1.22
29+
minecraft_versions_neoforge=(1.21.1, 1.22)
3030

3131
# Parchment https://parchmentmc.org/docs/getting-started#choose-a-version
3232
parchment_minecraft_version=1.21
3333
parchment_version=2024.07.28
3434

3535
# Fabric https://fabricmc.net/develop
36-
fabric_loader_version=0.16.5
36+
fabric_loader_version=0.16.9
3737
fabric_loader_versions=>=0.15.0
38-
fabric_api_version=0.102.0+1.21
38+
fabric_api_version=0.107.0+1.21.3
3939
fabric_api_versions=*
4040

4141
# NeoForge https://projects.neoforged.net/neoforged/neoforge
4242
neoforge_loader_versions=[1,)
43-
neoforge_version=21.0.167
44-
neoforge_versions=[21.0.143, 22)
43+
neoforge_version=21.3.10-beta
44+
neoforge_versions=[21.3.0-beta, 22)
4545
# NeoForm https://projects.neoforged.net/neoforged/neoform
46-
neoform_version=1.21-20240613.152323
46+
neoform_version=1.21.3-20241023.131943
4747

4848
# Cloth Config https://modrinth.com/mod/9s6osm5g/versions
49-
clothconfig_version=15.0.140
50-
clothconfig_versions_fabric=>=15
51-
clothconfig_versions_neoforge=[15,)
49+
clothconfig_version=16.0.141
50+
clothconfig_versions_fabric=>=16
51+
clothconfig_versions_neoforge=[16,)
5252

5353
# ModMenu https://modrinth.com/mod/mOgUt4GM/versions
54-
modmenu_version=11.0.2
55-
modmenu_versions_fabric=>10
54+
modmenu_version=12.0.0-beta.1
55+
modmenu_versions_fabric=>11
5656

5757
# GitHub, Modrinth, CurseForge releases
5858
# Plural properties expect CSV lists
@@ -64,12 +64,12 @@ curseforge_id=1049891
6464
release_type=release
6565
# Fabric
6666
release_mod_loaders_fabric=fabric
67-
release_game_versions_fabric=1.21,1.21.1
67+
release_game_versions_fabric=1.21.2,1.21.3
6868
release_required_dep_ids_fabric_mr=P7dR8mSH,mOgUt4GM,9s6osm5g
6969
release_required_dep_ids_fabric_cf=fabric-api,modmenu,cloth-config
7070
# NeoForge
7171
release_mod_loaders_neoforge=neoforge
72-
release_game_versions_neoforge=1.21,1.21.1
72+
release_game_versions_neoforge=1.21.2,1.21.3
7373
release_required_dep_ids_neoforge_mr=9s6osm5g
7474
release_required_dep_ids_neoforge_cf=cloth-config
7575

@@ -80,17 +80,17 @@ mixinextras_version=0.4.1
8080

8181
# Plugins
8282
# Fabric Loom https://mvnrepository.com/artifact/net.fabricmc/fabric-loom
83-
loom_version=1.7.4
83+
loom_version=1.8.10
8484
# ModDev https://plugins.gradle.org/plugin/net.neoforged.moddev
85-
moddev_version=1.0.19
85+
moddev_version=1.0.21
8686
# Minotaur https://plugins.gradle.org/plugin/com.modrinth.minotaur
8787
minotaur_version=2.8.7
8888
# CurseForgeGradle https://plugins.gradle.org/plugin/net.darkhax.curseforgegradle
8989
curseforgegradle_version=1.1.25
9090
# github-release https://plugins.gradle.org/plugin/com.github.breadmoirai.github-release
9191
githubrelease_version=2.5.2
9292
# grgit-service https://github.com/ajoberstar/grgit/releases
93-
grgitservice_version=5.2.2
93+
grgitservice_version=5.3.0
9494
# licenser https://plugins.gradle.org/plugin/org.cadixdev.licenser
9595
licenser_version=0.6.1
9696

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)