From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: JRoy Date: Wed, 1 Jul 2020 18:01:49 -0400 Subject: [PATCH] Remove streams from classes related villager gossip diff --git a/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java b/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java index 4e7b7a3910840908b73c80faf9a83b728186f775..f64da4c3bd4301453688974182e7793804655d2c 100644 --- a/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java +++ b/src/main/java/net/minecraft/world/entity/ai/gossip/GossipContainer.java @@ -30,7 +30,7 @@ import org.slf4j.Logger; public class GossipContainer { private static final Logger LOGGER = LogUtils.getLogger(); public static final int DISCARD_THRESHOLD = 2; - private final Map gossips = Maps.newHashMap(); public Map getReputations() { return this.gossips; } // Paper - add getter for reputations + private final Map gossips = Maps.newHashMap(); @VisibleForDebug public Map> getGossipEntries() { @@ -61,8 +61,22 @@ public class GossipContainer { }); } + // Paper start - Remove streams from reputation + private List decompress() { + List list = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); + for (Map.Entry entry : this.gossips.entrySet()) { + for (GossipContainer.GossipEntry cur : entry.getValue().decompress(entry.getKey())) { + if (cur.weightedValue() != 0) { + list.add(cur); + } + } + } + return list; + } + // Paper end + private Collection selectGossipsForTransfer(RandomSource random, int count) { - List list = this.unpack().toList(); + List list = this.decompress(); // Paper - Remove streams from reputation if (list.isEmpty()) { return Collections.emptyList(); } else { @@ -156,7 +170,7 @@ public class GossipContainer { } public T store(DynamicOps ops) { - return GossipContainer.GossipEntry.LIST_CODEC.encodeStart(ops, this.unpack().toList()).resultOrPartial((error) -> { + return GossipContainer.GossipEntry.LIST_CODEC.encodeStart(ops, this.decompress()).resultOrPartial((error) -> { LOGGER.warn("Failed to serialize gossips: {}", (Object)error); }).orElseGet(ops::emptyList); } @@ -184,11 +198,23 @@ public class GossipContainer { final Object2IntMap entries = new Object2IntOpenHashMap<>(); public int weightedValue(Predicate gossipTypeFilter) { - return this.entries.object2IntEntrySet().stream().filter((entry) -> { - return gossipTypeFilter.test(entry.getKey()); - }).mapToInt((entry) -> { - return entry.getIntValue() * (entry.getKey()).weight; - }).sum(); + // Paper start - Remove streams from reputation + int weight = 0; + for (Object2IntMap.Entry entry : entries.object2IntEntrySet()) { + if (gossipTypeFilter.test(entry.getKey())) { + weight += entry.getIntValue() * entry.getKey().weight; + } + } + return weight; + } + + public List decompress(UUID uuid) { + List list = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); + for (Object2IntMap.Entry entry : entries.object2IntEntrySet()) { + list.add(new GossipContainer.GossipEntry(uuid, entry.getKey(), entry.getIntValue())); + } + return list; + // Paper end } public Stream unpack(UUID target) {