Advertisement
Guest User

Untitled

a guest
Mar 7th, 2012
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.18 KB | None | 0 0
  1. package com.vildaberper.Knark;
  2.  
  3. import java.util.HashSet;
  4. import java.util.logging.Logger;
  5.  
  6. import org.bukkit.Bukkit;
  7. import org.bukkit.Material;
  8. import org.bukkit.TreeType;
  9. import org.bukkit.World;
  10. import org.bukkit.block.Block;
  11. import org.bukkit.block.BlockState;
  12. import org.bukkit.entity.Item;
  13. import org.bukkit.event.EventHandler;
  14. import org.bukkit.event.EventPriority;
  15. import org.bukkit.event.Listener;
  16. import org.bukkit.event.entity.ItemSpawnEvent;
  17. import org.bukkit.event.world.StructureGrowEvent;
  18. import org.bukkit.plugin.java.JavaPlugin;
  19.  
  20. public class Knark extends JavaPlugin{
  21.     private Logger log = Logger.getLogger("Minecraft");
  22.  
  23.     private HashSet<Block> blocks = null;
  24.  
  25.     @SuppressWarnings("unused")
  26.     private Listener listener = new Listener(){
  27.         @EventHandler
  28.         public void onItemSpawn(final ItemSpawnEvent event){
  29.             if(event.isCancelled())
  30.                 return;
  31.             if(event.getEntity().getItemStack().getType().equals(Material.SAPLING) && event.getEntity().getItemStack().getAmount() == 1)
  32.                 schedule(event.getEntity());
  33.         }
  34.  
  35.         @EventHandler(priority = EventPriority.LOW)
  36.         public void onStructureGrow(StructureGrowEvent event){
  37.             System.out.println("onStructureGrow" + event.getSpecies().name());
  38.             if(event.isCancelled())
  39.                 return;
  40.             for(BlockState bs : event.getBlocks())
  41.                 if(blocks.contains(bs.getBlock())){
  42.                     event.setCancelled(true);
  43.                     System.out.println("onStructureGrow cancelled");
  44.                     return;
  45.                 }
  46.         }
  47.     };
  48.  
  49.     @Override
  50.     public void onDisable(){
  51.         blocks.clear();
  52.         blocks = null;
  53.         getServer().getScheduler().cancelTasks(this);
  54.         log.info("[" + getDescription().getName() + "] v" + getDescription().getVersion() + " is disabled.");
  55.     }
  56.  
  57.     @Override
  58.     public void onEnable(){
  59.         blocks = new HashSet<Block>();
  60.         for(World w : getServer().getWorlds())
  61.             for(Item i : w.getEntitiesByClass(Item.class))
  62.                 if(i.getItemStack().getType().equals(Material.SAPLING) && i.getItemStack().getAmount() == 1)
  63.                     schedule(i);
  64.         getServer().getPluginManager().registerEvents(listener, this);
  65.         log.info("[" + getDescription().getName() + "] v" + getDescription().getVersion() + " is enabled.");
  66.     }
  67.  
  68.     private void schedule(final Item item){
  69.         Bukkit.getScheduler().scheduleSyncDelayedTask(
  70.                 Bukkit.getPluginManager().getPlugin("Knark"),
  71.                 new Runnable(){
  72.                     @Override
  73.                     public void run(){
  74.                         if(item != null && !item.isDead())
  75.                             if(canPlace(item.getLocation().getBlock(), getTreeType(item.getItemStack().getData().getData()))){
  76.                                 item.getLocation().getBlock().setTypeIdAndData(Material.SAPLING.getId(), item.getItemStack().getData().getData(), true);
  77.                                 item.remove();
  78.                             }else
  79.                                 schedule(item);
  80.                     }
  81.                 }
  82.                 ,
  83.                 20 * 1
  84.                 );
  85.     }
  86.  
  87.     public TreeType getTreeType(byte data){
  88.         switch(data){
  89.         case 0:
  90.             return TreeType.TREE;
  91.         case 1:
  92.             return TreeType.BIRCH;
  93.         case 2:
  94.             return TreeType.REDWOOD;
  95.         case 3:
  96.             return TreeType.JUNGLE;
  97.         }
  98.         return null;
  99.     }
  100.  
  101.     public boolean canPlace(Block block, TreeType tt){
  102.         boolean b;
  103.  
  104.         blocks.add(block);
  105.         System.out.println("canPlace  " + tt.name());
  106.         b = block.getWorld().generateTree(block.getLocation(), tt);
  107.         blocks.remove(block);
  108.         return b;
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement