Getting dispenser to refill

Discussion in 'Plugin Development' started by kingBS11, Dec 24, 2012.

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

    kingBS11

    I need some help with this. I want it so that when a dispenser shoots a firework, the firework is added to the dispenser so it becomes infinite. I have already tried something and it sorta works. I put a grass block in it and dispensed it and it added it but it doesn't work on fireworks, only blocks.
    Code:
    package com.endlessshadow;
     
    import org.bukkit.block.Dispenser;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockDispenseEvent;
    import org.bukkit.inventory.Inventory;
     
    public class DispenseListener implements Listener {
    public EndlessFireworks plugin;
           
            public DispenseListener(EndlessFireworks plugin) {
                    this.plugin = plugin;
            }
     
            @EventHandler
            public void onDispense(BlockDispenseEvent evt){
           Dispenser dispenser = (Dispenser) evt.getBlock();
           Inventory inv = dispenser.getInventory();
           inv.addItem(evt.getItem());
            }
    }
     
  2. Offline

    Rprrr

    I believe it dispenses an entity. Get the firework item from the entity it dispenses and add that to the dispenser.
     
  3. Offline

    kingBS11

    Code?
     
  4. Offline

    fireblast709

    It dispenses an Item, and instantly removes it and spawns a Firework entity. You can still get the block's inventory and add the event.getItem() to it
     
  5. Offline

    kingBS11

    Huh? Sample code please?
     
  6. Offline

    fireblast709

    Code:java
    1. BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(d0, d1, d2));

    Straight from Craftbukkit, DispenseBehaviourFireworks.java. This means: the ItemStack is the firework stack
     
  7. Offline

    kingBS11

    So I use that instead of onDispense(BlockDispenseEvent evt){ right?
     
  8. Offline

    fireblast709

    no, this just proves that the BlockDispenseEvent works perfectly fine. Just make sure you use the latest Bukkit and Craftbukkit
     
  9. Offline

    kingBS11

    I am...
     
  10. this is what i use:
    Code:
    ItemStack newItemStack = event.getItem().clone();
            dispenser.getInventory().addItem(newItemStack);
    clones item so dispenser will never run empty.
     
  11. Offline

    kingBS11

    Didn't work
    Code:
    package com.endlessshadow;
     
    import org.bukkit.block.Dispenser;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockDispenseEvent;
    import org.bukkit.inventory.ItemStack;
     
    public class DispenseListener implements Listener {
    public EndlessFireworks plugin;
           
            public DispenseListener(EndlessFireworks plugin) {
                    this.plugin = plugin;
            }
     
            @EventHandler
            public void onDispense(BlockDispenseEvent evt){
           Dispenser dispenser = (Dispenser) evt.getBlock();
           ItemStack item = evt.getItem().clone();
                dispenser.getInventory().addItem(item);
            }
    }
    This works perfectly but it doesn't work on fireworks.
    Code:
    package com.endlessshadow;
     
    import org.bukkit.block.Dispenser;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockDispenseEvent;
    import org.bukkit.inventory.Inventory;
     
    public class DispenseListener implements Listener {
    public EndlessFireworks plugin;
           
            public DispenseListener(EndlessFireworks plugin) {
                    this.plugin = plugin;
            }
     
            @EventHandler
            public void onDispense(BlockDispenseEvent evt){
           Dispenser dispenser = (Dispenser) evt.getBlock();
           Inventory inv = dispenser.getInventory();
           inv.addItem(evt.getItem());
            }
    }
    
    That works on everything except fireworks

    Okay now that isn't working anymore

    Bump.

    Here I got this to work. It works on all blocks and items except fireworks.
    Code:
    package com.endlessshadow;
     
    import org.bukkit.block.Dispenser;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockDispenseEvent;
    import org.bukkit.inventory.Inventory;
     
    public class DispenseListener implements Listener {
    public EndlessFireworks plugin;
           
            public DispenseListener(EndlessFireworks plugin) {
                    this.plugin = plugin;
            }
     
            @EventHandler
            public void onDispense(BlockDispenseEvent evt){
           Dispenser dispenser = (Dispenser) evt.getBlock().getState();
           Inventory inv = dispenser.getInventory();
           inv.addItem(evt.getItem());
            }
    }
    
    Does anyone know how to make this work with fireworks?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 30, 2016
  12. Offline

    fireblast709

    Add debug to see what happens... like what evt.getItem() returns
     
Thread Status:
Not open for further replies.

Share This Page