
PaperTS
PaperTS is a Paper Minecraft plugin that enables you to write Minecraft server plugins in TypeScript.
PaperTS 1.6.0
release16 января 2026 г.:rocket: PaperTS 1.6.0 Released
In this new release we included the Java Bridge API, a new interface that bridges the gap between TypeScript and the underlying Java Virtual Machine. It was a contribution from @sirio_03 .
:tools: Setup & Type Definitions To use the Java Bridge with full TypeScript support, create a javaBridge.ts file in your project and add the following type declarations:
declare const Java: {
/**
* Get an enum value by class name and value name.
*/
enumValue<T = unknown>(className: string, valueName: string): T;
/**
* Get all values of an enum.
*/
enumValues<T = unknown>(className: string): T[];
/**
* Create a new instance of a Java class.
*/
newInstance<T = unknown>(className: string, ...args: unknown[]): T;
/**
* Call a static method on a Java class.
*/
callStatic<T = unknown>(
className: string,
methodName: string,
...args: unknown[]
): T;
/**
* Get a static field value from a Java class.
*/
getStatic<T = unknown>(className: string, fieldName: string): T;
/**
* Check if a Java class exists.
*/
classExists(className: string): boolean;
};
:bulb: Usage Examples
1. Managing Enums Access any Bukkit enum without needing a wrapper.
const gameModes = Java.enumValues("org.bukkit.GameMode");
player.sendMessage(`Available modes: ${gameModes.join(", ")}`);
2. Instantiating Java Classes Perfect for creating objects like Location.
// Create a new Location
const world = Java.callStatic("org.bukkit.Bukkit", "getWorld", "world");
const location = Java.newInstance("org.bukkit.Location", world, 100, 64, 100);
player.teleport(location);
3. Static Methods & Fields Interact with the Server constants directly.
// Call a static method
Java.callStatic("org.bukkit.Bukkit", "broadcastMessage", "Hello from PaperTS!");
const onlinePlayer: any[] = Java.callStatic(
"org.bukkit.Bukkit",
"getOnlinePlayers"
);
onlinePlayer.forEach((player) => player.sendMessage("Hi everyone"));
// Get a static constant
const legacyPrefix = Java.getStatic("org.bukkit.Material", "LEGACY_PREFIX");;
player.sendMessage(legacyPrefix);
4. Conditional Integration Check if a plugin (like Vault or WorldEdit) is installed before attempting to use it.
// Check if a class exists before using it
if (Java.classExists("com.example.CustomPlugin")) {
const customValue = Java.callStatic("com.example.CustomPlugin", "getValue");
player.sendMessage(`Custom plugin value: ${customValue}`);
} else {
player.sendMessage("Custom plugin not found");
}
// Useful for optional integrations
const hasVault = Java.classExists("net.milkbowl.vault.economy.Economy");
if (hasVault) {
// Initialize Vault integration
}
PaperTS 1.5.0
release5 января 2026 г.- Added
runTypefor setting the method of running the script inpackage.json - Added a way to cleanup resources before script exiting
PaperTS 1.3.0
release7 ноября 2025 г.- Update Javet to 5.0.1 (Node.JS is now at
v24.10.0) - Added a method in the PaperTS globals to create a callable from a JS function
- Added a method to get the the JavaPlugin
PaperTS 1.2.0
release25 июля 2025 г.- Decrease JAR size, it nows downloads Node.JS Engine at runtime
- Include method for setting and getting data from persistent data container
PaperTS 1.1.3
release25 июля 2025 г.- Improve load and unload of modules
- Improve information about registering events and commands