Skip to content

Commit 5dc54f0

Browse files
camnwaltermattco98
authored andcommitted
Scoreboard: Completely revamp the API
Adds mutability to Scoreboard.Score among these other changes: (added unless otherwise stated) Team: - getColor - setColor Scoreboard: - addLine - createTeam - removeIndex - removeScores Scoreboard.Score: - getNumberFormat - getTeam - remove - setName - setNumberFormat - setPoints - setTeam
1 parent 1f69d14 commit 5dc54f0

File tree

11 files changed

+330
-53
lines changed

11 files changed

+330
-53
lines changed

api/ctjs.api

+27-4
Original file line numberDiff line numberDiff line change
@@ -1013,6 +1013,7 @@ public final class com/chattriggers/ctjs/api/entity/PlayerMP : com/chattriggers/
10131013
public final class com/chattriggers/ctjs/api/entity/Team : com/chattriggers/ctjs/api/CTWrapper {
10141014
public fun <init> (Lnet/minecraft/scoreboard/Team;)V
10151015
public final fun canSeeInvisibleTeammates ()Z
1016+
public final fun getColor ()Ljava/lang/String;
10161017
public final fun getDeathMessageVisibility ()Lcom/chattriggers/ctjs/api/entity/Team$Visibility;
10171018
public final fun getFriendlyFire ()Z
10181019
public synthetic fun getMcValue ()Ljava/lang/Object;
@@ -1023,6 +1024,7 @@ public final class com/chattriggers/ctjs/api/entity/Team : com/chattriggers/ctjs
10231024
public final fun getPrefix ()Ljava/lang/String;
10241025
public final fun getRegisteredName ()Ljava/lang/String;
10251026
public final fun getSuffix ()Ljava/lang/String;
1027+
public final fun setColor (Ljava/lang/Object;)Lcom/chattriggers/ctjs/api/entity/Team;
10261028
public final fun setName (Lcom/chattriggers/ctjs/api/message/TextComponent;)Lcom/chattriggers/ctjs/api/entity/Team;
10271029
public final fun setName (Ljava/lang/String;)Lcom/chattriggers/ctjs/api/entity/Team;
10281030
public final fun setPrefix (Lcom/chattriggers/ctjs/api/message/TextComponent;)Lcom/chattriggers/ctjs/api/entity/Team;
@@ -1033,6 +1035,10 @@ public final class com/chattriggers/ctjs/api/entity/Team : com/chattriggers/ctjs
10331035
public fun toMC ()Lnet/minecraft/scoreboard/Team;
10341036
}
10351037

1038+
public synthetic class com/chattriggers/ctjs/api/entity/Team$EntriesMappings {
1039+
public static final synthetic field entries$0 Lkotlin/enums/EnumEntries;
1040+
}
1041+
10361042
public final class com/chattriggers/ctjs/api/entity/Team$Visibility : java/lang/Enum, com/chattriggers/ctjs/api/CTWrapper {
10371043
public static final field ALWAYS Lcom/chattriggers/ctjs/api/entity/Team$Visibility;
10381044
public static final field Companion Lcom/chattriggers/ctjs/api/entity/Team$Visibility$Companion;
@@ -2314,6 +2320,9 @@ public final class com/chattriggers/ctjs/api/world/PotionEffectType {
23142320

23152321
public final class com/chattriggers/ctjs/api/world/Scoreboard {
23162322
public static final field INSTANCE Lcom/chattriggers/ctjs/api/world/Scoreboard;
2323+
public static final fun addLine (ILcom/chattriggers/ctjs/api/message/TextComponent;)V
2324+
public static final fun addLine (ILjava/lang/String;)V
2325+
public static final fun createTeam (Ljava/lang/String;)Lcom/chattriggers/ctjs/api/entity/Team;
23172326
public static final fun getLineByIndex (I)Lcom/chattriggers/ctjs/api/world/Scoreboard$Score;
23182327
public static final fun getLines ()Ljava/util/List;
23192328
public static final fun getLines (Z)Ljava/util/List;
@@ -2323,6 +2332,10 @@ public final class com/chattriggers/ctjs/api/world/Scoreboard {
23232332
public static final fun getShouldRender ()Z
23242333
public static final fun getSidebar ()Lnet/minecraft/scoreboard/ScoreboardObjective;
23252334
public static final fun getTitle ()Lcom/chattriggers/ctjs/api/message/TextComponent;
2335+
public static final fun removeIndex (I)V
2336+
public static final fun removeIndex (IZ)V
2337+
public static synthetic fun removeIndex$default (IZILjava/lang/Object;)V
2338+
public static final fun removeScores (I)V
23262339
public static final fun setLine (ILcom/chattriggers/ctjs/api/message/TextComponent;)V
23272340
public static final fun setLine (ILcom/chattriggers/ctjs/api/message/TextComponent;Z)V
23282341
public static final fun setLine (ILjava/lang/String;)V
@@ -2335,11 +2348,21 @@ public final class com/chattriggers/ctjs/api/world/Scoreboard {
23352348
public static final fun toMC ()Lnet/minecraft/scoreboard/Scoreboard;
23362349
}
23372350

2338-
public final class com/chattriggers/ctjs/api/world/Scoreboard$Score {
2339-
public fun <init> (Lnet/minecraft/scoreboard/ScoreboardEntry;)V
2351+
public final class com/chattriggers/ctjs/api/world/Scoreboard$Score : com/chattriggers/ctjs/api/CTWrapper {
2352+
public fun <init> (Lnet/minecraft/scoreboard/ScoreAccess;)V
2353+
public synthetic fun getMcValue ()Ljava/lang/Object;
2354+
public fun getMcValue ()Lnet/minecraft/scoreboard/ScoreAccess;
23402355
public final fun getName ()Lcom/chattriggers/ctjs/api/message/TextComponent;
2341-
public final fun getPoints ()I
2342-
public final fun toMC ()Lnet/minecraft/scoreboard/ScoreboardEntry;
2356+
public final fun getNumberFormat ()Lnet/minecraft/scoreboard/number/NumberFormat;
2357+
public final fun getScore ()I
2358+
public final fun getTeam ()Lcom/chattriggers/ctjs/api/entity/Team;
2359+
public final fun remove ()V
2360+
public final fun setName (Lcom/chattriggers/ctjs/api/message/TextComponent;)Lcom/chattriggers/ctjs/api/world/Scoreboard$Score;
2361+
public final fun setNumberFormat (Ljava/lang/Object;)Lcom/chattriggers/ctjs/api/world/Scoreboard$Score;
2362+
public final fun setScore (I)Lcom/chattriggers/ctjs/api/world/Scoreboard$Score;
2363+
public final fun setTeam (Lcom/chattriggers/ctjs/api/entity/Team;)Lcom/chattriggers/ctjs/api/world/Scoreboard$Score;
2364+
public synthetic fun toMC ()Ljava/lang/Object;
2365+
public fun toMC ()Lnet/minecraft/scoreboard/ScoreAccess;
23432366
public fun toString ()Ljava/lang/String;
23442367
}
23452368

docs/MIGRATION.md

+8-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,11 @@ Here is a list of targeted changes for various different APIs:
134134
- `Scoreboard`
135135
- Remove `Scoreboard.getScoreboardTitle()` in favor of the less verbose `Scoreboard.getTitle()`
136136
- `Scoreboard.getTitle()` now returns `TextComponent` instead of `String`
137-
- `Score.getName()` now returns `TextComponent` instead of `String`
137+
- `Score`
138+
- is now mutable. You can now edit the score, name, number format, and team
139+
- `getPoints`/`setPoints` are renamed to `getScore`/`setScore`
140+
- Added `addLine()`, `createTeam()`, `removeIndex()`, `removeScores()` methods
141+
- `getLines` now actually sorts by descending instead of ascending
138142
- `Book` now uses `TextComponent` instead of `Message`
139143
- `Settings`
140144
- Renamed all methods in the `skin` object to indicate they return whether the part is enabled, not the actual part themselves (i.e. `getCape()` -> `isCapeEnabled()`)
@@ -195,7 +199,9 @@ Here is a list of targeted changes for various different APIs:
195199
- `TabList`
196200
- Renamed `getHeaderMessage()` to `getHeaderComponent()`, and it now returns a `TextComponent` instead of a `Message`
197201
- Renamed `getFooterMessage()` to `getFooterComponent()`, and it now returns a `TextComponent` instead of a `Message`
198-
- `Team.getNameTagVisibility()` and `Team.getDeathMessageVisibility()` now return a `Team.Visibility` instead of a string
202+
- `Team`
203+
- `Team.getNameTagVisibility()` and `Team.getDeathMessageVisibility()` now return a `Team.Visibility` instead of a string
204+
- Added `setColor()`
199205
- `Client`
200206
- `getChatGUI` was renamed to `getChatGui` to match the naming of `getTabGui`
201207
- Removed `Config.modulesFolder`. Use `ChatTriggers.MODULES_FOLDER` or the string `"./config/ChatTriggers/modules"`

src/main/java/com/chattriggers/ctjs/internal/mixins/MinecraftClientMixin.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.chattriggers.ctjs.internal.mixins;
22

3+
import com.chattriggers.ctjs.api.world.Scoreboard;
34
import com.chattriggers.ctjs.internal.engine.CTEvents;
45
import com.chattriggers.ctjs.api.triggers.TriggerType;
56
import com.chattriggers.ctjs.internal.engine.module.ModuleManager;
@@ -29,8 +30,10 @@ private void injectWorldUnload(ClientWorld world, CallbackInfo ci) {
2930
TriggerType.SERVER_DISCONNECT.triggerAll();
3031
}
3132

32-
if (this.world != null)
33+
if (this.world != null) {
3334
TriggerType.WORLD_UNLOAD.triggerAll();
35+
Scoreboard.INSTANCE.clearCustom$ctjs();
36+
}
3437
}
3538

3639
@Inject(method = "joinWorld", at = @At("TAIL"))
@@ -46,6 +49,7 @@ private void injectDisconnect(Screen screen, CallbackInfo ci) {
4649
if (this.isIntegratedServerRunning() || this.getCurrentServerEntry() != null) {
4750
TriggerType.WORLD_UNLOAD.triggerAll();
4851
TriggerType.SERVER_DISCONNECT.triggerAll();
52+
Scoreboard.INSTANCE.clearCustom$ctjs();
4953
}
5054
}
5155

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.chattriggers.ctjs.internal.mixins;
2+
3+
import net.minecraft.scoreboard.ScoreHolder;
4+
import net.minecraft.scoreboard.ScoreboardScore;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
@Mixin(targets = "net.minecraft.scoreboard.Scoreboard$1")
9+
public interface Scoreboard$1Accessor {
10+
@Accessor("field_47543")
11+
ScoreboardScore getScore();
12+
13+
@Accessor("field_47547")
14+
ScoreHolder getHolder();
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.chattriggers.ctjs.internal.mixins;
2+
3+
import com.chattriggers.ctjs.api.world.Scoreboard;
4+
import net.minecraft.scoreboard.ScoreboardObjective;
5+
import net.minecraft.text.Text;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
@Mixin(ScoreboardObjective.class)
12+
public class ScoreboardObjectiveMixin {
13+
@Inject(method = "setDisplayName", at = @At("HEAD"), cancellable = true)
14+
private void chattriggers$keepCustomName(Text name, CallbackInfo ci) {
15+
if (Scoreboard.INSTANCE.getCustomTitle$ctjs()) {
16+
ci.cancel();
17+
}
18+
}
19+
}

src/main/kotlin/com/chattriggers/ctjs/CTJS.kt

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.chattriggers.ctjs.api.commands.DynamicCommands
99
import com.chattriggers.ctjs.api.message.ChatLib
1010
import com.chattriggers.ctjs.api.render.Image
1111
import com.chattriggers.ctjs.api.triggers.TriggerType
12+
import com.chattriggers.ctjs.api.world.Scoreboard
1213
import com.chattriggers.ctjs.api.world.World
1314
import com.chattriggers.ctjs.engine.Console
1415
import com.chattriggers.ctjs.engine.Register
@@ -85,6 +86,7 @@ class CTJS : ClientModInitializer {
8586
fun unload(asCommand: Boolean = true) {
8687
TriggerType.WORLD_UNLOAD.triggerAll()
8788
TriggerType.GAME_UNLOAD.triggerAll()
89+
Scoreboard.clearCustom()
8890

8991
isLoaded = false
9092

src/main/kotlin/com/chattriggers/ctjs/api/entity/Team.kt

+21
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ package com.chattriggers.ctjs.api.entity
33
import com.chattriggers.ctjs.api.CTWrapper
44
import com.chattriggers.ctjs.api.message.TextComponent
55
import com.chattriggers.ctjs.MCTeam
6+
import com.chattriggers.ctjs.api.message.ChatLib
67
import net.minecraft.scoreboard.AbstractTeam
8+
import net.minecraft.text.TextColor
9+
import net.minecraft.util.Formatting
710

811
class Team(override val mcValue: MCTeam) : CTWrapper<MCTeam> {
912
/**
@@ -79,6 +82,24 @@ class Team(override val mcValue: MCTeam) : CTWrapper<MCTeam> {
7982
*/
8083
fun setSuffix(suffix: String) = setSuffix(TextComponent(suffix))
8184

85+
fun getColor() = mcValue.color.toString()
86+
87+
/**
88+
* Sets the team color
89+
* @param color a string format of a [Formatting], or a hex value
90+
* @return the team for method chaining
91+
*/
92+
fun setColor(color: Any?) = apply {
93+
mcValue.color = when (color) {
94+
is Number -> Formatting.byColorIndex(color.toInt())
95+
is CharSequence -> Formatting.entries.find {
96+
it.toString() == ChatLib.addColor(color.toString())
97+
} ?: Formatting.RESET
98+
null -> Formatting.RESET
99+
else -> throw IllegalArgumentException("Could not convert type ${color::class.simpleName} to a Formatting")
100+
}
101+
}
102+
82103
/**
83104
* Gets the team's friendly fire setting
84105
*/

src/main/kotlin/com/chattriggers/ctjs/api/message/TextComponent.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -399,12 +399,12 @@ class TextComponent private constructor(
399399
}
400400
}
401401

402-
private companion object {
402+
internal companion object {
403403
private val colorToFormatChar = Formatting.entries.mapNotNull { format ->
404404
TextColor.fromFormatting(format)?.let { it to format }
405405
}.toMap()
406406

407-
private fun jsObjectToStyle(obj: NativeObject): Style {
407+
internal fun jsObjectToStyle(obj: NativeObject): Style {
408408
return Style.EMPTY
409409
.withColor(obj["color"]?.let { color ->
410410
when (color) {

0 commit comments

Comments
 (0)