Archived
1
0
Fork 0

Allow configuring the displayed difficulty

This commit is contained in:
Moritz Ruth 2020-09-10 21:54:23 +02:00
parent 2ffd7034a1
commit 114f6c9ccd
7 changed files with 25 additions and 26 deletions

View file

@ -0,0 +1,10 @@
package space.blokk
enum class Difficulty {
PEACEFUL,
EASY,
NORMAL,
HARD
}
data class DifficultyOptions(val difficulty: Difficulty, val locked: Boolean)

View file

@ -2,14 +2,15 @@ package space.blokk.server
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.ReceiveChannel
import space.blokk.events.EventBus import space.blokk.DifficultyOptions
import space.blokk.events.EventTarget import space.blokk.events.EventTarget
import space.blokk.server.events.ServerEvent import space.blokk.server.events.ServerEvent
interface Server : EventTarget<ServerEvent> { interface Server : EventTarget<ServerEvent> {
override val eventBus: EventBus<ServerEvent>
val scope: CoroutineScope val scope: CoroutineScope
var displayedDifficultyOptions: DifficultyOptions
/** /**
* Creates a [ReceiveChannel] which emits [Unit] every tick. * Creates a [ReceiveChannel] which emits [Unit] every tick.
* *

View file

@ -1,8 +0,0 @@
package space.blokk.worlds
enum class WorldDifficulty {
PEACEFUL,
EASY,
NORMAL,
HARD
}

View file

@ -1,20 +1,20 @@
package space.blokk.net.packets.play package space.blokk.net.packets.play
import io.netty.buffer.ByteBuf import io.netty.buffer.ByteBuf
import space.blokk.Difficulty
import space.blokk.net.packets.OutgoingPacketCodec import space.blokk.net.packets.OutgoingPacketCodec
import space.blokk.worlds.WorldDifficulty
object ServerDifficultyPacketCodec : OutgoingPacketCodec<ServerDifficultyPacket>(0x0E, ServerDifficultyPacket::class) { object ServerDifficultyPacketCodec : OutgoingPacketCodec<ServerDifficultyPacket>(0x0E, ServerDifficultyPacket::class) {
override fun ServerDifficultyPacket.encode(dst: ByteBuf) { override fun ServerDifficultyPacket.encode(dst: ByteBuf) {
dst.writeByte( dst.writeByte(
when (difficulty) { when (difficultyOptions.difficulty) {
WorldDifficulty.PEACEFUL -> 0 Difficulty.PEACEFUL -> 0
WorldDifficulty.EASY -> 1 Difficulty.EASY -> 1
WorldDifficulty.NORMAL -> 2 Difficulty.NORMAL -> 2
WorldDifficulty.HARD -> 3 Difficulty.HARD -> 3
} }
) )
dst.writeBoolean(locked) dst.writeBoolean(difficultyOptions.locked)
} }
} }

View file

@ -1,9 +1,9 @@
package space.blokk.net.packets.play package space.blokk.net.packets.play
import space.blokk.DifficultyOptions
import space.blokk.net.packets.OutgoingPacket import space.blokk.net.packets.OutgoingPacket
import space.blokk.worlds.WorldDifficulty
/** /**
* Sets the difficulty shown in the pause menu. * Sets the difficulty shown in the pause menu.
*/ */
data class ServerDifficultyPacket(val difficulty: WorldDifficulty, val locked: Boolean) : OutgoingPacket() data class ServerDifficultyPacket(val difficultyOptions: DifficultyOptions) : OutgoingPacket()

View file

@ -24,6 +24,7 @@ class BlokkServer internal constructor() : Server {
override val scope = CoroutineScope(CoroutineName("BlokkServer")) override val scope = CoroutineScope(CoroutineName("BlokkServer"))
override val eventBus = EventBus(ServerEvent::class, scope) override val eventBus = EventBus(ServerEvent::class, scope)
override var displayedDifficultyOptions = DifficultyOptions(Difficulty.NORMAL, true)
val logger = Logger("Server") val logger = Logger("Server")
var socketServer = BlokkSocketServer(); private set var socketServer = BlokkSocketServer(); private set

View file

@ -1,6 +1,7 @@
package space.blokk.net package space.blokk.net
import io.netty.buffer.Unpooled import io.netty.buffer.Unpooled
import space.blokk.Blokk
import space.blokk.BlokkServer import space.blokk.BlokkServer
import space.blokk.chat.TextComponent import space.blokk.chat.TextComponent
import space.blokk.net.MinecraftDataTypes.writeString import space.blokk.net.MinecraftDataTypes.writeString
@ -15,7 +16,6 @@ import space.blokk.net.packets.play.ServerDifficultyPacket
import space.blokk.players.GameMode import space.blokk.players.GameMode
import space.blokk.utils.AuthenticationHelper import space.blokk.utils.AuthenticationHelper
import space.blokk.utils.EncryptionUtils import space.blokk.utils.EncryptionUtils
import space.blokk.worlds.WorldDifficulty
import space.blokk.worlds.WorldDimension import space.blokk.worlds.WorldDimension
import space.blokk.worlds.WorldType import space.blokk.worlds.WorldType
import java.security.MessageDigest import java.security.MessageDigest
@ -121,11 +121,6 @@ class JoinProcedure(val session: BlokkSession) {
} }
private suspend fun joinWorld() { private suspend fun joinWorld() {
session.send( session.send(ServerDifficultyPacket(Blokk.server.displayedDifficultyOptions))
ServerDifficultyPacket(
WorldDifficulty.NORMAL,
true
)
)
} }
} }