11package net .earthcomputer .clientcommands ;
22
3+ import java .util .concurrent .atomic .AtomicInteger ;
4+
35import net .minecraft .client .Minecraft ;
46import net .minecraft .client .resources .I18n ;
57import net .minecraft .enchantment .EnchantmentHelper ;
@@ -24,27 +26,27 @@ private static void initBlockReachDistance() {
2426 });
2527 }
2628
29+ private static AtomicInteger hotbarSlotToUpdate = new AtomicInteger (-1 );
30+
2731 private static void initToolBreakProtection () {
32+ EventManager .addPlayerTickListener (e -> {
33+ int hotbarSlot = hotbarSlotToUpdate .getAndSet (-1 );
34+ if (hotbarSlot != -1 ) {
35+ if (e .player .openContainer == e .player .inventoryContainer ) {
36+ // Pickup the item and put it back again to refresh durability
37+ for (int i = 0 ; i < 2 ; i ++) {
38+ Minecraft .getMinecraft ().playerController .windowClick (e .player .openContainer .windowId ,
39+ hotbarSlot , 0 , ClickType .PICKUP , e .player );
40+ }
41+ }
42+ }
43+ });
2844 EventManager .addPreDamageItemListener (e -> {
2945 if (TempRules .TOOL_BREAK_PROTECTION .getValue ()) {
3046 if (e .getItemStack ().getItemDamage () + e .getDamageAmount () > e .getItemStack ().getMaxDamage ()) {
3147 e .setCanceled (true );
3248 Minecraft .getMinecraft ().ingameGUI
3349 .setOverlayMessage (I18n .format ("tempRules.toolBreakProtection.protected" ), false );
34- } else {
35- // Fix client-server desync
36- e .getItemStack ().setItemDamage (e .getItemStack ().getItemDamage () + e .getDamageAmount ());
37- if (EnchantmentHelper .getEnchantmentLevel (Enchantments .UNBREAKING , e .getItemStack ()) > 0 ) {
38- if (e .getEntityPlayer ().openContainer == e .getEntityPlayer ().inventoryContainer ) {
39- // Pickup the item and put it back again to refresh durability
40- for (int i = 0 ; i < 2 ; i ++) {
41- Minecraft .getMinecraft ().playerController .windowClick (
42- e .getEntityPlayer ().openContainer .windowId ,
43- e .getEntityPlayer ().inventory .currentItem , 0 , ClickType .PICKUP ,
44- e .getEntityPlayer ());
45- }
46- }
47- }
4850 }
4951 }
5052 });
@@ -53,15 +55,7 @@ private static void initToolBreakProtection() {
5355 // fix client-server desync
5456 e .getItemStack ().setItemDamage (e .getItemStack ().getItemDamage () + e .getDamageAmount ());
5557 if (EnchantmentHelper .getEnchantmentLevel (Enchantments .UNBREAKING , e .getItemStack ()) > 0 ) {
56- if (e .getEntityPlayer ().openContainer == e .getEntityPlayer ().inventoryContainer ) {
57- // Pickup the item and put it back again to refresh durability
58- for (int i = 0 ; i < 2 ; i ++) {
59- Minecraft .getMinecraft ().playerController .windowClick (
60- e .getEntityPlayer ().openContainer .windowId ,
61- e .getEntityPlayer ().inventory .currentItem , 0 , ClickType .PICKUP ,
62- e .getEntityPlayer ());
63- }
64- }
58+ hotbarSlotToUpdate .set (e .getEntityPlayer ().inventory .currentItem );
6559 }
6660 }
6761 });
0 commit comments