Pangamma

SurvivalWorldEditMask.java

Apr 3rd, 2019
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.68 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package com.lumengaming.swe;
  7.  
  8. import com.sk89q.minecraft.util.commands.CommandException;
  9. import org.bukkit.plugin.java.JavaPlugin;
  10. import com.sk89q.worldedit.LocalSession;
  11. import com.sk89q.worldedit.WorldEdit;
  12. import com.sk89q.worldedit.bukkit.BukkitAdapter;
  13. import com.sk89q.worldedit.bukkit.BukkitPlayer;
  14. import com.sk89q.worldedit.function.mask.AbstractExtentMask;
  15. import com.sk89q.worldedit.function.mask.Mask2D;
  16. import com.sk89q.worldedit.math.BlockVector3;
  17. import com.sk89q.worldedit.world.block.BlockType;
  18. import java.util.HashSet;
  19. import java.util.List;
  20. import java.util.Set;
  21. import org.bukkit.Bukkit;
  22. import org.bukkit.Material;
  23. import org.bukkit.block.Block;
  24. import org.bukkit.block.BlockFace;
  25. import org.bukkit.entity.Player;
  26. import org.bukkit.event.EventHandler;
  27. import org.bukkit.event.EventPriority;
  28. import org.bukkit.event.HandlerList;
  29. import org.bukkit.event.Listener;
  30. import org.bukkit.event.block.BlockPlaceEvent;
  31. import org.bukkit.event.player.PlayerCommandPreprocessEvent;
  32. import org.bukkit.inventory.EquipmentSlot;
  33. import org.bukkit.inventory.ItemStack;
  34. import org.bukkit.metadata.FixedMetadataValue;
  35. import org.bukkit.metadata.MetadataValue;
  36. import org.bukkit.plugin.Plugin;
  37.  
  38. /**
  39.  *
  40.  * @author prota
  41.  */
  42. public class SurvivalWorldEditMain extends JavaPlugin implements Listener{
  43.  
  44.     private final Set<BlockType> blocks = new HashSet<>();
  45.    
  46.     @Override
  47.     public void onEnable(){
  48.         getServer().getPluginManager().registerEvents(this, this);
  49.         this.blocks.add(BlockType.REGISTRY.get("minecraft:air"));
  50.         this.blocks.add(BlockType.REGISTRY.get("minecraft:cave_air"));
  51.         this.blocks.add(BlockType.REGISTRY.get("minecraft:void_air"));
  52.         this.blocks.add(BlockType.REGISTRY.get("minecraft:water"));
  53.     }
  54.    
  55.     @Override
  56.     public void onDisable(){
  57.         HandlerList.unregisterAll((JavaPlugin) this);
  58.     }
  59.    
  60.     @EventHandler
  61.     public void onPrettyMuchAllTheTime(PlayerCommandPreprocessEvent e) throws CommandException{
  62.         if (!e.getMessage().startsWith("//")){ return; }
  63.         BukkitPlayer p = BukkitAdapter.adapt(e.getPlayer());
  64.         WorldEdit WE = WorldEdit.getInstance();
  65.         LocalSession session = WE.getSessionManager().get(p);
  66.        
  67.         session.setMask(null);
  68.         session.setMask(new AbstractExtentMask(p.getExtent()){
  69.  
  70.             @Override
  71.             public boolean test(BlockVector3 bv) {
  72.                 if (!blocks.contains(getExtent().getBlock(bv).getBlockType())) {
  73.                     return false;
  74.                 }
  75.                 Block blockAt = e.getPlayer().getWorld().getBlockAt(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ());
  76.                 return canPlaceBlockByEvent(e.getPlayer(), blockAt);
  77.                
  78.             }
  79.  
  80.             @Override
  81.             public Mask2D toMask2D() {
  82.                 return null;
  83.             }
  84.         });
  85.     }
  86.  
  87.     public boolean canPlaceBlockByEvent(Player p, Block b){
  88.         b.setMetadata("swe:isFakePlace", new FixedMetadataValue(this, true));
  89.         BlockPlaceEvent evt = new BlockPlaceEvent(b, b.getState(),
  90.             b.getRelative(BlockFace.DOWN), new ItemStack(Material.RED_STAINED_GLASS) /* p.getInventory().getItemInMainHand() */,
  91.             p, true , EquipmentSlot.HAND);
  92.        
  93.         synchronized(Bukkit.getPluginManager()){
  94.             Bukkit.getPluginManager().callEvent(evt);
  95.         }
  96.         b = evt.getBlock();
  97.        
  98.         List<MetadataValue> canBuild = b.getMetadata("swe:canBuild");
  99.        
  100.         boolean rtVal = true;
  101.         for(MetadataValue val : canBuild){
  102.             if (this.equals(val.getOwningPlugin())){
  103.                 if (!val.asBoolean()){ rtVal = false; }
  104.             }
  105.         }
  106.        
  107.         b.removeMetadata("swe:canBuild", this);
  108.         b.removeMetadata("swe:isFakePlace", this);
  109.         return rtVal;
  110.     }
  111.  
  112.    
  113.     @EventHandler(ignoreCancelled = false, priority = EventPriority.HIGHEST)
  114.     public void onFakeBlockPlace(BlockPlaceEvent e){
  115.         Block b = e.getBlock();
  116.         if (e.getItemInHand().getType() != Material.RED_STAINED_GLASS) return;
  117.         List<MetadataValue> isFake = b.getMetadata("swe:isFakePlace");
  118.         boolean isNormal = true;
  119.         for(MetadataValue val : isFake){
  120.             if (val.asBoolean()){
  121.                 isNormal = false;
  122.             }
  123.         }
  124.        
  125.         if (isNormal) return;
  126.        
  127.         b.setMetadata("swe:canBuild", new FixedMetadataValue(this, !e.isCancelled()));
  128.         e.setCancelled(true);
  129.     }
  130.    
  131. }
Advertisement
Add Comment
Please, Sign In to add comment