From 260a67506a7431df496e3274db7835082be1ecd5 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 24 Apr 2023 22:54:33 +0200 Subject: [PATCH] Fixes for Java/Scala compatibility bugs --- Chroma-Core/pom.xml | 2 +- .../restart/ScheduledRestartCommand.kt | 2 +- .../java/buttondevteam/lib/ChromaUtils.kt | 3 +++ .../java/buttondevteam/lib/TBMCChatEvent.kt | 19 ++++++++++--------- .../buttondevteam/lib/TBMCSystemChatEvent.kt | 4 +++- .../lib/architecture/ButtonPlugin.kt | 2 +- .../lib/architecture/IHaveConfig.kt | 2 +- .../lib/architecture/ListConfigData.kt | 6 +++--- .../buttondevteam/lib/chat/ChatMessage.kt | 1 + .../java/buttondevteam/lib/chat/Command2.kt | 4 ++-- .../buttondevteam/lib/chat/TBMCChatAPI.kt | 1 + .../lib/player/ChromaGamerBase.kt | 3 +++ .../lib/player/TBMCPlayerBase.kt | 2 ++ 13 files changed, 32 insertions(+), 19 deletions(-) diff --git a/Chroma-Core/pom.xml b/Chroma-Core/pom.xml index 3769c08..88a6311 100755 --- a/Chroma-Core/pom.xml +++ b/Chroma-Core/pom.xml @@ -247,7 +247,7 @@ github UTF-8 - 1.0.1 + 2.0.0 1.8.20 diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.kt b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.kt index ec9b6d1..2e28a8b 100755 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.kt +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.kt @@ -26,7 +26,7 @@ import kotlin.properties.Delegates ] ) class ScheduledRestartCommand : ICommand2MC() { - private var restartCounter = 0 + public var restartCounter = 0 private lateinit var restartTask: BukkitTask @Volatile diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/ChromaUtils.kt b/Chroma-Core/src/main/java/buttondevteam/lib/ChromaUtils.kt index 58593fd..3cfc15e 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/ChromaUtils.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/ChromaUtils.kt @@ -9,6 +9,7 @@ import org.bukkit.event.Event import java.util.function.Supplier object ChromaUtils { + @JvmStatic fun getDisplayName(sender: CommandSender): String { return when (sender) { is IHaveFancyName -> sender.fancyName @@ -17,6 +18,7 @@ object ChromaUtils { } } + @JvmStatic fun getFullDisplayName(sender: CommandSender): String { return when (sender) { is IHaveFancyName -> sender.fancyFullName @@ -24,6 +26,7 @@ object ChromaUtils { } } + @JvmStatic fun convertNumber(number: Number, targetcl: Class): Number { return when { targetcl == Long::class.javaPrimitiveType || Long::class.java.isAssignableFrom(targetcl) -> number.toLong() diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/TBMCChatEvent.kt b/Chroma-Core/src/main/java/buttondevteam/lib/TBMCChatEvent.kt index a0eda1c..35ca624 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/TBMCChatEvent.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/TBMCChatEvent.kt @@ -14,40 +14,41 @@ import org.bukkit.event.HandlerList */ class TBMCChatEvent( channel: Channel, - private val cm: ChatMessage, + public val chatMessage: ChatMessage, rtr: RecipientTestResult -) : TBMCChatEventBase(channel, cm.message, rtr.score, rtr.groupID!!) { +) : TBMCChatEventBase(channel, chatMessage.message, rtr.score, rtr.groupID!!) { - private val isIgnoreSenderPermissions: Boolean get() = cm.permCheck !== cm.sender + private val isIgnoreSenderPermissions: Boolean get() = chatMessage.permCheck !== chatMessage.sender /** * This will allow the sender of the message if [.isIgnoreSenderPermissions] is true. */ override fun shouldSendTo(sender: CommandSender): Boolean { - return if (isIgnoreSenderPermissions && sender == cm.sender) true else super.shouldSendTo(sender) //Allow sending the message no matter what + return if (isIgnoreSenderPermissions && sender == chatMessage.sender) true else super.shouldSendTo(sender) //Allow sending the message no matter what } /** * This will allow the sender of the message if [.isIgnoreSenderPermissions] is true. */ override fun getMCScore(sender: CommandSender): Int { - return if (isIgnoreSenderPermissions && sender == cm.sender) score else super.getMCScore(sender) //Send in the correct group no matter what + return if (isIgnoreSenderPermissions && sender == chatMessage.sender) score else super.getMCScore(sender) //Send in the correct group no matter what } /** * This will allow the sender of the message if [.isIgnoreSenderPermissions] is true. */ override fun getGroupID(sender: CommandSender): String? { - return if (isIgnoreSenderPermissions && sender == cm.sender) groupID else super.getGroupID(sender) //Send in the correct group no matter what + return if (isIgnoreSenderPermissions && sender == chatMessage.sender) groupID else super.getGroupID(sender) //Send in the correct group no matter what } override fun getHandlers(): HandlerList { return handlerList } - val sender: CommandSender get() = cm.sender - val user: ChromaGamerBase get() = cm.user - val origin: String get() = cm.origin + val sender: CommandSender get() = chatMessage.sender + val user: ChromaGamerBase get() = chatMessage.user + val origin: String get() = chatMessage.origin + val isFromCommand get() = chatMessage.isFromCommand companion object { val handlerList = HandlerList() diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/TBMCSystemChatEvent.kt b/Chroma-Core/src/main/java/buttondevteam/lib/TBMCSystemChatEvent.kt index 13afa8a..35bdd6b 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/TBMCSystemChatEvent.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/TBMCSystemChatEvent.kt @@ -25,9 +25,9 @@ class TBMCSystemChatEvent( } class BroadcastTarget private constructor(val name: String) { - companion object { private val targets = HashSet() + @JvmField val ALL = BroadcastTarget("ALL") @JvmStatic @@ -42,11 +42,13 @@ class TBMCSystemChatEvent( targets.remove(target) } + @JvmStatic operator fun get(name: String?): BroadcastTarget? { return targets.stream().filter { bt: BroadcastTarget? -> bt!!.name.equals(name, ignoreCase = true) } .findAny().orElse(null) } + @JvmStatic fun stream(): Stream { return targets.stream() } diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.kt b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.kt index 9ede9b2..575ed5e 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ButtonPlugin.kt @@ -37,7 +37,7 @@ abstract class ButtonPlugin : JavaPlugin() { /** * Called before the components are unregistered */ - protected fun pluginPreDisable() {} + protected open fun pluginPreDisable() {} override fun onEnable() { if (!reloadIConfig()) { logger.warning("Please fix the issues and restart the server to load the plugin.") diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt index 85d5d02..1b16560 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/IHaveConfig.kt @@ -91,7 +91,7 @@ class IHaveConfig( if (data == null) datamap[path] = ListConfigData( this, path, - def, + ArrayList(def), elementGetter ?: Function { it as T }, elementSetter ?: Function { it }, readOnly diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ListConfigData.kt b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ListConfigData.kt index 785eee4..15970a3 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ListConfigData.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/architecture/ListConfigData.kt @@ -1,21 +1,21 @@ package buttondevteam.lib.architecture import buttondevteam.lib.architecture.config.IConfigData +import java.util.ArrayList import java.util.function.Function import java.util.function.Predicate import java.util.function.UnaryOperator -import kotlin.collections.List as KList class ListConfigData internal constructor( config: IHaveConfig?, path: String, - primitiveDef: kotlin.collections.List<*>, + primitiveDef: ArrayList<*>, private val elementGetter: Function, private val elementSetter: Function, readOnly: Boolean ) : IConfigData.List> { val listConfig: ConfigData = - ConfigData(config, path, primitiveDef, { List((it as KList<*>).toMutableList()) }, { it }, readOnly) + ConfigData(config, path, primitiveDef, { List((it as ArrayList<*>).toMutableList()) }, { it }, readOnly) override val path: String get() = listConfig.path diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/chat/ChatMessage.kt b/Chroma-Core/src/main/java/buttondevteam/lib/chat/ChatMessage.kt index 22b9159..0e35570 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/chat/ChatMessage.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/chat/ChatMessage.kt @@ -66,6 +66,7 @@ class ChatMessage internal constructor( } companion object { + @JvmStatic fun builder(sender: CommandSender, user: ChromaGamerBase, message: String): ChatMessageBuilder { return ChatMessageBuilder( sender, user, message, diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2.kt b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2.kt index 12d6e8d..0df3877 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2.kt @@ -374,8 +374,8 @@ abstract class Command2, TP : Command2Sender>( * @param command The exact name of the command * @return A command node */ - fun getCommandNode(command: String): CoreCommandNode { // TODO: What should this return? No-op? Executable? What's the use case? - return dispatcher.root.getChild(command).core() + fun getCommandNode(command: String): CoreCommandNode? { // TODO: What should this return? No-op? Executable? What's the use case? + return dispatcher.root.getChild(command)?.core() } /** diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.kt b/Chroma-Core/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.kt index 7e75ef0..f35d2e1 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.kt @@ -25,6 +25,7 @@ object TBMCChatAPI { * @return The event cancelled state */ @JvmOverloads + @JvmStatic fun sendChatMessage(cm: ChatMessage, channel: Channel = cm.user.channel.get()): Boolean { if (!channelList.contains(channel)) throw RuntimeException( "Channel " + channel.displayName.get() + " not registered!" diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt b/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt index 30ad8ee..3bc0bd1 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/player/ChromaGamerBase.kt @@ -240,6 +240,7 @@ abstract class ChromaGamerBase { * @param foldername The folder to get the class from (like "minecraft") * @return The type for the given folder name or null if not found */ + @JvmStatic fun getTypeForFolder(foldername: String?): Class? { synchronized(staticDataMap) { return staticDataMap.filter { (_, value) -> value.folder.equals(foldername, ignoreCase = true) } @@ -302,6 +303,7 @@ abstract class ChromaGamerBase { * * @param converter The converter that returns an object corresponding to the sender or null, if it's not the right type. */ + @JvmStatic fun addConverter(converter: Function>) { senderConverters.add(0, converter) } @@ -312,6 +314,7 @@ abstract class ChromaGamerBase { * @param sender The sender to use * @return A user as returned by a converter or null if none can supply it */ + @JvmStatic fun getFromSender(sender: CommandSender): ChromaGamerBase? { // TODO: Use Command2Sender for (converter in senderConverters) { val ocg = converter.apply(sender) diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt b/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt index 4947253..3763f67 100755 --- a/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt +++ b/Chroma-Core/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.kt @@ -44,6 +44,7 @@ abstract class TBMCPlayerBase : ChromaGamerBase() { * @param cl The type of the player * @return The requested player object */ + @JvmStatic fun getPlayer(uuid: UUID, cl: Class): T { val player = getUser(uuid.toString(), cl) check(player.uniqueId == uuid) { "Player UUID differs after converting from and to string..." } @@ -57,6 +58,7 @@ abstract class TBMCPlayerBase : ChromaGamerBase() { * @return The [TBMCPlayer] object for the player */ @Suppress("deprecation") + @JvmStatic fun getFromName(name: String, cl: Class): T { val p = Bukkit.getOfflinePlayer(name) return getPlayer(p.uniqueId, cl)