mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
168 lines
5.2 KiB
Kotlin
168 lines
5.2 KiB
Kotlin
package io.delilaheve
|
|
|
|
import io.delilaheve.util.ConfigOptions
|
|
import org.bukkit.Bukkit
|
|
import org.bukkit.configuration.file.YamlConfiguration
|
|
import org.bukkit.plugin.java.JavaPlugin
|
|
import xyz.alexcrea.cuanvil.command.EditConfigExecutor
|
|
import xyz.alexcrea.cuanvil.command.ReloadExecutor
|
|
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
|
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui
|
|
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant
|
|
import xyz.alexcrea.cuanvil.listener.ChatEventListener
|
|
import xyz.alexcrea.cuanvil.packet.NoProtocoLib
|
|
import xyz.alexcrea.cuanvil.packet.PacketManager
|
|
import xyz.alexcrea.cuanvil.packet.ProtocoLibWrapper
|
|
import xyz.alexcrea.cuanvil.update.Update_1_21
|
|
import xyz.alexcrea.cuanvil.util.Metrics
|
|
import xyz.alexcrea.cuanvil.util.MetricsUtil
|
|
import java.io.File
|
|
import java.io.FileReader
|
|
|
|
/**
|
|
* Bukkit/Spigot/Paper plugin to alter anvil feature
|
|
*/
|
|
class CustomAnvil : JavaPlugin() {
|
|
|
|
companion object {
|
|
// bstats plugin id
|
|
private const val bstatsPluginId = 20923
|
|
|
|
// Permission string required to use the plugin's features
|
|
const val affectedByPluginPermission = "ca.affected"
|
|
|
|
// Permission string required to bypass enchantment conflicts test
|
|
const val bypassFusePermission = "ca.bypass.fuse"
|
|
|
|
// Permission string required to bypass enchantment conflicts test
|
|
const val bypassLevelPermission = "ca.bypass.level"
|
|
|
|
// Permission string required to reload the config
|
|
const val commandReloadPermission = "ca.command.reload"
|
|
|
|
// Permission string required to edit the plugin's config
|
|
const val editConfigPermission = "ca.config.edit"
|
|
|
|
// Command Name to reload the config
|
|
const val commandReloadName = "anvilconfigreload"
|
|
|
|
// Test command name
|
|
const val commandTestName = "customanvilconfig"
|
|
|
|
// Current plugin instance
|
|
lateinit var instance: CustomAnvil
|
|
|
|
// Chat message listener
|
|
lateinit var chatListener: ChatEventListener
|
|
|
|
/**
|
|
* Logging handler
|
|
*/
|
|
fun log(message: String) {
|
|
if (ConfigOptions.debugLog) {
|
|
instance.logger.info(message)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Vebose Logging handler
|
|
*/
|
|
fun verboseLog(message: String) {
|
|
if (ConfigOptions.verboseDebugLog) {
|
|
instance.logger.info(message)
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
lateinit var packetManager: PacketManager
|
|
|
|
/**
|
|
* Setup plugin for use
|
|
*/
|
|
override fun onEnable() {
|
|
instance = this
|
|
|
|
val pluginManager = Bukkit.getPluginManager();
|
|
|
|
// Disable old plugin name if exist
|
|
val potentialPlugin = Bukkit.getPluginManager().getPlugin("UnsafeEnchantsPlus")
|
|
if (potentialPlugin != null) {
|
|
Bukkit.getPluginManager().disablePlugin(potentialPlugin)
|
|
logger.warning("An old version of this plugin was detected")
|
|
logger.warning("Please note CustomAnvil is a more recent version of UnsafeEnchantsPlus")
|
|
}
|
|
|
|
// Load ProtocolLib dependency if exist
|
|
packetManager = if(pluginManager.isPluginEnabled("ProtocolLib"))
|
|
{ ProtocoLibWrapper(); }
|
|
else
|
|
{ NoProtocoLib(); }
|
|
|
|
// Load chat listener
|
|
chatListener = ChatEventListener()
|
|
pluginManager.registerEvents(chatListener, this)
|
|
|
|
// Load config
|
|
val success = ConfigHolder.loadConfig()
|
|
if (!success) return
|
|
|
|
// temporary: handle 1.21 update
|
|
Update_1_21.handleUpdate()
|
|
|
|
// Load gui constants //TODO maybe something better later
|
|
MainConfigGui.getInstance().init(this.packetManager)
|
|
GuiSharedConstant.loadConstants()
|
|
|
|
// Load metrics
|
|
val metric = Metrics(this, bstatsPluginId)
|
|
MetricsUtil.addCustomMetric(metric)
|
|
|
|
// Add commands to reload the plugin
|
|
prepareCommand()
|
|
|
|
server.pluginManager.registerEvents(
|
|
AnvilEventListener(packetManager),
|
|
this
|
|
)
|
|
}
|
|
|
|
fun reloadResource(
|
|
resourceName: String,
|
|
hardFailSafe: Boolean = true
|
|
): YamlConfiguration? {
|
|
// Save default resource
|
|
val file = File(dataFolder, resourceName)
|
|
if (!file.exists()) {
|
|
saveResource(resourceName, false)
|
|
}
|
|
// Load resource
|
|
val yamlConfig = YamlConfiguration()
|
|
try {
|
|
val configReader = FileReader(file)
|
|
yamlConfig.load(configReader)
|
|
} catch (test: Exception) {
|
|
if (hardFailSafe) {
|
|
// This is important and may impact gameplay if it does not load.
|
|
// Failsafe is to stop the plugin
|
|
logger.severe("Resource $resourceName Could not be load or reload.")
|
|
logger.severe("Disabling plugin.")
|
|
Bukkit.getPluginManager().disablePlugin(this)
|
|
} else {
|
|
logger.warning("Resource $resourceName Could not be load or reload.")
|
|
}
|
|
return null
|
|
}
|
|
return yamlConfig
|
|
}
|
|
|
|
fun prepareCommand() {
|
|
var command = getCommand(commandReloadName)
|
|
command?.setExecutor(ReloadExecutor())
|
|
|
|
command = getCommand(commandTestName)
|
|
command?.setExecutor(EditConfigExecutor())
|
|
}
|
|
|
|
}
|