Initial commit
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package xyz.lncvrt.chaosmclobby
|
||||
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.attribute.Attribute
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
import org.bukkit.potion.PotionEffect
|
||||
import org.bukkit.potion.PotionEffectType
|
||||
import org.sayandev.stickynote.loader.bukkit.StickyNoteBukkitLoader
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
import xyz.lncvrt.chaosmclobby.command.DiscordCommand
|
||||
import xyz.lncvrt.chaosmclobby.command.WebsiteCommand
|
||||
import xyz.lncvrt.chaosmclobby.event.*
|
||||
import java.util.*
|
||||
|
||||
class ChaosMCLobbyPlugin : JavaPlugin() {
|
||||
val jumpPadCooldowns = HashMap<UUID, Long>()
|
||||
val cooldowns = HashMap<Player, MutableMap<String, Long>>()
|
||||
|
||||
override fun onEnable() {
|
||||
StickyNoteBukkitLoader(this)
|
||||
DiscordCommand
|
||||
WebsiteCommand
|
||||
registerEvents()
|
||||
}
|
||||
|
||||
private fun registerEvents() {
|
||||
val pluginManager = server.pluginManager
|
||||
pluginManager.registerEvents(InventoryClickListener(), this)
|
||||
pluginManager.registerEvents(PlayerAdvancementCriterionGrantListener(), this)
|
||||
pluginManager.registerEvents(PlayerGameModeChangeListener(this), this)
|
||||
pluginManager.registerEvents(PlayerInteractListener(this), this)
|
||||
pluginManager.registerEvents(PlayerItemDamageListener(), this)
|
||||
pluginManager.registerEvents(PlayerItemHeldListener(), this)
|
||||
pluginManager.registerEvents(PlayerJoinListener(this), this)
|
||||
pluginManager.registerEvents(PlayerMoveListener(this), this)
|
||||
pluginManager.registerEvents(PlayerSwapHandItemsListener(), this)
|
||||
pluginManager.registerEvents(PlayerToggleFlightListener(), this)
|
||||
pluginManager.registerEvents(ProjectileLaunchListener(), this)
|
||||
}
|
||||
|
||||
internal fun resetPlayer(player: Player, teleport: Boolean, setGamemode: Boolean) {
|
||||
val miniMessage: MiniMessage = MiniMessage.miniMessage()
|
||||
val effect = PotionEffect(PotionEffectType.SPEED, PotionEffect.INFINITE_DURATION, 1, false, false)
|
||||
|
||||
player.inventory.clear()
|
||||
player.inventory.heldItemSlot = 4
|
||||
|
||||
val discordItem = ItemStack(Material.DIAMOND)
|
||||
val discordMeta = discordItem.itemMeta
|
||||
discordMeta.displayName(miniMessage.deserialize(MessageFormat.setPrimaryColor("<italic:false>Our Socials ${MessageFormat.setSecondaryColor("(Right Click)")}</italic>")))
|
||||
discordItem.setItemMeta(discordMeta)
|
||||
player.inventory.setItem(1, discordItem)
|
||||
|
||||
val serverSelectorItem = ItemStack(Material.NETHER_STAR)
|
||||
val serverSelectorMeta = serverSelectorItem.itemMeta
|
||||
serverSelectorMeta.displayName(miniMessage.deserialize(MessageFormat.setPrimaryColor("<italic:false>Server Selector ${MessageFormat.setSecondaryColor("(Right Click)")}</italic>")))
|
||||
serverSelectorItem.setItemMeta(serverSelectorMeta)
|
||||
player.inventory.setItem(4, serverSelectorItem)
|
||||
|
||||
val fireworkItem = ItemStack(Material.FIREWORK_ROCKET)
|
||||
val fireworkMeta = fireworkItem.itemMeta
|
||||
fireworkMeta.displayName(miniMessage.deserialize(MessageFormat.setPrimaryColor("<italic:false>Elytra ${MessageFormat.setSecondaryColor("(Fly around the lobby!)")}</italic>")))
|
||||
fireworkItem.setItemMeta(fireworkMeta)
|
||||
player.inventory.setItem(7, fireworkItem)
|
||||
|
||||
player.health = player.getAttribute(Attribute.GENERIC_MAX_HEALTH)?.value ?: 20.0
|
||||
player.foodLevel = 20
|
||||
player.saturation = 20f
|
||||
player.clearActivePotionEffects()
|
||||
player.addPotionEffect(effect)
|
||||
if (setGamemode) player.gameMode = GameMode.ADVENTURE
|
||||
|
||||
if (teleport) {
|
||||
val world = server.getWorld("world")
|
||||
player.teleport(Location(world, 0.5, 65.0, 0.5, 0F, 0F))
|
||||
}
|
||||
}
|
||||
|
||||
internal fun resetPlayer(player: Player, teleport: Boolean) {
|
||||
resetPlayer(player, teleport, true)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package xyz.lncvrt.chaosmclobby.command
|
||||
|
||||
import org.incendo.cloud.kotlin.MutableCommandBuilder
|
||||
import org.sayandev.stickynote.bukkit.command.BukkitCommand
|
||||
import org.sayandev.stickynote.bukkit.command.BukkitSender
|
||||
import org.sayandev.stickynote.bukkit.extension.sendComponent
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
|
||||
object DiscordCommand : BukkitCommand("discord") {
|
||||
override fun rootBuilder(builder: MutableCommandBuilder<BukkitSender>) {
|
||||
builder.handler { context ->
|
||||
val player = context.sender().player() ?: return@handler
|
||||
player.sendComponent(MessageFormat.setPrefix(MessageFormat.setPrimaryColor("Click ${MessageFormat.setSecondaryColor("<u><click:open_url:'https://chaos.lncvrt.xyz/discord'>HERE</click></u>")} to join our Discord Server!")))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package xyz.lncvrt.chaosmclobby.command
|
||||
|
||||
import org.incendo.cloud.kotlin.MutableCommandBuilder
|
||||
import org.sayandev.stickynote.bukkit.command.BukkitCommand
|
||||
import org.sayandev.stickynote.bukkit.command.BukkitSender
|
||||
import org.sayandev.stickynote.bukkit.extension.sendComponent
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
|
||||
object WebsiteCommand : BukkitCommand("website") {
|
||||
override fun rootBuilder(builder: MutableCommandBuilder<BukkitSender>) {
|
||||
builder.handler { context ->
|
||||
val player = context.sender().player() ?: return@handler
|
||||
player.sendComponent(MessageFormat.setPrefix(MessageFormat.setPrimaryColor("Click ${MessageFormat.setSecondaryColor("<u><click:open_url:'https://chaos.lncvrt.xyz'>HERE</click></u>")} to view our Website!")))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
|
||||
class InventoryClickListener : Listener {
|
||||
@EventHandler
|
||||
fun onInventoryClickEvent(event: InventoryClickEvent) {
|
||||
val entity = event.whoClicked
|
||||
if (entity is Player) {
|
||||
if (entity.gameMode != GameMode.CREATIVE) event.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import com.destroystokyo.paper.event.player.PlayerAdvancementCriterionGrantEvent
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
|
||||
class PlayerAdvancementCriterionGrantListener : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerAdvancementCriterionGrantEvent(event: PlayerAdvancementCriterionGrantEvent) {
|
||||
event.isCancelled = true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerGameModeChangeEvent
|
||||
import xyz.lncvrt.chaosmclobby.ChaosMCLobbyPlugin
|
||||
|
||||
class PlayerGameModeChangeListener(val plugin: ChaosMCLobbyPlugin) : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerGameModeChangeEvent(event: PlayerGameModeChangeEvent) {
|
||||
val player = event.getPlayer()
|
||||
if (event.newGameMode === GameMode.CREATIVE) {
|
||||
player.inventory.clear()
|
||||
} else if (event.newGameMode === GameMode.ADVENTURE) {
|
||||
return
|
||||
} else {
|
||||
event.isCancelled = true
|
||||
player.gameMode = GameMode.ADVENTURE
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.Action
|
||||
import org.bukkit.event.player.PlayerInteractEvent
|
||||
import org.sayandev.stickynote.bukkit.extension.sendComponent
|
||||
import xyz.lncvrt.chaosmcapi.utils.CommandHelper
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
import xyz.lncvrt.chaosmclobby.ChaosMCLobbyPlugin
|
||||
|
||||
class PlayerInteractListener(val plugin: ChaosMCLobbyPlugin) : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerInteractEvent(event: PlayerInteractEvent) {
|
||||
if (event.getAction() !== Action.RIGHT_CLICK_AIR && event.getAction() !== Action.RIGHT_CLICK_BLOCK) {
|
||||
return
|
||||
}
|
||||
|
||||
val player = event.getPlayer()
|
||||
val item = player.inventory.itemInMainHand
|
||||
val name = PlainTextComponentSerializer.plainText().serialize(item.displayName().asComponent())
|
||||
|
||||
val playerCooldowns = plugin.cooldowns.computeIfAbsent(player) { HashMap() }
|
||||
|
||||
val currentTime = System.currentTimeMillis()
|
||||
|
||||
if (playerCooldowns.containsKey(name) && currentTime - playerCooldowns[name]!! < 1000) return
|
||||
|
||||
when (name) {
|
||||
"[Our Socials (Right Click)]" -> player.sendComponent(MessageFormat.setPrefix(MessageFormat.setPrimaryColor("Click ${MessageFormat.setSecondaryColor("<u><click:open_url:'https://chaos.lncvrt.xyz/discord'>HERE</click></u>")} to join our Discord Server, or click ${MessageFormat.setSecondaryColor("<u><click:open_url:'https://chaos.lncvrt.xyz'>HERE</click></u>")} to view our Website!")))
|
||||
"[Server Selector (Right Click)]" -> CommandHelper().executeAsConsole("dmenu open serverselector ${player.name}")
|
||||
}
|
||||
|
||||
playerCooldowns.put(name, currentTime)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerItemDamageEvent
|
||||
|
||||
class PlayerItemDamageListener : Listener {
|
||||
@EventHandler
|
||||
fun onItemDurabilityChange(event: PlayerItemDamageEvent) {
|
||||
event.isCancelled = true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerItemHeldEvent
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class PlayerItemHeldListener : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerItemHeldEvent(event: PlayerItemHeldEvent) {
|
||||
val player = event.getPlayer()
|
||||
if (player.gameMode == GameMode.ADVENTURE) {
|
||||
if (event.newSlot == 7) {
|
||||
player.inventory.chestplate = ItemStack(Material.ELYTRA)
|
||||
} else {
|
||||
player.inventory.chestplate = null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.sayandev.stickynote.bukkit.extension.sendComponent
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
import xyz.lncvrt.chaosmclobby.ChaosMCLobbyPlugin
|
||||
|
||||
class PlayerJoinListener(val plugin: ChaosMCLobbyPlugin) : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerJoinEvent(event: PlayerJoinEvent) {
|
||||
val player = event.getPlayer()
|
||||
plugin.resetPlayer(player, true)
|
||||
player.gameMode = GameMode.ADVENTURE
|
||||
|
||||
plugin.server.scheduler.runTaskLater(plugin, Runnable {
|
||||
player.sendComponent("<dark_gray><strikethrough>+---------------------***---------------------+")
|
||||
player.sendMessage("")
|
||||
player.sendComponent("<gray>Welcome to ${MessageFormat.name()}, ${MessageFormat.setPrimaryColor("<underlined>${player.name}</underlined>")}!</gray>")
|
||||
player.sendMessage("")
|
||||
player.sendComponent("${MessageFormat.setPrimaryColor("<bold>WEBSITE</bold><gray>:</gray>")} ${MessageFormat.setSecondaryColor("<click:open_url:'https://galaxy.lncvrt.xyz'>galaxy.lncvrt.xyz</click>")}")
|
||||
player.sendComponent("${MessageFormat.setPrimaryColor("<bold>DISCORD</bold><gray>:</gray>")} ${MessageFormat.setSecondaryColor("<click:open_url:'https://galaxy.lncvrt.xyz/discord'>galaxy.lncvrt.xyz/discord</click>")}")
|
||||
player.sendMessage("")
|
||||
player.sendComponent("<dark_gray><strikethrough>+---------------------***---------------------+")
|
||||
}, 5)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.World
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerMoveEvent
|
||||
import org.bukkit.util.Vector
|
||||
import org.sayandev.stickynote.bukkit.extension.sendComponent
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
import xyz.lncvrt.chaosmclobby.ChaosMCLobbyPlugin
|
||||
|
||||
class PlayerMoveListener(val plugin: ChaosMCLobbyPlugin) : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerMove(event: PlayerMoveEvent) {
|
||||
val player = event.getPlayer()
|
||||
val location = player.location
|
||||
|
||||
if (location.y < 0) {
|
||||
plugin.resetPlayer(player, true)
|
||||
player.sendComponent(MessageFormat.setPrefix("<rainbow>You happy with yourself?</rainbow>"))
|
||||
} else if (player.world.maxHeight < location.y) {
|
||||
location.y = player.world.maxHeight.toDouble()
|
||||
player.teleport(location)
|
||||
player.sendComponent(MessageFormat.setPrefix(MessageFormat.setPrimaryColor("You can't go that high!")))
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onPlayerMoveLaunchPad(event: PlayerMoveEvent) {
|
||||
val player = event.getPlayer()
|
||||
val world: World? = plugin.server.getWorld("world")
|
||||
if (world == null) return
|
||||
val playerBlock = world.getBlockAt(player.location)
|
||||
|
||||
val playerId = player.uniqueId
|
||||
val currentTime = System.currentTimeMillis()
|
||||
|
||||
if (plugin.jumpPadCooldowns.containsKey(playerId)) {
|
||||
val lastActivation: Long = plugin.jumpPadCooldowns.get(playerId)!!
|
||||
if (currentTime - lastActivation < 1000) return
|
||||
}
|
||||
|
||||
if (playerBlock.type === Material.MANGROVE_PRESSURE_PLATE) {
|
||||
plugin.jumpPadCooldowns.put(playerId, currentTime)
|
||||
|
||||
if (player.gameMode == GameMode.ADVENTURE && player.inventory.heldItemSlot == 7) {
|
||||
player.velocity = Vector(0, 1, 0)
|
||||
player.playSound(player.location, Sound.ENTITY_FIREWORK_ROCKET_BLAST, 2.0f, 1.0f)
|
||||
player.sendComponent(MessageFormat.setPrefix("<rainbow>Hacks!?!?!?!</rainbow>"))
|
||||
val scheduler = plugin.server.scheduler
|
||||
scheduler.runTaskLater(plugin, Runnable {
|
||||
player.velocity = Vector(0, 2, 0)
|
||||
player.playSound(player.location, Sound.ENTITY_FIREWORK_ROCKET_BLAST, 2.0f, 1.0f)
|
||||
}, 10)
|
||||
scheduler.runTaskLater(plugin, Runnable {
|
||||
player.velocity = Vector(0, 2, 0)
|
||||
player.playSound(player.location, Sound.ENTITY_FIREWORK_ROCKET_BLAST, 2.0f, 1.0f)
|
||||
}, 20)
|
||||
scheduler.runTaskLater(plugin, Runnable {
|
||||
player.velocity = Vector(0, 2, 0)
|
||||
player.playSound(player.location, Sound.ENTITY_FIREWORK_ROCKET_BLAST, 2.0f, 1.0f)
|
||||
}, 30)
|
||||
scheduler.runTaskLater(plugin, Runnable {
|
||||
player.velocity = Vector(0, 5, 0)
|
||||
player.playSound(player.location, Sound.ENTITY_FIREWORK_ROCKET_BLAST, 2.0f, 1.25f)
|
||||
}, 40)
|
||||
return
|
||||
}
|
||||
player.velocity = Vector(0.0, 0.75, 1.5)
|
||||
player.playSound(player.location, Sound.ENTITY_BAT_TAKEOFF, 1.0f, 1.0f)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onPlayerMoveDoubleJump(event: PlayerMoveEvent) {
|
||||
val player = event.getPlayer()
|
||||
|
||||
if (!player.isFlying && player.gameMode == GameMode.ADVENTURE) {
|
||||
if (player.inventory.heldItemSlot == 7) {
|
||||
player.allowFlight = false
|
||||
return
|
||||
}
|
||||
player.allowFlight = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerSwapHandItemsEvent
|
||||
|
||||
class PlayerSwapHandItemsListener : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerSwapHandItemsEvent(event: PlayerSwapHandItemsEvent) {
|
||||
if (event.getPlayer().gameMode != GameMode.CREATIVE) event.isCancelled = true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerToggleFlightEvent
|
||||
|
||||
class PlayerToggleFlightListener : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerToggleFlightEvent(event: PlayerToggleFlightEvent) {
|
||||
val player: Player = event.getPlayer()
|
||||
|
||||
if (!player.isFlying && player.gameMode == GameMode.ADVENTURE && player.inventory.heldItemSlot != 7) {
|
||||
val direction = player.location.direction.setY(0).normalize()
|
||||
|
||||
event.isCancelled = true
|
||||
player.allowFlight = false
|
||||
direction.multiply(1.75f)
|
||||
direction.setY(1.25f)
|
||||
player.velocity = direction
|
||||
player.playSound(player.location, Sound.ENTITY_ENDER_DRAGON_FLAP, 1.0f, 1.0f)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package xyz.lncvrt.chaosmclobby.event
|
||||
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.Firework
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import xyz.lncvrt.chaosmcapi.utils.MessageFormat
|
||||
|
||||
class ProjectileLaunchListener() : Listener {
|
||||
@EventHandler
|
||||
fun onProjectileLaunchEvent(event: ProjectileLaunchEvent) {
|
||||
val firework = event.getEntity()
|
||||
val player = firework.shooter
|
||||
if (firework is Firework) {
|
||||
if (player is Player) {
|
||||
val fireworkItem = ItemStack(Material.FIREWORK_ROCKET)
|
||||
val fireworkMeta = fireworkItem.itemMeta
|
||||
fireworkMeta.displayName(MiniMessage.miniMessage().deserialize(MessageFormat.setPrimaryColor("<italic:false>Elytra ${MessageFormat.setSecondaryColor("(Fly around the lobby!)")}</italic>")))
|
||||
fireworkItem.setItemMeta(fireworkMeta)
|
||||
player.inventory.setItem(7, fireworkItem)
|
||||
player.setCooldown(fireworkItem.type, 20)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user