Skip to content

Commit

Permalink
feat
Browse files Browse the repository at this point in the history
  • Loading branch information
zly2006 committed Jul 16, 2024
1 parent 879ffc2 commit 11ee178
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 84 deletions.
23 changes: 23 additions & 0 deletions src/main/kotlin/com/github/zly2006/enclosure/EnclosureArea.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.github.zly2006.enclosure.gui.EnclosureScreenHandler
import com.github.zly2006.enclosure.network.play.SyncPermissionS2CPacket
import com.github.zly2006.enclosure.utils.*
import com.github.zly2006.enclosure.utils.Serializable2Text.SerializationSettings
import com.mojang.authlib.GameProfile
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
import net.minecraft.nbt.NbtCompound
Expand Down Expand Up @@ -72,6 +73,12 @@ open class EnclosureArea : PersistentState, EnclosureView {
override var father: PermissionHolder? = null
internal set
val uuid: UUID
class ForceLoadTicket(
val executor: GameProfile,
var remainingTicks: Int,
val level: Int
)
var ticket: ForceLoadTicket? = null

override val fullName: String
get() = if (father != null) {
Expand Down Expand Up @@ -124,6 +131,14 @@ open class EnclosureArea : PersistentState, EnclosureView {
} else {
null
}
ticket = if (compound.contains("ticket", NbtElement.COMPOUND_TYPE.toInt())) {
val ticket = compound.getCompound("ticket")
ForceLoadTicket(
GameProfile(ticket.getUuid("executor"), ticket.getString("executor_name")),
ticket.getInt("remaining_ticks"),
ticket.getInt("level")
)
} else null
}

operator fun Map<String, Boolean>.get(perm: Permission): Boolean? {
Expand Down Expand Up @@ -205,6 +220,14 @@ open class EnclosureArea : PersistentState, EnclosureView {
if (music != null) {
nbt.putString("music", music.toString())
}
if (ticket != null) {
val ticketNbt = NbtCompound()
ticketNbt.putUuid("executor", ticket!!.executor.id)
ticketNbt.putString("executor_name", ticket!!.executor.name)
ticketNbt.putInt("remaining_ticks", ticket!!.remainingTicks)
ticketNbt.putInt("level", ticket!!.level)
nbt.put("ticket", ticketNbt)
}
return nbt
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import net.minecraft.util.math.BlockPos
fun BuilderScope<*>.registerAdmin() {
literal("admin") {
literal("reload") {
permission("enclosure.command.admin.reload", BuilderScope.Companion.DefaultPermission.OP)
permission("enclosure.command.admin.reload")
literal("all") {
executes {
ServerMain.reloadCommon()
Expand All @@ -39,7 +39,7 @@ fun BuilderScope<*>.registerAdmin() {
}
}
literal("limit_exceeded") {
permission("enclosure.command.admin.limit_exceeded", BuilderScope.Companion.DefaultPermission.OP)
permission("enclosure.command.admin.limit_exceeded")
literal("size") {
executes {
ServerMain.getAllEnclosures().flatMap {
Expand Down Expand Up @@ -77,7 +77,7 @@ fun BuilderScope<*>.registerAdmin() {
}
}
literal("visited") {
permission("enclosure.command.admin.visited", BuilderScope.Companion.DefaultPermission.OP)
permission("enclosure.command.admin.visited")
argument("player", EntityArgumentType.player()) {
literal("get") {
executes {
Expand All @@ -102,7 +102,7 @@ fun BuilderScope<*>.registerAdmin() {
}
}
literal("closest") {
permission("enclosure.command.admin.closest", BuilderScope.Companion.DefaultPermission.OP)
permission("enclosure.command.admin.closest")
executes {
val enclosure = ServerMain.getAllEnclosures(source.world).areas
.minByOrNull {
Expand All @@ -125,7 +125,7 @@ fun BuilderScope<*>.registerAdmin() {
}
}
literal("perm-info") {
permission("enclosure.command.admin.perm_info", BuilderScope.Companion.DefaultPermission.OP)
permission("enclosure.command.admin.perm_info")
argument(permissionArgument(com.github.zly2006.enclosure.utils.Permission.Target.Both)) {
executes {
val permission = Permission.getValue(StringArgumentType.getString(this, "permission"))
Expand All @@ -139,7 +139,7 @@ fun BuilderScope<*>.registerAdmin() {
}
}
literal("clients") {
permission("enclosure.command.admin.clients", BuilderScope.Companion.DefaultPermission.OP)
permission("enclosure.command.admin.clients")
executes {
EnclosureInstalledC2SPacket.installedClientMod.forEach {
source.sendMessage(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,13 +175,12 @@ class BuilderScope<T: argT>(var parent: T) {
"enclosure.bypass" to DefaultPermission.OP
)
}
fun permission(s: String, defaultPermission: DefaultPermission) {
val old = parent.requirement
fun permission(s: String, defaultPermission: DefaultPermission = DefaultPermission.OP) {
if (!map.containsKey(s)) {
map[s] = defaultPermission
}
parent.requires { source ->
checkPermission(source, s) && old.test(source)
checkPermission(source, s)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,7 @@ fun register(dispatcher: CommandDispatcher<ServerCommandSource>, access: Command

literal("experimental") {
registerMusic()
registerForceLoad()
}
}
return dispatcher.register(node.parent)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.github.zly2006.enclosure.command

import com.github.zly2006.enclosure.EnclosureArea
import com.github.zly2006.enclosure.utils.checkPermission
import me.lucko.fabric.api.permissions.v0.Options
import net.minecraft.server.command.ServerCommandSource
import net.minecraft.server.world.ChunkLevelType
import net.minecraft.server.world.ChunkLevels
import net.minecraft.server.world.ChunkTicketType

fun BuilderScope<*>.registerForceLoad() {
fun forceLoad(source: ServerCommandSource, area: EnclosureArea, ticks: Int, level: Int) {
if (checkPermission(source, "enclosure.bypass")) {

}
}

literal("force-load") {
argument(landArgument()) {
literal("blocks") {
permission("enclosure.command.force_load")
val level = ChunkLevels.getLevelFromType(ChunkLevelType.BLOCK_TICKING)
executes {
val maxTime = Options.get(source, "enclosure.load.max_time", 21600) { it.toInt() }
val land = getEnclosure(this)
ChunkTicketType.FORCED
forceLoad(source, land, maxTime * 20, level)
}
}
literal("entities") {
permission("enclosure.command.force_load")
val level = ChunkLevels.getLevelFromType(ChunkLevelType.ENTITY_TICKING)
executes {
val maxTime = Options.get(source, "enclosure.load.max_time", 21600) { it.toInt() }
val land = getEnclosure(this)
forceLoad(source, land, maxTime * 20, level)
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import net.minecraft.server.command.CommandManager
fun BuilderScope<*>.registerMusic() {
literal("music") {
literal("set") {
permission("enclosure.command.music.set")
argument(
CommandManager.argument("music", IdentifierArgumentType.identifier())
.suggests(SuggestionProviders.AVAILABLE_SOUNDS)
Expand Down

0 comments on commit 11ee178

Please sign in to comment.