Skip to content

Commit e0848a4

Browse files
committed
feat: optional argument 'scaling' in disguise command (#218)
1 parent 7e26a21 commit e0848a4

File tree

4 files changed

+46
-39
lines changed

4 files changed

+46
-39
lines changed

core/src/main/kotlin/kr/toxicity/model/BetterModelPluginImpl.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,8 @@ abstract class BetterModelPluginImpl : AbstractBetterModelPlugin() {
9696

9797
override fun onDisable() {
9898
if (!firstLoad.get()) return
99-
Bukkit.getOnlinePlayers().forEach { BetterModel.registryOrNull(it.uniqueId)?.close() }
100-
ADVENTURE_PLATFORM?.close()
10199
props.managers.forEach(GlobalManager::end)
100+
ADVENTURE_PLATFORM?.close()
102101
}
103102

104103
override fun reload(info: ReloadInfo): ReloadResult {

core/src/main/kotlin/kr/toxicity/model/manager/CommandManager.kt

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import kr.toxicity.model.api.animation.AnimationIterator
1212
import kr.toxicity.model.api.animation.AnimationModifier
1313
import kr.toxicity.model.api.pack.PackZipper
1414
import kr.toxicity.model.api.tracker.EntityHideOption
15+
import kr.toxicity.model.api.tracker.ModelScaler
1516
import kr.toxicity.model.api.tracker.Tracker
1617
import kr.toxicity.model.api.tracker.TrackerModifier
1718
import kr.toxicity.model.api.version.MinecraftVersion
@@ -24,20 +25,20 @@ import org.bukkit.entity.LivingEntity
2425
import org.bukkit.entity.Player
2526
import org.bukkit.util.Vector
2627
import org.incendo.cloud.bukkit.data.MultipleEntitySelector
27-
import org.incendo.cloud.bukkit.parser.PlayerParser
28-
import org.incendo.cloud.bukkit.parser.location.LocationParser
29-
import org.incendo.cloud.bukkit.parser.selector.MultipleEntitySelectorParser
28+
import org.incendo.cloud.bukkit.parser.PlayerParser.playerParser
29+
import org.incendo.cloud.bukkit.parser.location.LocationParser.locationParser
30+
import org.incendo.cloud.bukkit.parser.selector.MultipleEntitySelectorParser.multipleEntitySelectorParser
3031
import org.incendo.cloud.context.CommandContext
31-
import org.incendo.cloud.parser.standard.BooleanParser
32-
import org.incendo.cloud.parser.standard.DoubleParser
33-
import org.incendo.cloud.parser.standard.EnumParser
34-
import org.incendo.cloud.parser.standard.StringParser
35-
import org.incendo.cloud.suggestion.SuggestionProvider
32+
import org.incendo.cloud.parser.standard.BooleanParser.booleanParser
33+
import org.incendo.cloud.parser.standard.DoubleParser.doubleParser
34+
import org.incendo.cloud.parser.standard.EnumParser.enumParser
35+
import org.incendo.cloud.parser.standard.StringParser.stringParser
36+
import org.incendo.cloud.suggestion.SuggestionProvider.blockingStrings
3637

3738
object CommandManager : GlobalManager {
3839

39-
private val modelSuggestion = SuggestionProvider.blockingStrings<CommandSender> { _, _ -> BetterModel.modelKeys() }
40-
private val limbSuggestion = SuggestionProvider.blockingStrings<CommandSender> { _, _ -> BetterModel.limbKeys() }
40+
private val modelSuggestion = blockingStrings<CommandSender> { _, _ -> BetterModel.modelKeys() }
41+
private val limbSuggestion = blockingStrings<CommandSender> { _, _ -> BetterModel.limbKeys() }
4142

4243
override fun start() {
4344
command(
@@ -57,10 +58,10 @@ object CommandManager : GlobalManager {
5758
"Summons some model to given type",
5859
"s"
5960
) {
60-
required("model", StringParser.stringParser(), modelSuggestion)
61-
.optional("type", EnumParser.enumParser(EntityType::class.java))
62-
.optional("scale", DoubleParser.doubleParser(0.0625, 16.0))
63-
.optional("location", LocationParser.locationParser())
61+
required("model", stringParser(), modelSuggestion)
62+
.optional("type", enumParser(EntityType::class.java))
63+
.optional("scale", doubleParser(0.0625, 16.0))
64+
.optional("location", locationParser())
6465
.senderType(Player::class.java)
6566
.handler(::spawn)
6667
}
@@ -69,22 +70,23 @@ object CommandManager : GlobalManager {
6970
"Tests some model's animation to specific player",
7071
"t"
7172
) {
72-
required("model", StringParser.stringParser(), modelSuggestion)
73+
required("model", stringParser(), modelSuggestion)
7374
.required(
7475
"animation",
75-
StringParser.stringParser(),
76-
SuggestionProvider.blockingStrings { ctx, _ -> ctx.nullableString("model") { BetterModel.modelOrNull(it)?.animations()?.keys } ?: emptySet() }
76+
stringParser(),
77+
blockingStrings { ctx, _ -> ctx.nullableString("model") { BetterModel.modelOrNull(it)?.animations()?.keys } ?: emptySet() }
7778
)
78-
.optional("player", PlayerParser.playerParser())
79-
.optional("location", LocationParser.locationParser())
79+
.optional("player", playerParser())
80+
.optional("location", locationParser())
8081
.handler(::test)
8182
}
8283
create(
8384
"disguise",
8485
"Disguises self.",
8586
"d"
8687
) {
87-
required("model", StringParser.stringParser(), modelSuggestion)
88+
required("model", stringParser(), modelSuggestion)
89+
.optional("scaling", booleanParser())
8890
.senderType(Player::class.java)
8991
.handler(::disguise)
9092
}
@@ -94,41 +96,41 @@ object CommandManager : GlobalManager {
9496
"ud"
9597
) {
9698
senderType(Player::class.java)
97-
.optional("model", StringParser.stringParser(), SuggestionProvider.blockingStrings { ctx, _ -> ctx.sender().toRegistry()?.trackers()?.map(Tracker::name) ?: emptyList() })
99+
.optional("model", stringParser(), blockingStrings { ctx, _ -> ctx.sender().toRegistry()?.trackers()?.map(Tracker::name) ?: emptyList() })
98100
.handler(::undisguise)
99101
}
100102
create(
101103
"play",
102104
"Plays player animation",
103105
"p"
104106
) {
105-
required("limb", StringParser.stringParser(), limbSuggestion)
107+
required("limb", stringParser(), limbSuggestion)
106108
.required(
107109
"animation",
108-
StringParser.stringParser(),
109-
SuggestionProvider.blockingStrings { ctx, _ -> ctx.nullableString("limb") { BetterModel.limbOrNull(it)?.animations()?.keys } ?: emptySet() }
110+
stringParser(),
111+
blockingStrings { ctx, _ -> ctx.nullableString("limb") { BetterModel.limbOrNull(it)?.animations()?.keys } ?: emptySet() }
110112
)
111-
.optional("loop_type", EnumParser.enumParser(AnimationIterator.Type::class.java))
112-
.optional("hide", BooleanParser.booleanParser())
113+
.optional("loop_type", enumParser(AnimationIterator.Type::class.java))
114+
.optional("hide", booleanParser())
113115
.senderType(Player::class.java)
114116
.handler(::play)
115117
}
116118
create(
117119
"hide",
118120
"Hides some entities from target player."
119121
) {
120-
required("model", StringParser.stringParser(), modelSuggestion)
121-
.required("player", PlayerParser.playerParser())
122-
.required("entities", MultipleEntitySelectorParser.multipleEntitySelectorParser())
122+
required("model", stringParser(), modelSuggestion)
123+
.required("player", playerParser())
124+
.required("entities", multipleEntitySelectorParser())
123125
.handler(::hide)
124126
}
125127
create(
126128
"show",
127129
"Shows some entities to target player."
128130
) {
129-
required("model", StringParser.stringParser(), modelSuggestion)
130-
.required("player", PlayerParser.playerParser())
131-
.required("entities", MultipleEntitySelectorParser.multipleEntitySelectorParser())
131+
required("model", stringParser(), modelSuggestion)
132+
.required("player", playerParser())
133+
.required("entities", multipleEntitySelectorParser())
132134
.handler(::show)
133135
}
134136
create(
@@ -165,7 +167,10 @@ object CommandManager : GlobalManager {
165167

166168
private fun disguise(context: CommandContext<Player>) {
167169
val player = context.sender()
168-
context.model("model") { return player.audience().warn("Unable to find this model: $it") }.getOrCreate(player)
170+
val scaling = if (context.getOrDefault("scaling", true)) ModelScaler.entity() else ModelScaler.defaultScaler()
171+
context.model("model") { return player.audience().warn("Unable to find this model: $it") }.getOrCreate(player, TrackerModifier.DEFAULT) {
172+
it.scaler(scaling)
173+
}
169174
}
170175

171176
private fun undisguise(context: CommandContext<Player>) {
@@ -287,4 +292,4 @@ object CommandManager : GlobalManager {
287292

288293
override fun end() {
289294
}
290-
}
295+
}

core/src/main/kotlin/kr/toxicity/model/manager/EntityManager.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,10 @@ object EntityManager : GlobalManager {
177177
}
178178

179179
override fun end() {
180-
EntityTrackerRegistry.registries(EntityTrackerRegistry::save)
180+
EntityTrackerRegistry.registries {
181+
it.save()
182+
it.close()
183+
}
181184
}
182185

183186
//Extension
@@ -199,4 +202,4 @@ object EntityManager : GlobalManager {
199202
private fun Player.triggerMount(hitBox: HitBox) {
200203
if (hitBox.mountController().canMount()) hitBox.mount(this)
201204
}
202-
}
205+
}

nms/v1_21_R7/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ plugins {
44
}
55

66
dependencies {
7-
paperweight.paperDevBundle("1.21.11-pre4-R0.1-SNAPSHOT")
7+
paperweight.paperDevBundle("1.21.11-pre5-R0.1-SNAPSHOT")
88
}

0 commit comments

Comments
 (0)