WildLoaders/Hooks/Hook_EpicSpawners6/src/main/java/com/bgsoftware/wildloaders/hooks/TickableProvider_EpicSpawne...

60 lines
1.8 KiB
Java
Raw Normal View History

2020-10-28 20:19:49 +01:00
package com.bgsoftware.wildloaders.hooks;
import com.bgsoftware.wildloaders.api.hooks.TickableProvider;
import com.songoda.epicspawners.EpicSpawners;
import org.bukkit.Chunk;
import org.bukkit.Location;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
2022-01-06 22:35:17 +01:00
public final class TickableProvider_EpicSpawners6 implements TickableProvider {
2020-10-28 20:19:49 +01:00
private final Map<Location, TickDelay> spawnerDelays = new HashMap<>();
@Override
public void tick(Chunk[] chunks) {
2021-12-25 20:01:51 +01:00
if (EpicSpawners.getInstance().getSpawnerManager() == null)
2020-10-28 20:19:49 +01:00
return;
List<Long> chunkList = Stream.of(chunks).map(chunk -> pair(chunk.getX(), chunk.getZ())).collect(Collectors.toList());
EpicSpawners.getInstance().getSpawnerManager().getSpawners().stream()
.filter(spawner -> chunkList.contains(pair(spawner.getX() >> 4, spawner.getZ() >> 4)))
.forEach(spawner -> {
Location location = spawner.getLocation();
TickDelay tickDelay = spawnerDelays.get(location);
2021-12-25 20:01:51 +01:00
if (tickDelay == null) {
2020-10-28 20:19:49 +01:00
spawnerDelays.put(location, new TickDelay(spawner.updateDelay()));
return;
}
tickDelay.delay -= 1;
if (tickDelay.delay <= 0) {
spawner.spawn();
spawnerDelays.remove(location);
}
});
}
2021-12-25 20:01:51 +01:00
private long pair(int x, int z) {
return (x & 0xFFFFFFFFL) | (z & 0xFFFFFFFFL) << 32;
2020-10-28 20:19:49 +01:00
}
2021-12-25 20:01:51 +01:00
private static final class TickDelay {
2020-10-28 20:19:49 +01:00
private int delay;
2021-12-25 20:01:51 +01:00
TickDelay(int delay) {
2020-10-28 20:19:49 +01:00
this.delay = delay;
}
}
}