From b680d093593fe393d9e97e0ebd3a29ed56d55414 Mon Sep 17 00:00:00 2001 From: LexManos Date: Sat, 22 Jul 2023 08:57:25 -0700 Subject: [PATCH] Partially revert LazyOptional changes, now no longer internally uses weak references. --- .../net/minecraftforge/common/util/LazyOptional.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraftforge/common/util/LazyOptional.java b/src/main/java/net/minecraftforge/common/util/LazyOptional.java index a169864d66..9c322904a0 100644 --- a/src/main/java/net/minecraftforge/common/util/LazyOptional.java +++ b/src/main/java/net/minecraftforge/common/util/LazyOptional.java @@ -48,7 +48,7 @@ public class LazyOptional { // non-null and contains non-null value -> resolved // non-null and contains null -> resolved, but supplier returned null (contract violation) private Mutable resolved; - private Set>>> listeners = new HashSet<>(); + private Set>> listeners = new HashSet<>(); private boolean isValid = true; private static final @NotNull LazyOptional EMPTY = new LazyOptional<>(null); @@ -268,7 +268,7 @@ public class LazyOptional { */ public void addListener(NonNullConsumer> listener) { if (isPresent()) - this.listeners.add(new WeakReference<>(listener)); + this.listeners.add(listener); else listener.accept(this); } @@ -278,7 +278,7 @@ public class LazyOptional { * This allows modder who know they will not need to be notified, to remove the hard reference that this holds to their listener. */ public void removeListener(NonNullConsumer> listener) { - this.listeners.removeIf(e -> e.get() == null || e.get() == listener); + this.listeners.remove(listener); } /** @@ -298,10 +298,7 @@ public class LazyOptional { public void invalidate() { if (this.isValid) { this.isValid = false; - this.listeners.stream() - .map(WeakReference::get) - .filter(e -> e != null) - .forEach(e -> e.accept(this)); + this.listeners.forEach(e -> e.accept(this)); this.listeners.clear(); } }