Skip to content

Commit 922c800

Browse files
committed
Fix: prevent pristine tool stack from re-merging with damaged tool on hurtAndBreak/damage
When a stacked tool takes damage, the mixin now temporarily marks the original stack as damaged (damage=1) before creating and inserting the leftover pristine tools. This prevents InventoryMixin.onInsertStack from merging the pristine leftovers back into the original stack via canStackItems. The damage is reset to 0 immediately after insertion, so the original hurtAndBreak/damage method applies it normally. Fixes the bug where all tools in a stack would take damage instead of only the single tool being used.
1 parent 0199496 commit 922c800

9 files changed

Lines changed: 30 additions & 0 deletions

File tree

src/mc-1.20-1.20.3/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ abstract class ItemStackMixin {
2626

2727
processingDamage = true
2828
try {
29+
stack.damage = 1
30+
2931
val leftover = stack.copy()
3032
leftover.count = stack.count - 1
3133
leftover.damage = 0
@@ -36,6 +38,8 @@ abstract class ItemStackMixin {
3638
if (!entity.inventory.insertStack(leftover)) {
3739
entity.dropItem(leftover, false)
3840
}
41+
42+
stack.damage = 0
3943
} finally {
4044
processingDamage = false
4145
}

src/mc-1.20.4/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ abstract class ItemStackMixin {
2626

2727
processingDamage = true
2828
try {
29+
stack.damage = 1
30+
2931
val leftover = stack.copy()
3032
leftover.count = stack.count - 1
3133
leftover.damage = 0
@@ -36,6 +38,8 @@ abstract class ItemStackMixin {
3638
if (!entity.inventory.insertStack(leftover)) {
3739
entity.dropItem(leftover, false)
3840
}
41+
42+
stack.damage = 0
3943
} finally {
4044
processingDamage = false
4145
}

src/mc-1.20.5-1.20.6/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ abstract class ItemStackMixin {
2727

2828
processingDamage = true
2929
try {
30+
stack.damage = 1
31+
3032
val leftover = stack.copy()
3133
leftover.count = stack.count - 1
3234
leftover.damage = 0
@@ -37,6 +39,8 @@ abstract class ItemStackMixin {
3739
if (!entity.inventory.insertStack(leftover)) {
3840
entity.dropItem(leftover, false)
3941
}
42+
43+
stack.damage = 0
4044
} finally {
4145
processingDamage = false
4246
}

src/mc-1.21.0-1.21.3/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ abstract class ItemStackMixin {
3333
val countBefore = stack.count
3434

3535
stack.count = 1
36+
stack.damage = 1
3637

3738
val leftover = stack.copy()
3839
leftover.count = countBefore - 1
@@ -43,6 +44,8 @@ abstract class ItemStackMixin {
4344
if (!player.inventory.insertStack(leftover)) {
4445
player.dropItem(leftover, false)
4546
}
47+
48+
stack.damage = 0
4649
} finally {
4750
isProcessingDamageInternal.set(false)
4851
}

src/mc-1.21.11/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ abstract class ItemStackMixin {
3434
val countBefore = stack.count
3535

3636
stack.count = 1
37+
stack.damage = 1
3738

3839
val leftover = stack.copy()
3940
leftover.count = countBefore - 1
@@ -44,6 +45,8 @@ abstract class ItemStackMixin {
4445
if (!player.inventory.insertStack(leftover)) {
4546
player.dropItem(leftover, false)
4647
}
48+
49+
stack.damage = 0
4750
} finally {
4851
isProcessingDamageInternal.set(false)
4952
}

src/mc-1.21.4/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ abstract class ItemStackMixin {
3333
val countBefore = stack.count
3434

3535
stack.count = 1
36+
stack.damage = 1
3637

3738
val leftover = stack.copy()
3839
leftover.count = countBefore - 1
@@ -43,6 +44,8 @@ abstract class ItemStackMixin {
4344
if (!player.inventory.insertStack(leftover)) {
4445
player.dropItem(leftover, false)
4546
}
47+
48+
stack.damage = 0
4649
} finally {
4750
isProcessingDamageInternal.set(false)
4851
}

src/mc-1.21.5-1.21.8/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ abstract class ItemStackMixin {
3333
val countBefore = stack.count
3434

3535
stack.count = 1
36+
stack.damage = 1
3637

3738
val leftover = stack.copy()
3839
leftover.count = countBefore - 1
@@ -43,6 +44,8 @@ abstract class ItemStackMixin {
4344
if (!player.inventory.insertStack(leftover)) {
4445
player.dropItem(leftover, false)
4546
}
47+
48+
stack.damage = 0
4649
} finally {
4750
isProcessingDamageInternal.set(false)
4851
}

src/mc-1.21.9-1.21.10/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ abstract class ItemStackMixin {
3434
val countBefore = stack.count
3535

3636
stack.count = 1
37+
stack.damage = 1
3738

3839
val leftover = stack.copy()
3940
leftover.count = countBefore - 1
@@ -44,6 +45,8 @@ abstract class ItemStackMixin {
4445
if (!player.inventory.insertStack(leftover)) {
4546
player.dropItem(leftover, false)
4647
}
48+
49+
stack.damage = 0
4750
} finally {
4851
isProcessingDamageInternal.set(false)
4952
}

src/mc-26.1/kotlin/stackabletools/mixin/ItemStackMixin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ abstract class ItemStackMixin {
3333
val countBefore = stack.count
3434

3535
stack.count = 1
36+
stack.damageValue = 1
3637

3738
val leftover = stack.copy()
3839
leftover.count = countBefore - 1
@@ -43,6 +44,8 @@ abstract class ItemStackMixin {
4344
if (!player.inventory.add(leftover)) {
4445
player.drop(leftover, false)
4546
}
47+
48+
stack.damageValue = 0
4649
} finally {
4750
isProcessingDamageInternal.set(false)
4851
}

0 commit comments

Comments
 (0)