Skip to content

Commit 12fe2ed

Browse files
committed
refactor: remove bonfire state-logic in favor of ItemModel stuff
1 parent 069e2e3 commit 12fe2ed

File tree

6 files changed

+15
-141
lines changed

6 files changed

+15
-141
lines changed

src/main/kotlin/com/mineinabyss/bonfire/BonfireCommands.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.mineinabyss.blocky.helpers.GenericHelpers.toBlockCenterLocation
44
import com.mineinabyss.bonfire.components.Bonfire
55
import com.mineinabyss.bonfire.components.BonfireDebug
66
import com.mineinabyss.bonfire.components.BonfireRespawn
7-
import com.mineinabyss.bonfire.extensions.BonfirePacketHelpers
87
import com.mineinabyss.bonfire.extensions.updateBonfireState
98
import com.mineinabyss.geary.papermc.datastore.decode
109
import com.mineinabyss.geary.papermc.datastore.encode
@@ -16,7 +15,6 @@ import com.mineinabyss.geary.papermc.tracking.entities.toGearyOrNull
1615
import com.mineinabyss.geary.papermc.withGeary
1716
import com.mineinabyss.geary.serialization.setPersisting
1817
import com.mineinabyss.idofront.commands.brigadier.commands
19-
import com.mineinabyss.idofront.commands.brigadier.context.IdoCommandContext
2018
import com.mineinabyss.idofront.commands.brigadier.executes
2119
import com.mineinabyss.idofront.commands.brigadier.playerExecutes
2220
import com.mineinabyss.idofront.messaging.error
@@ -29,8 +27,6 @@ import com.mineinabyss.idofront.util.to
2927
import com.mojang.brigadier.arguments.StringArgumentType
3028
import io.papermc.paper.command.brigadier.argument.ArgumentTypes
3129
import org.bukkit.Bukkit
32-
import org.bukkit.Location
33-
import org.bukkit.OfflinePlayer
3430
import org.bukkit.entity.ItemDisplay
3531
import org.bukkit.entity.Player
3632

@@ -125,7 +121,6 @@ object BonfireCommands {
125121
}
126122
bonfire.bonfirePlayers += offlinePlayer.uniqueId
127123
bonfireEntity.updateBonfireState()
128-
BonfirePacketHelpers.sendAddonPacket(bonfireEntity)
129124
sender.success("Set respawn point for ${offlinePlayer.name} to $x $y $z in ${player.world.name}")
130125
}
131126
}
Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,10 @@
11
package com.mineinabyss.bonfire.components
22

3-
import com.charleskorn.kaml.YamlComment
43
import com.mineinabyss.bonfire.bonfire
5-
import com.mineinabyss.geary.papermc.tracking.items.ItemTrackingModule
6-
import com.mineinabyss.geary.prefabs.PrefabKey
7-
import com.mineinabyss.geary.prefabs.serializers.PrefabKeySerializer
84
import com.mineinabyss.idofront.serialization.DurationSerializer
95
import com.mineinabyss.idofront.serialization.UUIDSerializer
10-
import io.papermc.paper.datacomponent.DataComponentTypes
116
import kotlinx.serialization.SerialName
127
import kotlinx.serialization.Serializable
13-
import net.kyori.adventure.key.Key
14-
import org.bukkit.Material
15-
import org.bukkit.inventory.ItemStack
168
import java.util.*
179
import kotlin.time.Duration
1810

@@ -23,30 +15,4 @@ data class Bonfire(
2315
val bonfirePlayers: MutableList<@Serializable(UUIDSerializer::class) UUID> = mutableListOf(),
2416
val maxPlayerCount: Int = bonfire.config.maxPlayerCount,
2517
val bonfireExpirationTime: @Serializable(with = DurationSerializer::class) Duration = bonfire.config.bonfireExpirationTime,
26-
val states: BonfireStates,
27-
@YamlComment("Item to spawn in addition to bonfire, mainly for visually representing player-count")
28-
val addons: List<@Serializable(PrefabKeySerializer::class) PrefabKey> = emptyList()
29-
) {
30-
@Serializable
31-
data class BonfireStates(
32-
val unlit: @Serializable(PrefabKeySerializer::class) PrefabKey,
33-
val lit: @Serializable(PrefabKeySerializer::class) PrefabKey,
34-
val set: @Serializable(PrefabKeySerializer::class) PrefabKey,
35-
) {
36-
37-
fun unlitItem(itemTracking: ItemTrackingModule) = itemTracking.createItem(unlit)
38-
?: ItemStack.of(Material.PAPER).apply {
39-
setData(DataComponentTypes.ITEM_MODEL, Key.key(unlit.full))
40-
}
41-
42-
fun litItem(itemTracking: ItemTrackingModule) = itemTracking.createItem(lit)
43-
?: ItemStack.of(Material.PAPER).apply {
44-
setData(DataComponentTypes.ITEM_MODEL, Key.key(lit.full))
45-
}
46-
47-
fun setItem(itemTracking: ItemTrackingModule) = itemTracking.createItem(set)
48-
?: ItemStack.of(Material.PAPER).apply {
49-
setData(DataComponentTypes.ITEM_MODEL, Key.key(set.full))
50-
}
51-
}
52-
}
18+
)

src/main/kotlin/com/mineinabyss/bonfire/extensions/BonfireHelpers.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,19 @@ import com.mineinabyss.bonfire.components.BonfireRemoved
99
import com.mineinabyss.bonfire.components.BonfireRespawn
1010
import com.mineinabyss.geary.papermc.tracking.entities.toGeary
1111
import com.mineinabyss.geary.papermc.tracking.entities.toGearyOrNull
12-
import com.mineinabyss.geary.papermc.tracking.items.ItemTracking
1312
import com.mineinabyss.geary.papermc.withGeary
14-
import com.mineinabyss.idofront.entities.toPlayer
1513
import io.papermc.paper.datacomponent.DataComponentTypes
14+
import io.papermc.paper.datacomponent.item.CustomModelData
1615
import kotlinx.coroutines.delay
17-
import net.kyori.adventure.key.Key
1816
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket
1917
import net.minecraft.network.syncher.EntityDataSerializers
2018
import net.minecraft.network.syncher.SynchedEntityData
21-
import org.bukkit.Material
2219
import org.bukkit.craftbukkit.entity.CraftPlayer
2320
import org.bukkit.craftbukkit.inventory.CraftItemStack
2421
import org.bukkit.entity.Display
2522
import org.bukkit.entity.Entity
2623
import org.bukkit.entity.ItemDisplay
2724
import org.bukkit.entity.Player
28-
import org.bukkit.inventory.ItemStack
2925

3026
fun Iterable<Entity>.forEachBonfire(action: (ItemDisplay) -> Unit) {
3127
for (element in this.filterIsBonfire()) action(element)
@@ -68,26 +64,30 @@ fun ItemDisplay.updateBonfireState() {
6864
withGeary {
6965
val plugin = bonfire.plugin
7066
val bonfire = toGearyOrNull()?.get<Bonfire>() ?: return
71-
val itemTracking = getAddon(ItemTracking)
7267

7368
when {// Set the base-furniture item to the correct state
7469
bonfire.bonfirePlayers.isEmpty() -> {
7570
brightness = toGearyOrNull()?.get<BlockyFurniture>()?.properties?.brightness
76-
setItemStack(bonfire.states.unlitItem(itemTracking))
7771
}
7872
else -> {
7973
brightness = Display.Brightness(15, 15)
80-
setItemStack(bonfire.states.litItem(itemTracking))
74+
setItemStack(itemStack.apply {
75+
val cmd = CustomModelData.customModelData().addFloat(bonfire.bonfirePlayers.size.toFloat()).addFlag(true).addFlag(false).build()
76+
setData(DataComponentTypes.CUSTOM_MODEL_DATA, cmd)
77+
})
8178

8279
// Set state via packets to 'set' for all online players currently at the bonfire
83-
val stateItem = bonfire.states.setItem(itemTracking)
80+
val stateItem = itemStack.apply {
81+
val cmd = CustomModelData.customModelData().addFloat(bonfire.bonfirePlayers.size.toFloat()).addFlag(true).addFlag(true).build()
82+
setData(DataComponentTypes.CUSTOM_MODEL_DATA, cmd)
83+
}
8484
val metadataPacket = ClientboundSetEntityDataPacket(entityId,
8585
listOf(SynchedEntityData.DataValue(23, EntityDataSerializers.ITEM_STACK, CraftItemStack.asNMSCopy(stateItem)))
8686
)
8787

8888
plugin.launch {
8989
delay(2.ticks)
90-
bonfire.bonfirePlayers.mapNotNull { it.toPlayer()?.takeIf( { p -> p.canSee(this@updateBonfireState) }) }.forEach {
90+
this@updateBonfireState.trackedBy.filter { it.uniqueId in bonfire.bonfirePlayers }.forEach {
9191
(it as CraftPlayer).handle.connection.send(metadataPacket)
9292
}
9393
}

src/main/kotlin/com/mineinabyss/bonfire/extensions/BonfirePacketHelpers.kt

Lines changed: 0 additions & 79 deletions
This file was deleted.

src/main/kotlin/com/mineinabyss/bonfire/listeners/BonfireListener.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import com.mineinabyss.blocky.api.events.furniture.BlockyFurnitureInteractEvent
77
import com.mineinabyss.blocky.api.events.furniture.BlockyFurniturePlaceEvent
88
import com.mineinabyss.bonfire.bonfire
99
import com.mineinabyss.bonfire.components.*
10-
import com.mineinabyss.bonfire.extensions.*
10+
import com.mineinabyss.bonfire.extensions.canBreakBonfire
11+
import com.mineinabyss.bonfire.extensions.isBonfire
12+
import com.mineinabyss.bonfire.extensions.removeOldBonfire
13+
import com.mineinabyss.bonfire.extensions.updateBonfireState
1114
import com.mineinabyss.geary.actions.ActionGroupContext
1215
import com.mineinabyss.geary.actions.execute
1316
import com.mineinabyss.geary.helpers.with
@@ -28,7 +31,6 @@ import com.mineinabyss.idofront.messaging.error
2831
import com.mineinabyss.idofront.messaging.success
2932
import com.mineinabyss.idofront.nms.nbt.editOfflinePDC
3033
import com.mineinabyss.idofront.nms.nbt.getOfflinePDC
31-
import com.mineinabyss.idofront.plugin.Plugins
3234
import org.bukkit.Bukkit
3335
import org.bukkit.attribute.Attribute
3436
import org.bukkit.entity.ItemDisplay
@@ -149,7 +151,6 @@ class BonfireListener : Listener {
149151
gearyPlayer.encodeComponentsTo(player)
150152
}
151153
baseEntity.updateBonfireState()
152-
BonfirePacketHelpers.sendAddonPacket(baseEntity)
153154
}
154155
}
155156

src/main/kotlin/com/mineinabyss/bonfire/listeners/PlayerListener.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.mineinabyss.bonfire.bonfire
55
import com.mineinabyss.bonfire.components.Bonfire
66
import com.mineinabyss.bonfire.components.BonfireRemoved
77
import com.mineinabyss.bonfire.components.BonfireRespawn
8-
import com.mineinabyss.bonfire.extensions.BonfirePacketHelpers
98
import com.mineinabyss.bonfire.extensions.filterIsBonfire
109
import com.mineinabyss.bonfire.extensions.isBonfire
1110
import com.mineinabyss.bonfire.extensions.updateBonfireState
@@ -17,7 +16,6 @@ import com.mineinabyss.idofront.entities.rightClicked
1716
import com.mineinabyss.idofront.messaging.error
1817
import com.mineinabyss.idofront.messaging.info
1918
import io.papermc.paper.event.player.PlayerTrackEntityEvent
20-
import io.papermc.paper.event.player.PlayerUntrackEntityEvent
2119
import kotlinx.coroutines.delay
2220
import org.bukkit.block.Block
2321
import org.bukkit.block.BlockFace
@@ -88,13 +86,6 @@ class PlayerListener : Listener {
8886
fun PlayerTrackEntityEvent.onTrackBonfire() {
8987
val furniture = entity as? ItemDisplay ?: return
9088
furniture.updateBonfireState()
91-
BonfirePacketHelpers.sendAddonPacket(furniture, player)
92-
}
93-
94-
@EventHandler
95-
fun PlayerUntrackEntityEvent.onUntrackBonfire() {
96-
val furniture = entity as? ItemDisplay ?: return
97-
BonfirePacketHelpers.removeAddonPacket(furniture, player)
9889
}
9990

10091
@EventHandler(priority = EventPriority.HIGHEST)

0 commit comments

Comments
 (0)