Added the plugin itself.

This commit is contained in:
5vl 2022-04-05 21:30:25 +02:00 committed by GitHub
parent 0753070703
commit ffa76a87df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 842 additions and 0 deletions

127
pom.xml Normal file
View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.fivevl</groupId>
<artifactId>skymines</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SkyMines</name>
<description>Skymines but kotlin</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<kotlin.version>1.6.10</kotlin.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<jvmTarget>1.8</jvmTarget>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>papermc-repo</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.17.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,25 @@
package com.fivevl.skymines
import org.bukkit.Material
import org.bukkit.inventory.ItemStack
enum class Compressors(val item: ItemStack, val compress: Items) {
STONE_COMPRESSOR(getCompressor("&7Stone"), Items.COMPRESSED_STONE),
COAL_COMPRESSOR(getCompressor("&8Coal"), Items.COMPRESSED_COAL),
GOLD_COMPRESSOR(getCompressor("&6Gold"), Items.COMPRESSED_GOLD),
IRON_COMPRESSOR(getCompressor("&7Iron"), Items.COMPRESSED_IRON),
DIAMOND_COMPRESSOR(getCompressor("&bDiamond"), Items.COMPRESSED_DIAMOND),
EMERALD_COMPRESSOR(getCompressor("&aEmerald"), Items.COMPRESSED_EMERALD),
REDSTONE_COMPRESSOR(getCompressor("&cRedstone"), Items.COMPRESSED_REDSTONE),
LAPIS_COMPRESSOR(getCompressor("&3Lapis"), Items.COMPRESSED_LAPIS),
ICE_COMPRESSOR(getCompressor("&bIce"), Items.COMPRESSED_ICE),
SNOW_COMPRESSOR(getCompressor("&fSnow"), Items.COMPRESSED_SNOW)
}
@Suppress("deprecation")
private fun getCompressor(name: String): ItemStack {
val item = ItemStack(Material.DISPENSER)
val meta = item.itemMeta
meta.setDisplayName(Utils.hex("$name Autocompressor"))
item.itemMeta = meta
return item
}

View File

@ -0,0 +1,30 @@
package com.fivevl.skymines
import org.bukkit.Material
import org.bukkit.enchantments.Enchantment
import org.bukkit.inventory.ItemFlag
import org.bukkit.inventory.ItemStack
enum class Items(val item: ItemStack) {
COMPRESSED_STONE(getCompressedItem(Material.STONE, "&7Compressed Stone")),
COMPRESSED_COAL(getCompressedItem(Material.COAL, "&8Compressed Coal")),
COMPRESSED_GOLD(getCompressedItem(Material.GOLD_INGOT, "&6Compressed Gold")),
COMPRESSED_IRON(getCompressedItem(Material.IRON_INGOT, "&7Compressed Iron")),
COMPRESSED_DIAMOND(getCompressedItem(Material.DIAMOND, "&bCompressed Diamond")),
COMPRESSED_EMERALD(getCompressedItem(Material.EMERALD, "&aCompressed Emerald")),
COMPRESSED_REDSTONE(getCompressedItem(Material.REDSTONE, "&cCompressed Redstone")),
COMPRESSED_LAPIS(getCompressedItem(Material.LAPIS_LAZULI, "&3Compressed Lapis")),
COMPRESSED_ICE(getCompressedItem(Material.PACKED_ICE, "&bCompressed Ice")),
COMPRESSED_SNOW(getCompressedItem(Material.SNOW_BLOCK, "&fCompressed Snow"))
}
@Suppress("deprecation")
private fun getCompressedItem(mat: Material, name: String): ItemStack {
val item = ItemStack(mat)
val meta = item.itemMeta
meta.setDisplayName(Utils.hex(name))
meta.addEnchant(Enchantment.DURABILITY, 1, true)
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS)
item.itemMeta = meta
return item
}

View File

@ -0,0 +1,125 @@
package com.fivevl.skymines
import com.fivevl.skymines.commands.CompressorCommand
import com.fivevl.skymines.commands.ResetMineCommand
import com.fivevl.skymines.commands.ScrollCommand
import com.fivevl.skymines.commands.SpawnCommand
import com.fivevl.skymines.listeners.*
import com.fivevl.skymines.tabcomplete.ResetMineTabComplete
import org.bukkit.Bukkit
import org.bukkit.Location
import org.bukkit.Material
import org.bukkit.World
import org.bukkit.configuration.ConfigurationSection
import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.plugin.java.JavaPlugin
import java.io.File
import java.io.IOException
import java.util.stream.Collectors
class Main : JavaPlugin() {
override fun onEnable() {
Utils.mainInstance = this
if (dataFolder.mkdir()) {
logger.info("Data folder created!")
}
createPlayerData()
registerMines()
registerCommands()
registerListeners()
}
private fun registerCommands() {
getCommand("resetmine")?.setExecutor(ResetMineCommand())
getCommand("resetmine")?.tabCompleter = ResetMineTabComplete()
getCommand("spawn")?.setExecutor(SpawnCommand())
getCommand("compressor")?.setExecutor(CompressorCommand())
getCommand("scroll")?.setExecutor(ScrollCommand())
}
private fun registerListeners() {
val plm = Bukkit.getPluginManager()
plm.registerEvents(MineListener(), this)
plm.registerEvents(PlayerJoinListener(), this)
plm.registerEvents(PlayerMoveListener(), this)
plm.registerEvents(CommandBlock(), this)
plm.registerEvents(ClickListener(), this)
}
private fun createPlayerData() {
val file = File(dataFolder, "playerdata.yml")
try {
if (file.createNewFile()) {
logger.info("Created new playerdata.yml file.")
}
} catch (e: IOException) {
logger.info("Could not create new playerdata.yml file.")
e.printStackTrace()
}
}
private fun registerMines() {
createMinesYaml()
val file = File(dataFolder, "mines.yml")
val yamlConfig = YamlConfiguration.loadConfiguration(file)
val minesList: List<ConfigurationSection?> =
yamlConfig.getConfigurationSection("")?.getKeys(false)?.stream()
?.map(yamlConfig::getConfigurationSection)?.collect(Collectors.toList()) as List<ConfigurationSection?>
for (sect in minesList) {
if (!sect!!.name.equals("ExampleMine", ignoreCase = true)) {
val world: World? = sect.getString("World")?.let { Bukkit.getWorld(it) }
val corner1 = sect.getConfigurationSection("Corner1")
val corner2 = sect.getConfigurationSection("Corner2")
assert(corner1 != null)
val loc1 = Location(world, corner1!!.getInt("x").toDouble(), corner1.getInt("y").toDouble(), corner1.getInt("z").toDouble()
)
assert(corner2 != null)
val loc2 = Location(world, corner2!!.getInt("x").toDouble(), corner2.getInt("y").toDouble(), corner2.getInt("z").toDouble()
)
val mat1 = sect.getString("75PercentOfMine")?.let { Material.matchMaterial(it) }
val mat2 = sect.getString("25PercentOfMine")?.let { Material.matchMaterial(it) }
Utils.mines[sect.name] = Mine(loc1, loc2, mat1!!, mat2!!)
}
}
autoResetMines()
}
private fun autoResetMines() {
val sched = Bukkit.getScheduler()
sched.scheduleSyncRepeatingTask(this, {
if (!Bukkit.getOnlinePlayers().isEmpty()) {
for (mine in Utils.mines.values) {
mine.resetMine()
}
}
}, 0, (15 * 20).toLong())
}
private fun createMinesYaml() {
val file = File(dataFolder, "mines.yml")
try {
if (file.createNewFile()) {
logger.info("Created new mines.yml file.")
val yamlConfig = YamlConfiguration.loadConfiguration(file)
val exampleMineSect = yamlConfig.createSection("ExampleMine")
exampleMineSect["World"] = "world"
val corner1Sect = exampleMineSect.createSection("Corner1")
corner1Sect["x"] = 0
corner1Sect["y"] = 80
corner1Sect["z"] = 0
val corner2Sect = exampleMineSect.createSection("Corner2")
corner2Sect["x"] = 20
corner2Sect["y"] = 100
corner2Sect["z"] = 20
exampleMineSect["75PercentOfMine"] = "STONE"
exampleMineSect["25PercentOfMine"] = "COBBLESTONE"
yamlConfig.save(file)
}
} catch (e: IOException) {
logger.severe("Could not create new mines.yml file.")
e.printStackTrace()
}
}
}

View File

@ -0,0 +1,31 @@
package com.fivevl.skymines
import org.bukkit.Bukkit
import org.bukkit.Location
import org.bukkit.Material
import java.util.*
class Mine(private var loc1: Location, private var loc2: Location, private var b75: Material, private var b25: Material) {
fun resetMine() {
val rand = Random()
for (x in loc1.blockX.coerceAtMost(loc2.blockX)..loc1.blockX.coerceAtLeast(loc2.blockX)) {
for (y in loc1.blockY.coerceAtMost(loc2.blockY)..loc1.blockY.coerceAtLeast(loc2.blockY)) {
for (z in loc1.blockZ.coerceAtMost(loc2.blockZ)..loc1.blockZ.coerceAtLeast(loc2.blockZ)) {
for (p in Bukkit.getOnlinePlayers()) {
val pLoc = p.location
if (pLoc.blockX == x && pLoc.blockY == y && pLoc.blockZ == z) {
p.teleport(pLoc.add(0.0, 1.0, 0.0))
}
}
val block = rand.nextInt(100)
if (block < 75) {
Location(Bukkit.getWorld("world"), x.toDouble(), y.toDouble(), z.toDouble()).block.type = b75
} else {
Location(Bukkit.getWorld("world"), x.toDouble(), y.toDouble(), z.toDouble()).block.type = b25
}
}
}
}
}
}

View File

@ -0,0 +1,23 @@
package com.fivevl.skymines
import org.bukkit.Bukkit
import org.bukkit.Location
import org.bukkit.Material
import org.bukkit.enchantments.Enchantment
import org.bukkit.inventory.ItemFlag
import org.bukkit.inventory.ItemStack
enum class Scrolls(val item: ItemStack, val location: Location) {
ICE_SCROLL(getScroll("Ice"), Location(Bukkit.getWorld("world"), -165.5, 82.0, -52.5, 0F, 0F)),
DESERT_SCROLL(getScroll("Desert"), Location(Bukkit.getWorld("world"), -256.5, 92.0, -78.5, 180F, 0F))
}
@Suppress("deprecation")
fun getScroll(name: String): ItemStack {
val item = ItemStack(Material.PAPER)
val meta = item.itemMeta
meta.setDisplayName(Utils.hex("&bTravel Scroll - $name"))
meta.addEnchant(Enchantment.DURABILITY, 1, true)
meta.addItemFlags(ItemFlag.HIDE_ENCHANTS)
item.itemMeta = meta
return item
}

View File

@ -0,0 +1,28 @@
package com.fivevl.skymines
import net.md_5.bungee.api.ChatColor
import org.bukkit.Bukkit
import org.bukkit.Location
import java.util.regex.Pattern
object Utils {
var mainInstance: Main? = null
var mines: HashMap<String, Mine> = HashMap()
var spawn = Location(Bukkit.getWorld("world"), 0.5, 73.0, 0.5, 180F, 0F)
fun hex(s: String): String {
var s2 = s
val pattern = Pattern.compile("#[a-fA-F0-9]{6}")
var match = pattern.matcher(s)
while (match.find()) {
val color = s.substring(match.start(), match.end())
s2 = s2.replace(color, ChatColor.of(color).toString() + "")
match = pattern.matcher(s2)
}
return ChatColor.translateAlternateColorCodes('&', s2)
}
fun hasCooldown(time: Long): Boolean {
return time < System.currentTimeMillis()
}
}

View File

@ -0,0 +1,39 @@
package com.fivevl.skymines.commands
import com.fivevl.skymines.Compressors
import com.fivevl.skymines.Utils
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import java.util.StringJoiner
class CompressorCommand : CommandExecutor {
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
if (sender !is Player) {
sender.sendMessage(Utils.hex("&cYou can only run this command as a player!"))
return true
}
if (!sender.hasPermission("sm.bypass")) {
sender.sendMessage(Utils.hex("&cYou do not have permission to execute this command!"))
return true
}
if (args.size != 1) {
sender.sendMessage(Utils.hex("&cCorrect command usage: /compressor [compressor type]"))
return true
}
val comp: Compressors?
try {
comp = Compressors.valueOf("${args[0].uppercase()}_COMPRESSOR")
} catch (ex: IllegalArgumentException) {
val joiner = StringJoiner("\n")
for (c in Compressors.values()) {
joiner.add("&c" + c.name.substring(0, c.name.length - 11))
}
sender.sendMessage(Utils.hex("&cThat is not a valid compressor! \n&cCorrect compressors: \n${joiner}"))
return true
}
sender.inventory.addItem(comp.item)
return true
}
}

View File

@ -0,0 +1,45 @@
package com.fivevl.skymines.commands
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import com.fivevl.skymines.Utils
import java.util.*
class ResetMineCommand : CommandExecutor {
private val resetMineCooldown = HashMap<Player, Long>()
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<String>): Boolean {
if (!sender.hasPermission("sm.mines.reset")) {
sender.sendMessage(Utils.hex("&cYou do not have permission to execute this command!"))
return true
}
if (sender is Player && resetMineCooldown.containsKey(sender) && resetMineCooldown[sender]?.let {
Utils.hasCooldown(
it
)
} == true) {
sender.sendMessage(Utils.hex("&cThis command is on cooldown!"))
return true
}
val mineNames = StringJoiner(" ")
for (name in Utils.mines.keys) {
mineNames.add(name)
}
if (args.size != 1) {
sender.sendMessage(Utils.hex("&cCorrect command usage: /resetmine [mine] \n&cAll correct mines: $mineNames"))
return true
}
if (!Utils.mines.containsKey(args[0])) {
sender.sendMessage(Utils.hex("&cThat is not a correct mine! \n&cAll correct mines: $mineNames"))
return true
}
Utils.mines[args[0]]?.resetMine()
sender.sendMessage(Utils.hex("&aSuccessfully reset mine '" + args[0] + "'!"))
if (sender is Player && !sender.hasPermission("sm.mines.reset.bypass")) {
resetMineCooldown[sender] = System.currentTimeMillis() + (60 * 1000)
}
return true
}
}

View File

@ -0,0 +1,53 @@
package com.fivevl.skymines.commands
import com.fivevl.skymines.Scrolls
import com.fivevl.skymines.Utils
import org.bukkit.Bukkit
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import java.util.StringJoiner
class ScrollCommand : CommandExecutor {
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
if (!sender.hasPermission("sm.givescroll")) {
sender.sendMessage(Utils.hex("&cYou do not have permission to execute this command!"))
return true
}
if (args.size != 3) {
sender.sendMessage(Utils.hex("&cCorrect command usage: /scroll [player] [scroll] [amount]"))
return true
}
val gp = Bukkit.getPlayer(args[0])
if (gp == null) {
sender.sendMessage(Utils.hex("&cThat is not a correct player!"))
return true
}
var scroll: Scrolls? = null
for (name in Scrolls.values()) {
if (args[1].uppercase() == name.toString().substring(0, name.toString().length - 7)) {
scroll = name
break
}
}
if (scroll == null) {
val join = StringJoiner("\n")
for (name in Scrolls.values()) {
join.add(name.toString().substring(0, name.toString().length - 7))
}
sender.sendMessage(Utils.hex("&cThat is not a correct scroll! Correct scrolls:\n$join"))
return true
}
val amount: Int
try {
amount = args[2].toInt()
} catch (e: NumberFormatException) {
sender.sendMessage(Utils.hex("&cThat is not a correct amount!"))
return true
}
val item = scroll.item
item.amount = amount
gp.inventory.addItem(item)
return true
}
}

View File

@ -0,0 +1,24 @@
package com.fivevl.skymines.commands
import org.bukkit.command.Command
import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import com.fivevl.skymines.Utils
class SpawnCommand : CommandExecutor {
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<String>): Boolean {
if (sender !is Player) {
sender.sendMessage(Utils.hex("&cOnly players may execute this command!"))
return true
}
if (!sender.hasPermission("sm.spawn")) {
sender.sendMessage(Utils.hex("&cYou do not have permission to execute this command!"))
return true
}
sender.teleport(Utils.spawn)
sender.sendMessage(Utils.hex("&aYou have been teleported to spawn!"))
return true
}
}

View File

@ -0,0 +1,24 @@
package com.fivevl.skymines.listeners
import com.fivevl.skymines.Scrolls
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.inventory.EquipmentSlot
class ClickListener : Listener {
@EventHandler
fun onClick(e: PlayerInteractEvent) {
if (e.hand != EquipmentSlot.HAND) return
val p = e.player
for (scroll in Scrolls.values()) {
if (p.inventory.itemInMainHand.isSimilar(scroll.item)) {
p.teleport(scroll.location)
val new = scroll.item
new.amount = p.inventory.itemInMainHand.amount - 1
p.inventory.setItemInMainHand(new)
break
}
}
}
}

View File

@ -0,0 +1,17 @@
package com.fivevl.skymines.listeners
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerCommandPreprocessEvent
class CommandBlock : Listener {
@EventHandler
fun onBlockedCommand(e: PlayerCommandPreprocessEvent) {
val cmds = arrayOf("/pl", "/bukkit:pl", "/minecraft:me", "/me")
for (s in cmds) {
if (e.message.startsWith(s)) {
e.isCancelled = true
}
}
}
}

View File

@ -0,0 +1,155 @@
package com.fivevl.skymines.listeners
import com.fivevl.skymines.Compressors
import org.bukkit.Material
import org.bukkit.enchantments.Enchantment
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.block.BlockBreakEvent
import org.bukkit.inventory.ItemStack
import com.fivevl.skymines.Utils
import java.util.*
import kotlin.math.pow
import kotlin.math.roundToInt
class MineListener : Listener {
@EventHandler
fun onMine(e: BlockBreakEvent) {
val p = e.player
if (p.inventory.firstEmpty() == -1) {
p.sendMessage(Utils.hex("&cYour inventory is full!"))
e.isCancelled = true
return
}
val blockType = e.block.type
var cancel = false
when (p.inventory.itemInMainHand.type) {
Material.WOODEN_PICKAXE -> {
when (blockType) {
Material.STONE, Material.COBBLESTONE, Material.COAL_ORE, Material.COAL_BLOCK -> {}
else -> cancel = true
}
}
Material.STONE_PICKAXE -> {
when (blockType) {
Material.STONE, Material.COBBLESTONE, Material.COAL_ORE, Material.COAL_BLOCK, Material.GOLD_ORE, Material.GOLD_BLOCK -> {}
else -> cancel = true
}
}
Material.GOLDEN_PICKAXE -> {
when (blockType) {
Material.STONE, Material.COBBLESTONE, Material.COAL_ORE, Material.COAL_BLOCK, Material.GOLD_ORE, Material.GOLD_BLOCK, Material.IRON_ORE, Material.IRON_BLOCK -> {}
else -> cancel = true
}
}
Material.IRON_PICKAXE -> {
when (blockType) {
Material.STONE, Material.COBBLESTONE, Material.COAL_ORE, Material.COAL_BLOCK, Material.GOLD_ORE, Material.GOLD_BLOCK, Material.IRON_ORE, Material.IRON_BLOCK, Material.DIAMOND_ORE, Material.DIAMOND_BLOCK -> {}
else -> cancel = true
}
}
Material.DIAMOND_PICKAXE -> {
when (blockType) {
Material.STONE, Material.COBBLESTONE, Material.COAL_ORE, Material.COAL_BLOCK, Material.GOLD_ORE, Material.GOLD_BLOCK, Material.IRON_ORE, Material.IRON_BLOCK, Material.DIAMOND_ORE, Material.DIAMOND_BLOCK, Material.EMERALD_ORE, Material.EMERALD_BLOCK, Material.REDSTONE_ORE, Material.REDSTONE_BLOCK, Material.LAPIS_ORE, Material.LAPIS_BLOCK -> {}
else -> cancel = true
}
}
Material.NETHERITE_PICKAXE -> {
cancel = blockType == Material.SNOW_BLOCK
}
Material.WOODEN_SHOVEL -> {
cancel = blockType != Material.SNOW_BLOCK
}
else -> cancel = true
}
if (cancel && !p.hasPermission("sm.bypass")) {
e.isCancelled = true
return
}
if (!cancel) {
calculateItems(p, blockType)
}
}
private fun calculateItems(p: Player, inBlock: Material) {
var block = inBlock
val hand = p.inventory.itemInMainHand
var amount = 1.0
val compressor: Compressors
if (hand.containsEnchantment(Enchantment.LOOT_BONUS_BLOCKS)) {
val level = hand.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS)
amount *= level.toDouble().pow(1.01)
val rand = Random()
amount = if (rand.nextInt(100) < 50) {
amount + 0.5
} else {
amount - 0.5
}
}
when (block) {
Material.STONE -> {
compressor = Compressors.STONE_COMPRESSOR
}
Material.COAL_ORE -> {
block = Material.COAL
compressor = Compressors.COAL_COMPRESSOR
}
Material.GOLD_ORE -> {
block = Material.RAW_GOLD
compressor = Compressors.GOLD_COMPRESSOR
}
Material.IRON_ORE -> {
block = Material.RAW_IRON
compressor = Compressors.IRON_COMPRESSOR
}
Material.DIAMOND_ORE -> {
block = Material.DIAMOND
compressor = Compressors.DIAMOND_COMPRESSOR
}
Material.EMERALD_ORE -> {
block = Material.EMERALD
compressor = Compressors.EMERALD_COMPRESSOR
}
Material.REDSTONE_ORE -> {
block = Material.REDSTONE
amount *= 2.0
compressor = Compressors.REDSTONE_COMPRESSOR
}
Material.LAPIS_ORE -> {
block = Material.LAPIS_LAZULI
amount *= 2.0
compressor = Compressors.LAPIS_COMPRESSOR
}
Material.BLUE_ICE -> {
compressor = Compressors.ICE_COMPRESSOR
}
Material.SNOW_BLOCK -> {
compressor = Compressors.SNOW_COMPRESSOR
}
else -> {
val str = block.toString()
if (str.endsWith("_BLOCK") || str == "STONE" || str == "COBBLESTONE") {
if (str == "GRASS_BLOCK") return
p.inventory.addItem(ItemStack(block, 1))
return
} else return
}
}
getCompressedItem(p, compressor, block, amount)
}
private fun getCompressedItem(p: Player, comp: Compressors?, block: Material, amount: Double) {
p.inventory.addItem(ItemStack(block, amount.roundToInt()))
if (comp == null) return
if (p.inventory.contains(block) && p.inventory.contains(comp.item)) {
for (i in p.inventory.contents) {
if (i != null && i.amount >= 64 && i.type == block && !i.itemMeta.hasEnchants()) {
p.inventory.remove(ItemStack(block, 64))
p.inventory.addItem(comp.compress.item)
}
}
}
}
}

View File

@ -0,0 +1,45 @@
package com.fivevl.skymines.listeners
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent
import com.fivevl.skymines.Utils
import org.bukkit.Bukkit
import org.bukkit.Material
import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.event.player.PlayerQuitEvent
import org.bukkit.inventory.ItemFlag
import org.bukkit.inventory.ItemStack
import java.io.File
class PlayerJoinListener : Listener {
@EventHandler
@Suppress("deprecation")
fun onJoin(e: PlayerJoinEvent) {
e.player.teleport(Utils.spawn)
val file = File(Utils.mainInstance?.dataFolder, "playerdata.yml")
val config = YamlConfiguration.loadConfiguration(file)
if (config.getConfigurationSection(e.player.uniqueId.toString()) == null) {
config.createSection(e.player.uniqueId.toString())
e.player.inventory.addItem(ItemStack(Material.COOKED_BEEF, 16), getPick())
config.save(file)
Bukkit.broadcastMessage(Utils.hex("&eWelcome ${e.player.name} to the server!"))
}
e.joinMessage(null)
}
private fun getPick(): ItemStack {
val item = ItemStack(Material.WOODEN_PICKAXE)
val meta = item.itemMeta
meta.isUnbreakable = true
meta.addItemFlags(ItemFlag.HIDE_UNBREAKABLE)
item.itemMeta = meta
return item
}
@EventHandler
fun onLeave(e: PlayerQuitEvent) {
e.quitMessage(null)
}
}

View File

@ -0,0 +1,17 @@
package com.fivevl.skymines.listeners
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerMoveEvent
import com.fivevl.skymines.Utils
class PlayerMoveListener : Listener {
@EventHandler
fun onMove(e: PlayerMoveEvent) {
val p = e.player
if (p.location.y <= 0) {
p.teleport(Utils.spawn)
}
}
}

View File

@ -0,0 +1,19 @@
package com.fivevl.skymines.tabcomplete
import org.bukkit.command.Command
import org.bukkit.command.CommandSender
import org.bukkit.command.TabCompleter
import com.fivevl.skymines.Utils
class ResetMineTabComplete : TabCompleter {
override fun onTabComplete(sender: CommandSender, command: Command, alias: String, args: Array<String>): List<String> {
val list = ArrayList<String>()
if (sender.hasPermission("sm.mines.reset")) {
for (mines in Utils.mines.keys) {
list.add(mines)
}
}
return list
}
}

View File

@ -0,0 +1,15 @@
name: SkyMines
version: '${project.version}'
main: com.fivevl.skymines.Main
api-version: 1.17
authors: [ 5vl ]
description: Skymines plugin made by 5vl.
commands:
resetmine:
description: Reset a mine.
spawn:
description: Go to spawn.
compressor:
description: Get compressor.
scroll:
description: Get a scroll.