Skip to content

Commit e94ac83

Browse files
Spigot Changes
1 parent 0c0fc39 commit e94ac83

5 files changed

Lines changed: 131 additions & 134 deletions

File tree

README.md

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,7 @@
1-
<!-- Title + Logo -->
2-
<br />
3-
<div align="center">
1+
# YepSpigot
42

5-
# YepPaper
6-
7-
A PaperMC client for unilock's [YepLib](https://github.com/unilock/YepLib)
8-
9-
[![Latest Release][release-shield]][latest-release-url]
10-
[![Build Status][actions-shield]][actions-url]
11-
[![Kotlin][kotlin-shield]](#)
12-
<!-- [![Last Commit][last-commit-shield]][last-commit-url]
13-
[![License][license-shield]][license-url] -->
14-
</div>
15-
16-
## Downloads
17-
18-
19-
20-
Please visit the [releases][releases-url] page to download the latest release.
21-
22-
<details>
23-
<summary>Nightly Builds</summary>
24-
<br>
25-
26-
[Nightly builds][actions-url] are available from github actions.
27-
28-
A permalink to the latest nightly build can be found [here][nightly-download-url].
29-
30-
</details>
31-
32-
> [!WARNING]
33-
> Nightly builds are **experimental** and **untested**.
34-
> Builds are distributing for testing purposes only, and may not be stable.
3+
A Spigot server plugin for unilock's [YepLib](https://github.com/unilock/YepLib)
354

365
## Usage
376

38-
YepPaper has no commands or config; just install it on your paper servers and it will connect to YepLib. Just make sure to install [YepLib](https://github.com/unilock/YepLib) on your Velocity proxy.
39-
40-
## License
41-
This project is licensed under the [MIT License](LICENSE).
42-
43-
<!-- urls -->
44-
<!-- shields -->
45-
[release-shield]: https://img.shields.io/github/v/release/elliotnash/YepPaper?style=for-the-badge
46-
[actions-shield]: https://img.shields.io/github/actions/workflow/status/elliotnash/YepPaper/build.yml?style=for-the-badge
47-
[kotlin-shield]: https://img.shields.io/badge/Kotlin-%237F52FF.svg?logo=kotlin&logoColor=white&style=for-the-badge
48-
49-
[releases-url]: https://github.com/elliotnash/YepPaper/releases
50-
[latest-release-url]: https://github.com/elliotnash/YepPaper/releases/latest
51-
[actions-url]: https://github.com/elliotnash/YepPaper/actions
52-
53-
[nightly-download-url]: https://nightly.link/elliotnash/YepPaper/workflows/build/main/YepPaper.jar.zip
7+
Just install on your Spigot server and it will connect to YepLib. Install [YepLib](https://github.com/unilock/YepLib) on your Velocity proxy.

build.gradle.kts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
id("net.kyori.blossom") version "2.1.0"
77
}
88

9-
group = "org.elliotnash.yeppaper"
9+
group = "org.elliotnash.yepspigot"
1010
version = "1.0.0"
1111

1212
// Replace variables in resource-templates dir
@@ -23,8 +23,8 @@ sourceSets {
2323
repositories {
2424
mavenCentral()
2525
maven {
26-
name = "papermc"
27-
url = uri("https://repo.papermc.io/repository/maven-public/")
26+
name = "spigotmc"
27+
url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
2828
}
2929
maven {
3030
name = "jitpack"
@@ -36,9 +36,9 @@ dependencies {
3636
testImplementation(kotlin("test"))
3737
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
3838

39-
implementation("com.github.CroaBeast:AdvancementInfo:main-SNAPSHOT")
40-
41-
compileOnly("io.papermc.paper:paper-api:1.20.6-R0.1-SNAPSHOT")
39+
compileOnly("org.spigotmc:spigot-api:1.20.6-R0.1-SNAPSHOT")
40+
implementation("net.kyori:adventure-api:4.17.0")
41+
implementation("net.kyori:adventure-text-minimessage:4.17.0")
4242
}
4343

4444
tasks.test {

src/main/kotlin/org/elliotnash/yeppaper/YepPaperPlugin.kt

Lines changed: 0 additions & 77 deletions
This file was deleted.
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package org.elliotnash.yepspigot
2+
3+
import org.bukkit.Bukkit
4+
import org.bukkit.advancement.Advancement
5+
import org.bukkit.event.EventHandler
6+
import org.bukkit.event.Listener
7+
import org.bukkit.event.entity.PlayerDeathEvent
8+
import org.bukkit.event.player.PlayerAdvancementDoneEvent
9+
import org.bukkit.plugin.java.JavaPlugin
10+
import java.lang.reflect.Field
11+
12+
const val YEP_ADV_FORMAT = "%s\u241E%s\u241F%s\u241F%s\u241F%s\u241F%s"
13+
const val YEP_DEATH_FORMAT = "%s\u241E%s\u241F%s\u241F%s"
14+
15+
const val YEP_GENERIC = "yep:generic"
16+
const val YEP_ADVANCEMENT = "yep:advancement"
17+
const val YEP_DEATH = "yep:death"
18+
19+
const val YEP_ADV_DEFAULT = "DEFAULT"
20+
const val YEP_ADV_GOAL = "GOAL"
21+
const val YEP_ADV_TASK = "TASK"
22+
const val YEP_ADV_CHALLENGE = "CHALLENGE"
23+
24+
class YepPaperPlugin : JavaPlugin(), Listener {
25+
private val colorCodeRegex = "&[0-9a-fk-orx]".toRegex(RegexOption.IGNORE_CASE)
26+
27+
private var advancementField: Field? = null
28+
29+
override fun onEnable() {
30+
try {
31+
val craftAdvancementClass = Class.forName("org.bukkit.craftbukkit.v1_20_R3.advancement.CraftAdvancement")
32+
advancementField = craftAdvancementClass.getDeclaredField("advancement")
33+
advancementField?.isAccessible = true
34+
} catch (e: Exception) {
35+
logger.warning("Failed to access CraftAdvancement, advancement details may be limited")
36+
}
37+
Bukkit.getPluginManager().registerEvents(this, this)
38+
Bukkit.getMessenger().registerOutgoingPluginChannel(this, YEP_GENERIC)
39+
Bukkit.getMessenger().registerOutgoingPluginChannel(this, YEP_ADVANCEMENT)
40+
Bukkit.getMessenger().registerOutgoingPluginChannel(this, YEP_DEATH)
41+
logger.info("Yup paper enabled")
42+
}
43+
44+
@EventHandler
45+
fun onPlayerDeath(event: PlayerDeathEvent) {
46+
val entity = event.entity
47+
val deathMsg = event.deathMessage
48+
val message = String.format(
49+
YEP_DEATH_FORMAT,
50+
YEP_DEATH,
51+
entity.name,
52+
removeColorCodes(entity.displayName),
53+
if (deathMsg != null) removeColorCodes(deathMsg) else ""
54+
)
55+
56+
entity.sendPluginMessage(this, YEP_GENERIC, message.toByteArray(Charsets.UTF_8))
57+
}
58+
59+
@EventHandler
60+
fun onPlayerAdvancement(event: PlayerAdvancementDoneEvent) {
61+
val advancement = event.advancement
62+
val key = advancement.key
63+
val player = event.player
64+
65+
val (frameType, title, description) = getAdvancementInfo(advancement)
66+
67+
val message: String = String.format(
68+
YEP_ADV_FORMAT,
69+
YEP_ADVANCEMENT,
70+
player.name,
71+
removeColorCodes(player.displayName),
72+
frameType,
73+
removeColorCodes(title),
74+
removeColorCodes(description)
75+
)
76+
77+
player.sendPluginMessage(this, YEP_GENERIC, message.toByteArray(Charsets.UTF_8))
78+
}
79+
80+
private fun getAdvancementInfo(advancement: Advancement): Triple<String, String, String> {
81+
val defaultTitle = advancement.key.key
82+
val defaultDesc = ""
83+
84+
return try {
85+
val field = advancementField ?: return Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
86+
val netAdvancement = field.get(advancement) as? Any ?: return Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
87+
88+
val displayMethod = netAdvancement.javaClass.getDeclaredMethod("getDisplay")
89+
val display = displayMethod.invoke(netAdvancement) as? Any
90+
91+
if (display == null) {
92+
return Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
93+
}
94+
95+
val frameMethod = display.javaClass.getDeclaredMethod("getFrame")
96+
val frame = frameMethod.invoke(display) as? Any
97+
98+
val frameType = when (frame?.toString()) {
99+
"challenge" -> YEP_ADV_CHALLENGE
100+
"goal" -> YEP_ADV_GOAL
101+
"task" -> YEP_ADV_TASK
102+
else -> YEP_ADV_DEFAULT
103+
}
104+
105+
val titleMethod = display.javaClass.getDeclaredMethod("getTitle")
106+
val descMethod = display.javaClass.getDeclaredMethod("getDescription")
107+
108+
val title = titleMethod.invoke(display)?.toString() ?: defaultTitle
109+
val description = descMethod.invoke(display)?.toString() ?: defaultDesc
110+
111+
Triple(frameType, title, description)
112+
} catch (e: Exception) {
113+
Triple(YEP_ADV_DEFAULT, defaultTitle, defaultDesc)
114+
}
115+
}
116+
117+
private fun removeColorCodes(input: String): String {
118+
return colorCodeRegex.replace(input, "")
119+
}
120+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
name: YepPaper
1+
name: YepSpigot
22
version: "{{ version }}"
3-
main: org.elliotnash.yeppaper.YepPaperPlugin
3+
main: org.elliotnash.yepspigot YepPaperPlugin
44
api-version: 1.20.6
55
author: Elliot
66
description: A plugin for sending server events to a Velocity Proxy.

0 commit comments

Comments
 (0)