Skip to content

Instantly share code, notes, and snippets.

@thinca
Created March 13, 2016 23:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinca/ad8b1b78a6eb752a85b5 to your computer and use it in GitHub Desktop.
Save thinca/ad8b1b78a6eb752a85b5 to your computer and use it in GitHub Desktop.
kikori mod for Spigot by Kotlin
package com.github.gist.thinca.spigot.plugin.kikori
import org.bukkit.Material
import org.bukkit.block.Block
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.block.BlockBreakEvent
import org.bukkit.plugin.java.JavaPlugin
class Kikori : JavaPlugin() {
override fun onEnable() {
getServer().getPluginManager().registerEvents(
object : Listener {
fun isLog(block: Block) = when (block.getType()) {
Material.LOG, Material.LOG_2 -> true
else -> false
}
fun breakBlock(block: Block, player: Player) {
getServer().getScheduler().scheduleSyncDelayedTask(
this@Kikori,
object : Runnable {
override fun run() {
if (player.isValid() && isLog(block)) {
val newEvent = BlockBreakEvent(block, player)
getServer().getPluginManager().callEvent(newEvent)
block.breakNaturally()
}
}
},
10
)
}
@EventHandler
fun onBlockBreak(event: BlockBreakEvent) {
val woodlog = event.getBlock()
if (!isLog(woodlog)) {
return
}
val player = event.getPlayer()
for (modY in 0..1) {
for (modX in -1..1) {
for (modZ in -1..1) {
val block = woodlog.getRelative(modX, modY, modZ)
breakBlock(block, player)
}
}
}
}
},
this
)
}
}
name: kikori
main: com.github.gist.thinca.spigot.plugin.kikori.Kikori
version: 1.0
@0xBADDCAFE
Copy link

scheduleSyncDelayedTask の部分の Runnable は SAM 変換で渡すことが出来るかもしれません。

                    getServer().getScheduler().scheduleSyncDelayedTask(
                        this@Kikori,
                        {
                                if (player.isValid() && isLog(block)) {
                                    val newEvent = BlockBreakEvent(block, player)
                                    getServer().getPluginManager().callEvent(newEvent)
                                    block.breakNaturally()
                                }
                        },
                        10
                    )

あと Java 側の getter/setter は定義にも依りますが kotlin 側からプロパティ的に参照出来る場合があります。

 val player = event.player

普段 IDE 補完に頼りきりの軟弱なのでミスってたらすいません。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment