Depending on NBT-API

This commit is contained in:
2026-06-07 10:49:42 +08:00
parent 2c38923b65
commit 5b511242cc
4 changed files with 96 additions and 6 deletions
+12
View File
@@ -69,6 +69,11 @@
<id>placeholderapi</id> <id>placeholderapi</id>
<url>https://repo.helpch.at/releases/</url> <url>https://repo.helpch.at/releases/</url>
</repository> </repository>
<repository>
<id>codemc-repo</id>
<url>https://repo.codemc.io/repository/maven-public/</url>
<layout>default</layout>
</repository>
</repositories> </repositories>
<dependencies> <dependencies>
@@ -113,5 +118,12 @@
<version>2.12.2</version> <version>2.12.2</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- NBT-API -->
<dependency>
<groupId>de.tr7zw</groupId>
<artifactId>item-nbt-api-plugin</artifactId>
<version>2.15.7</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>
@@ -7,6 +7,7 @@ import org.bukkit.plugin.java.JavaPlugin
import xyz.fortern.forternhelper.command.HelperCommand import xyz.fortern.forternhelper.command.HelperCommand
import xyz.fortern.forternhelper.listener.ForternListener import xyz.fortern.forternhelper.listener.ForternListener
import xyz.fortern.forternhelper.placeholder.ForternExpansion import xyz.fortern.forternhelper.placeholder.ForternExpansion
import java.io.File
class Helper : JavaPlugin() { class Helper : JavaPlugin() {
private lateinit var adventure: BukkitAudiences private lateinit var adventure: BukkitAudiences
@@ -16,13 +17,19 @@ class Helper : JavaPlugin() {
override fun onEnable() { override fun onEnable() {
// Plugin startup logic // Plugin startup logic
this.adventure = BukkitAudiences.create(this) this.adventure = BukkitAudiences.create(this)
logger.info("Registering listeners...")
// init data-folders
logger.info("Initializing data-folders...")
File(this.dataFolder, "block-nbt").mkdirs()
File(this.dataFolder, "item-nbt").mkdirs()
// register listeners // register listeners
logger.info("Registering listeners...")
Bukkit.getPluginManager().registerEvents(ForternListener(this), this) Bukkit.getPluginManager().registerEvents(ForternListener(this), this)
logger.info("Registering commands...")
// register commands // register commands
logger.info("Registering commands...")
Bukkit.getPluginCommand("helper")?.setExecutor(HelperCommand(this, adventure)) Bukkit.getPluginCommand("helper")?.setExecutor(HelperCommand(this, adventure))
// register placeholder // register placeholders
expansion = ForternExpansion(this) expansion = ForternExpansion(this)
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
logger.info("Registering placeholders...") logger.info("Registering placeholders...")
@@ -1,5 +1,7 @@
package xyz.fortern.forternhelper.command package xyz.fortern.forternhelper.command
import de.tr7zw.nbtapi.NBT
import de.tr7zw.nbtapi.iface.ReadWriteNBT
import net.kyori.adventure.platform.bukkit.BukkitAudiences import net.kyori.adventure.platform.bukkit.BukkitAudiences
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.NamedTextColor
@@ -9,6 +11,8 @@ import org.bukkit.command.CommandSender
import org.bukkit.command.TabExecutor import org.bukkit.command.TabExecutor
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.plugin.java.JavaPlugin import org.bukkit.plugin.java.JavaPlugin
import java.io.File
import java.io.FileReader
class HelperCommand( class HelperCommand(
private val plugin: JavaPlugin, private val plugin: JavaPlugin,
@@ -54,8 +58,24 @@ class HelperCommand(
} }
} }
return when (args[0]) { return when (args[0]) {
"help" -> onHelp(sender, exe) "help" -> {
"loadlevel" -> onLoadLevel(sender, args, exe) onHelp(sender, exe)
}
"loadlevel" -> {
onLoadLevel(sender, args, exe)
}
"setblock" -> {
setBlockFromNbt(sender, args, exe)
null
}
"getitem" -> {
getItemFromNbt(sender, args, exe)
null
}
else -> { else -> {
if (exe) { if (exe) {
adventure.sender(sender).sendMessage(Component.text("错误的子命令")) adventure.sender(sender).sendMessage(Component.text("错误的子命令"))
@@ -68,6 +88,54 @@ class HelperCommand(
} }
} }
private fun getItemFromNbt(sender: CommandSender, args: List<String>, exe: Boolean) {
// args[0]:getitem | args[1]:0 | args[2]:txt
if (!exe) return
if (sender !is Player) return
if (!sender.isOp) return
if (args.size < 2) return
val i = args[1]
val isNbt = if (args.size > 2) args[2] == "nbt" else false
val itemNbtDir = File(plugin.dataFolder, "item-nbt")
val nbt = if (isNbt) {
val file = File(itemNbtDir, "${i}.nbt")
if (!file.exists()) return
NBT.readFile(file)
} else {
val file = File(itemNbtDir, "${i}.txt")
if (!file.exists()) return
NBT.parseNBT(FileReader(file).readAllAsString())
}
sender.inventory.addItem(NBT.itemStackFromNBT(nbt))
return
}
private fun setBlockFromNbt(sender: CommandSender, args: List<String>, exe: Boolean) {
// args[0]:setblock | args[1]:0 | args[2]:txt
if (!exe) return
if (sender !is Player) return
if (!sender.isOp) return
if (args.size < 2) return
val i = args[1]
val isNbt = if (args.size > 2) args[2] == "nbt" else false
val world = sender.world
val blockState = world.getBlockState(0, 128, 0)
val itemNbtDir = File(plugin.dataFolder, "block-nbt")
val readWriteNBT = if (isNbt) {
val file = File(itemNbtDir, "${i}.nbt")
if (!file.exists()) return
NBT.readFile(file)
} else {
val file = File(itemNbtDir, "${i}.txt")
if (!file.exists()) return
NBT.parseNBT(FileReader(file).readAllAsString())
}
NBT.modify(blockState) { nbt: ReadWriteNBT ->
nbt.mergeCompound(readWriteNBT)
}
return
}
private fun onHelp(sender: CommandSender, exe: Boolean): List<String>? { private fun onHelp(sender: CommandSender, exe: Boolean): List<String>? {
if (exe) sendHelp(sender) if (exe) sendHelp(sender)
return null return null
+4 -1
View File
@@ -3,7 +3,10 @@ version: '${version}'
authors: [ Fortern ] authors: [ Fortern ]
api-version: '26.1' api-version: '26.1'
main: xyz.fortern.forternhelper.Helper main: xyz.fortern.forternhelper.Helper
softdepend: ["PlaceholderAPI"] softdepend:
- PlaceholderAPI
depend:
- NBTAPI
libraries: libraries:
- org.jetbrains.kotlin:kotlin-stdlib:2.3.21 - org.jetbrains.kotlin:kotlin-stdlib:2.3.21