Skip to content
This repository has been archived by the owner on Jun 4, 2023. It is now read-only.

Commit

Permalink
lol
Browse files Browse the repository at this point in the history
  • Loading branch information
emortaldev committed May 21, 2023
1 parent f311011 commit 98d88cc
Show file tree
Hide file tree
Showing 50 changed files with 88 additions and 125 deletions.
7 changes: 5 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ repositories {
}

dependencies {
compileOnly("com.github.hollow-cube:Minestom:e6d4a2cc91")
testImplementation("com.github.hollow-cube:Minestom:e6d4a2cc91")
compileOnly("com.github.hollow-cube:Minestom:d5c92066ce")
testImplementation("com.github.hollow-cube:Minestom:6524476a81")

// Util
// api("com.github.EmortalMC:KStom:50b2b882fa")
Expand All @@ -35,6 +35,9 @@ dependencies {
implementation("ch.qos.logback:logback-core:1.4.5")
implementation("ch.qos.logback:logback-classic:1.4.5")

compileOnly("space.vectrix.flare:flare:2.0.1")
compileOnly("space.vectrix.flare:flare-fastutil:2.0.1")

// Kotlin
testImplementation(kotlin("test"))
compileOnly("org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1")
Expand Down
27 changes: 8 additions & 19 deletions src/main/kotlin/dev/emortal/immortal/Immortal.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import dev.emortal.immortal.config.GameConfig
import dev.emortal.immortal.debug.ImmortalDebug
import dev.emortal.immortal.debug.SpamGamesCommand
import dev.emortal.immortal.game.GameManager
import dev.emortal.immortal.npc.PacketNPC
import dev.emortal.immortal.util.JedisStorage
import net.minestom.server.MinecraftServer
import net.minestom.server.entity.Player
Expand All @@ -18,8 +17,7 @@ import net.minestom.server.event.EventNode
import net.minestom.server.extras.MojangAuth
import net.minestom.server.extras.velocity.VelocityProxy
import net.minestom.server.instance.block.Block
import net.minestom.server.listener.UseEntityListener
import net.minestom.server.network.packet.client.play.ClientInteractEntityPacket
import net.minestom.server.network.packet.client.play.ClientChatSessionUpdatePacket
import net.minestom.server.network.packet.client.play.ClientSetRecipeBookStatePacket
import net.minestom.server.timer.TaskSchedule
import net.minestom.server.utils.NamespaceID
Expand All @@ -40,21 +38,14 @@ object Immortal {
val address get() = System.getProperty("address") ?: gameConfig.ip
val redisAddress get() = System.getProperty("redisAddress") ?: gameConfig.redisAddress

fun init(eventNode: EventNode<Event> = MinecraftServer.getGlobalEventHandler()) {
fun init(registerEvents: Boolean = true, eventNode: EventNode<Event> = MinecraftServer.getGlobalEventHandler()) {
System.setProperty("org.litote.mongo.mapping.service", SerializationClassMappingTypeService::class.qualifiedName!!)

gameConfig = ConfigHelper.initConfigFile(configPath, GameConfig())

// Ignore warning when player opens recipe book
MinecraftServer.getPacketListenerManager().setListener(ClientSetRecipeBookStatePacket::class.java) { _: ClientSetRecipeBookStatePacket, _: Player -> }

MinecraftServer.getPacketListenerManager().setListener(ClientInteractEntityPacket::class.java) { packet: ClientInteractEntityPacket, player: Player ->
UseEntityListener.useEntityListener(packet, player)

if (packet.type != ClientInteractEntityPacket.Interact(Player.Hand.MAIN) && packet.type != ClientInteractEntityPacket.Attack()) return@setListener

PacketNPC.viewerMap[player.uuid]?.firstOrNull { it.playerId == packet.targetId }?.onClick(player)
}
MinecraftServer.getPacketListenerManager().setListener(ClientChatSessionUpdatePacket::class.java) { _: ClientChatSessionUpdatePacket, _: Player -> }

if (redisAddress.isBlank()) {
LOGGER.info("Running without Redis - Game to join: ${gameConfig.defaultGame}")
Expand All @@ -79,7 +70,7 @@ object Immortal {
JedisStorage.init()
}

ImmortalEvents.register(eventNode)
if (registerEvents) ImmortalEvents.register(eventNode)

val dimensionType = DimensionType.builder(NamespaceID.from("fullbright"))
.ambientLight(2f)
Expand Down Expand Up @@ -112,24 +103,22 @@ object Immortal {
LOGGER.info("Immortal initialized!")
}

fun initAsServer() {
fun initAsServer(registerEvents: Boolean = true, eventNode: EventNode<Event>? = null) {
gameConfig = ConfigHelper.initConfigFile(configPath, GameConfig())

val minestom = MinecraftServer.init()

System.setProperty("minestom.entity-view-distance", gameConfig.entityViewDistance.toString())
System.setProperty("minestom.chunk-view-distance", gameConfig.chunkViewDistance.toString())

val minestom = MinecraftServer.init()
MinecraftServer.setCompressionThreshold(0)
MinecraftServer.setBrandName("Minestom")
MinecraftServer.setTerminalEnabled(false)

if (gameConfig.velocitySecret.isBlank()) {
if (gameConfig.onlineMode) MojangAuth.init()
} else {
VelocityProxy.enable(gameConfig.velocitySecret)
}

init()
init(registerEvents, eventNode ?: MinecraftServer.getGlobalEventHandler())

minestom.start(address, port)
}
Expand Down
22 changes: 2 additions & 20 deletions src/main/kotlin/dev/emortal/immortal/ImmortalEvents.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import dev.emortal.immortal.game.GameManager
import dev.emortal.immortal.game.GameManager.game
import dev.emortal.immortal.luckperms.PermissionUtils
import dev.emortal.immortal.luckperms.PermissionUtils.hasLuckPermission
import dev.emortal.immortal.npc.PacketNPC
import dev.emortal.immortal.util.JedisStorage
import dev.emortal.immortal.util.resetTeam
import net.minestom.server.MinecraftServer
Expand All @@ -21,6 +20,8 @@ object ImmortalEvents {
private val LOGGER = LoggerFactory.getLogger(ImmortalEvents::class.java)

fun register(eventNode: EventNode<Event>) {
LOGGER.info("Registering events!")

if (Immortal.redisAddress.isBlank()) eventNode.addListener(PlayerChatEvent::class.java) { e ->
e.isCancelled = true
}
Expand Down Expand Up @@ -74,14 +75,7 @@ object ImmortalEvents {
} else {
val newGameFuture = GameManager.findOrCreateGame(player, args[0])

if (newGameFuture == null) {
LOGGER.warn("Game failed to create")
player.kick("Game was null")
return@addListener
}

val newGame = newGameFuture.join()

newGame.playerCount.incrementAndGet()

// Logger.info("player ${player.username} joining game ${newGame.id} with ${newGame.players.size} players")
Expand Down Expand Up @@ -139,12 +133,6 @@ object ImmortalEvents {

eventNode.addListener(PlayerDisconnectEvent::class.java) { e ->
e.player.removeTag(GameManager.joiningGameTag)

val viewingNpcs = (PacketNPC.viewerMap[e.player.uuid] ?: return@addListener).toMutableList()
viewingNpcs.forEach {
it.removeViewer(e.player)
}
PacketNPC.viewerMap.remove(e.player.uuid)
}

eventNode.addListener(PlayerStartSneakingEvent::class.java) { e ->
Expand All @@ -162,12 +150,6 @@ object ImmortalEvents {
}

PermissionUtils.refreshPrefix(e.player)
} else {
// To mutable list here to copy list in order to avoid concurrent modification and unsupported operation
val viewingNpcs = (PacketNPC.viewerMap[e.player.uuid] ?: return@addListener).toMutableList()
viewingNpcs.forEach {
it.removeViewer(e.player)
}
}
}
}
Expand Down
Empty file.
Empty file.
Empty file.
Empty file modified src/main/kotlin/dev/emortal/immortal/commands/ArgumentSound.kt
100644 → 100755
Empty file.
Empty file modified src/main/kotlin/dev/emortal/immortal/commands/ForceGCCommand.kt
100644 → 100755
Empty file.
Empty file.
4 changes: 4 additions & 0 deletions src/main/kotlin/dev/emortal/immortal/commands/ListCommand.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ internal object ListCommand : Command("list") {
val playersArgument = ArgumentType.Literal("players")
val gamesArgument = ArgumentType.Literal("games")

setDefaultExecutor { sender, _ ->
sender.sendMessage(Component.text("Usage: /list <instances|players|games>", NamedTextColor.RED))
}

addSyntax({ sender, _ ->
val message = Component.text()
val instances = MinecraftServer.getInstanceManager().instances
Expand Down
Empty file.
4 changes: 2 additions & 2 deletions src/main/kotlin/dev/emortal/immortal/commands/SoundCommand.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ internal object SoundCommand : Command("sound") {

init {
val soundArgument = ArgumentSound("sound")
val volumeArgument = ArgumentFloat("volume").setDefaultValue { 1f }
val pitchArgument = ArgumentFloat("pitch").setDefaultValue { 1f }
val volumeArgument = ArgumentFloat("volume").setDefaultValue(1f)
val pitchArgument = ArgumentFloat("pitch").setDefaultValue(1f)

addSyntax({ sender, ctx ->
sender.playSound(Sound.sound(ctx.get(soundArgument), Sound.Source.MASTER, ctx.get(volumeArgument), ctx.get(pitchArgument)))
Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/dev/emortal/immortal/commands/StatsCommand.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import kotlin.math.floor

internal object StatsCommand : Command("tps") {

private val LAST_TICK = AtomicReference<TickMonitor>()
public val LAST_TICK = AtomicReference<TickMonitor>()
private val EXCLUDED_MEMORY_SPACES: List<Pattern> = setOf("Metaspace", "Compressed Class Space", "^CodeHeap").map { Pattern.compile(it) }

init {
Expand Down Expand Up @@ -128,7 +128,7 @@ internal object StatsCommand : Command("tps") {
Component.text()
.append(Component.text(gameName, NamedTextColor.YELLOW))
.append(Component.text("\n Games: ", NamedTextColor.GRAY))
.append(Component.text(GameManager.getGameIds(gameName)!!.size, NamedTextColor.GOLD))
.append(Component.text(GameManager.getGames(gameName)!!.size, NamedTextColor.GOLD))
)
}
}.build()
Expand Down
Empty file modified src/main/kotlin/dev/emortal/immortal/commands/StopCommand.kt
100644 → 100755
Empty file.
Empty file modified src/main/kotlin/dev/emortal/immortal/config/ConfigHelper.kt
100644 → 100755
Empty file.
Empty file modified src/main/kotlin/dev/emortal/immortal/config/GameConfig.kt
100644 → 100755
Empty file.
Empty file modified src/main/kotlin/dev/emortal/immortal/config/GameTypeInfo.kt
100644 → 100755
Empty file.
10 changes: 2 additions & 8 deletions src/main/kotlin/dev/emortal/immortal/debug/ImmortalDebug.kt
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,27 +1,21 @@
package dev.emortal.immortal.debug

import dev.emortal.immortal.commands.StatsCommand
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor
import net.minestom.server.MinecraftServer
import net.minestom.server.event.server.ServerTickMonitorEvent
import net.minestom.server.monitoring.TickMonitor
import net.minestom.server.timer.TaskSchedule
import java.util.concurrent.atomic.AtomicReference
import kotlin.math.floor

object ImmortalDebug {

fun enable() {
val globalEventManager = MinecraftServer.getGlobalEventHandler()
val scheduler = MinecraftServer.getSchedulerManager()
val instanceManager = MinecraftServer.getInstanceManager()
val connectionManager = MinecraftServer.getConnectionManager()
val benchmarkManager = MinecraftServer.getBenchmarkManager()

val lastTick = AtomicReference<TickMonitor>()
globalEventManager.addListener(ServerTickMonitorEvent::class.java) { e ->
lastTick.set(e.tickMonitor)
}
val lastTick = StatsCommand.LAST_TICK

scheduler.buildTask {
connectionManager.onlinePlayers.forEach { player ->
Expand Down
Empty file modified src/main/kotlin/dev/emortal/immortal/debug/SpamGamesCommand.kt
100644 → 100755
Empty file.
3 changes: 3 additions & 0 deletions src/main/kotlin/dev/emortal/immortal/debug/TestingGame.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ class TestingGame : Game() {
override val showsJoinLeaveMessages: Boolean = true
override val allowsSpectators: Boolean = false

override val gameName: String = "TestingGame"
override val gameComponent: Component = Component.text(gameName)

override fun playerJoin(player: Player) {

}
Expand Down
Empty file modified src/main/kotlin/dev/emortal/immortal/game/EndGameQuotes.kt
100644 → 100755
Empty file.
28 changes: 17 additions & 11 deletions src/main/kotlin/dev/emortal/immortal/game/Game.kt
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ abstract class Game : PacketGroupingAudience {

companion object {
private val LOGGER = LoggerFactory.getLogger(Game::class.java)
private val lastGameId = AtomicInteger(0)
private val LAST_GAME_ID = AtomicInteger(0)
}

// Game Options
Expand All @@ -45,12 +45,15 @@ abstract class Game : PacketGroupingAudience {
abstract val showsJoinLeaveMessages: Boolean
abstract val allowsSpectators: Boolean

abstract val gameName: String
abstract val gameComponent: Component

val players get() = getPlayers().filter { !it.hasTag(GameManager.playerSpectatingTag) }
val spectators get() = getPlayers().filter { it.hasTag(GameManager.playerSpectatingTag) }

val playerCount = AtomicInteger(0)

val id = lastGameId.getAndIncrement()
val id = LAST_GAME_ID.getAndIncrement()

var gameState = GameState.NOT_CREATED

Expand All @@ -59,8 +62,8 @@ abstract class Game : PacketGroupingAudience {
*/
open fun getSpawnPosition(player: Player, spectator: Boolean = false) = Pos(0.5, 70.0, 0.5)

val gameName = GameManager.getGameName(this::class)!!
val gameTypeInfo = GameManager.getGameTypeInfo(gameName) ?: throw Error("Game type not registered")
// val gameName = GameManager.getGameName(this::class)!!
// val gameTypeInfo = GameManager.getGameTypeInfo(gameName) ?: throw Error("Game type not registered")

var instance: Instance? = null

Expand Down Expand Up @@ -127,7 +130,7 @@ abstract class Game : PacketGroupingAudience {
}

if (showScoreboard) {
scoreboard = Sidebar(gameTypeInfo.title)
scoreboard = Sidebar(gameComponent)

scoreboard?.createLine(Sidebar.ScoreboardLine("headerSpacer", Component.empty(), 99))

Expand Down Expand Up @@ -169,7 +172,7 @@ abstract class Game : PacketGroupingAudience {
open fun gameCreated() {}

private fun addPlayer(player: Player, joinMessage: Boolean = showsJoinLeaveMessages) {
LOGGER.info("${player.username} joining game ${gameTypeInfo.name}#$id")
LOGGER.info("${player.username} joining game ${gameName}#$id")

if (joinMessage) sendMessage(
Component.text()
Expand Down Expand Up @@ -223,7 +226,7 @@ abstract class Game : PacketGroupingAudience {
private fun removePlayer(player: Player, leaveMessage: Boolean = showsJoinLeaveMessages) {
scoreboard?.removeViewer(player)

LOGGER.info("${player.username} leaving game ${gameTypeInfo.name}#$id")
LOGGER.info("${player.username} leaving game ${gameName}#$id")

if (instance == null) return
refreshPlayerCount()
Expand Down Expand Up @@ -276,7 +279,7 @@ abstract class Game : PacketGroupingAudience {
}

internal open fun addSpectator(player: Player) {
LOGGER.info("${player.username} started spectating game ${gameTypeInfo.name}#$id")
LOGGER.info("${player.username} started spectating game ${gameName}#$id")

player.reset()
player.resetTeam()
Expand All @@ -299,7 +302,7 @@ abstract class Game : PacketGroupingAudience {
}

internal open fun removeSpectator(player: Player) {
LOGGER.info("${player.username} stopped spectating game ${gameTypeInfo.name}#$id")
LOGGER.info("${player.username} stopped spectating game ${gameName}#$id")

scoreboard?.removeViewer(player)

Expand Down Expand Up @@ -394,7 +397,7 @@ abstract class Game : PacketGroupingAudience {
if (gameState == GameState.DESTROYED) return
gameState = GameState.DESTROYED

LOGGER.info("Game ${gameTypeInfo.name}#$id is ending")
LOGGER.info("Game ${gameName}#$id is ending")

gameEnded()

Expand Down Expand Up @@ -426,7 +429,10 @@ abstract class Game : PacketGroupingAudience {
}

// Destroy game once all players have moved to a new one
joinCountDown.toFuture().thenRun { destroy() }
joinCountDown.toFuture().thenRun { destroy() }.exceptionally {
MinecraftServer.getExceptionManager().handleException(it)
null
}
}

private fun destroy() {
Expand Down
Loading

3 comments on commit 98d88cc

@UserUNP
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hilarious

@UserUNP
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hello <#970339397121765446>

@ZakShearman
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes hello @everyone

Please sign in to comment.