diff --git a/src/main/java/net/minestom/server/registry/Registry.java b/src/main/java/net/minestom/server/registry/Registry.java index e12523e1d..a10a433e5 100644 --- a/src/main/java/net/minestom/server/registry/Registry.java +++ b/src/main/java/net/minestom/server/registry/Registry.java @@ -68,20 +68,22 @@ public final class Registry { @ApiStatus.Internal public static Container createContainer(Resource resource, Container.Loader loader) { - Map namespaces = new HashMap<>(); - ObjectArray ids = new ObjectArray<>(); - for (var entry : Registry.load(resource).entrySet()) { + var entries = Registry.load(resource); + Map namespaces = new HashMap<>(entries.size()); + ObjectArray ids = new ObjectArray<>(entries.size()); + for (var entry : entries.entrySet()) { final String namespace = entry.getKey(); final Map object = entry.getValue(); final T value = loader.get(namespace, object); ids.set(value.id(), value); namespaces.put(value.name(), value); } - return new Container<>(namespaces, ids); + return new Container<>(resource, namespaces, ids); } @ApiStatus.Internal - public record Container(Map namespaces, + public record Container(Resource resource, + Map namespaces, ObjectArray ids) { public Container { namespaces = Map.copyOf(namespaces); @@ -104,6 +106,18 @@ public final class Registry { return namespaces.values(); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Container container)) return false; + return resource == container.resource; + } + + @Override + public int hashCode() { + return Objects.hash(resource); + } + public interface Loader { T get(String namespace, Map object); }