package org.bukkit.craftbukkit.block; import com.google.common.base.Preconditions; import net.minecraft.server.EntityTypes; import net.minecraft.server.MinecraftKey; import net.minecraft.server.TileEntityMobSpawner; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.CreatureSpawner; import org.bukkit.entity.EntityType; public class CraftCreatureSpawner extends CraftBlockEntityState implements CreatureSpawner { public CraftCreatureSpawner(final Block block) { super(block, TileEntityMobSpawner.class); } public CraftCreatureSpawner(final Material material, TileEntityMobSpawner te) { super(material, te); } @Override public EntityType getSpawnedType() { MinecraftKey key = this.getSnapshot().getSpawner().getMobName(); return (key == null) ? EntityType.PIG : EntityType.fromName(key.getKey()); } @Override public void setSpawnedType(EntityType entityType) { if (entityType == null || entityType.getName() == null) { throw new IllegalArgumentException("Can't spawn EntityType " + entityType + " from mobspawners!"); } this.getSnapshot().getSpawner().setMobName(EntityTypes.a(entityType.getName()).get()); } @Override public String getCreatureTypeName() { return this.getSnapshot().getSpawner().getMobName().getKey(); } @Override public void setCreatureTypeByName(String creatureType) { // Verify input EntityType type = EntityType.fromName(creatureType); if (type == null) { return; } setSpawnedType(type); } @Override public int getDelay() { return this.getSnapshot().getSpawner().spawnDelay; } @Override public void setDelay(int delay) { this.getSnapshot().getSpawner().spawnDelay = delay; } @Override public int getMinSpawnDelay() { return this.getSnapshot().getSpawner().minSpawnDelay; } @Override public void setMinSpawnDelay(int spawnDelay) { Preconditions.checkArgument(spawnDelay <= getMaxSpawnDelay(), "Minimum Spawn Delay must be less than or equal to Maximum Spawn Delay"); this.getSnapshot().getSpawner().minSpawnDelay = spawnDelay; } @Override public int getMaxSpawnDelay() { return this.getSnapshot().getSpawner().maxSpawnDelay; } @Override public void setMaxSpawnDelay(int spawnDelay) { Preconditions.checkArgument(spawnDelay > 0, "Maximum Spawn Delay must be greater than 0."); Preconditions.checkArgument(spawnDelay >= getMinSpawnDelay(), "Maximum Spawn Delay must be greater than or equal to Minimum Spawn Delay"); this.getSnapshot().getSpawner().maxSpawnDelay = spawnDelay; } @Override public int getMaxNearbyEntities() { return this.getSnapshot().getSpawner().maxNearbyEntities; } @Override public void setMaxNearbyEntities(int maxNearbyEntities) { this.getSnapshot().getSpawner().maxNearbyEntities = maxNearbyEntities; } @Override public int getSpawnCount() { return this.getSnapshot().getSpawner().spawnCount; } @Override public void setSpawnCount(int count) { this.getSnapshot().getSpawner().spawnCount = count; } @Override public int getRequiredPlayerRange() { return this.getSnapshot().getSpawner().requiredPlayerRange; } @Override public void setRequiredPlayerRange(int requiredPlayerRange) { this.getSnapshot().getSpawner().requiredPlayerRange = requiredPlayerRange; } @Override public int getSpawnRange() { return this.getSnapshot().getSpawner().spawnRange; } @Override public void setSpawnRange(int spawnRange) { this.getSnapshot().getSpawner().spawnRange = spawnRange; } }