From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Taiyou06 Date: Sat, 8 Feb 2025 22:11:16 +0100 Subject: [PATCH] Remove stream in villagers TradeWithVillager#figureOutWhatIAmWillingToTrade In the test, this can give ~40% improvement (~20ms -> ~12ms), under 2048 villagers situation. And ~100% improvement (~36ms -> ~0ms), under 512 villagers situation. Villager#countFoodPointsInInventory In the test, this can give ~82.14% improvement (~1456ms -> ~260ms), under 2048 villagers situation. And ~93.92% improvement (~1382ms -> ~84ms), under 512 villagers situation. diff --git a/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java index 72cca4897f9697573fd6987a5f0d2df52761b8c3..04eea77cf84aaeb781608e48f2aa32f344689889 100644 --- a/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +++ b/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java @@ -77,9 +77,19 @@ public class TradeWithVillager extends Behavior { } private static Set figureOutWhatIAmWillingToTrade(Villager villager, Villager other) { - ImmutableSet set = other.getVillagerData().profession().value().requestedItems(); - ImmutableSet set1 = villager.getVillagerData().profession().value().requestedItems(); - return set.stream().filter(item -> !set1.contains(item)).collect(Collectors.toSet()); + // Leaf start - Remove stream in villagers + ImmutableSet otherItems = other.getVillagerData().profession().value().requestedItems(); + ImmutableSet villagerItems = villager.getVillagerData().profession().value().requestedItems(); + Set result = new java.util.HashSet<>(); + + for (Item item : otherItems) { + if (!villagerItems.contains(item)) { + result.add(item); + } + } + + return result; + // Leaf end - Remove stream in villagers } private static void throwHalfStack(Villager villager, Set stack, LivingEntity entity) { diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java index 174c37fca6b2b03a6eb36d8c7c17b6e8ec49f1cd..a3040736384e54f26794db2bc938d63734f9614d 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -973,7 +973,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler private int countFoodPointsInInventory() { SimpleContainer inventory = this.getInventory(); - return FOOD_POINTS.entrySet().stream().mapToInt(entry -> inventory.countItem(entry.getKey()) * entry.getValue()).sum(); + // Leaf start - Remove stream in villagers + int sum = 0; + + for (Map.Entry entry : FOOD_POINTS.entrySet()) { + Item item = entry.getKey(); + int points = entry.getValue(); + sum += inventory.countItem(item) * points; + } + + return sum; + // Leaf end - Remove stream in villagers } public boolean hasFarmSeeds() {