diff --git a/src/main/java/de/bixilon/minosoft/data/text/formatting/color/ChatColors.kt b/src/main/java/de/bixilon/minosoft/data/text/formatting/color/ChatColors.kt
index 27be8987d..d0e1f2d96 100644
--- a/src/main/java/de/bixilon/minosoft/data/text/formatting/color/ChatColors.kt
+++ b/src/main/java/de/bixilon/minosoft/data/text/formatting/color/ChatColors.kt
@@ -1,6 +1,6 @@
/*
* Minosoft
- * Copyright (C) 2020-2023 Moritz Zwerger
+ * Copyright (C) 2020-2024 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
@@ -21,52 +21,21 @@ import de.bixilon.minosoft.data.text.formatting.color.RGBColor.Companion.asColor
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap
object ChatColors {
- @JvmField
val BLACK = RGBColor(0, 0, 0)
-
- @JvmField
val DARK_BLUE = RGBColor(0, 0, 170)
-
- @JvmField
val DARK_GREEN = RGBColor(0, 170, 0)
-
- @JvmField
val DARK_AQUA = RGBColor(0, 170, 170)
-
- @JvmField
val DARK_RED = RGBColor(170, 0, 0)
-
- @JvmField
val DARK_PURPLE = RGBColor(170, 0, 170)
-
- @JvmField
val GOLD = RGBColor(255, 170, 0)
-
- @JvmField
val GRAY = RGBColor(170, 170, 170)
-
- @JvmField
val DARK_GRAY = RGBColor(85, 85, 85)
-
- @JvmField
val BLUE = RGBColor(85, 85, 255)
-
- @JvmField
val GREEN = RGBColor(85, 255, 85)
-
- @JvmField
val AQUA = RGBColor(85, 255, 255)
-
- @JvmField
val RED = RGBColor(255, 85, 85)
-
- @JvmField
val LIGHT_PURPLE = RGBColor(255, 85, 255)
-
- @JvmField
val YELLOW = RGBColor(255, 255, 85)
-
- @JvmField
val WHITE = RGBColor(255, 255, 255)
@@ -82,10 +51,11 @@ object ChatColors {
var index = 0
for (field in this::class.java.declaredFields) {
- val color = field.get(null)
- if (color !is RGBColor) {
+ val int = field.get(null)
+ if (int !is Int) { // RGBColor is inlined
continue
}
+ val color = RGBColor(int)
values[index] = color
CHAR_MAP[color] = index
nameMap[field.name.lowercase()] = color
diff --git a/src/main/java/de/bixilon/minosoft/data/text/formatting/color/RGBColor.kt b/src/main/java/de/bixilon/minosoft/data/text/formatting/color/RGBColor.kt
index b355b4293..07e8a2c1a 100644
--- a/src/main/java/de/bixilon/minosoft/data/text/formatting/color/RGBColor.kt
+++ b/src/main/java/de/bixilon/minosoft/data/text/formatting/color/RGBColor.kt
@@ -1,6 +1,6 @@
/*
* Minosoft
- * Copyright (C) 2020-2023 Moritz Zwerger
+ * Copyright (C) 2020-2024 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
@@ -21,7 +21,8 @@ import de.bixilon.minosoft.data.text.TextComponent
import de.bixilon.minosoft.data.text.formatting.TextFormattable
import org.checkerframework.common.value.qual.IntRange
-class RGBColor(val rgba: Int) : TextFormattable {
+@JvmInline
+value class RGBColor(val rgba: Int) : TextFormattable {
val ansi: String get() = ANSI.rgb(red, green, blue)
@JvmOverloads
@@ -68,21 +69,6 @@ class RGBColor(val rgba: Int) : TextFormattable {
val rgb: Int
get() = rgba ushr 8
- override fun hashCode(): Int {
- return rgba
- }
-
- override fun equals(other: Any?): Boolean {
- if (super.equals(other)) {
- return true
- }
- if (other !is RGBColor) {
- return false
- }
- val their = other as RGBColor? ?: return false
- return rgba == their.rgba
- }
-
override fun toString(): String {
return if (alpha != 255) {
String.format("#%08X", rgba)
@@ -103,10 +89,6 @@ class RGBColor(val rgba: Int) : TextFormattable {
return RGBColor(red.clamp(0.0f, 1.0f), green.clamp(0.0f, 1.0f), blue.clamp(0.0f, 1.0f), alpha.clamp(0.0f, 1.0f))
}
- fun mix(vararg colors: RGBColor): RGBColor {
- return Companion.mix(this, *colors)
- }
-
fun mix(other: RGBColor): RGBColor {
return RGBColor((red + other.red) / 2, (green + other.green) / 2, (blue + other.blue) / 2, (alpha + other.alpha) / 2)
}
@@ -158,18 +140,5 @@ class RGBColor(val rgba: Int) : TextFormattable {
fun Double.asGray(): RGBColor {
return RGBColor(this.toFloat(), this.toFloat(), this.toFloat())
}
-
- fun mix(vararg colors: RGBColor): RGBColor {
- var red = 0
- var green = 0
- var blue = 0
-
- for (color in colors) {
- red += color.red
- green += color.green
- blue += color.blue
- }
- return RGBColor(red / colors.size, green / colors.size, blue / colors.size)
- }
}
}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt
index 5d189d89e..2f7f129a0 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt
+++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/chat/ChatMessageS2CP.kt
@@ -1,6 +1,6 @@
/*
* Minosoft
- * Copyright (C) 2020-2023 Moritz Zwerger
+ * Copyright (C) 2020-2024 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
@@ -22,7 +22,7 @@ import de.bixilon.minosoft.data.text.ChatComponent
import de.bixilon.minosoft.modding.event.events.chat.ChatMessageEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
import de.bixilon.minosoft.protocol.packets.s2c.PlayS2CPacket
-import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
+import de.bixilon.minosoft.protocol.protocol.KProtocolDefinition
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions
import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer
import de.bixilon.minosoft.util.KUtil
@@ -51,7 +51,7 @@ class ChatMessageS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
}
}
}
- text.setFallbackColor(ProtocolDefinition.DEFAULT_COLOR)
+ text.setFallbackColor(KProtocolDefinition.DEFAULT_COLOR)
}
override fun handle(connection: PlayConnection) {
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/KProtocolDefinition.kt b/src/main/java/de/bixilon/minosoft/protocol/protocol/KProtocolDefinition.kt
new file mode 100644
index 000000000..a939cee37
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/KProtocolDefinition.kt
@@ -0,0 +1,20 @@
+/*
+ * Minosoft
+ * Copyright (C) 2020-2024 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program. If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.protocol.protocol
+
+import de.bixilon.minosoft.data.text.formatting.color.ChatColors
+
+object KProtocolDefinition {
+ val DEFAULT_COLOR = ChatColors.WHITE
+}
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java
index 64836a20f..b95bdcfc3 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java
@@ -1,6 +1,6 @@
/*
* Minosoft
- * Copyright (C) 2020-2023 Moritz Zwerger
+ * Copyright (C) 2020-2024 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
@@ -14,8 +14,6 @@
package de.bixilon.minosoft.protocol.protocol;
import de.bixilon.kotlinglm.vec3.Vec3i;
-import de.bixilon.minosoft.data.text.formatting.color.ChatColors;
-import de.bixilon.minosoft.data.text.formatting.color.RGBColor;
import java.util.regex.Pattern;
@@ -69,8 +67,6 @@ public final class ProtocolDefinition {
public static final float VELOCITY_NETWORK_DIVIDER = 8000.0f;
- public static final RGBColor DEFAULT_COLOR = ChatColors.WHITE;
-
public static final byte LIGHT_LEVELS = 16;
public static final byte MAX_LIGHT_LEVEL = LIGHT_LEVELS - 1;
public static final int MAX_LIGHT_LEVEL_I = MAX_LIGHT_LEVEL;
diff --git a/src/main/java/de/bixilon/minosoft/util/json/RGBColorSerializer.kt b/src/main/java/de/bixilon/minosoft/util/json/RGBColorSerializer.kt
index 685af0b06..274f74aa4 100644
--- a/src/main/java/de/bixilon/minosoft/util/json/RGBColorSerializer.kt
+++ b/src/main/java/de/bixilon/minosoft/util/json/RGBColorSerializer.kt
@@ -1,6 +1,6 @@
/*
* Minosoft
- * Copyright (C) 2020-2023 Moritz Zwerger
+ * Copyright (C) 2020-2024 Moritz Zwerger
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
@@ -28,6 +28,7 @@ object RGBColorSerializer : SimpleModule() {
init {
addDeserializer(RGBColor::class.java, Deserializer)
+ addDeserializer(Int::class.java, IntDeserializer)
addSerializer(RGBColor::class.java, Serializer)
}
@@ -41,6 +42,16 @@ object RGBColorSerializer : SimpleModule() {
}
}
}
+ object IntDeserializer : StdDeserializer(Int::class.java) { // TODO: This is shit?
+
+ override fun deserialize(parser: JsonParser, context: DeserializationContext?): Int {
+ return when (parser.currentToken) {
+ JsonToken.VALUE_NUMBER_INT -> parser.valueAsInt
+ JsonToken.VALUE_STRING -> parser.valueAsString.toColor()!!.rgba
+ else -> TODO("Can not parse color!")
+ }
+ }
+ }
object Serializer : StdSerializer(RGBColor::class.java) {