2023-05-25 19:20:03 +02:00
|
|
|
package com.craftaro.ultimatestacker.stackable.spawner;
|
2018-11-06 04:33:10 +01:00
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
import com.craftaro.ultimatestacker.UltimateStacker;
|
|
|
|
import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack;
|
|
|
|
import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStackManager;
|
2023-06-11 13:14:56 +02:00
|
|
|
import com.craftaro.core.database.Data;
|
2018-11-06 04:33:10 +01:00
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.block.Block;
|
|
|
|
|
2018-11-06 06:09:40 +01:00
|
|
|
import java.util.Collection;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.HashMap;
|
2023-06-05 16:25:37 +02:00
|
|
|
import java.util.List;
|
2018-11-06 06:09:40 +01:00
|
|
|
import java.util.Map;
|
2018-11-06 04:33:10 +01:00
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
public class SpawnerStackManagerImpl implements SpawnerStackManager {
|
2018-11-06 04:33:10 +01:00
|
|
|
|
2019-09-10 23:50:41 +02:00
|
|
|
private final Map<Location, SpawnerStack> registeredSpawners = new HashMap<>();
|
2019-08-02 15:59:10 +02:00
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2023-06-05 16:25:37 +02:00
|
|
|
public void addSpawners(List<SpawnerStack> spawners) {
|
|
|
|
for (SpawnerStack spawner : spawners) {
|
|
|
|
this.registeredSpawners.put(roundLocation(spawner.getLocation()), spawner);
|
|
|
|
}
|
2019-08-02 15:59:10 +02:00
|
|
|
}
|
2018-11-06 04:33:10 +01:00
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2018-11-06 04:33:10 +01:00
|
|
|
public SpawnerStack addSpawner(SpawnerStack spawnerStack) {
|
2019-08-02 15:59:10 +02:00
|
|
|
this.registeredSpawners.put(roundLocation(spawnerStack.getLocation()), spawnerStack);
|
2019-01-23 19:01:31 +01:00
|
|
|
return spawnerStack;
|
2018-11-06 04:33:10 +01:00
|
|
|
}
|
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2018-11-06 04:33:10 +01:00
|
|
|
public SpawnerStack removeSpawner(Location location) {
|
|
|
|
return registeredSpawners.remove(roundLocation(location));
|
|
|
|
}
|
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2018-11-06 04:33:10 +01:00
|
|
|
public SpawnerStack getSpawner(Location location) {
|
2019-08-02 15:59:10 +02:00
|
|
|
if (!this.registeredSpawners.containsKey(roundLocation(location))) {
|
2023-05-25 19:20:03 +02:00
|
|
|
SpawnerStack spawnerStack = addSpawner(new SpawnerStackImpl(roundLocation(location), 1));
|
2023-06-05 16:25:37 +02:00
|
|
|
UltimateStacker.getInstance().getPluginDataManager().save(spawnerStack);
|
2019-08-02 15:59:10 +02:00
|
|
|
return spawnerStack;
|
2018-11-06 04:33:10 +01:00
|
|
|
}
|
2019-08-02 15:59:10 +02:00
|
|
|
return this.registeredSpawners.get(location);
|
2018-11-06 04:33:10 +01:00
|
|
|
}
|
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2018-11-06 04:33:10 +01:00
|
|
|
public SpawnerStack getSpawner(Block block) {
|
|
|
|
return this.getSpawner(block.getLocation());
|
|
|
|
}
|
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2019-06-05 11:40:36 +02:00
|
|
|
public boolean isSpawner(Location location) {
|
2019-08-02 15:59:10 +02:00
|
|
|
return this.registeredSpawners.get(location) != null;
|
2019-06-05 11:40:36 +02:00
|
|
|
}
|
|
|
|
|
2023-05-25 19:20:03 +02:00
|
|
|
@Override
|
2018-11-06 04:33:10 +01:00
|
|
|
public Collection<SpawnerStack> getStacks() {
|
2019-08-02 15:59:10 +02:00
|
|
|
return Collections.unmodifiableCollection(this.registeredSpawners.values());
|
2018-11-06 04:33:10 +01:00
|
|
|
}
|
|
|
|
|
2023-06-05 16:25:37 +02:00
|
|
|
@Override
|
|
|
|
public Collection<Data> getStacksData() {
|
|
|
|
return Collections.unmodifiableCollection(this.registeredSpawners.values());
|
|
|
|
}
|
|
|
|
|
2018-11-06 04:33:10 +01:00
|
|
|
private Location roundLocation(Location location) {
|
|
|
|
location = location.clone();
|
|
|
|
location.setX(location.getBlockX());
|
|
|
|
location.setY(location.getBlockY());
|
|
|
|
location.setZ(location.getBlockZ());
|
|
|
|
return location;
|
|
|
|
}
|
|
|
|
}
|