mirror of
https://github.com/GayPizzaSpecifications/foundation.git
synced 2025-08-03 05:30:55 +00:00
Pair programming with @Nanokie on a world swapper plugin :D
This commit is contained in:
@ -1,7 +1,11 @@
|
|||||||
package gay.pizza.foundation.chaos
|
package gay.pizza.foundation.chaos
|
||||||
|
|
||||||
import org.bukkit.Location
|
import org.bukkit.Location
|
||||||
|
import org.bukkit.Server
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
|
|
||||||
fun Location.nearestPlayer(): Player? =
|
fun Location.nearestPlayer(): Player? =
|
||||||
world?.players?.minByOrNull { it.location.distance(this) }
|
world?.players?.minByOrNull { it.location.distance(this) }
|
||||||
|
|
||||||
|
fun Server.randomPlayer(): Player? =
|
||||||
|
onlinePlayers.randomOrNull()
|
||||||
|
@ -9,6 +9,7 @@ object ChaosModules {
|
|||||||
KillRandomPlayer(plugin),
|
KillRandomPlayer(plugin),
|
||||||
TntAllPlayers(plugin),
|
TntAllPlayers(plugin),
|
||||||
MegaTnt(plugin),
|
MegaTnt(plugin),
|
||||||
PlayerSwap(plugin)
|
PlayerSwap(plugin),
|
||||||
|
WorldSwapper(plugin)
|
||||||
).shuffled()
|
).shuffled()
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
package gay.pizza.foundation.chaos.modules
|
||||||
|
|
||||||
|
import gay.pizza.foundation.chaos.randomPlayer
|
||||||
|
import org.bukkit.ChunkSnapshot
|
||||||
|
import org.bukkit.plugin.Plugin
|
||||||
|
|
||||||
|
class WorldSwapper(val plugin: Plugin) : ChaosModule {
|
||||||
|
override fun id(): String = "world-swapper"
|
||||||
|
override fun name(): String = "World Swapper"
|
||||||
|
override fun what(): String = "Swaps the world vertically on activation, and un-swaps it on deactivation."
|
||||||
|
|
||||||
|
var snapshot: ChunkSnapshot? = null
|
||||||
|
|
||||||
|
override fun activate() {
|
||||||
|
val player = plugin.server.randomPlayer() ?: return
|
||||||
|
val chunk = player.world.getChunkAt(player.location)
|
||||||
|
val localSnapshot = chunk.chunkSnapshot
|
||||||
|
|
||||||
|
for (x in 0..15) {
|
||||||
|
for (z in 0..15) {
|
||||||
|
val heightRange = (chunk.world.minHeight + 1) until chunk.world.maxHeight
|
||||||
|
for (y in heightRange) {
|
||||||
|
val targetBlock = chunk.getBlock(x, y, z)
|
||||||
|
val inverseY = heightRange.random()
|
||||||
|
val nextBlock = localSnapshot.getBlockData(x, inverseY, z)
|
||||||
|
targetBlock.setBlockData(nextBlock, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
snapshot = localSnapshot
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun deactivate() {
|
||||||
|
val localSnapshot = snapshot ?: return
|
||||||
|
val world = plugin.server.getWorld(localSnapshot.worldName) ?: return
|
||||||
|
val chunk = world.getChunkAt(localSnapshot.x, localSnapshot.z)
|
||||||
|
|
||||||
|
for (x in 0..15) {
|
||||||
|
for (z in 0..15) {
|
||||||
|
val heightRange = chunk.world.minHeight + 1 until chunk.world.maxHeight
|
||||||
|
for (y in heightRange) {
|
||||||
|
val originalBlock = localSnapshot.getBlockData(x, y, z)
|
||||||
|
chunk.getBlock(x, y, z).blockData = originalBlock
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user