CraftBukkit/src/main/java/org/bukkit/craftbukkit/block/CraftTrialSpawner.java

172 lines
5.4 KiB
Java

package org.bukkit.craftbukkit.block;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import java.util.Collection;
import java.util.UUID;
import net.minecraft.world.level.block.TrialSpawnerBlock;
import net.minecraft.world.level.block.entity.TrialSpawnerBlockEntity;
import net.minecraft.world.level.block.entity.trialspawner.TrialSpawnerData;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.TrialSpawner;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.spawner.TrialSpawnerConfiguration;
public class CraftTrialSpawner extends CraftBlockEntityState<TrialSpawnerBlockEntity> implements TrialSpawner {
private final CraftTrialSpawnerConfiguration normalConfig;
private final CraftTrialSpawnerConfiguration ominousConfig;
public CraftTrialSpawner(World world, TrialSpawnerBlockEntity tileEntity) {
super(world, tileEntity);
this.normalConfig = new CraftTrialSpawnerConfiguration(tileEntity.getTrialSpawner().getNormalConfig(), getSnapshot());
this.ominousConfig = new CraftTrialSpawnerConfiguration(tileEntity.getTrialSpawner().getOminousConfig(), getSnapshot());
}
protected CraftTrialSpawner(CraftTrialSpawner state, Location location) {
super(state, location);
this.normalConfig = state.normalConfig;
this.ominousConfig = state.ominousConfig;
}
@Override
public int getCooldownLength() {
return getSnapshot().trialSpawner.getTargetCooldownLength();
}
@Override
public void setCooldownLength(int ticks) {
getSnapshot().trialSpawner.targetCooldownLength = ticks;
}
@Override
public int getRequiredPlayerRange() {
return getSnapshot().trialSpawner.getRequiredPlayerRange();
}
@Override
public void setRequiredPlayerRange(int requiredPlayerRange) {
getSnapshot().trialSpawner.requiredPlayerRange = requiredPlayerRange;
}
@Override
public Collection<Player> getTrackedPlayers() {
ImmutableSet.Builder<Player> players = ImmutableSet.builder();
for (UUID uuid : getTrialData().detectedPlayers) {
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
players.add(player);
}
}
return players.build();
}
@Override
public boolean isTrackingPlayer(Player player) {
Preconditions.checkArgument(player != null, "Player cannot be null");
return getTrialData().detectedPlayers.contains(player.getUniqueId());
}
@Override
public void startTrackingPlayer(Player player) {
Preconditions.checkArgument(player != null, "Player cannot be null");
getTrialData().detectedPlayers.add(player.getUniqueId());
}
@Override
public void stopTrackingPlayer(Player player) {
Preconditions.checkArgument(player != null, "Player cannot be null");
getTrialData().detectedPlayers.remove(player.getUniqueId());
}
@Override
public Collection<Entity> getTrackedEntities() {
ImmutableSet.Builder<Entity> entities = ImmutableSet.builder();
for (UUID uuid : getTrialData().currentMobs) {
Entity entity = Bukkit.getEntity(uuid);
if (entity != null) {
entities.add(entity);
}
}
return entities.build();
}
@Override
public boolean isTrackingEntity(Entity entity) {
Preconditions.checkArgument(entity != null, "Entity cannot be null");
return getTrialData().currentMobs.contains(entity.getUniqueId());
}
@Override
public void startTrackingEntity(Entity entity) {
Preconditions.checkArgument(entity != null, "Entity cannot be null");
getTrialData().currentMobs.add(entity.getUniqueId());
}
@Override
public void stopTrackingEntity(Entity entity) {
Preconditions.checkArgument(entity != null, "Entity cannot be null");
getTrialData().currentMobs.remove(entity.getUniqueId());
}
@Override
public boolean isOminous() {
return getHandle().getValue(TrialSpawnerBlock.OMINOUS);
}
@Override
public void setOminous(boolean ominous) {
getSnapshot().trialSpawner.isOminous = ominous;
if (ominous) {
setData(getHandle().setValue(TrialSpawnerBlock.OMINOUS, true));
// TODO: Consider calling TrialSpawnerData#resetAfterBecomingOminous in update(...), but note that method also removes entities
return;
}
setData(getHandle().setValue(TrialSpawnerBlock.OMINOUS, false));
}
@Override
public TrialSpawnerConfiguration getNormalConfiguration() {
return normalConfig;
}
@Override
public TrialSpawnerConfiguration getOminousConfiguration() {
return ominousConfig;
}
@Override
protected void applyTo(TrialSpawnerBlockEntity tileEntity) {
super.applyTo(tileEntity);
tileEntity.trialSpawner.normalConfig = normalConfig.toMinecraft();
tileEntity.trialSpawner.ominousConfig = ominousConfig.toMinecraft();
}
private TrialSpawnerData getTrialData() {
return getSnapshot().getTrialSpawner().getData();
}
@Override
public CraftTrialSpawner copy() {
return new CraftTrialSpawner(this, null);
}
@Override
public CraftTrialSpawner copy(Location location) {
return new CraftTrialSpawner(this, location);
}
}