Skip to content

Commit 0f6d751

Browse files
committed
Fix for ClassCastException and damaging items client-side too early
1 parent cf7f1da commit 0f6d751

File tree

2 files changed

+18
-24
lines changed

2 files changed

+18
-24
lines changed

src/main/java/net/earthcomputer/clientcommands/EventManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ public static void addPlayerTickListener(Listener<PlayerTickEvent> listener) {
283283

284284
@SubscribeEvent
285285
public void onPlayerTick(PlayerTickEvent e) {
286-
if (e.side == Side.CLIENT && e.phase == TickEvent.Phase.END) {
286+
if (e.player == Minecraft.getMinecraft().player && e.phase == TickEvent.Phase.END) {
287287
playerTickListeners.invoke(e);
288288
}
289289
}

src/main/java/net/earthcomputer/clientcommands/TempRulesImpl.java

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package net.earthcomputer.clientcommands;
22

3+
import java.util.concurrent.atomic.AtomicInteger;
4+
35
import net.minecraft.client.Minecraft;
46
import net.minecraft.client.resources.I18n;
57
import 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

Comments
 (0)