Advertisement
stirante

Untitled

Dec 11th, 2014
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.37 KB | None | 0 0
  1. package com.stirante.AntyCheat.fastbreak;
  2.  
  3. import com.stirante.AntyCheat.Magic;
  4. import lombok.Getter;
  5. import net.minecraft.server.v1_7_R4.Block;
  6. import org.bukkit.Material;
  7. import org.bukkit.enchantments.Enchantment;
  8. import org.bukkit.inventory.ItemStack;
  9.  
  10. import java.lang.reflect.Field;
  11. import java.util.HashMap;
  12.  
  13. /**
  14.  * Created by stirante
  15.  */
  16. public class BreakUtils {
  17.  
  18.     public static final HashMap<Material, BlockData> data = new HashMap<>();
  19.  
  20.     public static boolean isSword(Material m) {
  21.         switch (m) {
  22.             case DIAMOND_SWORD:
  23.             case GOLD_SWORD:
  24.             case IRON_SWORD:
  25.             case WOOD_SWORD:
  26.             case STONE_SWORD:
  27.                 return true;
  28.             default:
  29.                 return false;
  30.         }
  31.     }
  32.  
  33.     public static boolean isAxe(Material m) {
  34.         switch (m) {
  35.             case DIAMOND_AXE:
  36.             case GOLD_AXE:
  37.             case IRON_AXE:
  38.             case WOOD_AXE:
  39.             case STONE_AXE:
  40.                 return true;
  41.             default:
  42.                 return false;
  43.         }
  44.     }
  45.  
  46.     public enum Tool {
  47.         WOOD(0, 2.0F, Material.WOOD_AXE, Material.WOOD_PICKAXE, Material.WOOD_SPADE),
  48.         STONE(1, 4.0F, Material.STONE_AXE, Material.STONE_PICKAXE, Material.STONE_SPADE),
  49.         IRON(2, 6.0F, Material.IRON_AXE, Material.IRON_PICKAXE, Material.IRON_SPADE),
  50.         GOLD(0, 12.0F, Material.GOLD_AXE, Material.GOLD_PICKAXE, Material.GOLD_SPADE),
  51.         DIAMOND(3, 8.0F, Material.DIAMOND_AXE, Material.DIAMOND_PICKAXE, Material.DIAMOND_SPADE);
  52.  
  53.         @Getter
  54.         private final int level;
  55.         @Getter
  56.         private final float speed;
  57.         @Getter
  58.         private final Material[] materials;
  59.  
  60.         Tool(int level, float speed, Material... materials) {
  61.             this.level = level;
  62.             this.speed = speed;
  63.             this.materials = materials;
  64.         }
  65.  
  66.         public static Tool getByMaterial(Material m) {
  67.             for (Tool t : values()) {
  68.                 for (Material mat : t.getMaterials()) {
  69.                     if (mat == m) return t;
  70.                 }
  71.             }
  72.             return null;
  73.         }
  74.  
  75.     }
  76.  
  77.     public static class BlockData {
  78.  
  79.         private final long[] breakingTimes;
  80.         private float hardness;
  81.         private final Material m;
  82.  
  83.         BlockData(Material m) {
  84.             this.m = m;
  85.             try {
  86.                 Field f = Block.class.getDeclaredField("strength");
  87.                 f.setAccessible(true);
  88.                 hardness = f.getFloat(Block.getById(m.getId()));
  89.             } catch (Exception e) {
  90.                 e.printStackTrace();
  91.             }
  92.             breakingTimes = new long[6];
  93.             for (int i = 0; i < 6; i++) {
  94.                 float multiplier;
  95.                 if (i == 5)
  96.                     multiplier = 3.33F;
  97.                 else
  98.                     multiplier = Tool.values()[i].getSpeed() * 3.33f;
  99.                 breakingTimes[i] = (long) (1000f * 5f * hardness / multiplier);
  100.             }
  101.         }
  102.  
  103.         @Magic
  104.         public long getBreakTime(ItemStack i) {
  105.             Tool t = Tool.getByMaterial(i.getType());
  106.             int efficiency = i.getEnchantmentLevel(Enchantment.DIG_SPEED);
  107.             if (i.getType() == Material.SHEARS) {
  108.                 if (m == Material.WEB) {
  109.                     return 400;
  110.                 } else if (m == Material.WOOL) {
  111.                     return 240;
  112.                 } else if (m == Material.LEAVES || m == Material.LEAVES_2) {
  113.                     return 20;
  114.                 } else if (m == Material.VINE) {
  115.                     return 300;
  116.                 }
  117.             } else if (m == Material.VINE && (BreakUtils.isAxe(i.getType()) || BreakUtils.isSword(i.getType()))) {
  118.                 return 0;
  119.             } else if (m == Material.WEB && BreakUtils.isSword(i.getType())) {
  120.                 return 200;
  121.             }
  122.             if (efficiency > 0) {
  123.                 if (m == Material.GLASS || m == Material.THIN_GLASS || m == Material.STAINED_GLASS || m == Material.STAINED_GLASS_PANE || m == Material.LEAVES || m == Material.LEAVES_2) {
  124.                     if (efficiency == 1) {
  125.                         return 100;
  126.                     } else {
  127.                         return 0;
  128.                     }
  129.                 } else if (m == Material.CHEST || m == Material.TRAPPED_CHEST) {
  130.                     return (long) ((double) breakingTimes[0] / 5f / efficiency);
  131.                 } else if (t != null) {
  132.                     switch (efficiency) {
  133.                         case 1:
  134.                             return (long) (breakingTimes[t.ordinal()] / 1.9F);
  135.                         case 2:
  136.                             return (long) (breakingTimes[t.ordinal()] / 3.3F);
  137.                         case 3:
  138.                             return (long) (breakingTimes[t.ordinal()] / 5.5F);
  139.                         case 4:
  140.                             return (long) (breakingTimes[t.ordinal()] / 7.2F);
  141.                         default:
  142.                             return 150;
  143.                     }
  144.                 }
  145.             }
  146.             if (t == null) {
  147.                 return breakingTimes[5];
  148.             } else return breakingTimes[t.ordinal()];
  149.         }
  150.     }
  151.  
  152.     static {
  153.         for (Material m : Material.values()) {
  154.             data.put(m, new BlockData(m));
  155.         }
  156.     }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement