Files
Plex-FAWE/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java
Matt 96dcb95b7c Javadoc and Formatting fixes. (#619)
Javadoc and Formatting fixes.

Also, extremely minor code changes which have been tested.
This commit is only part one of two commits that aim to fix problems with formatting in our project. In part two I will modify the Google Java Style Guide (since it closely matches our code style) for our project so there is guidance on how to format and document. 

* Updated PlotSquared URL
* Removed plugin acronyms
* Fixed a typo
* Fixed grammar
* Use modern block id's
* Update YouTube video URL
2020-10-05 13:41:41 -04:00

1506 lines
42 KiB
Java

package com.boydti.fawe.bukkit.wrapper;
import com.boydti.fawe.FaweAPI;
import com.boydti.fawe.object.RunnableVal;
import com.boydti.fawe.util.StringMan;
import com.boydti.fawe.util.TaskManager;
import com.destroystokyo.paper.HeightmapType;
import com.google.common.annotations.Beta;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.extent.PassthroughExtent;
import com.sk89q.worldedit.function.operation.Operation;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockState;
import io.papermc.paper.world.MoonPhase;
import org.bukkit.BlockChangeDelegate;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.ChunkSnapshot;
import org.bukkit.Difficulty;
import org.bukkit.Effect;
import org.bukkit.FluidCollisionMode;
import org.bukkit.GameRule;
import org.bukkit.HeightMap;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.Raid;
import org.bukkit.Sound;
import org.bukkit.SoundCategory;
import org.bukkit.StructureType;
import org.bukkit.TreeType;
import org.bukkit.World;
import org.bukkit.WorldBorder;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.bukkit.block.Biome;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.boss.DragonBattle;
import org.bukkit.entity.AbstractArrow;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Item;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.BoundingBox;
import org.bukkit.util.Consumer;
import org.bukkit.util.RayTraceResult;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.function.Predicate;
/**
* Modify the world from an async thread<br>
* - Use world.commit() to execute all the changes<br>
* - Any Chunk/Block/BlockState objects returned should also be safe to use from the same async thread<br>
* - Only block read,write and biome write are fast, other methods will perform slower async<br>
* -
*
* @see #wrap(World)
* @see #create(WorldCreator)
*/
@SuppressWarnings("deprecation")
public class AsyncWorld extends PassthroughExtent implements World {
private World parent;
private BukkitImplAdapter adapter;
@Override
public <T> void spawnParticle(@NotNull Particle particle, double v, double v1, double v2, int i,
double v3, double v4, double v5, double v6, T t) {
parent.spawnParticle(particle, v, v1, v2, i, v3, v4, v5, v6, t);
}
/**
* An internal constructor for using a world asynchronously in FAWE. Do not use!
*/
@Deprecated
public AsyncWorld(World parent, boolean autoQueue) {
this(parent, FaweAPI.createQueue(new BukkitWorld(parent), autoQueue));
}
public AsyncWorld(String world, boolean autoQueue) {
this(Bukkit.getWorld(world), autoQueue);
}
/**
* An internal constructor for using a world asynchronously in FAWE. Do not use!
*/
@Deprecated
public AsyncWorld(World parent, Extent extent) {
super(extent);
this.parent = parent;
this.adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
}
/**
* Wrap a world for async usage.
*/
public static AsyncWorld wrap(World world) {
if (world instanceof AsyncWorld) {
return (AsyncWorld) world;
}
return new AsyncWorld(world, false);
}
@Override
public String toString() {
return getName();
}
public World getBukkitWorld() {
return parent;
}
/**
* Create a world async. This is not tested and may be removed in the future due to
* synchronization problems.
*/
@Beta
public static synchronized AsyncWorld create(final WorldCreator creator) {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
@Nullable World world = adapter.createWorld(creator);
return wrap(world);
}
@Override
public Operation commit() {
flush();
return null;
}
public void flush() {
getExtent().commit();
}
@Override
@NotNull
public WorldBorder getWorldBorder() {
return TaskManager.IMP.sync(() -> parent.getWorldBorder());
}
@Override
public void spawnParticle(@NotNull Particle particle, @NotNull Location location, int i) {
parent.spawnParticle(particle, location, i);
}
@Override
public void spawnParticle(@NotNull Particle particle, double v, double v1, double v2, int i) {
parent.spawnParticle(particle, v, v1, v2, i);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, @NotNull Location location, int i,
T t) {
parent.spawnParticle(particle, location, i, t);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, double x, double y, double z,
int count, T data) {
parent.spawnParticle(particle, x, y, z, count, data);
}
@Override
public void spawnParticle(@NotNull Particle particle, @NotNull Location location, int count,
double offsetX, double offsetY, double offsetZ) {
parent.spawnParticle(particle, location, count, offsetX, offsetY, offsetZ);
}
@Override
public void spawnParticle(@NotNull Particle particle, double v, double v1, double v2, int i,
double v3, double v4, double v5) {
parent.spawnParticle(particle, v, v1, v2, i, v3, v4, v5);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, @NotNull Location location, int i,
double v, double v1, double v2, T t) {
parent.spawnParticle(particle, location, i, v, v1, v2, t);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, double v, double v1, double v2, int i,
double v3, double v4, double v5, T t) {
parent.spawnParticle(particle, v, v1, v2, i, v3, v4, v5, t);
}
@Override
public void spawnParticle(@NotNull Particle particle, @NotNull Location location, int i,
double v, double v1, double v2, double v3) {
parent.spawnParticle(particle, location, i, v, v1, v2, v3);
}
@Override
public void spawnParticle(@NotNull Particle particle, double v, double v1, double v2, int i,
double v3, double v4, double v5, double v6) {
parent.spawnParticle(particle, v, v1, v2, i, v3, v4, v5, v6);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, @NotNull Location location, int i,
double v, double v1, double v2, double v3, T t) {
parent.spawnParticle(particle, location, i, v, v1, v2, v3, t);
}
@Override
public boolean setSpawnLocation(@NotNull Location location) {
return parent.setSpawnLocation(location);
}
@Override
@NotNull
public AsyncBlock getBlockAt(final int x, final int y, final int z) {
return new AsyncBlock(this, x, y, z);
}
@Override
@NotNull
public AsyncBlock getBlockAt(Location loc) {
return getBlockAt(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
}
@Override
public int getHighestBlockYAt(int x, int z) {
for (int y = getMaxHeight() - 1; y >= 0; y--) {
BlockState state = this.getBlock(x, y, z);
if (!state.getMaterial().isAir()) {
return y;
}
}
return 0;
}
@Override
public int getHighestBlockYAt(Location loc) {
return getHighestBlockYAt(loc.getBlockX(), loc.getBlockZ());
}
@Override
@NotNull
public AsyncBlock getHighestBlockAt(int x, int z) {
int y = getHighestBlockYAt(x, z);
return getBlockAt(x, y, z);
}
@Override
@NotNull
public AsyncBlock getHighestBlockAt(Location loc) {
return getHighestBlockAt(loc.getBlockX(), loc.getBlockZ());
}
@Override
public int getHighestBlockYAt(int i, int i1, @NotNull HeightMap heightMap) {
return parent.getHighestBlockYAt(i, i1, heightMap);
}
@Override
public int getHighestBlockYAt(@NotNull Location location, @NotNull HeightMap heightMap) {
return parent.getHighestBlockYAt(location, heightMap);
}
@Override
@NotNull
public Block getHighestBlockAt(int i, int i1, @NotNull HeightMap heightMap) {
return parent.getHighestBlockAt(i, i1, heightMap);
}
@Override
@NotNull
public Block getHighestBlockAt(@NotNull Location location,
@NotNull HeightMap heightMap) {
return parent.getHighestBlockAt(location, heightMap);
}
@Override
@NotNull
public AsyncChunk getChunkAt(int x, int z) {
return new AsyncChunk(this, x, z);
}
@Override
@NotNull
public AsyncChunk getChunkAt(Location location) {
return getChunkAt(location.getBlockX(), location.getBlockZ());
}
@Override
@NotNull
public AsyncChunk getChunkAt(Block block) {
return getChunkAt(block.getX(), block.getZ());
}
@Override
public boolean isChunkGenerated(int x, int z) {
return parent.isChunkGenerated(x, z);
}
@Override
public boolean isChunkLoaded(Chunk chunk) {
return chunk.isLoaded();
}
@NotNull
@Override
public Chunk[] getLoadedChunks() {
return parent.getLoadedChunks();
}
@Override
public void loadChunk(final Chunk chunk) {
if (!chunk.isLoaded()) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.loadChunk(chunk);
}
});
}
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof World)) {
return false;
}
World other = (World) obj;
return StringMan.isEqual(other.getName(), getName());
}
@Override
public int hashCode() {
return this.getUID().hashCode();
}
@Override
public boolean isChunkLoaded(int x, int z) {
return parent.isChunkLoaded(x, z);
}
@Override
@Deprecated
public boolean isChunkInUse(int x, int z) {
return parent.isChunkInUse(x, z);
}
@Override
public void loadChunk(final int x, final int z) {
if (!isChunkLoaded(x, z)) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.loadChunk(x, z);
}
});
}
}
@Override
public boolean loadChunk(final int x, final int z, final boolean generate) {
if (!isChunkLoaded(x, z)) {
return TaskManager.IMP.sync(() -> parent.loadChunk(x, z, generate));
}
return true;
}
@Override
public boolean unloadChunk(final Chunk chunk) {
if (chunk.isLoaded()) {
return TaskManager.IMP.sync(() -> parent.unloadChunk(chunk));
}
return true;
}
@Override
public boolean unloadChunk(int x, int z) {
return unloadChunk(x, z, true);
}
@Override
public boolean unloadChunk(int x, int z, boolean save) {
if (isChunkLoaded(x, z)) {
return TaskManager.IMP.sync(() -> parent.unloadChunk(x, z, save));
}
return true;
}
@Override
public boolean unloadChunkRequest(int x, int z) {
if (isChunkLoaded(x, z)) {
return TaskManager.IMP.sync(() -> parent.unloadChunkRequest(x, z));
}
return true;
}
@Override
@Deprecated
public boolean regenerateChunk(final int x, final int z) {
return TaskManager.IMP.sync(() -> parent.regenerateChunk(x, z));
}
@Override
@Deprecated
public boolean refreshChunk(int x, int z) {
return parent.refreshChunk(x, z);
}
@Override
@NotNull
public Item dropItem(
@NotNull
final Location location, @NotNull
final ItemStack item) {
return TaskManager.IMP.sync(() -> parent.dropItem(location, item));
}
@Override
@NotNull
public Item dropItemNaturally(
@NotNull
final Location location,
@NotNull
final ItemStack item) {
return TaskManager.IMP.sync(() -> parent.dropItemNaturally(location, item));
}
@Override
@NotNull
public Arrow spawnArrow(
@NotNull
final Location location,
@NotNull
final Vector direction, final float speed, final float spread) {
return TaskManager.IMP.sync(() -> parent.spawnArrow(location, direction, speed, spread));
}
@NotNull
@Override
public <T extends AbstractArrow> T spawnArrow(@NotNull Location location,
@NotNull Vector direction, float speed, float spread, @NotNull Class<T> clazz) {
return parent.spawnArrow(location, direction, speed, spread, clazz);
}
@Override
public boolean generateTree(
@NotNull
final Location location, @NotNull
final TreeType type) {
return TaskManager.IMP.sync(() -> parent.generateTree(location, type));
}
@Override
public boolean generateTree(
@NotNull
final Location loc, @NotNull
final TreeType type,
@NotNull
final BlockChangeDelegate delegate) {
return TaskManager.IMP.sync(() -> parent.generateTree(loc, type, delegate));
}
@Override
@NotNull
public Entity spawnEntity(@NotNull Location loc, EntityType type) {
return spawn(loc, type.getEntityClass());
}
@Override
@NotNull
public LightningStrike strikeLightning(
@NotNull
final Location loc) {
return TaskManager.IMP.sync(() -> parent.strikeLightning(loc));
}
@Override
@NotNull
public LightningStrike strikeLightningEffect(
@NotNull
final Location loc) {
return TaskManager.IMP.sync(() -> parent.strikeLightningEffect(loc));
}
@Override
@NotNull
public List getEntities() {
return TaskManager.IMP.sync(() -> parent.getEntities());
}
@Override
@NotNull
public List<LivingEntity> getLivingEntities() {
return TaskManager.IMP.sync(() -> parent.getLivingEntities());
}
@NotNull
@Override
@Deprecated
public <T extends Entity> Collection<T> getEntitiesByClass(
@NotNull
final Class<T>... classes) {
return TaskManager.IMP.sync(() -> parent.getEntitiesByClass(classes));
}
@NotNull
@Override
public <T extends Entity> Collection<T> getEntitiesByClass(
@NotNull
final Class<T> cls) {
return TaskManager.IMP.sync(() -> parent.getEntitiesByClass(cls));
}
@Override
@NotNull
public Collection<Entity> getEntitiesByClasses(
@NotNull
final Class<?>... classes) {
return TaskManager.IMP.sync(() -> parent.getEntitiesByClasses(classes));
}
@Override
@NotNull
public List<Player> getPlayers() {
return TaskManager.IMP.sync(() -> parent.getPlayers());
}
@Override
@NotNull
public Collection<Entity> getNearbyEntities(
@NotNull
final Location location,
final double x, final double y, final double z) {
return TaskManager.IMP.sync(() -> parent.getNearbyEntities(location, x, y, z));
}
@Override
@NotNull
public String getName() {
return parent.getName();
}
@Override
@NotNull
public UUID getUID() {
return parent.getUID();
}
@Override
@NotNull
public Location getSpawnLocation() {
return parent.getSpawnLocation();
}
@Override
public boolean setSpawnLocation(final int x, final int y, final int z) {
return TaskManager.IMP.sync(() -> parent.setSpawnLocation(x, y, z));
}
@Override
public boolean setSpawnLocation(final int x, final int y, final int z, final float angle) {
return TaskManager.IMP.sync(() -> parent.setSpawnLocation(x, y, z, angle));
}
@Override
@NotNull
public MoonPhase getMoonPhase() {
return parent.getMoonPhase();
}
@Override
public long getTime() {
return parent.getTime();
}
@Override
public void setTime(long time) {
parent.setTime(time);
}
@Override
public long getFullTime() {
return parent.getFullTime();
}
@Override
public void setFullTime(long time) {
parent.setFullTime(time);
}
@Override
public boolean hasStorm() {
return parent.hasStorm();
}
@Override
public void setStorm(boolean hasStorm) {
parent.setStorm(hasStorm);
}
@Override
public int getWeatherDuration() {
return parent.getWeatherDuration();
}
@Override
public void setWeatherDuration(int duration) {
parent.setWeatherDuration(duration);
}
@Override
public boolean isThundering() {
return parent.isThundering();
}
@Override
public void setThundering(boolean thundering) {
parent.setThundering(thundering);
}
@Override
public int getThunderDuration() {
return parent.getThunderDuration();
}
@Override
public void setThunderDuration(int duration) {
parent.setThunderDuration(duration);
}
@Override
public boolean createExplosion(double x, double y, double z, float power) {
return this.createExplosion(x, y, z, power, false, true);
}
@Override
public boolean createExplosion(double x, double y, double z, float power, boolean setFire) {
return this.createExplosion(x, y, z, power, setFire, true);
}
@Override
public boolean createExplosion(final double x, final double y, final double z,
final float power, final boolean setFire, final boolean breakBlocks) {
return TaskManager.IMP
.sync(() -> parent.createExplosion(x, y, z, power, setFire, breakBlocks));
}
@Override
public boolean createExplosion(double x, double y, double z, float power, boolean setFire,
boolean breakBlocks, @Nullable Entity source) {
return TaskManager.IMP
.sync(() -> parent.createExplosion(x, y, z, power, setFire, breakBlocks, source));
}
@Override
public boolean createExplosion(@NotNull Location loc, float power) {
return this.createExplosion(loc, power, false);
}
@Override
public boolean createExplosion(Location loc, float power, boolean setFire) {
return this.createExplosion(loc.getX(), loc.getY(), loc.getZ(), power, setFire);
}
@NotNull
@Override
public Environment getEnvironment() {
return parent.getEnvironment();
}
@Override
public long getSeed() {
return parent.getSeed();
}
@Override
public boolean getPVP() {
return parent.getPVP();
}
@Override
public void setPVP(boolean pvp) {
parent.setPVP(pvp);
}
@Override
public ChunkGenerator getGenerator() {
return parent.getGenerator();
}
@Override
public void save() {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.save();
}
});
}
@Override
@NotNull
public List<BlockPopulator> getPopulators() {
return parent.getPopulators();
}
@NotNull
@Override
public <T extends Entity> T spawn(@NotNull final Location location, @NotNull final Class<T> clazz) throws IllegalArgumentException {
return TaskManager.IMP.sync(() -> parent.spawn(location, clazz));
}
@NotNull
@Override
public <T extends Entity> T spawn(@NotNull Location location, @NotNull Class<T> clazz,
Consumer<T> function) throws IllegalArgumentException {
return TaskManager.IMP.sync(() -> parent.spawn(location, clazz, function));
}
@NotNull
@Override
public <T extends Entity> T spawn(@NotNull Location location, @NotNull Class<T> clazz,
@Nullable Consumer<T> function, @NotNull
CreatureSpawnEvent.SpawnReason reason)
throws IllegalArgumentException {
return TaskManager.IMP.sync(() -> parent.spawn(location, clazz, function, reason));
}
@Override
@NotNull
public FallingBlock spawnFallingBlock(@NotNull Location location,
@NotNull MaterialData data) throws IllegalArgumentException {
return TaskManager.IMP.sync(() -> parent.spawnFallingBlock(location, data));
}
@Override
@Deprecated
@NotNull
public FallingBlock spawnFallingBlock(@NotNull Location location,
@NotNull Material material, byte data) throws IllegalArgumentException {
return TaskManager.IMP.sync(() -> parent.spawnFallingBlock(location, material, data));
}
@Override
@NotNull
public FallingBlock spawnFallingBlock(@NotNull Location location,
@NotNull BlockData blockData) throws IllegalArgumentException {
return TaskManager.IMP.sync(() -> parent.spawnFallingBlock(location, blockData));
}
@Override
public void playEffect(@NotNull Location location, @NotNull Effect effect, int data) {
this.playEffect(location, effect, data, 64);
}
@Override
public void playEffect(
@NotNull
final Location location, @NotNull
final Effect effect,
final int data, final int radius) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.playEffect(location, effect, data, radius);
}
});
}
@Override
public <T> void playEffect(@NotNull Location loc, @NotNull Effect effect, T data) {
this.playEffect(loc, effect, data, 64);
}
@Override
public <T> void playEffect(
@NotNull
final Location location, @NotNull
final Effect effect,
final T data, final int radius) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.playEffect(location, effect, data, radius);
}
});
}
@Override
@NotNull
public ChunkSnapshot getEmptyChunkSnapshot(final int x, final int z,
final boolean includeBiome, final boolean includeBiomeTempRain) {
return TaskManager.IMP
.sync(() -> parent.getEmptyChunkSnapshot(x, z, includeBiome, includeBiomeTempRain));
}
@Override
public void setSpawnFlags(boolean allowMonsters, boolean allowAnimals) {
parent.setSpawnFlags(allowMonsters, allowAnimals);
}
@Override
public boolean getAllowAnimals() {
return parent.getAllowAnimals();
}
@Override
public boolean getAllowMonsters() {
return parent.getAllowMonsters();
}
@Override
@NotNull
public Biome getBiome(int x, int z) {
return adapter.adapt(getExtent().getBiomeType(x, 0, z));
}
@Override
@NotNull
public Biome getBiome(int x, int y, int z) {
return adapter.adapt(getExtent().getBiomeType(x, y, z));
}
@Override
public void setBiome(int x, int z, @NotNull Biome bio) {
BiomeType biome = adapter.adapt(bio);
getExtent().setBiome(x, 0, z, biome);
}
@Override
public void setBiome(int x, int y, int z, @NotNull Biome bio) {
BiomeType biome = adapter.adapt(bio);
getExtent().setBiome(x, y, z, biome);
}
@Override
@Deprecated
public double getTemperature(int x, int z) {
return parent.getTemperature(x, z);
}
@Override
public double getTemperature(int x, int y, int z) {
return parent.getTemperature(x, y, z);
}
@Override
@Deprecated
public double getHumidity(int x, int z) {
return parent.getHumidity(x, z);
}
@Override
public double getHumidity(int x, int y, int z) {
return parent.getHumidity(x, y, z);
}
@Override
public int getMaxHeight() {
return parent.getMaxHeight();
}
@Override
public int getSeaLevel() {
return parent.getSeaLevel();
}
@Override
public boolean getKeepSpawnInMemory() {
return parent.getKeepSpawnInMemory();
}
@Override
public void setKeepSpawnInMemory(final boolean keepLoaded) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.setKeepSpawnInMemory(keepLoaded);
}
});
}
@Override
public boolean isAutoSave() {
return parent.isAutoSave();
}
@Override
public void setAutoSave(boolean value) {
parent.setAutoSave(value);
}
@Override
public void setDifficulty(@NotNull Difficulty difficulty) {
parent.setDifficulty(difficulty);
}
@Override
@NotNull
public Difficulty getDifficulty() {
return parent.getDifficulty();
}
@Override
@NotNull
public File getWorldFolder() {
return parent.getWorldFolder();
}
@Override
@Deprecated
public WorldType getWorldType() {
return parent.getWorldType();
}
@Override
public boolean canGenerateStructures() {
return parent.canGenerateStructures();
}
@Override
public void setHardcore(boolean hardcore) {
parent.setHardcore(hardcore);
}
@Override
public boolean isHardcore() {
return parent.isHardcore();
}
@Override
public long getTicksPerAnimalSpawns() {
return parent.getTicksPerAnimalSpawns();
}
@Override
public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns) {
parent.setTicksPerAnimalSpawns(ticksPerAnimalSpawns);
}
@Override
public long getTicksPerMonsterSpawns() {
return parent.getTicksPerMonsterSpawns();
}
@Override
public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns) {
parent.setTicksPerMonsterSpawns(ticksPerMonsterSpawns);
}
@Override
public int getMonsterSpawnLimit() {
return parent.getMonsterSpawnLimit();
}
@Override
public void setMonsterSpawnLimit(int limit) {
parent.setMonsterSpawnLimit(limit);
}
@Override
public int getAnimalSpawnLimit() {
return parent.getAnimalSpawnLimit();
}
@Override
public void setAnimalSpawnLimit(int limit) {
parent.setAnimalSpawnLimit(limit);
}
@Override
public int getWaterAnimalSpawnLimit() {
return parent.getWaterAnimalSpawnLimit();
}
@Override
public void setWaterAnimalSpawnLimit(int limit) {
parent.setWaterAnimalSpawnLimit(limit);
}
@Override
public int getWaterAmbientSpawnLimit() {
return parent.getWaterAmbientSpawnLimit();
}
@Override
public void setWaterAmbientSpawnLimit(int limit) {
parent.setWaterAmbientSpawnLimit(limit);
}
@Override
public int getAmbientSpawnLimit() {
return parent.getAmbientSpawnLimit();
}
@Override
public void setAmbientSpawnLimit(int limit) {
parent.setAmbientSpawnLimit(limit);
}
@Override
public void playSound(
@NotNull
final Location location, @NotNull
final Sound sound,
final float volume, final float pitch) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.playSound(location, sound, volume, pitch);
}
});
}
@Override
public void playSound(
@NotNull
final Location location, @NotNull
final String sound,
final float volume, final float pitch) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.playSound(location, sound, volume, pitch);
}
});
}
@Override
public void playSound(@NotNull Location location, @NotNull Sound sound,
@NotNull SoundCategory category, float volume, float pitch) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.playSound(location, sound, category, volume, pitch);
}
});
}
@Override
public void playSound(@NotNull Location location, @NotNull String sound,
@NotNull SoundCategory category, float volume, float pitch) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.playSound(location, sound, category, volume, pitch);
}
});
}
@NotNull
@Override
public String[] getGameRules() {
return parent.getGameRules();
}
@Override
@Deprecated
public String getGameRuleValue(String rule) {
return parent.getGameRuleValue(rule);
}
@Override
@Deprecated
public boolean setGameRuleValue(@NotNull String rule, @NotNull String value) {
return parent.setGameRuleValue(rule, value);
}
@Override
public boolean isGameRule(@NotNull String rule) {
return parent.isGameRule(rule);
}
@Override
@Deprecated
public <T> T getGameRuleValue(@NotNull GameRule<T> gameRule) {
return parent.getGameRuleValue(gameRule);
}
@Override
public <T> T getGameRuleDefault(@NotNull GameRule<T> gameRule) {
return parent.getGameRuleDefault(gameRule);
}
@Override
public <T> boolean setGameRule(@NotNull GameRule<T> gameRule, @NotNull T t) {
return parent.setGameRule(gameRule, t);
}
@Override
@NotNull
public Spigot spigot() {
return parent.spigot();
}
@Override
@Nullable
public Raid locateNearestRaid(@NotNull Location location, int i) {
return parent.locateNearestRaid(location, i);
}
@Override
@NotNull
public List<Raid> getRaids() {
return parent.getRaids();
}
@Override
public void setMetadata(
@NotNull
final String key, @NotNull
final MetadataValue meta) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.setMetadata(key, meta);
}
});
}
@Override
@NotNull
public List<MetadataValue> getMetadata(@NotNull String key) {
return parent.getMetadata(key);
}
@Override
public boolean hasMetadata(@NotNull String key) {
return parent.hasMetadata(key);
}
@Override
public void removeMetadata(
@NotNull
final String key, @NotNull
final Plugin plugin) {
TaskManager.IMP.sync(new RunnableVal<Object>() {
@Override
public void run(Object value) {
parent.removeMetadata(key, plugin);
}
});
}
@Override
public void sendPluginMessage(@NotNull Plugin source, @NotNull String channel, @NotNull
byte[] message) {
parent.sendPluginMessage(source, channel, message);
}
@Override
@NotNull
public Set<String> getListeningPluginChannels() {
return parent.getListeningPluginChannels();
}
public BukkitImplAdapter getAdapter() {
return adapter;
}
@Override
@NotNull
public Collection<Entity> getNearbyEntities(@NotNull BoundingBox arg0) {
return parent.getNearbyEntities(arg0);
}
@Override
@NotNull
public Collection<Entity> getNearbyEntities(@NotNull BoundingBox arg0,
Predicate<Entity> arg1) {
return parent.getNearbyEntities(arg0, arg1);
}
@Override
@NotNull
public Collection<Entity> getNearbyEntities(@NotNull Location arg0, double arg1,
double arg2, double arg3, Predicate<Entity> arg4) {
return parent.getNearbyEntities(arg0, arg1, arg2, arg3, arg4);
}
@Override
public boolean isChunkForceLoaded(int arg0, int arg1) {
return parent.isChunkForceLoaded(arg0, arg1);
}
@Override
public Location locateNearestStructure(@NotNull Location arg0, @NotNull StructureType arg1,
int arg2, boolean arg3) {
return parent.locateNearestStructure(arg0, arg1, arg2, arg3);
}
@Override
public int getViewDistance() {
return parent.getViewDistance();
}
@Override
public void setViewDistance(int viewDistance) {
}
@Override
public int getNoTickViewDistance() {
return 0;
}
@Override
public void setNoTickViewDistance(int viewDistance) {
}
@Override
public RayTraceResult rayTrace(@NotNull Location arg0, @NotNull Vector arg1, double arg2,
@NotNull FluidCollisionMode arg3, boolean arg4, double arg5, Predicate<Entity> arg6) {
return parent.rayTrace(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
}
@Override
public RayTraceResult rayTraceBlocks(@NotNull Location arg0, @NotNull Vector arg1,
double arg2) {
return parent.rayTraceBlocks(arg0, arg1, arg2);
}
@Override
public RayTraceResult rayTraceBlocks(@NotNull Location start, @NotNull Vector direction,
double maxDistance, @NotNull FluidCollisionMode fluidCollisionMode) {
return parent.rayTraceBlocks(start, direction, maxDistance, fluidCollisionMode);
}
@Override
public RayTraceResult rayTraceBlocks(@NotNull Location start, @NotNull Vector direction,
double arg2, @NotNull FluidCollisionMode fluidCollisionMode, boolean ignorePassableBlocks) {
return parent
.rayTraceBlocks(start, direction, arg2, fluidCollisionMode, ignorePassableBlocks);
}
@Override
public RayTraceResult rayTraceEntities(@NotNull Location start, @NotNull Vector direction,
double maxDistance) {
return parent.rayTraceEntities(start, direction, maxDistance);
}
@Override
public RayTraceResult rayTraceEntities(@NotNull Location arg0, @NotNull Vector arg1,
double arg2, double arg3) {
return parent.rayTraceEntities(arg0, arg1, arg2, arg3);
}
@Override
public RayTraceResult rayTraceEntities(@NotNull Location arg0, @NotNull Vector arg1,
double arg2, Predicate<Entity> arg3) {
return parent.rayTraceEntities(arg0, arg1, arg2, arg3);
}
@Override
public RayTraceResult rayTraceEntities(@NotNull Location arg0, @NotNull Vector arg1,
double arg2, double arg3, Predicate<Entity> arg4) {
return parent.rayTraceEntities(arg0, arg1, arg2, arg3, arg4);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, double x, double y, double z,
int count, double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data,
boolean force) {
}
@Override
public void setChunkForceLoaded(int x, int z, boolean forced) {
parent.setChunkForceLoaded(x, z, forced);
}
@Override
@NotNull
public Collection<Chunk> getForceLoadedChunks() {
return parent.getForceLoadedChunks();
}
@Override
public boolean addPluginChunkTicket(int x, int z, @NotNull Plugin plugin) {
return getBukkitWorld().addPluginChunkTicket(x, z, plugin);
}
@Override
public boolean removePluginChunkTicket(int x, int z, @NotNull Plugin plugin) {
return getBukkitWorld().removePluginChunkTicket(x, z, plugin);
}
@Override
public void removePluginChunkTickets(@NotNull Plugin plugin) {
getBukkitWorld().removePluginChunkTickets(plugin);
}
@Override
@NotNull
public Collection<Plugin> getPluginChunkTickets(int x, int z) {
return getBukkitWorld().getPluginChunkTickets(x, z);
}
@Override
@NotNull
public Map<Plugin, Collection<Chunk>> getPluginChunkTickets() {
return getBukkitWorld().getPluginChunkTickets();
}
@Override
@Deprecated
public int getHighestBlockYAt(int x, int z,
@NotNull
com.destroystokyo.paper.HeightmapType heightmap)
throws UnsupportedOperationException {
return TaskManager.IMP.sync(() -> parent.getHighestBlockYAt(x, z, heightmap));
}
@Override
public int getEntityCount() {
return TaskManager.IMP.sync(() -> parent.getEntityCount());
}
@Override
public int getTileEntityCount() {
return TaskManager.IMP.sync(() -> parent.getTileEntityCount());
}
@Override
public int getTickableTileEntityCount() {
return TaskManager.IMP.sync(() -> parent.getTickableTileEntityCount());
}
@Override
public int getChunkCount() {
return TaskManager.IMP.sync(() -> parent.getChunkCount());
}
@Override
public int getPlayerCount() {
return TaskManager.IMP.sync(() -> parent.getPlayerCount());
}
@Override
@NotNull
public CompletableFuture<Chunk> getChunkAtAsync(int x, int z, boolean gen) {
return parent.getChunkAtAsync(x, z, gen);
}
@Override
@NotNull
public CompletableFuture<Chunk> getChunkAtAsync(int x, int z, boolean gen,
boolean urgent) {
return parent.getChunkAtAsync(x, z, gen, urgent);
}
@Override
public boolean isDayTime() {
return parent.isDayTime();
}
@Override
@Deprecated
public void getChunkAtAsync(int x, int z, @NotNull ChunkLoadCallback cb) {
parent.getChunkAtAsync(x, z, cb);
}
@Override
@Deprecated
public void getChunkAtAsync(@NotNull Location location, @NotNull ChunkLoadCallback cb) {
parent.getChunkAtAsync(location, cb);
}
@Override
@Deprecated
public void getChunkAtAsync(@NotNull Block block, @NotNull ChunkLoadCallback cb) {
parent.getChunkAtAsync(block, cb);
}
@Override
public Entity getEntity(@NotNull UUID uuid) {
return TaskManager.IMP.sync(() -> parent.getEntity(uuid));
}
@Nullable
@Override
public DragonBattle getEnderDragonBattle() {
return TaskManager.IMP.sync(() -> parent.getEnderDragonBattle());
}
@Override
public boolean createExplosion(Entity source, @NotNull Location loc, float power,
boolean setFire, boolean breakBlocks) {
return TaskManager.IMP
.sync(() -> parent.createExplosion(source, loc, power, setFire, breakBlocks));
}
@Override
public boolean createExplosion(@NotNull Location loc, float power, boolean setFire,
boolean breakBlocks) {
return false;
}
@Override
public boolean createExplosion(@NotNull Location loc, float power, boolean setFire,
boolean breakBlocks, @Nullable Entity source) {
return false;
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, List<Player> receivers,
@NotNull Player source, double x, double y, double z, int count, double offsetX,
double offsetY, double offsetZ, double extra, T data) {
parent.spawnParticle(particle, receivers, source, x, y, z, count, offsetX, offsetY, offsetZ,
extra, data);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, List<Player> list, Player player,
double v, double v1, double v2, int i, double v3, double v4, double v5, double v6, T t,
boolean b) {
parent.spawnParticle(particle, list, player, v, v1, v2, i, v3, v4, v5, v6, t, b);
}
@Override
public <T> void spawnParticle(@NotNull Particle particle, @NotNull Location location, int count,
double offsetX, double offsetY, double offsetZ, double extra, @Nullable T data,
boolean force) {
parent.spawnParticle(particle, location, count, offsetX, offsetY, offsetZ, extra, data,
force);
}
@Override
@Deprecated
public int getHighestBlockYAt(@NotNull Location location, @NotNull HeightmapType heightmap)
throws UnsupportedOperationException {
return parent.getHighestBlockYAt(location, heightmap);
}
@Override
@NotNull
@Deprecated
public Block getHighestBlockAt(int x, int z, @NotNull HeightmapType heightmap)
throws UnsupportedOperationException {
return parent.getHighestBlockAt(x, z, heightmap);
}
@Override
@NotNull
@Deprecated
public Block getHighestBlockAt(@NotNull Location location,
@NotNull HeightmapType heightmap) throws UnsupportedOperationException {
return parent.getHighestBlockAt(location, heightmap);
}
@Override
public long getTicksPerWaterSpawns() {
return parent.getTicksPerWaterSpawns();
}
@Override
public void setTicksPerWaterSpawns(int ticksPerWaterSpawns) {
parent.setTicksPerWaterSpawns(ticksPerWaterSpawns);
}
@Override
public long getTicksPerWaterAmbientSpawns() {
return parent.getTicksPerWaterAmbientSpawns();
}
@Override
public void setTicksPerWaterAmbientSpawns(int ticksPerAmbientSpawns) {
parent.setTicksPerWaterAmbientSpawns(ticksPerAmbientSpawns);
}
@Override
public long getTicksPerAmbientSpawns() {
return parent.getTicksPerAmbientSpawns();
}
@Override
public void setTicksPerAmbientSpawns(int ticksPerAmbientSpawns) {
parent.setTicksPerAmbientSpawns(ticksPerAmbientSpawns);
}
}