package joshie.harvest.animals.tracker;
import joshie.harvest.api.animals.AnimalStats;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import java.util.ConcurrentModificationException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class AnimalTrackerServer extends AnimalTracker {
private static final DamageSource natural_causes = new DamageSource("natural").setDamageBypassesArmor();
private final Set<AnimalStats> animals = new HashSet<>();
private final Set<AnimalStats> queue = new HashSet<>();
public void add(AnimalStats stats) {
queue.add(stats);
}
public void processQueue() {
animals.addAll(queue);
queue.clear(); //Clear the queue
}
public void onDeath(AnimalStats stats) {
stats.setDead();
}
public void biHourly() {
try {
animals.stream().forEach(AnimalStats::onBihourlyTick);
} catch (ConcurrentModificationException ex) { /**/ }
}
public void newDay() {
World world = getWorld();
Iterator<AnimalStats> iterator = animals.iterator();
while (iterator.hasNext()) {
AnimalStats data = iterator.next(); //Only tick animals when owner in online
EntityAnimal animal = data.getAnimal();
if (animal != null && world.loadedEntityList.contains(animal)) {
if (animal.isDead || !data.newDay()) { //If the new day wasn't successful, remove the animal from your memory
iterator.remove();
if (!animal.isDead) {
animal.attackEntityFrom(natural_causes, 1000F);
}
}
}
}
}
}