From 1567b14583e9eaff2f9cf5fab5c6cf4d3f57f2db Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Tue, 7 Nov 2023 18:50:58 +0100 Subject: [PATCH] improve team data structure --- .../player/additional/PlayerAdditionalTest.kt | 2 +- .../gui/rendering/RenderTestLoader.kt | 1 + .../text/name/EntityScoreFeatureTest.kt | 1 - .../entities/entities/player/PlayerEntity.kt | 5 +-- .../player/additional/AdditionalDataUpdate.kt | 4 +- .../player/additional/PlayerAdditional.kt | 4 +- .../data/scoreboard/ScoreboardManager.kt | 5 ++- .../data/scoreboard/ScoreboardScore.kt | 4 +- .../minosoft/data/scoreboard/team/Team.kt | 38 +++++++++++++++++++ .../{Team.kt => team/TeamFormatting.kt} | 26 +++---------- .../data/scoreboard/team/TeamVisibility.kt | 21 ++++++++++ .../scoreboard/ScoreboardScoreElement.kt | 4 +- .../events/scoreboard/ScoreTeamChangeEvent.kt | 4 +- .../scoreboard/ScoreboardTeamMemberEvent.kt | 4 +- .../scoreboard/ScoreboardTeamRemoveEvent.kt | 4 +- .../events/scoreboard/team/TeamCreateEvent.kt | 4 +- .../scoreboard/team/TeamMemberAddEvent.kt | 4 +- .../scoreboard/team/TeamMemberRemoveEvent.kt | 4 +- .../events/scoreboard/team/TeamUpdateEvent.kt | 4 +- .../play/scoreboard/teams/CreateTeamS2CP.kt | 16 ++++---- .../play/scoreboard/teams/UpdateTeamS2CP.kt | 14 +++---- 21 files changed, 108 insertions(+), 65 deletions(-) create mode 100644 src/main/java/de/bixilon/minosoft/data/scoreboard/team/Team.kt rename src/main/java/de/bixilon/minosoft/data/scoreboard/{Team.kt => team/TeamFormatting.kt} (62%) create mode 100644 src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamVisibility.kt diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditionalTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditionalTest.kt index f34d39e31..1b6d99e48 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditionalTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditionalTest.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.data.entities.entities.player.additional -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.data.text.BaseComponent import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.data.text.formatting.color.ChatColors diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/RenderTestLoader.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/RenderTestLoader.kt index 443bd2557..32c8de574 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/RenderTestLoader.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/RenderTestLoader.kt @@ -27,6 +27,7 @@ import org.testng.annotations.Test class RenderTestLoader { fun init() { + return val connection = createConnection(5) val latch = SimpleLatch(1) connection::assetsManager.forceSet(AssetsLoader.create(connection.profiles.resources, connection.version, latch)) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/entities/feature/text/name/EntityScoreFeatureTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/entities/feature/text/name/EntityScoreFeatureTest.kt index 18b269e3d..3e4f65332 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/entities/feature/text/name/EntityScoreFeatureTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/entities/feature/text/name/EntityScoreFeatureTest.kt @@ -73,7 +73,6 @@ class EntityScoreFeatureTest { fun `name offset without score`() { val score = createScore() - score.setScore() score.updateScore() score.updateNameOffset() assertEquals(score.renderer.name.offset, BillboardTextFeature.DEFAULT_OFFSET) diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt index 1af79c042..6a93350eb 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt @@ -132,10 +132,7 @@ abstract class PlayerEntity( if (chestPlate != null && chestPlate.item.item is DyeableItem) { chestPlate._display?.dyeColor?.let { return it } } - val formattingCode = additional.team?.color - if (formattingCode is RGBColor) { - return formattingCode - } + additional.team?.formatting?.color?.let { return it } return ChatColors.RED } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/AdditionalDataUpdate.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/AdditionalDataUpdate.kt index c1eac0d8d..04fd6556c 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/AdditionalDataUpdate.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/AdditionalDataUpdate.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -15,7 +15,7 @@ package de.bixilon.minosoft.data.entities.entities.player.additional import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.protocol.PlayerPublicKey diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditional.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditional.kt index 3e885d50a..48c9d12eb 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditional.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/additional/PlayerAdditional.kt @@ -16,7 +16,7 @@ package de.bixilon.minosoft.data.entities.entities.player.additional import de.bixilon.kutil.observer.DataObserver.Companion.observed import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.entities.entities.player.properties.PlayerProperties -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.protocol.PlayerPublicKey import de.bixilon.minosoft.util.KUtil.nullCompare @@ -41,7 +41,7 @@ class PlayerAdditional( var listed by observed(listed) val tabDisplayName: ChatComponent - get() = displayName ?: ChatComponent.of(name).let { team?.decorateName(it) ?: it } + get() = displayName ?: ChatComponent.of(name).let { team?.formatting?.decorate(it) ?: it } fun merge(data: AdditionalDataUpdate) { spareMerge(data) diff --git a/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardManager.kt b/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardManager.kt index 93e7b75f7..bfacef1e8 100644 --- a/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardManager.kt +++ b/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardManager.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -16,6 +16,7 @@ import de.bixilon.kutil.collections.CollectionUtil.lockMapOf import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf import de.bixilon.kutil.collections.map.LockMap import de.bixilon.kutil.primitive.BooleanUtil.decide +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.scoreboard.ScoreTeamChangeEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -49,7 +50,7 @@ class ScoreboardManager(private val connection: PlayConnection) { if (!fireEvent) { continue } - connection.fire(ScoreTeamChangeEvent(connection, objective, score, team, remove)) + connection.events.fire(ScoreTeamChangeEvent(connection, objective, score, team, remove)) } } objective.scores.lock.release() diff --git a/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardScore.kt b/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardScore.kt index c88fd0785..e269dcecd 100644 --- a/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardScore.kt +++ b/src/main/java/de/bixilon/minosoft/data/scoreboard/ScoreboardScore.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -12,6 +12,8 @@ */ package de.bixilon.minosoft.data.scoreboard +import de.bixilon.minosoft.data.scoreboard.team.Team + class ScoreboardScore( val entity: String, var objective: ScoreboardObjective, diff --git a/src/main/java/de/bixilon/minosoft/data/scoreboard/team/Team.kt b/src/main/java/de/bixilon/minosoft/data/scoreboard/team/Team.kt new file mode 100644 index 000000000..4321cf7f2 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/scoreboard/team/Team.kt @@ -0,0 +1,38 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 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.data.scoreboard.team + +import de.bixilon.minosoft.data.scoreboard.TeamCollisionRules +import de.bixilon.minosoft.data.text.TextComponent + +data class Team( + val name: String, + val formatting: TeamFormatting = TeamFormatting(TextComponent(name)), + var friendlyFire: Boolean = true, + val visibility: TeamVisibility = TeamVisibility(), + var collisions: TeamCollisionRules = TeamCollisionRules.ALWAYS, + val members: MutableSet = mutableSetOf(), +) { + override fun toString(): String { + return name + } + + fun canSee(other: Team?): Boolean { + // TODO + if (other == null) return false + if (other.name == this.name && visibility.invisibleTeam) return true + + + return false + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/scoreboard/Team.kt b/src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamFormatting.kt similarity index 62% rename from src/main/java/de/bixilon/minosoft/data/scoreboard/Team.kt rename to src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamFormatting.kt index 5d36e0f7b..a9171516f 100644 --- a/src/main/java/de/bixilon/minosoft/data/scoreboard/Team.kt +++ b/src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamFormatting.kt @@ -10,30 +10,21 @@ * * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.data.scoreboard + +package de.bixilon.minosoft.data.scoreboard.team import de.bixilon.minosoft.data.text.BaseComponent import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.data.text.formatting.color.RGBColor -data class Team( - val name: String, - var displayName: ChatComponent = TextComponent(name), +data class TeamFormatting( + var name: ChatComponent, var prefix: ChatComponent? = null, var suffix: ChatComponent? = null, - var friendlyFire: Boolean = true, - var canSeeInvisibleTeam: Boolean = true, - var collisionRule: TeamCollisionRules = TeamCollisionRules.ALWAYS, - var nameTagVisibility: NameTagVisibilities = NameTagVisibilities.ALWAYS, var color: RGBColor? = null, - val members: MutableSet = mutableSetOf(), ) { - override fun toString(): String { - return name - } - fun decorateName(name: ChatComponent): ChatComponent { + fun decorate(name: ChatComponent): ChatComponent { val displayName = BaseComponent() prefix?.let { displayName += it } displayName += name.apply { @@ -42,11 +33,4 @@ data class Team( suffix?.let { displayName += it } return displayName } - - fun canSee(other: Team?): Boolean { - if (other == null) return false - if (other.name == this.name && canSeeInvisibleTeam) return true - - return false - } } diff --git a/src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamVisibility.kt b/src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamVisibility.kt new file mode 100644 index 000000000..59f2acb56 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/scoreboard/team/TeamVisibility.kt @@ -0,0 +1,21 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 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.data.scoreboard.team + +import de.bixilon.minosoft.data.scoreboard.NameTagVisibilities + +data class TeamVisibility( + var invisibleTeam: Boolean = true, + var name: NameTagVisibilities = NameTagVisibilities.ALWAYS, +) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardScoreElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardScoreElement.kt index 76770baec..d0e8fe8b3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardScoreElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/scoreboard/ScoreboardScoreElement.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -54,7 +54,7 @@ class ScoreboardScoreElement( override fun forceSilentApply() { val entityName = ChatComponent.of(score.entity) - nameElement.text = score.team?.decorateName(entityName) ?: entityName + nameElement.text = score.team?.formatting?.decorate(entityName) ?: entityName scoreElement.text = TextComponent(score.value).color(ChatColors.RED) diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreTeamChangeEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreTeamChangeEvent.kt index fdff135ba..e15234ff1 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreTeamChangeEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreTeamChangeEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -15,7 +15,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard import de.bixilon.minosoft.data.scoreboard.ScoreboardObjective import de.bixilon.minosoft.data.scoreboard.ScoreboardScore -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamMemberEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamMemberEvent.kt index a123ce776..2dfd82428 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamMemberEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamMemberEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamRemoveEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamRemoveEvent.kt index f36cf2e7e..c02779905 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamRemoveEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/ScoreboardTeamRemoveEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamCreateEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamCreateEvent.kt index 6f0f11b56..b206ab98e 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamCreateEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamCreateEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard.team -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberAddEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberAddEvent.kt index 56fc0ffe2..57a69486c 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberAddEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberAddEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard.team -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.scoreboard.ScoreboardTeamMemberEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberRemoveEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberRemoveEvent.kt index 16f377f6e..b0d2e7d6c 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberRemoveEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamMemberRemoveEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard.team -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.scoreboard.ScoreboardTeamMemberEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamUpdateEvent.kt b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamUpdateEvent.kt index 2713dd6fc..53eee7063 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamUpdateEvent.kt +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/scoreboard/team/TeamUpdateEvent.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 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. * @@ -13,7 +13,7 @@ package de.bixilon.minosoft.modding.event.events.scoreboard.team -import de.bixilon.minosoft.data.scoreboard.Team +import de.bixilon.minosoft.data.scoreboard.team.Team import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/CreateTeamS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/CreateTeamS2CP.kt index 004e1316a..0c914604c 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/CreateTeamS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/CreateTeamS2CP.kt @@ -16,8 +16,10 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.scoreboard.teams import de.bixilon.kutil.bit.BitByte.isBitMask import de.bixilon.kutil.collections.CollectionUtil.toSynchronizedSet import de.bixilon.minosoft.data.scoreboard.NameTagVisibilities -import de.bixilon.minosoft.data.scoreboard.Team import de.bixilon.minosoft.data.scoreboard.TeamCollisionRules +import de.bixilon.minosoft.data.scoreboard.team.Team +import de.bixilon.minosoft.data.scoreboard.team.TeamFormatting +import de.bixilon.minosoft.data.scoreboard.team.TeamVisibility import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.RGBColor @@ -106,16 +108,14 @@ class CreateTeamS2CP( override fun handle(connection: PlayConnection) { + val visibility = TeamVisibility(canSeeInvisibleTeam, nameTagVisibility) + val formatting = TeamFormatting(displayName, prefix, suffix, color) val team = Team( name = name, - displayName = displayName, - prefix = prefix, - suffix = suffix, + formatting = formatting, friendlyFire = friendlyFire, - canSeeInvisibleTeam = canSeeInvisibleTeam, - collisionRule = collisionRule, - nameTagVisibility = nameTagVisibility, - color = color, + collisions = collisionRule, + visibility = visibility, members = members.toSynchronizedSet(), ) connection.scoreboard.teams[name] = team diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/UpdateTeamS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/UpdateTeamS2CP.kt index a57751716..465127422 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/UpdateTeamS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/scoreboard/teams/UpdateTeamS2CP.kt @@ -96,14 +96,14 @@ class UpdateTeamS2CP( override fun handle(connection: PlayConnection) { val team = connection.scoreboard.teams[name] ?: return - team.displayName = displayName - team.prefix = prefix - team.suffix = suffix + val formatting = team.formatting + formatting.name = displayName; formatting.prefix = prefix; formatting.suffix = suffix; formatting.color = color + + val visibility = team.visibility + visibility.invisibleTeam = canSeeInvisibleTeam; visibility.name = nameTagVisibility + team.friendlyFire = friendlyFire - team.canSeeInvisibleTeam = canSeeInvisibleTeam - team.collisionRule = collisionRule - team.nameTagVisibility = nameTagVisibility - team.color = color + team.collisions = collisionRule connection.events.fire(TeamUpdateEvent(connection, team)) }