UltimateStacker/UltimateStacker/src/main/java/com.craftaro.ultimatestacker/stackable/spawner/SpawnerStackImpl.java

172 lines
4.6 KiB
Java
Raw Normal View History

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.UltimateStackerAPI;
import com.craftaro.ultimatestacker.api.stack.spawner.SpawnerStack;
2023-05-30 11:21:46 +02:00
import com.craftaro.ultimatestacker.settings.Settings;
2023-05-25 19:20:03 +02:00
import com.craftaro.ultimatestacker.utils.Methods;
import com.craftaro.core.compatibility.CompatibleMaterial;
import com.craftaro.core.database.Data;
import com.craftaro.core.database.SerializedLocation;
import com.craftaro.core.nms.world.SpawnedEntity;
import com.craftaro.core.world.SSpawner;
2018-11-06 04:33:10 +01:00
import org.bukkit.Location;
2019-08-02 15:59:10 +02:00
import org.bukkit.World;
2018-11-06 04:33:10 +01:00
import org.bukkit.block.CreatureSpawner;
2023-05-05 10:57:07 +02:00
import org.bukkit.entity.EntityType;
2018-11-06 04:33:10 +01:00
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
2023-05-25 19:20:03 +02:00
import java.util.Set;
2021-12-22 23:11:16 +01:00
import java.util.UUID;
2023-05-25 19:20:03 +02:00
public class SpawnerStackImpl extends SSpawner implements SpawnerStack {
2018-11-06 04:33:10 +01:00
2021-12-22 23:11:16 +01:00
// This is the unique identifier for this spawner.
// It is reset on every plugin load.
// Used for holograms.
private final UUID uniqueId = UUID.randomUUID();
2019-08-02 20:51:15 +02:00
private int id;
2020-08-05 23:05:57 +02:00
private int amount;
2018-11-06 04:33:10 +01:00
2020-08-25 01:01:11 +02:00
private static final UltimateStacker plugin = UltimateStacker.getInstance();
2023-05-25 19:20:03 +02:00
public SpawnerStackImpl(Location location, int amount) {
super(location);
2020-08-05 23:05:57 +02:00
this.amount = amount;
2018-11-06 04:33:10 +01:00
}
2020-08-25 01:01:11 +02:00
@Override
2018-11-06 04:33:10 +01:00
public int getAmount() {
return amount;
}
2020-08-26 15:40:51 +02:00
@Override
public boolean isValid() {
return CompatibleMaterial.getMaterial(location.getBlock()) == CompatibleMaterial.SPAWNER;
}
2023-05-25 19:20:03 +02:00
@Override
2018-11-06 04:33:10 +01:00
public void setAmount(int amount) {
this.amount = amount;
plugin.getPluginDataManager().save(this);
2020-08-05 23:05:57 +02:00
}
2018-11-06 04:33:10 +01:00
2023-05-25 19:20:03 +02:00
@Override
public void add(int amount) {
this.amount += amount;
}
@Override
public void take(int amount) {
this.amount -= amount;
}
2023-05-05 10:57:07 +02:00
public int calculateSpawnCount(EntityType type) {
if (!UltimateStacker.getInstance().getMobFile().getBoolean("Mobs." + type.name() + ".Enabled")) {
return 0;
}
2019-08-02 20:51:15 +02:00
Random random = new Random();
int count = 0;
2019-08-10 19:10:58 +02:00
for (int i = 0; i < getAmount(); i++) {
count += random.nextInt(3) + 1;
2019-08-02 20:51:15 +02:00
}
return count;
}
2023-05-25 19:20:03 +02:00
public int spawn(int amountToSpawn, EntityType... types) {
return super.spawn(amountToSpawn, types);
}
public int spawn(int amountToSpawn, String particle, Set<CompatibleMaterial> canSpawnOn, SpawnedEntity spawned, EntityType... types) {
return super.spawn(amountToSpawn, particle, canSpawnOn, spawned, types);
}
2019-08-02 20:51:15 +02:00
public int getId() {
return this.id;
}
@Override
public Map<String, Object> serialize() {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("amount", amount);
map.putAll(new SerializedLocation(location).asMap());
return map;
}
@Override
public Data deserialize(Map<String, Object> map) {
this.id = (int) map.get("id");
this.amount = (int) map.get("amount");
this.initFromData(map);
return this;
}
@Override
public String getTableName() {
return "spawners";
}
2019-08-02 20:51:15 +02:00
public void setId(int id) {
this.id = id;
}
2019-08-02 15:59:10 +02:00
public Location getLocation() {
return location.clone();
}
2020-08-25 01:01:11 +02:00
@Override
public String getHologramName() {
2020-08-31 16:01:13 +02:00
if (!(location.getBlock().getState() instanceof CreatureSpawner)) {
2023-05-25 19:20:03 +02:00
UltimateStackerAPI.getSpawnerStackManager().removeSpawner(location);
2020-08-31 16:01:13 +02:00
return null;
}
2020-08-25 01:01:11 +02:00
CreatureSpawner creatureSpawner = (CreatureSpawner) location.getBlock().getState();
return Methods.compileSpawnerName(creatureSpawner.getSpawnedType(), amount);
}
@Override
public boolean areHologramsEnabled() {
return Settings.SPAWNER_HOLOGRAMS.getBoolean();
}
2019-08-02 15:59:10 +02:00
public int getX() {
return location.getBlockX();
}
public int getY() {
return location.getBlockY();
}
public int getZ() {
return location.getBlockZ();
}
public World getWorld() {
return location.getWorld();
}
2021-12-22 23:11:16 +01:00
@Override
public String getHologramId() {
return "UltimateStacker-" + uniqueId;
}
2018-11-06 04:33:10 +01:00
@Override
public String toString() {
2023-05-25 19:20:03 +02:00
return "SpawnerStackImpl:{"
2018-11-06 04:33:10 +01:00
+ "Amount:\"" + amount + "\","
+ "Location:{"
+ "World:\"" + location.getWorld().getName() + "\","
+ "X:" + location.getBlockX() + ","
+ "Y:" + location.getBlockY() + ","
+ "Z:" + location.getBlockZ()
+ "}"
+ "}";
}
}