So my code is supposed to discover a new recipe when you pick up an elytra but i cant seem to do it

Discussion in 'Plugin Development' started by _SleepyHere, Apr 29, 2023.

Thread Status:
Not open for further replies.
  1. Offline

    _SleepyHere

    So like I said the code is supposed to discover a new recipe.


    Code:
    package me.sleepyhere.betterelytra
    
    import org.bukkit.Bukkit
    import org.bukkit.Material
    import org.bukkit.NamespacedKey
    import org.bukkit.entity.EntityType
    import org.bukkit.entity.Player
    import org.bukkit.event.EventHandler
    import org.bukkit.event.Listener
    import org.bukkit.event.entity.EntityPickupItemEvent
    import org.bukkit.inventory.ItemStack
    import org.bukkit.inventory.ShapedRecipe
    import org.bukkit.plugin.java.JavaPlugin
    
    
    
    class Elytra : JavaPlugin() {
        @Override
        override fun onEnable() {
            logger.info("Better Elytra Enabled.")
            var elytra = ItemStack(Material.ELYTRA, 2)
            var key = NamespacedKey(this, "Elytra")
            var recipe = ShapedRecipe(key, elytra)
    
            recipe.shape("DED", "LSL", "LSL")
            recipe.setIngredient('D', Material.DIAMOND_BLOCK)
            recipe.setIngredient('E', Material.ELYTRA)
            recipe.setIngredient('L', Material.LEATHER)
            recipe.setIngredient('S', Material.STICK)
    
            Bukkit.addRecipe(recipe)
    
            fun onListening(listener: Listener) {
                server.pluginManager.registerEvents(listener, this)
                class MyListener : Listener {
                    @EventHandler
                    fun onPlayerJoin(event: EntityPickupItemEvent?) {
                        if (event != null) {
                            if(event.entityType == EntityType.PLAYER) {
                                var elytra = ItemStack(Material.ELYTRA)
                                if(event.item == elytra) {
                                    val p = event.entity as Player
                                    p.discoverRecipe(key)
                                }
                            }
    
                        }
                    }
                }
            }
        }
    
        override fun onDisable() {
            // Plugin shutdown logic
            logger.info("Disabling . . . BYEEEEEEEEE")
        }
    }
    And Btw Im using Kotlin
    So Theres no error but nothing happens when I pickup an elytra.
     
  2. Offline

    Tim_M

    I believe you need the @EventListener notation, but I don't code in Kotlin so I'm not sure how you'd do that... If you add prints to different locations in your event function, do they ever print? Can you confirm the event is ever being fired?
     
  3. Offline

    _SleepyHere

    Ok, I'll try that.

    I tried it but I cant seed to add it. I already have eventhandler notation but I think I didn't import event listener idk how

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Apr 30, 2023
  4. Online

    timtower Administrator Administrator Moderator

    I am more confused about the fact that you have functions inside other functions
     
    mehboss likes this.
  5. Offline

    _SleepyHere

    I fixed my code now but it still doesn't work Nothing is firing...

    Code:
    package me.sleepyhere.betterelytra
    
    import org.bukkit.Bukkit
    import org.bukkit.Material
    import org.bukkit.NamespacedKey
    import org.bukkit.entity.EntityType
    import org.bukkit.entity.Player
    import org.bukkit.event.EventHandler
    import org.bukkit.event.Listener
    import org.bukkit.event.entity.EntityPickupItemEvent
    import org.bukkit.event.player.PlayerJoinEvent
    import org.bukkit.inventory.ItemStack
    import org.bukkit.inventory.ShapedRecipe
    import org.bukkit.plugin.java.JavaPlugin
    
    
    class Elytra : JavaPlugin(), Listener {
    
    
        @Override
           override fun onEnable() {
            logger.info("Better Elytra Enabled.")
            var elytra = ItemStack(Material.ELYTRA, 2)
            var key = NamespacedKey(this, "Elytra")
            var recipe = ShapedRecipe(key, elytra)
    
            recipe.shape("DED", "LSL", "LSL")
            recipe.setIngredient('D', Material.DIAMOND_BLOCK)
            recipe.setIngredient('E', Material.ELYTRA)
            recipe.setIngredient('L', Material.LEATHER)
            recipe.setIngredient('S', Material.STICK)
    
            Bukkit.addRecipe(recipe)
            server.pluginManager.registerEvents(Elytra(), this)
            class MyListener : Listener {
                @EventHandler
                fun onEntityPickUp(event: EntityPickupItemEvent?) {
                    logger.info("Bro this event fired LOL")
                    if (event != null) {
                        if (event.entityType == EntityType.PLAYER) {
                            var elytra = ItemStack(Material.ELYTRA)
                            if (event.item == elytra) {
                                val p = event.entity as Player
                                p.discoverRecipe(key)
                            }
                        }
    
                    }
                }
            }
        }
    
        override fun onDisable() {
            // Plugin shutdown logic
            logger.info("Disabling . . . BYEEEEEEEEE")
        }
    }
     
  6. Online

    timtower Administrator Administrator Moderator

    @_SleepyHere You still have classes inside your onEnable, that you never use.
    You register an "Elytra" class, no idea why you make a new instance of the same class that does not have any listener methods.
     
Thread Status:
Not open for further replies.

Share This Page