Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.vildaberper.Knark;
- import java.util.HashSet;
- import java.util.logging.Logger;
- import org.bukkit.Bukkit;
- import org.bukkit.Material;
- import org.bukkit.TreeType;
- import org.bukkit.World;
- import org.bukkit.block.Block;
- import org.bukkit.block.BlockState;
- import org.bukkit.entity.Item;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.EventPriority;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.ItemSpawnEvent;
- import org.bukkit.event.world.StructureGrowEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- public class Knark extends JavaPlugin{
- private Logger log = Logger.getLogger("Minecraft");
- private HashSet<Block> blocks = null;
- @SuppressWarnings("unused")
- private Listener listener = new Listener(){
- @EventHandler
- public void onItemSpawn(final ItemSpawnEvent event){
- if(event.isCancelled())
- return;
- if(event.getEntity().getItemStack().getType().equals(Material.SAPLING) && event.getEntity().getItemStack().getAmount() == 1)
- schedule(event.getEntity());
- }
- @EventHandler(priority = EventPriority.LOW)
- public void onStructureGrow(StructureGrowEvent event){
- System.out.println("onStructureGrow" + event.getSpecies().name());
- if(event.isCancelled())
- return;
- for(BlockState bs : event.getBlocks())
- if(blocks.contains(bs.getBlock())){
- event.setCancelled(true);
- System.out.println("onStructureGrow cancelled");
- return;
- }
- }
- };
- @Override
- public void onDisable(){
- blocks.clear();
- blocks = null;
- getServer().getScheduler().cancelTasks(this);
- log.info("[" + getDescription().getName() + "] v" + getDescription().getVersion() + " is disabled.");
- }
- @Override
- public void onEnable(){
- blocks = new HashSet<Block>();
- for(World w : getServer().getWorlds())
- for(Item i : w.getEntitiesByClass(Item.class))
- if(i.getItemStack().getType().equals(Material.SAPLING) && i.getItemStack().getAmount() == 1)
- schedule(i);
- getServer().getPluginManager().registerEvents(listener, this);
- log.info("[" + getDescription().getName() + "] v" + getDescription().getVersion() + " is enabled.");
- }
- private void schedule(final Item item){
- Bukkit.getScheduler().scheduleSyncDelayedTask(
- Bukkit.getPluginManager().getPlugin("Knark"),
- new Runnable(){
- @Override
- public void run(){
- if(item != null && !item.isDead())
- if(canPlace(item.getLocation().getBlock(), getTreeType(item.getItemStack().getData().getData()))){
- item.getLocation().getBlock().setTypeIdAndData(Material.SAPLING.getId(), item.getItemStack().getData().getData(), true);
- item.remove();
- }else
- schedule(item);
- }
- }
- ,
- 20 * 1
- );
- }
- public TreeType getTreeType(byte data){
- switch(data){
- case 0:
- return TreeType.TREE;
- case 1:
- return TreeType.BIRCH;
- case 2:
- return TreeType.REDWOOD;
- case 3:
- return TreeType.JUNGLE;
- }
- return null;
- }
- public boolean canPlace(Block block, TreeType tt){
- boolean b;
- blocks.add(block);
- System.out.println("canPlace " + tt.name());
- b = block.getWorld().generateTree(block.getLocation(), tt);
- blocks.remove(block);
- return b;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement