1 package com.irtimaled.bbor.common;
3 import com.irtimaled.bbor.common.models.BoundingBoxVillage;
4 import net.minecraft.village.Village;
5 import net.minecraft.village.VillageCollection;
6 import net.minecraft.world.World;
8 import java.util.HashMap;
12 public class VillageProcessor {
14 private BoundingBoxCache boundingBoxCache;
15 private Map<Integer, BoundingBoxVillage> villageCache = new HashMap<>();
16 private boolean closed = false;
18 VillageProcessor(World world, BoundingBoxCache boundingBoxCache) {
20 this.boundingBoxCache = boundingBoxCache;
23 synchronized void process() {
26 Map<Integer, BoundingBoxVillage> oldVillages = new HashMap<>(villageCache);
27 Map<Integer, BoundingBoxVillage> newVillages = new HashMap<>();
28 VillageCollection villageCollection = world.getVillageCollection();
29 if (villageCollection != null) {
30 List<Village> villages = villageCollection.getVillageList();
31 for (Village village : villages) {
32 int villageId = village.hashCode();
33 BoundingBoxVillage newVillage = oldVillages.get(villageId);
34 if (newVillage != null && newVillage.matches(village)) {
35 oldVillages.remove(villageId);
37 newVillage = BoundingBoxVillage.from(village);
39 newVillages.put(villageId, newVillage);
43 for (BoundingBoxVillage village : oldVillages.values()) {
44 boundingBoxCache.removeBoundingBox(village);
46 for (BoundingBoxVillage village : newVillages.values()) {
47 boundingBoxCache.addBoundingBox(village);
49 villageCache = newVillages;
55 boundingBoxCache = null;