mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-28 19:39:17 +00:00
ClassInstanceMultiMap belongs to Minecraft vanilla entity storage. And is unused, since replaced by spottedleaf's entity storage (rewrite chunk system). However these patches might be useful for vanilla entity storage if is used.
66 lines
3.1 KiB
Diff
66 lines
3.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Taiyou06 <kaandindar21@gmail.com>
|
|
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<Villager> {
|
|
}
|
|
|
|
private static Set<Item> figureOutWhatIAmWillingToTrade(Villager villager, Villager other) {
|
|
- ImmutableSet<Item> set = other.getVillagerData().profession().value().requestedItems();
|
|
- ImmutableSet<Item> set1 = villager.getVillagerData().profession().value().requestedItems();
|
|
- return set.stream().filter(item -> !set1.contains(item)).collect(Collectors.toSet());
|
|
+ // Leaf start - Remove stream in villagers
|
|
+ ImmutableSet<Item> otherItems = other.getVillagerData().profession().value().requestedItems();
|
|
+ ImmutableSet<Item> villagerItems = villager.getVillagerData().profession().value().requestedItems();
|
|
+ Set<Item> 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<Item> 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<Item, Integer> 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() {
|