WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 374f6ed

Browse files
committed
feat: override names with packets for npc
1 parent 86cc987 commit 374f6ed

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/main/kotlin/cc/modlabs/kpaper/npc/NPC.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,10 @@ interface NPC {
510510
*/
511511
fun removeVisiblePlayer(player: Player)
512512

513+
fun overrideCustomName(customName: String, viewer: Player)
514+
515+
fun overrideDescription(description: String, viewer: Player)
516+
513517
/**
514518
* Gets the set of players who can see this NPC.
515519
* Returns null if the NPC is visible to all players.

src/main/kotlin/cc/modlabs/kpaper/npc/NPCImpl.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import cc.modlabs.kpaper.extensions.timer
44
import dev.fruxz.stacked.text
55
import net.kyori.adventure.text.Component
66
import cc.modlabs.kpaper.main.PluginInstance
7+
import cc.modlabs.kpaper.util.getLogger
8+
import com.github.retrooper.packetevents.PacketEvents
9+
import com.github.retrooper.packetevents.protocol.entity.data.EntityData
10+
import com.github.retrooper.packetevents.protocol.entity.data.EntityDataTypes
11+
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityMetadata
712
import org.bukkit.Bukkit
813
import org.bukkit.Location
914
import org.bukkit.Material
@@ -17,6 +22,8 @@ import org.bukkit.inventory.ItemStack
1722
import org.bukkit.inventory.MainHand
1823
import org.bukkit.scheduler.BukkitTask
1924
import org.bukkit.util.Vector
25+
import java.util.ArrayList
26+
import java.util.Optional
2027
import java.util.UUID
2128
import kotlin.math.atan2
2229

@@ -67,6 +74,9 @@ class NPCImpl(
6774
private var nearbyFollowCheckInterval = 10L // Ticks between checking for nearby players (0.5 seconds - more responsive)
6875
private var aiMonitoringTask: BukkitTask? = null // Task to continuously monitor and re-enable AI
6976

77+
private val api = PacketEvents.getAPI()
78+
private val playerManager = api.playerManager
79+
7080
// Visibility state
7181
// null = visible to all players, non-null = only visible to players in the set
7282
private var visibleToPlayers: MutableSet<Player>? = null
@@ -1501,6 +1511,32 @@ class NPCImpl(
15011511
player.hideEntity(PluginInstance, entity)
15021512
}
15031513

1514+
override fun overrideCustomName(customName: String, viewer: Player) {
1515+
val metadataList = ArrayList<EntityData<*>>()
1516+
1517+
val entity = this.getEntity() ?: return
1518+
1519+
val component = Component.text(customName)
1520+
1521+
metadataList.add(EntityData(2, EntityDataTypes.OPTIONAL_ADV_COMPONENT, Optional.of(component)))
1522+
1523+
val customNamePacket = WrapperPlayServerEntityMetadata(entity.entityId, metadataList)
1524+
playerManager.sendPacket(viewer, customNamePacket)
1525+
}
1526+
1527+
override fun overrideDescription(description: String, viewer: Player) {
1528+
val metadataList = ArrayList<EntityData<*>>()
1529+
1530+
val entity = this.getEntity() ?: return
1531+
1532+
val component = Component.text(description)
1533+
1534+
metadataList.add(EntityData(19, EntityDataTypes.OPTIONAL_ADV_COMPONENT, Optional.of(component)))
1535+
1536+
val customNamePacket = WrapperPlayServerEntityMetadata(entity.entityId, metadataList)
1537+
playerManager.sendPacket(viewer, customNamePacket)
1538+
}
1539+
15041540
override fun getVisiblePlayers(): Set<Player>? {
15051541
return visibleToPlayers?.toSet()
15061542
}

0 commit comments

Comments
 (0)