Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.stirante.AntyCheat.fastbreak;
- import com.stirante.AntyCheat.Magic;
- import lombok.Getter;
- import net.minecraft.server.v1_7_R4.Block;
- import org.bukkit.Material;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.inventory.ItemStack;
- import java.lang.reflect.Field;
- import java.util.HashMap;
- /**
- * Created by stirante
- */
- public class BreakUtils {
- public static final HashMap<Material, BlockData> data = new HashMap<>();
- public static boolean isSword(Material m) {
- switch (m) {
- case DIAMOND_SWORD:
- case GOLD_SWORD:
- case IRON_SWORD:
- case WOOD_SWORD:
- case STONE_SWORD:
- return true;
- default:
- return false;
- }
- }
- public static boolean isAxe(Material m) {
- switch (m) {
- case DIAMOND_AXE:
- case GOLD_AXE:
- case IRON_AXE:
- case WOOD_AXE:
- case STONE_AXE:
- return true;
- default:
- return false;
- }
- }
- public enum Tool {
- WOOD(0, 2.0F, Material.WOOD_AXE, Material.WOOD_PICKAXE, Material.WOOD_SPADE),
- STONE(1, 4.0F, Material.STONE_AXE, Material.STONE_PICKAXE, Material.STONE_SPADE),
- IRON(2, 6.0F, Material.IRON_AXE, Material.IRON_PICKAXE, Material.IRON_SPADE),
- GOLD(0, 12.0F, Material.GOLD_AXE, Material.GOLD_PICKAXE, Material.GOLD_SPADE),
- DIAMOND(3, 8.0F, Material.DIAMOND_AXE, Material.DIAMOND_PICKAXE, Material.DIAMOND_SPADE);
- @Getter
- private final int level;
- @Getter
- private final float speed;
- @Getter
- private final Material[] materials;
- Tool(int level, float speed, Material... materials) {
- this.level = level;
- this.speed = speed;
- this.materials = materials;
- }
- public static Tool getByMaterial(Material m) {
- for (Tool t : values()) {
- for (Material mat : t.getMaterials()) {
- if (mat == m) return t;
- }
- }
- return null;
- }
- }
- public static class BlockData {
- private final long[] breakingTimes;
- private float hardness;
- private final Material m;
- BlockData(Material m) {
- this.m = m;
- try {
- Field f = Block.class.getDeclaredField("strength");
- f.setAccessible(true);
- hardness = f.getFloat(Block.getById(m.getId()));
- } catch (Exception e) {
- e.printStackTrace();
- }
- breakingTimes = new long[6];
- for (int i = 0; i < 6; i++) {
- float multiplier;
- if (i == 5)
- multiplier = 3.33F;
- else
- multiplier = Tool.values()[i].getSpeed() * 3.33f;
- breakingTimes[i] = (long) (1000f * 5f * hardness / multiplier);
- }
- }
- @Magic
- public long getBreakTime(ItemStack i) {
- Tool t = Tool.getByMaterial(i.getType());
- int efficiency = i.getEnchantmentLevel(Enchantment.DIG_SPEED);
- if (i.getType() == Material.SHEARS) {
- if (m == Material.WEB) {
- return 400;
- } else if (m == Material.WOOL) {
- return 240;
- } else if (m == Material.LEAVES || m == Material.LEAVES_2) {
- return 20;
- } else if (m == Material.VINE) {
- return 300;
- }
- } else if (m == Material.VINE && (BreakUtils.isAxe(i.getType()) || BreakUtils.isSword(i.getType()))) {
- return 0;
- } else if (m == Material.WEB && BreakUtils.isSword(i.getType())) {
- return 200;
- }
- if (efficiency > 0) {
- if (m == Material.GLASS || m == Material.THIN_GLASS || m == Material.STAINED_GLASS || m == Material.STAINED_GLASS_PANE || m == Material.LEAVES || m == Material.LEAVES_2) {
- if (efficiency == 1) {
- return 100;
- } else {
- return 0;
- }
- } else if (m == Material.CHEST || m == Material.TRAPPED_CHEST) {
- return (long) ((double) breakingTimes[0] / 5f / efficiency);
- } else if (t != null) {
- switch (efficiency) {
- case 1:
- return (long) (breakingTimes[t.ordinal()] / 1.9F);
- case 2:
- return (long) (breakingTimes[t.ordinal()] / 3.3F);
- case 3:
- return (long) (breakingTimes[t.ordinal()] / 5.5F);
- case 4:
- return (long) (breakingTimes[t.ordinal()] / 7.2F);
- default:
- return 150;
- }
- }
- }
- if (t == null) {
- return breakingTimes[5];
- } else return breakingTimes[t.ordinal()];
- }
- }
- static {
- for (Material m : Material.values()) {
- data.put(m, new BlockData(m));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement