
PaperTS
PaperTS is a Paper Minecraft plugin that enables you to write Minecraft server plugins in TypeScript.
Список изменений
: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
}
