diff --git a/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/ElevatorModule.kt b/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/ElevatorModule.kt index a518364..d0022b8 100644 --- a/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/ElevatorModule.kt +++ b/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/ElevatorModule.kt @@ -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 @@ -15,11 +16,17 @@ 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") @@ -27,11 +34,15 @@ object ElevatorModule : Module() { .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") @@ -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) } @@ -57,6 +95,7 @@ object ElevatorModule : Module() { register(BlockBreakListener) register(BlockPlaceListener) + register(FrameListener) register(InventoryClickListener) register(InventoryListener) register(PlayerInteractListener) diff --git a/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/FrameListener.kt b/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/FrameListener.kt new file mode 100644 index 0000000..4ce99fa --- /dev/null +++ b/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/FrameListener.kt @@ -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) + } + +} \ No newline at end of file diff --git a/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/player/PlayerToggleSneakListener.kt b/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/player/PlayerToggleSneakListener.kt index 6f05dad..3ba6b83 100644 --- a/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/player/PlayerToggleSneakListener.kt +++ b/modules/ElevatorSystem/src/main/kotlin/de/nick/elevatorsystem/listener/player/PlayerToggleSneakListener.kt @@ -98,7 +98,7 @@ object PlayerToggleSneakListener : Listener { val holder = Launcher(dispenser, launcherLvl) if (launcherLvl == 100) { - triggerElytraBoost(player, 10.0) + triggerElytraBoostSpawn(player, 1.0) return } @@ -169,4 +169,26 @@ object PlayerToggleSneakListener : Listener { player.isGliding = true } } + + private fun triggerElytraBoostSpawn(player: Player, finalVelocityMultiplier: Double) { + + GlobalScope.launch { + 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 + } + } + } \ No newline at end of file