From a9159e1a72b89a3056df3256cf51398c82c7a4ca Mon Sep 17 00:00:00 2001 From: Burning_TNT <88144530+burningtnt@users.noreply.github.com> Date: Sun, 7 Jan 2024 22:40:05 +0800 Subject: [PATCH] Fix: The return value of the dependent mods may be duplicated from CurseForge API. (#2630) --- .../org/jackhuang/hmcl/mod/RemoteMod.java | 22 ++++++++++++++++++- .../jackhuang/hmcl/mod/curse/CurseAddon.java | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteMod.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteMod.java index db7190864..6b8fce7a0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteMod.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/RemoteMod.java @@ -120,7 +120,7 @@ public class RemoteMod { private final String id; - private RemoteMod remoteMod = null; + private transient RemoteMod remoteMod = null; private Dependency(DependencyType type, RemoteModRepository remoteModRepository, String modid) { this.type = type; @@ -165,6 +165,26 @@ public class RemoteMod { } return this.remoteMod; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Dependency that = (Dependency) o; + + if (type != that.type) return false; + if (!remoteModRepository.equals(that.remoteModRepository)) return false; + return id.equals(that.id); + } + + @Override + public int hashCode() { + int result = type.hashCode(); + result = 31 * result + remoteModRepository.hashCode(); + result = 31 * result + id.hashCode(); + return result; + } } public enum Type { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseAddon.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseAddon.java index 5f714e73a..1fd22d38d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseAddon.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/curse/CurseAddon.java @@ -582,7 +582,7 @@ public class CurseAddon implements RemoteMod.IMod { throw new IllegalStateException("Broken datas."); } return RemoteMod.Dependency.ofGeneral(RELATION_TYPE.get(dependency.getRelationType()), CurseForgeRemoteModRepository.MODS, Integer.toString(dependency.getModId())); - }).filter(Objects::nonNull).collect(Collectors.toList()), + }).distinct().filter(Objects::nonNull).collect(Collectors.toList()), gameVersions.stream().filter(ver -> ver.startsWith("1.") || ver.contains("w")).collect(Collectors.toList()), gameVersions.stream().flatMap(version -> { if ("fabric".equalsIgnoreCase(version)) return Stream.of(ModLoaderType.FABRIC);