All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
io.papermc.lib.environments.Environment Maven / Gradle / Ivy
package io.papermc.lib.environments;
import io.papermc.lib.features.asyncchunks.AsyncChunks;
import io.papermc.lib.features.asyncchunks.AsyncChunksSync;
import io.papermc.lib.features.asyncteleport.AsyncTeleport;
import io.papermc.lib.features.asyncteleport.AsyncTeleportSync;
import io.papermc.lib.features.bedspawnlocation.BedSpawnLocation;
import io.papermc.lib.features.bedspawnlocation.BedSpawnLocationSync;
import io.papermc.lib.features.blockstatesnapshot.BlockStateSnapshot;
import io.papermc.lib.features.blockstatesnapshot.BlockStateSnapshotBeforeSnapshots;
import io.papermc.lib.features.blockstatesnapshot.BlockStateSnapshotNoOption;
import io.papermc.lib.features.blockstatesnapshot.BlockStateSnapshotResult;
import io.papermc.lib.features.chunkisgenerated.ChunkIsGenerated;
import io.papermc.lib.features.chunkisgenerated.ChunkIsGeneratedApiExists;
import io.papermc.lib.features.chunkisgenerated.ChunkIsGeneratedUnknown;
import java.util.Locale;
import io.papermc.lib.features.inventoryholdersnapshot.InventoryHolderSnapshot;
import io.papermc.lib.features.inventoryholdersnapshot.InventoryHolderSnapshotBeforeSnapshots;
import io.papermc.lib.features.inventoryholdersnapshot.InventoryHolderSnapshotNoOption;
import io.papermc.lib.features.inventoryholdersnapshot.InventoryHolderSnapshotResult;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
import org.bukkit.inventory.Inventory;
import java.util.concurrent.CompletableFuture;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@SuppressWarnings("WeakerAccess")
public abstract class Environment {
private final int minecraftVersion;
private final int minecraftPatchVersion;
private final int minecraftPreReleaseVersion;
private final int minecraftReleaseCandidateVersion;
protected AsyncChunks asyncChunksHandler = new AsyncChunksSync();
protected AsyncTeleport asyncTeleportHandler = new AsyncTeleportSync();
protected ChunkIsGenerated isGeneratedHandler = new ChunkIsGeneratedUnknown();
protected BlockStateSnapshot blockStateSnapshotHandler;
protected InventoryHolderSnapshot inventoryHolderSnapshotHandler;
protected BedSpawnLocation bedSpawnLocationHandler = new BedSpawnLocationSync();
public Environment() {
this(Bukkit.getVersion());
}
Environment(final String bukkitVersion) {
Pattern versionPattern = Pattern.compile("(?i)\\(MC: (\\d)\\.(\\d+)\\.?(\\d+?)?(?: (Pre-Release|Release Candidate) )?(\\d)?\\)");
Matcher matcher = versionPattern.matcher(bukkitVersion);
int version = 0;
int patchVersion = 0;
int preReleaseVersion = -1;
int releaseCandidateVersion = -1;
if (matcher.find()) {
MatchResult matchResult = matcher.toMatchResult();
try {
version = Integer.parseInt(matchResult.group(2), 10);
} catch (Exception ignored) {
}
if (matchResult.groupCount() >= 3) {
try {
patchVersion = Integer.parseInt(matchResult.group(3), 10);
} catch (Exception ignored) {
}
}
if (matchResult.groupCount() >= 5) {
try {
final int ver = Integer.parseInt(matcher.group(5));
if (matcher.group(4).toLowerCase(Locale.ENGLISH).contains("pre")) {
preReleaseVersion = ver;
} else {
releaseCandidateVersion = ver;
}
} catch (Exception ignored) {
}
}
}
this.minecraftVersion = version;
this.minecraftPatchVersion = patchVersion;
this.minecraftPreReleaseVersion = preReleaseVersion;
this.minecraftReleaseCandidateVersion = releaseCandidateVersion;
// Common to all environments
if (isVersion(13, 1)) {
isGeneratedHandler = new ChunkIsGeneratedApiExists();
} else {
// TODO: Reflection based?
}
if (!isVersion(12)) {
blockStateSnapshotHandler = new BlockStateSnapshotBeforeSnapshots();
inventoryHolderSnapshotHandler = new InventoryHolderSnapshotBeforeSnapshots();
} else {
blockStateSnapshotHandler = new BlockStateSnapshotNoOption();
inventoryHolderSnapshotHandler = new InventoryHolderSnapshotNoOption();
}
}
public abstract String getName();
public CompletableFuture getChunkAtAsync(World world, int x, int z, boolean gen) {
return asyncChunksHandler.getChunkAtAsync(world, x, z, gen, false);
}
public CompletableFuture getChunkAtAsync(World world, int x, int z, boolean gen, boolean isUrgent) {
return asyncChunksHandler.getChunkAtAsync(world, x, z, gen, isUrgent);
}
public CompletableFuture getChunkAtAsyncUrgently(World world, int x, int z, boolean gen) {
return asyncChunksHandler.getChunkAtAsync(world, x, z, gen, true);
}
public CompletableFuture teleport(Entity entity, Location location, TeleportCause cause) {
return asyncTeleportHandler.teleportAsync(entity, location, cause);
}
public boolean isChunkGenerated(World world, int x, int z) {
return isGeneratedHandler.isChunkGenerated(world, x, z);
}
public BlockStateSnapshotResult getBlockState(Block block, boolean useSnapshot) {
return blockStateSnapshotHandler.getBlockState(block, useSnapshot);
}
public InventoryHolderSnapshotResult getHolder(Inventory inventory, boolean useSnapshot) {
return inventoryHolderSnapshotHandler.getHolder(inventory, useSnapshot);
}
public CompletableFuture getBedSpawnLocationAsync(Player player, boolean isUrgent) {
return bedSpawnLocationHandler.getBedSpawnLocationAsync(player, isUrgent);
}
public boolean isVersion(int minor) {
return isVersion(minor, 0);
}
public boolean isVersion(int minor, int patch) {
return minecraftVersion > minor || (minecraftVersion >= minor && minecraftPatchVersion >= patch);
}
public int getMinecraftVersion() {
return minecraftVersion;
}
public int getMinecraftPatchVersion() {
return minecraftPatchVersion;
}
public int getMinecraftPreReleaseVersion() {
return minecraftPreReleaseVersion;
}
public int getMinecraftReleaseCandidateVersion() {
return minecraftReleaseCandidateVersion;
}
public boolean isSpigot() {
return false;
}
public boolean isPaper() {
return false;
}
}