Skip to content

Commit cf7f1da

Browse files
committed
Fix CME in EventManager
1 parent bd1d9a6 commit cf7f1da

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

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

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

33
import java.util.ArrayList;
4-
import java.util.Iterator;
54
import java.util.List;
65

76
import net.earthcomputer.clientcommands.ToolDamageManager.ToolDamagedEvent;
@@ -461,30 +460,18 @@ default boolean isOneTime() {
461460

462461
private static class Listeners<E extends Event> {
463462
private List<Listener<E>> listeners = new ArrayList<>();
464-
private List<Listener<E>> toAdd = new ArrayList<>();
465-
private boolean invoking = false;
466463

467464
public void invoke(E e) {
468-
invoking = true;
469-
Iterator<Listener<E>> itr = listeners.iterator();
470-
while (itr.hasNext()) {
471-
Listener<E> listener = itr.next();
465+
for (Listener<E> listener : new ArrayList<>(listeners)) {
472466
listener.accept(e);
473467
if (listener.isOneTime()) {
474-
itr.remove();
468+
listeners.remove(listener);
475469
}
476470
}
477-
invoking = false;
478-
listeners.addAll(toAdd);
479-
toAdd.clear();
480471
}
481472

482473
public void add(Listener<E> listener) {
483-
if (invoking) {
484-
toAdd.add(listener);
485-
} else {
486-
listeners.add(listener);
487-
}
474+
listeners.add(listener);
488475
}
489476
}
490477

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,23 @@ private static void initToolBreakProtection() {
4848
}
4949
}
5050
});
51+
EventManager.addPostDamageItemListener(e -> {
52+
if (TempRules.TOOL_BREAK_PROTECTION.getValue()) {
53+
// fix client-server desync
54+
e.getItemStack().setItemDamage(e.getItemStack().getItemDamage() + e.getDamageAmount());
55+
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+
}
65+
}
66+
}
67+
});
5168
}
5269

5370
}

0 commit comments

Comments
 (0)