Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ plugins {
}

group = "com.kruthers"
version = "2.8.0"
version = "2.8.2"
description = "The core plugin used to manage the gamemode 4 public server"

repositories {
Expand Down
4 changes: 3 additions & 1 deletion src/main/kotlin/com/kruthers/gamemode4core/Gamemode4Core.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,14 @@ import org.bukkit.plugin.PluginManager
import org.bukkit.plugin.java.JavaPlugin
import java.util.*
import java.util.function.Function
import kotlin.collections.HashMap


class Gamemode4Core : JavaPlugin() {

companion object {
var playersFrozen: Boolean = false
var allPlayersFrozen: Boolean = false
val frozenPlayers: HashMap<Player, UUID> = HashMap()
val watchingPlayers: HashMap<Player,UUID> = HashMap()
val backLocations: HashMap<UUID,MutableList<Location>> = HashMap()

Expand Down
100 changes: 87 additions & 13 deletions src/main/kotlin/com/kruthers/gamemode4core/commands/FreezeCommand.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.kruthers.gamemode4core.commands

import cloud.commandframework.annotations.Argument
import cloud.commandframework.annotations.CommandDescription
import cloud.commandframework.annotations.CommandMethod
import cloud.commandframework.annotations.CommandPermission
Expand All @@ -11,35 +12,108 @@ import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player

class FreezeCommand(val plugin: Gamemode4Core) {

@CommandMethod("freeze")
@CommandPermission("gm4core.freeze")
@CommandDescription("Freeze everyone on the server")
fun onFreezeCommand(sender: CommandSender) {
if (Gamemode4Core.playersFrozen) {
if (Gamemode4Core.allPlayersFrozen) {
sender.sendMessage(Component.text("Everyone is already frozen, do /unfreeze to allow people to move again",NamedTextColor.RED))
return
}
Gamemode4Core.allPlayersFrozen = true
Bukkit.broadcast(getMessage("freeze.start_brodcast"))
Bukkit.broadcast(getMessage("freeze.staff_start",
TagResolver.resolver(Placeholder.unparsed("name",sender.name))),
"gm4core.freeze.notify")
}

} else {
Gamemode4Core.playersFrozen = true
Bukkit.broadcast(getMessage(plugin,"freeze.start_brodcast"))
Bukkit.broadcast(getMessage(plugin,"freeze.staff_start", TagResolver.resolver(
Placeholder.unparsed("name",sender.name))),"gm4core.freeze.notify")
@CommandMethod("freeze <player>")
@CommandPermission("gm4core.freeze.player")
@CommandDescription("Freeze a specific player on the server")
fun onFreezeCommand(sender: CommandSender, @Argument("player") target: Player) {
if (target.hasPermission("gm4core.freeze.byspass")) {
sender.sendMessage(Component.text(target.name, NamedTextColor.GRAY)
.append(Component.text(" cannot be frozen.", NamedTextColor.RED)))
return
}

if (target in Gamemode4Core.frozenPlayers) {
sender.sendMessage(Component.text(target.name, NamedTextColor.GRAY)
.append(Component.text(" is already frozen. To unfreeze, use /unfreeze <name>", NamedTextColor.RED)))
return
}

Gamemode4Core.frozenPlayers[target] = target.uniqueId
target.sendMessage(getMessage("freeze.start_player"))
Bukkit.broadcast(getMessage("freeze.staff_start_individual",
TagResolver.resolver(Placeholder.unparsed("target", target.name),
Placeholder.unparsed("name",sender.name))),
"gm4core.freeze.notify")
}

@CommandMethod("freezelist")
@CommandPermission("gm4core.freeze.player")
@CommandDescription("List frozen players")
fun onFreezeQueryCommand(sender: CommandSender) {
if (Gamemode4Core.allPlayersFrozen) {
sender.sendMessage(Component.text("Everyone is currently frozen", NamedTextColor.GOLD))
}
if (Gamemode4Core.frozenPlayers.isNotEmpty()) {
sender.sendMessage(Component.text("Individually frozen players: ", NamedTextColor.GOLD)
.append(Component.text(Gamemode4Core.frozenPlayers.keys.toList().joinToString { it -> it.name }, NamedTextColor.WHITE)))
}
if (!Gamemode4Core.allPlayersFrozen && Gamemode4Core.frozenPlayers.isEmpty()) {
sender.sendMessage(Component.text("No one is frozen", NamedTextColor.RED))
}
}

@CommandMethod("unfreeze")
@CommandPermission("gm4core.freeze")
@CommandDescription("Unfreeze everyone")
fun onUnfreezeCommand(sender: CommandSender) {
if (!Gamemode4Core.playersFrozen) {
sender.sendMessage(Component.text("Freeze is not active, do /freeze to change this",NamedTextColor.RED))
} else {
Gamemode4Core.playersFrozen = false
Bukkit.broadcast(getMessage(plugin,"freeze.end_brodcast"))
Bukkit.broadcast(getMessage(plugin,"freeze.staff_end", TagResolver.resolver(
Placeholder.unparsed("name",sender.name))),"gm4core.freeze.notify")
// No one is frozen
if (!Gamemode4Core.allPlayersFrozen && Gamemode4Core.frozenPlayers.isEmpty()) {
sender.sendMessage(Component.text("Freeze is not active, do /freeze to change this", NamedTextColor.RED))
return
}
// All frozen
if (Gamemode4Core.allPlayersFrozen) {
Gamemode4Core.allPlayersFrozen = false
Bukkit.broadcast(getMessage("freeze.end_brodcast"))
Bukkit.broadcast(getMessage("freeze.staff_end",
TagResolver.resolver(Placeholder.unparsed("name",sender.name))),
"gm4core.freeze.notify")
// Almost all unfrozen
if (Gamemode4Core.frozenPlayers.isNotEmpty())
Bukkit.broadcast(Component.text("Reminder, there are still individually players frozen:", NamedTextColor.RED), "gm4core.freeze.notify")
Bukkit.broadcast(Component.text(Gamemode4Core.frozenPlayers.keys.toList().joinToString { it -> it.name },
NamedTextColor.WHITE), "gm4ore.freeze.notify")
Bukkit.broadcast(Component.text("You can re-run /unfreeze to unfreeze all individually frozen players", NamedTextColor.RED), "gm4core.freeze.notify")
return

}
// Individually frozen
Gamemode4Core.frozenPlayers.clear()
sender.sendMessage(Component.text("All remaining frozen players have been unfrozen",NamedTextColor.RED))
}

@CommandMethod("unfreeze <player>")
@CommandPermission("gm4core.unfreeze.player")
@CommandDescription("Unfreeze a specific player on the server")
fun onUnfreezeCommand(sender: CommandSender, @Argument("player") target: Player) {
if (target !in Gamemode4Core.frozenPlayers) {
sender.sendMessage(Component.text("That player is already frozen. To allow them to move, use /unfreeze <name>",NamedTextColor.RED))
return
}

Gamemode4Core.frozenPlayers.remove(target)
target.sendMessage(getMessage( "freeze.end_player"))
if (Gamemode4Core.frozenPlayers.isEmpty()) {
sender.sendMessage(Component.text("All remaining frozen players have been unfrozen",NamedTextColor.RED))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class PlayerConnectionEvents(val plugin: Gamemode4Core): Listener {
}

// If the server is in freeze mode it will send a message informing them
if (Gamemode4Core.playersFrozen) {
if (Gamemode4Core.allPlayersFrozen) {
event.player.sendMessage(Component.text("Everyone is currently frozen while the mods resolve an issue, please stand still",NamedTextColor.AQUA))
event.player.sendTitlePart(
TitlePart.TIMES,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,21 @@ class PlayerFrozenEvents(val plugin: Gamemode4Core): Listener {
@EventHandler
fun onPlayerMove(event: PlayerMoveEvent) {

if (Gamemode4Core.playersFrozen && !event.player.hasPermission("gm4core.freeze.byspass")) {
if ((Gamemode4Core.allPlayersFrozen || event.player in Gamemode4Core.frozenPlayers) && !event.player.hasPermission("gm4core.freeze.byspass")) {
val from: Location = event.from
val to: Location = event.to

if (from.x != to.x || from.z != to.z) {
to.x = from.x
to.z = from.z
event.player.sendMessage(getMessage(plugin, "freeze.fozen"))
event.player.sendMessage(getMessage( "freeze.fozen"))
}
}

}

@EventHandler
fun onPlayerDamage(event: EntityDamageEvent) {
if (event.entity is Player && Gamemode4Core.playersFrozen) {
if (event.entity is Player && (Gamemode4Core.allPlayersFrozen || event.entity in Gamemode4Core.frozenPlayers)) {
event.isCancelled = true
}

Expand Down
23 changes: 13 additions & 10 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Gamemode 4 Core
# by kruthers
# ######### #
# query kruthers#7770 on discord for any config help
# query kruthers on discord for any config help
config_version: -1
mod_mode:
group: builder
Expand All @@ -21,8 +21,8 @@ scoreboard:
tracked: []
server_config:
motd: |
<aqua><bold>Gamemode 4</bold></aqua> <gray>- <gold><bold>Public Server</bold> <red>[1.16.5]
<dark_green> Now Open to the public! <dark_aqua>Come Play!
<aqua><bold>Gamemode 4</bold></aqua> <gray>- <gold><bold>Public Server</bold> <red>[1.20.4]
<dark_green> Now open to the public! <dark_aqua>Come play!
max_players: 20
dim_sleep_bug:
fix: true
Expand All @@ -41,7 +41,7 @@ messages:
staff_prefix: '<yellow>[STAFF]</yellow>'
info: |
<aqua>Welcome to Gamemode 4!</aqua>
<grey>Gamemode 4 is a collection of datapacks that change and modify the gameplay experience
<grey>Gamemode 4 is a collection of data packs that change and modify the gameplay experience
You can find out more on our website <color:#f563ff><u><hover:show_text:'<grey>https://gm4.co</grey>'><click:open_url:'https://gm4.co'>here</click></hover></u></color> & on our wiki: <color:#f563ff><u><hover:show_text:'<grey>https://wiki.gm4.co/wiki/Public_Server</grey>'><click:open_url:'https://wiki.gm4.co/wiki/Public_Server'>here</click></hover></u></color></grey>
freeze:
start_brodcast: |
Expand All @@ -54,20 +54,23 @@ messages:
<dark_aqua>veryone has been release, you are free to move arround again</dark_aqua>
<aqua>Please be carefull and report any issues</aqua>
<dark_gray>------- ------ -------</dark_gray>
staff_start: '<staff_prefix> <aqua><name></aqua> <gold>Has frozen everyone in place, run /unfreeze to release them'
staff_end: '<staff_prefix> <aqua><name></aqua> <gold>Has unfrozen everyone'
fozen: '<prefix> <red>Sorry you cant move while all players are frozen. Please stand still while the mods work to resolve the issue'
start_player: '<prefix> <red>You have been frozen'
end_player: '<prefix> <red>You have been unfrozen'
staff_start: '<staff_prefix> <aqua><name></aqua> <gold>has frozen everyone in place, run /unfreeze to release them'
staff_start_individual: '<staff_prefix> <white><target></white> <gold>has been individually frozen by <aqua><name></aqua>'
staff_end: '<staff_prefix> <aqua><name></aqua> <gold>has unfrozen everyone'
fozen: '<prefix> <red>Sorry you cannot move while all players are frozen. Please stand still while the mods work to resolve the issue'
mod_mode:
enter: '<prefix> <green>Successfully entered into moderation mode'
exit: '<prefix> <green>Exiting moderation mode...'
join: '<prefix> <gold>Reminder: you are currently in moderation mode and have your staff inventory'
watch:
start: '<prefix> <green>You are now watching <dark_aqua><target>'
stop: '<prefix> <green>You are no longer watching anyone'
dimension_change: '<prefix> <dark_aqua><target></dark_aqua> <dark_purple>Has changed dimension do <light_purple>/watchconfirm</light_purple> to follow them'
dimension_change: '<prefix> <dark_aqua><target></dark_aqua> <dark_purple>has changed dimension. Do <light_purple>/watchconfirm</light_purple> to follow them'
join: '<prefix> <red>You are currently set to be watching <dark_aqua><target>'
logout: '<prefix> <grey>Your target has left the game, you will be able to tp when they log back in'
not_online: '<prefix> <red>Your target is currently not online so can not be teleported too'
logout: '<prefix> <grey>Your target has left the game, you will be able to tp to them when they log back in'
not_online: '<prefix> <red>Your target is currently not online so the teleport was canceled'
not_watching: '<prefix> <red>You must be watching someone to execute this command'
streammode:
enter: '<prefix> <red>You are now in streamer mode and will not receive staff notifications, run <dark_red>/streammode</dark_red> to exit'
Expand Down