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
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package de.nick.elevatorsystem
import de.nick.elevatorsystem.command.SpawnLauncherCommand
import de.nick.elevatorsystem.listener.BlockBreakListener
import de.nick.elevatorsystem.listener.BlockPlaceListener
import de.nick.elevatorsystem.listener.FrameListener
import de.nick.elevatorsystem.listener.InventoryClickListener
import de.nick.elevatorsystem.listener.InventoryListener
import de.nick.elevatorsystem.listener.player.PlayerInteractListener
Expand All @@ -15,23 +16,33 @@ import net.derfarmer.playersystem.utils.ItemBuilder
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.inventory.ShapedRecipe
import org.bukkit.potion.PotionType


object ElevatorModule : Module() {

override fun onEnable() {

/**
* elevator
*/

val elevatorRecipe = ShapedRecipe(
NamespacedKey("ev1", "elevator_recipe"),
ItemBuilder(Material.DAYLIGHT_DETECTOR).setDisplayName("§2Elevator")
.setLore("§l§3Platziere zwei Elevators übereinander.")
.setData("ev1", "elevator", true).build()
)

elevatorRecipe.shape(" D ", " E ", " N ") // Das Rezeptmuster
elevatorRecipe.shape(" D ", " E ", " N ")
elevatorRecipe.setIngredient('D', Material.DIAMOND)
elevatorRecipe.setIngredient('E', Material.DAYLIGHT_DETECTOR)
elevatorRecipe.setIngredient('N', Material.ENDER_PEARL)

/**
* elytra launcher
*/

val elytraLauncherRecipe = ShapedRecipe(
NamespacedKey("ev1", "elytralauncher_recipe"),
ItemBuilder(Material.DISPENSER).setDisplayName("§l§2Elytra Launcher")
Expand All @@ -44,10 +55,37 @@ object ElevatorModule : Module() {
elytraLauncherRecipe.setIngredient('A', Material.DISPENSER)
elytraLauncherRecipe.setIngredient('B', Material.FIRE_CHARGE)

/**
* Light Block
*/

val lightBlockRecipe = ShapedRecipe(NamespacedKey("ev1", "lightblock_recipe"), ItemBuilder(Material.LIGHT).setDisplayName("§5Light").build())

lightBlockRecipe.shape("*A*", "ABA", "*A*")
lightBlockRecipe.setIngredient('A', Material.GLOWSTONE_DUST)
lightBlockRecipe.setIngredient('B', Material.COAL)

/**
* Light Block
*/

val invisibleItemFrameRecipe = ShapedRecipe(NamespacedKey("ev1", "invisibleitemframe_recipe"),
ItemBuilder(Material.ITEM_FRAME).setDisplayName("§5Invisible Item Frame").setData("ev1", "itemframe", true).setAmount(4).build())

val invisiblePotion = ItemBuilder(Material.POTION).setPotion(PotionType.INVISIBILITY).build()

invisibleItemFrameRecipe.shape("*A*", "BCD", "*E*")
invisibleItemFrameRecipe.setIngredient('A', Material.ITEM_FRAME)
invisibleItemFrameRecipe.setIngredient('B', Material.ITEM_FRAME)
invisibleItemFrameRecipe.setIngredient('C', invisiblePotion)
invisibleItemFrameRecipe.setIngredient('D', Material.ITEM_FRAME)
invisibleItemFrameRecipe.setIngredient('E', Material.ITEM_FRAME)

try {
register(elevatorRecipe)
register(elytraLauncherRecipe)
register(lightBlockRecipe)
register(invisibleItemFrameRecipe)
} catch (e: Exception) {
println(e)
}
Expand All @@ -57,6 +95,7 @@ object ElevatorModule : Module() {

register(BlockBreakListener)
register(BlockPlaceListener)
register(FrameListener)
register(InventoryClickListener)
register(InventoryListener)
register(PlayerInteractListener)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package de.nick.elevatorsystem.listener

import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.entity.EntityType
import org.bukkit.entity.ItemFrame
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.hanging.HangingBreakEvent
import org.bukkit.event.hanging.HangingPlaceEvent
import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataType

object FrameListener : Listener {

@EventHandler
fun onHangingBreak(event: HangingBreakEvent) {
if (event.entity.type != EntityType.ITEM_FRAME) return

val itemFrame = event.entity as ItemFrame

if (!itemFrame.isVisible) {
dropItemFrame(itemFrame)
dropInvisibleItemFrame(itemFrame)
itemFrame.remove()
}
}

@EventHandler
fun onHangingPlace(event: HangingPlaceEvent) {
val itemStack = event.itemStack ?: return

val container = itemStack.itemMeta.persistentDataContainer
val key = NamespacedKey("ev1", "itemframe")

if (container.getOrDefault(key, PersistentDataType.BOOLEAN, false)) {
val itemFrame = event.entity as ItemFrame
itemFrame.isVisible = false
}
}

private fun dropItemFrame(itemFrame: ItemFrame) {
itemFrame.location.world.dropItemNaturally(itemFrame.location, itemFrame.item)
}

private fun dropInvisibleItemFrame(itemFrame: ItemFrame) {
val invisibleItemFrame = ItemStack(Material.ITEM_FRAME, 1)
val meta = invisibleItemFrame.itemMeta
if (meta != null) {
meta.setDisplayName("§l§5Invisible Item Frame")
meta.lore = listOf("")
val key = NamespacedKey("ev1", "itemframe")
meta.persistentDataContainer.set(key, PersistentDataType.BOOLEAN, true)
invisibleItemFrame.setItemMeta(meta)
}
itemFrame.location.world.dropItemNaturally(itemFrame.location, invisibleItemFrame)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ object PlayerToggleSneakListener : Listener {
val holder = Launcher(dispenser, launcherLvl)

if (launcherLvl == 100) {
triggerElytraBoost(player, 10.0)
triggerElytraBoostSpawn(player, 1.0)
return
}

Expand Down Expand Up @@ -169,4 +169,26 @@ object PlayerToggleSneakListener : Listener {
player.isGliding = true
}
}

private fun triggerElytraBoostSpawn(player: Player, finalVelocityMultiplier: Double) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

factor out y velocity as function parameter to avoid code duplication


GlobalScope.launch {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doesn't work on folia use plugin.launch(PlayerModule.plugin.entityDispatcher(e.player)) { instead

player.world.spawnParticle(Particle.CAMPFIRE_COSY_SMOKE, player.location, 50, 0.1, 0.1, 0.1, 0.1)
player.world.spawnParticle(Particle.FLAME, player.location, 30, 0.1, 0.1, 0.1, 0.1)
player.playSound(player.location, Sound.ENTITY_WITHER_SHOOT, 20F, 10f)
PlayerFlyStart.fly.add(player)
player.velocity = Vector(0, 4, 0)

for (i in 3 downTo 0) {
delay(500)
player.showTitle(Title.title(Component.text("Boost in"), Component.text(i)))
}
player.showTitle(Title.title(Component.text(""), Component.text("")))

player.world.spawnParticle(Particle.FIREWORK, player.location, 180, 0.1, 0.1, 0.1, 0.1)
player.velocity = player.eyeLocation.direction.multiply(finalVelocityMultiplier)
player.isGliding = true
}
}

}