Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - RVSkeLe/PaperLib: Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading. · GitHub
Skip to content

Repository files navigation

PaperLib

PaperLib is a plugin library for interfacing with Paper specific APIs (such as async chunk loading), with graceful fallbacks maintaining compatibility with both the Bukkit and Spigot API's.

Warning

PaperLib was meant as a temporary means of using more powerful Paper API while allowing full compatibility with Spigot as was necessary for a lot of people. Now, you're better off directly targeting Paper and uploading your plugin to one of the many other resource sites, such as Hangar, modrinth, BuiltByBit, or Polymart.

API

All API calls can be found as static util methods in the PaperLib class.

getChunkAtAsync

publicclassPaperLib {
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Locationloc, booleangen);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz);
publicstaticCompletableFuture<Chunk> getChunkAtAsync(Worldworld, intx, intz, booleangen); }

On Paper, loads (or generates on 1.13.1+) the chunk asynchronously if it is not loaded yet, then completes the returned future. Chunk will load synchronous on Spigot.

teleportAsync

publicclassPaperLib {
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation);
publicstaticCompletableFuture<Boolean> teleportAsync(Entityentity, Locationlocation, TeleportCausecause);
}

Uses the Async Chunk Load API, and if possible, loads/generates the chunk asynchronously before teleporting. Will load synchronous on Spigot.

On 1.15+, this has an added improvement of also loading neighbor chunks to avoid collision checks loading chunks too.

isChunkGenerated

publicclassPaperLib {
publicstaticbooleanisChunkGenerated(Locationloc);
publicstaticbooleanisChunkGenerated(Worldworld, intx, intz);
}

Returns whether or not the chunk is generated. Only Supported in Paper 1.12+ and Spigot 1.13.1+

getBlockState

publicclassPaperLib {
publicstaticBlockStateSnapshotResultgetBlockState(Blockblock, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.12 will always be false for the snapshot. In versions 1.12+ on Spigot, the snapshot will always be true. In Paper 1.12+, the snapshot will be whether or not you requested one in the API call.

getTileEntities

publicclassPaperLib {
publicstaticTileEntitiesSnapshotResultgetTileEntities(Chunkchunk, booleanuseSnapshot);
}

Allows you to optionally avoid taking a snapshot of a TileEntity in a BlockState. Versions prior to 1.13 will always be false for the snapshot. In versions 1.13+ on Spigot, the snapshot will always be true. In Paper 1.13+, the snapshot will be whether or not you requested one in the API call.

isSolid

publicclassPaperLib {
publicstaticbooleanisSolid(Blockblock);
}

Checks if a block is considered solid. On Paper 1.16.4+ this uses Block#isSolid, otherwise it falls back to Material#isSolid.

suggestPaper

publicclassPaperLib {
publicstaticvoidsuggestPaper(Pluginplugin);
}

Helps inform users who run your plugin on Spigot that your plugin will behave better on Paper! Calling this method will print out an informational message in the logs that they should switch to Paper, and will help users discover our software. We would appreciate it if you call this method, but it is optional.

Example Plugin

publicclassMyPluginextendsJavaPlugin {
publicvoidonEnable() {
PaperLib.suggestPaper(this);
}
publicvoiddoSomething(Entityentity, Locationlocation) {
PaperLib.teleportAsync(entity, location).thenAccept(result -> {
if (result) {
player.sendMessage("Teleported!");
} else {
player.sendMessage("Something went wrong!");
}
});
}
}

Build Script Setup

Add the Paper repository and the PaperLib dependency, then shade and relocate it to your own package. Relocation helps avoid version conflicts with other plugins using PaperLib. PaperLib is published on Maven Central, so no extra repository is needed for it.

Gradle

Repo:

repositories {
mavenCentral()
}

Dependency:

dependencies {
implementation "io.github.rvskele:PaperLib:2.1.0"
}

Shadow Jar and Relocate (Groovy Syntax):

plugins {
id "com.github.johnrengelman.shadow" version "9.3.1"// Make sure to always use the latest version (https://plugins.gradle.org/plugin/com.github.johnrengelman.shadow)
}
shadowJar {
relocate "com.github.rvsksle.paperlib", "[YOUR PLUGIN PACKAGE].paperlib"
}

Maven

Repo: Maven Central is used by default, no extra repository is needed. Dependency:

<dependencies>
<dependency>
<groupId>io.github.rvskele</groupId>
<artifactId>PaperLib</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>

Shade & Relocate:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.6.1</version> <!-- Make sure to always use the latest version (https://maven.apache.org/plugins/maven-shade-plugin/) -->
<configuration>
<dependencyReducedPomLocation>${project.build.directory}/dependency-reduced-pom.xml</dependencyReducedPomLocation>
<relocations>
<relocation>
<pattern>io.github.rvskele.paperlib</pattern>
<shadedPattern>[YOUR PLUGIN PACKAGE].paperlib</shadedPattern> <!-- Replace this -->
</relocation>
</relocations>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

Compiling

PaperLib is compiled using Gradle:

./gradlew build

License

PaperLib is licensed under the MIT license

About

Plugin Library for interfacing with Paper Specific API's with graceful fallback that maintains Spigot Compatibility, such as Async Chunk Loading.

Resources

Stars

7 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages