mirror of
https://codeberg.org/moonleay/Gimbal.git
synced 2025-07-06 23:25:46 +02:00
feat: added permission checks to server, reworked login process, upgraded gradle, upgraded loom
Signed-off-by: moonleay <contact@moonleay.net>
This commit is contained in:
parent
8203d74b90
commit
8b7e576d3d
14 changed files with 136 additions and 74 deletions
|
@ -25,38 +25,46 @@ import kotlinx.serialization.encodeToByteArray
|
|||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs
|
||||
import net.minecraft.network.PacketByteBuf
|
||||
import net.moonleay.gimbal.build.BuildConstants
|
||||
import net.moonleay.gimbal.client.editor.ClientEditor
|
||||
import net.moonleay.gimbal.constants.PacketIDs
|
||||
import net.moonleay.gimbal.editor.state.EditorState
|
||||
import net.moonleay.gimbal.editor.util.GimbalPolicy
|
||||
import net.moonleay.gimbal.editor.state.GimbalPolicyType
|
||||
import net.moonleay.gimbal.editor.state.GimbalServerState
|
||||
|
||||
object GimbalClient {
|
||||
|
||||
fun registerPacketHandlers() {
|
||||
ClientPlayNetworking.registerGlobalReceiver(PacketIDs.TRANSFER_GIMBLE_POLICY_ID) { _, _, buf, _ ->
|
||||
onAllowedCheck(buf)
|
||||
ClientPlayNetworking.registerGlobalReceiver(PacketIDs.GIMBAL_POLICY_PACKET_ID) { _, _, buf, handler ->
|
||||
val state = this.getServerState(buf)
|
||||
val isUsable = this.isGimbalUsable(state)
|
||||
if (isUsable) {
|
||||
val buf = PacketByteBufs.create()
|
||||
buf.writeByteArray(Cbor.encodeToByteArray(ClientEditor.getClientState()))
|
||||
handler.sendPacket(PacketIDs.UPDATE_EDITOR_STATE_ID, buf)
|
||||
}
|
||||
ClientEditor.onPolicyReceived(state, false)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
private fun onAllowedCheck(buf: PacketByteBuf) {
|
||||
val policy = Cbor.decodeFromByteArray<GimbalPolicy>(buf.readByteArray())
|
||||
ClientEditor.onAllowedCheck(policy) // Update the client's policy
|
||||
private fun getServerState(buf: PacketByteBuf): GimbalServerState {
|
||||
val serverState = Cbor.decodeFromByteArray<GimbalServerState>(buf.readByteArray())
|
||||
return serverState
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the given [EditorState] to the server.
|
||||
*/
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
fun sendEditorState(state: EditorState) {
|
||||
val buf = PacketByteBufs.create()
|
||||
buf.writeByteArray(Cbor.encodeToByteArray(state))
|
||||
ClientPlayNetworking.send(PacketIDs.UPDATE_EDITOR_STATE_ID, buf)
|
||||
private fun isGimbalUsable(state: GimbalServerState): Boolean {
|
||||
return state.policyType == GimbalPolicyType.ALLOWED && state.protocolVersion.toString() == BuildConstants.protocolVersion
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
fun checkIfServerHasGimble(state: EditorState) {
|
||||
private fun createStatePacket(state: EditorState): PacketByteBuf {
|
||||
val buf = PacketByteBufs.create()
|
||||
buf.writeByteArray(Cbor.encodeToByteArray(state))
|
||||
ClientPlayNetworking.send(PacketIDs.GIMBLE_PRERENCE_CHECK_ID, buf)
|
||||
return buf
|
||||
}
|
||||
|
||||
fun sendStatePacket(state: EditorState) {
|
||||
ClientPlayNetworking.send(PacketIDs.UPDATE_EDITOR_STATE_ID, createStatePacket(state))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,28 +21,41 @@ package net.moonleay.gimbal.networking
|
|||
import kotlinx.serialization.cbor.Cbor
|
||||
import kotlinx.serialization.decodeFromByteArray
|
||||
import kotlinx.serialization.encodeToByteArray
|
||||
import me.lucko.fabric.api.permissions.v0.Permissions
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking
|
||||
import net.minecraft.network.PacketByteBuf
|
||||
import net.minecraft.server.network.ServerPlayerEntity
|
||||
import net.moonleay.gimbal.build.BuildConstants
|
||||
import net.moonleay.gimbal.constants.PacketIDs
|
||||
import net.moonleay.gimbal.constants.PermissionIDs
|
||||
import net.moonleay.gimbal.editor.ServerEditorManager
|
||||
import net.moonleay.gimbal.editor.state.EditorState
|
||||
import net.moonleay.gimbal.editor.state.GimbalPolicyType
|
||||
import net.moonleay.gimbal.editor.util.GimbalPolicy
|
||||
import net.moonleay.gimbal.editor.state.GimbalServerState
|
||||
|
||||
object GimbalServer {
|
||||
|
||||
fun registerPacketHandler() {
|
||||
ServerPlayNetworking
|
||||
.registerGlobalReceiver(PacketIDs.UPDATE_EDITOR_STATE_ID)
|
||||
{ server, player, handler, buf, responseSender ->
|
||||
{ _, player, _, buf, _ ->
|
||||
handleStateUpdate(player, buf)
|
||||
}
|
||||
ServerPlayNetworking
|
||||
.registerGlobalReceiver(PacketIDs.GIMBLE_PRERENCE_CHECK_ID)
|
||||
{ server, player, handler, buf, responseSender ->
|
||||
handlePresenceCheck(player, buf)
|
||||
}
|
||||
}
|
||||
|
||||
fun notifyPlayerOfPolicy(player: ServerPlayerEntity) {
|
||||
println("Sending policy packet to player ${player.name.string}...")
|
||||
val buf = PacketByteBufs.create()
|
||||
buf.writeByteArray(
|
||||
Cbor.encodeToByteArray(
|
||||
GimbalServerState(
|
||||
BuildConstants.protocolVersion.toInt(),
|
||||
if (this.isPlayerAllowedToUseGimbal(player)) GimbalPolicyType.ALLOWED else GimbalPolicyType.DENIED
|
||||
)
|
||||
)
|
||||
)
|
||||
ServerPlayNetworking.send(player, PacketIDs.GIMBAL_POLICY_PACKET_ID, buf)
|
||||
}
|
||||
|
||||
private fun handleStateUpdate(player: ServerPlayerEntity, buf: PacketByteBuf){
|
||||
|
@ -51,12 +64,7 @@ object GimbalServer {
|
|||
// player.sendMessage(Text.of("Mode: ${state.editorMode} with ${state.editorModifier}"))
|
||||
}
|
||||
|
||||
private fun handlePresenceCheck(player: ServerPlayerEntity, buf: PacketByteBuf) {
|
||||
val state = Cbor.decodeFromByteArray<EditorState>(buf.readByteArray())
|
||||
ServerEditorManager.updateEditorState(player.uuid, state)
|
||||
|
||||
val buffer = PacketByteBufs.create()
|
||||
buffer.writeByteArray(Cbor.encodeToByteArray(GimbalPolicy(GimbalPolicyType.ALLOWED)))
|
||||
ServerPlayNetworking.send(player, PacketIDs.TRANSFER_GIMBLE_POLICY_ID, buffer)
|
||||
private fun isPlayerAllowedToUseGimbal(player: ServerPlayerEntity): Boolean {
|
||||
return player.hasPermissionLevel(2) || Permissions.check(player, PermissionIDs.GIMBAL_USAGE_PERMISSION)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
* Gimbal
|
||||
* Copyright (C) 2024 moonleay
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package net.moonleay.gimbal.networking
|
||||
|
||||
import net.minecraft.util.Identifier
|
||||
import net.moonleay.gimbal.build.BuildConstants
|
||||
|
||||
object PacketIDs {
|
||||
val UPDATE_EDITOR_STATE_ID = Identifier(BuildConstants.modId, "update_editor_state")
|
||||
val GIMBLE_PRERENCE_CHECK_ID = Identifier(BuildConstants.modId, "gimble_preference_check")
|
||||
val TRANSFER_GIMBLE_POLICY_ID = Identifier(BuildConstants.modId, "gimble_is_present")
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue