Skip to content

Commit 842e12e

Browse files
committed
Command updates.
1 parent a314bcf commit 842e12e

File tree

37 files changed

+742
-1934
lines changed

37 files changed

+742
-1934
lines changed

api/bukkit-api/src/main/java/kr/toxicity/hud/api/bukkit/nms/NMS.java

+1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,5 @@ public interface NMS extends VolatileCodeHandler {
2525
@NotNull NMSVersion getVersion();
2626

2727
void registerCommand(@NotNull CommandModule<BetterCommandSource> module);
28+
void syncCommands(@NotNull Player player);
2829
}

api/standard-api/src/main/java/kr/toxicity/hud/api/BetterHudBootstrap.java

-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package kr.toxicity.hud.api;
22

33
import kr.toxicity.command.BetterCommandSource;
4-
import kr.toxicity.command.CommandModule;
54
import kr.toxicity.command.SenderType;
65
import kr.toxicity.hud.api.adapter.WorldWrapper;
76
import kr.toxicity.hud.api.player.HudPlayer;
@@ -199,6 +198,4 @@ public boolean hasPermission(@NotNull String s) {
199198
}
200199
};
201200
}
202-
203-
void registerCommand(@NotNull CommandModule<BetterCommandSource> module);
204201
}

api/standard-api/src/main/java/kr/toxicity/hud/api/manager/CompassManager.java

+5
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,9 @@ public interface CompassManager {
2828
* @return default compass
2929
*/
3030
@NotNull @Unmodifiable Set<Compass> getDefaultCompasses();
31+
/**
32+
* Gets all compass.
33+
* @return all compass
34+
*/
35+
@NotNull @Unmodifiable Set<Compass> getAllCompasses();
3136
}

api/standard-api/src/main/java/kr/toxicity/hud/api/manager/HudManager.java

+6
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ public interface HudManager {
2929
* @return default hud
3030
*/
3131
@NotNull @Unmodifiable Set<Hud> getDefaultHuds();
32+
33+
/**
34+
* Gets all hud.
35+
* @return all hud
36+
*/
37+
@NotNull @Unmodifiable Set<Hud> getAllHuds();
3238
}

api/standard-api/src/main/java/kr/toxicity/hud/api/manager/PopupManager.java

+6
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ public interface PopupManager {
2929
* @return default popups
3030
*/
3131
@NotNull @Unmodifiable Set<Popup> getDefaultPopups();
32+
33+
/**
34+
* Gets all popup.
35+
* @return all popups
36+
*/
37+
@NotNull @Unmodifiable Set<Popup> getAllPopups();
3238
}

bootstrap/bukkit/src/main/kotlin/kr/toxicity/hud/bootstrap/bukkit/BukkitBootstrapImpl.kt

+12-40
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import kr.toxicity.hud.api.BetterHudLogger
77
import kr.toxicity.hud.api.adapter.WorldWrapper
88
import kr.toxicity.hud.api.bukkit.BukkitBootstrap
99
import kr.toxicity.hud.api.bukkit.bedrock.BedrockAdapter
10-
import kr.toxicity.hud.api.bukkit.event.*
10+
import kr.toxicity.hud.api.bukkit.event.HudPlayerJoinEvent
11+
import kr.toxicity.hud.api.bukkit.event.HudPlayerQuitEvent
12+
import kr.toxicity.hud.api.bukkit.event.PluginReloadStartEvent
13+
import kr.toxicity.hud.api.bukkit.event.PluginReloadedEvent
1114
import kr.toxicity.hud.api.bukkit.nms.NMS
1215
import kr.toxicity.hud.api.bukkit.nms.NMSVersion
1316
import kr.toxicity.hud.api.placeholder.HudPlaceholder
@@ -38,10 +41,6 @@ import net.kyori.adventure.text.Component
3841
import net.kyori.adventure.text.event.ClickEvent
3942
import org.bstats.bukkit.Metrics
4043
import org.bukkit.Bukkit
41-
import org.bukkit.command.Command
42-
import org.bukkit.command.CommandSender
43-
import org.bukkit.command.ConsoleCommandSender
44-
import org.bukkit.command.TabExecutor
4544
import org.bukkit.entity.Player
4645
import org.bukkit.event.EventHandler
4746
import org.bukkit.event.EventPriority
@@ -57,7 +56,6 @@ import java.net.URLClassLoader
5756
import java.net.http.HttpClient
5857
import java.net.http.HttpRequest
5958
import java.net.http.HttpResponse
60-
import java.util.concurrent.CompletableFuture
6159
import java.util.function.Function
6260

6361
@Suppress("UNUSED")
@@ -267,32 +265,7 @@ class BukkitBootstrapImpl : BukkitBootstrap, JavaPlugin() {
267265
}
268266
}
269267
}
270-
getCommand("betterhud")?.setExecutor(object : TabExecutor {
271-
override fun onCommand(p0: CommandSender, p1: Command, p2: String, p3: Array<String>): Boolean {
272-
CommandManager.command.execute(p0.toWrapper() ?: return false, p3.toList())
273-
return true
274-
}
275-
276-
private fun CommandSender.toWrapper() = when (this) {
277-
is Player -> PlayerManagerImpl.getHudPlayer(uniqueId)
278-
is ConsoleCommandSender -> object {
279-
override fun type(): CommandSourceWrapper.Type = CommandSourceWrapper.Type.CONSOLE
280-
override fun audience(): Audience = this@BukkitBootstrapImpl.console()
281-
override fun isOp(): Boolean = true
282-
override fun hasPermission(perm: String): Boolean = true
283-
}
284-
else -> null
285-
}
286-
287-
override fun onTabComplete(
288-
p0: CommandSender,
289-
p1: Command,
290-
p2: String,
291-
p3: Array<String>
292-
): List<String>? {
293-
return CommandManager.command.tabComplete(p0.toWrapper() ?: return null, p3.toList())
294-
}
295-
})
268+
nms.registerCommand(CommandManager.module)
296269
core.start()
297270
scheduler.asyncTask {
298271
core.reload()
@@ -314,17 +287,16 @@ class BukkitBootstrapImpl : BukkitBootstrap, JavaPlugin() {
314287
if (ConfigManagerImpl.disableToBedrockPlayer && bedrockAdapter.isBedrockPlayer(player.uniqueId)) return
315288
val adaptedPlayer = if (isFolia) nms.getFoliaAdaptedPlayer(player) else player
316289
PlayerManagerImpl.addHudPlayer(adaptedPlayer.uniqueId) {
317-
CompletableFuture.supplyAsync {
318-
val impl = HudPlayerBukkit(adaptedPlayer, if (player is Audience) player else audiences.player(player))
290+
val impl = HudPlayerBukkit(adaptedPlayer, if (player is Audience) player else audiences.player(player))
291+
asyncTask {
319292
DatabaseManagerImpl.currentDatabase.load(impl)
320293
task {
321-
taskLater(20) {
322-
sendResourcePack(impl)
323-
}
294+
sendResourcePack(impl)
295+
nms.syncCommands(player)
324296
HudPlayerJoinEvent(impl).call()
325297
}
326-
impl
327-
}.join()
298+
}
299+
impl
328300
}
329301
}
330302

@@ -348,7 +320,7 @@ class BukkitBootstrapImpl : BukkitBootstrap, JavaPlugin() {
348320
override fun sendResourcePack(hudPlayer: HudPlayer) {
349321
PackUploader.server?.let {
350322
if (nms.version >= NMSVersion.V1_20_R3) {
351-
(hudPlayer.handle() as Player).setResourcePack(it.uuid, it.url, it.digest, null as? String, false)
323+
(hudPlayer.handle() as Player).setResourcePack(it.uuid, it.url, it.digest, null, false)
352324
} else {
353325
(hudPlayer.handle() as Player).setResourcePack(it.url, it.digest, null, false)
354326
}

bootstrap/bukkit/src/main/resources/plugin.yml

+1-11
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ api-version: 1.17
55
author: toxicity
66
description: Make a hud in minecraft!
77
folia-supported: true
8+
load: STARTUP
89
website: "https://www.spigotmc.org/resources/115559"
910
softdepend:
1011
- MythicLib
@@ -23,12 +24,6 @@ softdepend:
2324
- SkinsRestorer
2425
- Parties
2526
- GPS
26-
commands:
27-
betterhud:
28-
aliases:
29-
- hud
30-
description: BetterHud's command.
31-
usage: /<command>
3227
permissions:
3328
hud.help:
3429
description: Access to help command.
@@ -40,36 +35,31 @@ permissions:
4035
description: Access to hud command.
4136
default: op
4237
children:
43-
hud.hud.help: true
4438
hud.hud.add: true
4539
hud.hud.remove: true
4640
hud.compass:
4741
description: Access to compass command.
4842
default: op
4943
children:
50-
hud.compass.help: true
5144
hud.compass.add: true
5245
hud.compass.remove: true
5346
hud.turn:
5447
description: Access to turn command.
5548
default: op
5649
children:
57-
hud.turn.help: true
5850
hud.turn.on: true
5951
hud.turn.off: true
6052
hud.pointer:
6153
description: Access to pointer command.
6254
default: op
6355
children:
64-
hud.pointer.help: true
6556
hud.pointer.set: true
6657
hud.pointer.clear: true
6758
hud.pointer.remove: true
6859
hud.popup:
6960
description: Access to popup command.
7061
default: op
7162
children:
72-
hud.popup.help: true
7363
hud.popup.add: true
7464
hud.popup.remove: true
7565
hud.popup.show: true

bootstrap/fabric/src/main/kotlin/kr/toxicity/hud/bootstrap/fabric/FabricBootstrapImpl.kt

+18-19
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package kr.toxicity.hud.bootstrap.fabric
22

3-
import kr.toxicity.command.BetterCommandSource
4-
import kr.toxicity.command.CommandModule
53
import kr.toxicity.hud.BetterHudImpl
64
import kr.toxicity.hud.api.BetterHud
75
import kr.toxicity.hud.api.BetterHudAPI
@@ -14,12 +12,12 @@ import kr.toxicity.hud.api.volatilecode.VolatileCodeHandler
1412
import kr.toxicity.hud.bootstrap.fabric.manager.CompatibilityManager
1513
import kr.toxicity.hud.bootstrap.fabric.manager.ModuleManager
1614
import kr.toxicity.hud.bootstrap.fabric.player.HudPlayerFabric
15+
import kr.toxicity.hud.manager.CommandManager
1716
import kr.toxicity.hud.manager.DatabaseManagerImpl
1817
import kr.toxicity.hud.manager.PlayerManagerImpl
1918
import kr.toxicity.hud.pack.PackUploader
2019
import kr.toxicity.hud.util.*
2120
import net.fabricmc.api.DedicatedServerModInitializer
22-
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback
2321
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents
2422
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents
2523
import net.fabricmc.loader.api.FabricLoader
@@ -29,6 +27,7 @@ import net.kyori.adventure.resource.ResourcePackInfo
2927
import net.kyori.adventure.resource.ResourcePackRequest
3028
import net.kyori.adventure.text.Component
3129
import net.kyori.adventure.text.event.ClickEvent
30+
import net.minecraft.commands.CommandSourceStack
3231
import net.minecraft.core.registries.Registries
3332
import net.minecraft.resources.ResourceKey
3433
import net.minecraft.resources.ResourceLocation
@@ -46,7 +45,6 @@ import java.net.http.HttpClient
4645
import java.net.http.HttpRequest
4746
import java.net.http.HttpResponse
4847
import java.util.*
49-
import java.util.concurrent.CompletableFuture
5048
import java.util.concurrent.ConcurrentHashMap
5149

5250
class FabricBootstrapImpl : FabricBootstrap, DedicatedServerModInitializer {
@@ -80,8 +78,7 @@ class FabricBootstrapImpl : FabricBootstrap, DedicatedServerModInitializer {
8078

8179
private lateinit var server: MinecraftServer
8280
private lateinit var dataFolder: File
83-
lateinit var audiences: MinecraftServerAudiences
84-
private set
81+
private lateinit var audiences: MinecraftServerAudiences
8582
private lateinit var volatileCode: FabricVolatileCode
8683
private lateinit var version: String
8784
private lateinit var core: BetterHudImpl
@@ -101,6 +98,16 @@ class FabricBootstrapImpl : FabricBootstrap, DedicatedServerModInitializer {
10198
audiences = MinecraftServerAudiences.builder(it).build()
10299
volatileCode = FabricVolatileCode()
103100

101+
val dispatcher = it.commands.dispatcher
102+
CommandManager.module.build { s: CommandSourceStack ->
103+
when (val e = s.entity) {
104+
is ServerPlayer -> BetterHudAPI.inst().playerManager.getHudPlayer(e.uuid)
105+
null -> BetterHudAPI.inst().bootstrap().consoleSource()
106+
else -> null
107+
}
108+
}.forEach { node ->
109+
dispatcher.register(node)
110+
}
104111
core.start()
105112
ModuleManager.start()
106113
CompatibilityManager.start()
@@ -130,9 +137,6 @@ class FabricBootstrapImpl : FabricBootstrap, DedicatedServerModInitializer {
130137
scheduler.stopAll()
131138
logger.info("Mod disabled.")
132139
}
133-
CommandRegistrationCallback.EVENT.register { dispatcher, _, _ ->
134-
FabricCommand(this).register(dispatcher)
135-
}
136140
ServerPlayConnectionEvents.JOIN.register(ServerPlayConnectionEvents.Join { handler, _, _ ->
137141
val player = handler.player
138142
latestVersion?.let { latest ->
@@ -157,16 +161,14 @@ class FabricBootstrapImpl : FabricBootstrap, DedicatedServerModInitializer {
157161

158162
private fun register(player: ServerPlayer) {
159163
PlayerManagerImpl.addHudPlayer(player.uuid) {
160-
CompletableFuture.supplyAsync {
161-
val impl = HudPlayerFabric(server, player, audiences.audience(listOf(player)))
164+
val impl = HudPlayerFabric(server, player, audiences.audience(listOf(player)))
165+
asyncTask {
162166
DatabaseManagerImpl.currentDatabase.load(impl)
163167
task {
164-
taskLater(20) {
165-
sendResourcePack(impl)
166-
}
168+
sendResourcePack(impl)
167169
}
168-
impl
169-
}.join()
170+
}
171+
impl
170172
}
171173
}
172174
private fun disconnect(player: ServerPlayer) {
@@ -276,7 +278,4 @@ class FabricBootstrapImpl : FabricBootstrap, DedicatedServerModInitializer {
276278
isAccessible = true
277279
}[loader] as URLClassLoader
278280
}
279-
280-
override fun registerCommand(module: CommandModule<BetterCommandSource>) {
281-
}
282281
}

0 commit comments

Comments
 (0)