diff --git a/src/de/steamwar/misslewars/Config.java b/src/de/steamwar/misslewars/Config.java index 1e8a80c..7807c6e 100644 --- a/src/de/steamwar/misslewars/Config.java +++ b/src/de/steamwar/misslewars/Config.java @@ -48,9 +48,6 @@ public class Config { public static final int ShieldFlyTime; public static final int EndTime; - public static final int MissileCount; - public static final double MissileChance; - static{ File configfile = new File(Bukkit.getWorlds().get(0).getWorldFolder(), "config.yml"); if(!configfile.exists()){ @@ -64,8 +61,6 @@ public class Config { ItemTime = config.getInt("ItemTime"); ShieldFlyTime = config.getInt("ShieldFlyTime"); EndTime = config.getInt("EndTime"); - MissileCount = config.getInt("MissileCount"); - MissileChance = config.getDouble("MissileChance"); ConfigurationSection arena = config.getConfigurationSection("Arena"); assert arena != null; diff --git a/src/de/steamwar/misslewars/FightScoreboard.java b/src/de/steamwar/misslewars/FightScoreboard.java index fcfa943..a9e5f93 100644 --- a/src/de/steamwar/misslewars/FightScoreboard.java +++ b/src/de/steamwar/misslewars/FightScoreboard.java @@ -19,14 +19,11 @@ package de.steamwar.misslewars; -import de.steamwar.misslewars.items.Missile; import org.bukkit.Bukkit; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; /** @@ -55,10 +52,10 @@ class FightScoreboard { teamScoreboard(MissileWars.getBlueTeam()); teamScoreboard(MissileWars.getRedTeam()); - specialMissiles(); + Bukkit.getOnlinePlayers().forEach(player -> player.setScoreboard(scoreboard)); - }, 0, 50); + }, 0, 200); } static Scoreboard getScoreboard() { @@ -68,11 +65,4 @@ class FightScoreboard { private static void teamScoreboard(MWTeam fightTeam){ fightTeam.getPlayers().forEach(p -> objective.getScore(fightTeam.getPrefix() + p.getName()).setScore(1)); } - - private static void specialMissiles() { - objective.getScore("§3").setScore(0); - for (String missile : Missile.specialMissiles) { - objective.getScore("§e" + missile).setScore(0); - } - } } diff --git a/src/de/steamwar/misslewars/MissileWars.java b/src/de/steamwar/misslewars/MissileWars.java index 9ba6750..ac2bbf8 100644 --- a/src/de/steamwar/misslewars/MissileWars.java +++ b/src/de/steamwar/misslewars/MissileWars.java @@ -70,7 +70,6 @@ public class MissileWars extends JavaPlugin { FightScoreboard.init(); Missile.init(); - Missile.randomInit(); new Arrows(); new Fireball(); new Shield(); diff --git a/src/de/steamwar/misslewars/items/Missile.java b/src/de/steamwar/misslewars/items/Missile.java index ed16aaf..a1434d5 100644 --- a/src/de/steamwar/misslewars/items/Missile.java +++ b/src/de/steamwar/misslewars/items/Missile.java @@ -22,49 +22,68 @@ package de.steamwar.misslewars.items; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.bukkit.BukkitWorld; +import com.sk89q.worldedit.extension.input.ParserContext; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; -import com.sk89q.worldedit.function.mask.BlockTypeMask; import com.sk89q.worldedit.function.operation.Operations; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.world.World; -import com.sk89q.worldedit.world.block.BlockType; -import com.sk89q.worldedit.world.block.BlockTypes; -import de.steamwar.misslewars.Config; +import com.sk89q.worldedit.world.block.BaseBlock; import de.steamwar.misslewars.MissileWars; +import io.netty.handler.logging.LogLevel; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.*; +import java.util.logging.Level; public class Missile extends SpecialItem { private static final World world = new BukkitWorld(Bukkit.getWorlds().get(0)); - private static final BlockType TNT = BlockTypes.TNT; - private static final int GRAPH_SIZE = 7; - private static final Random r = new Random(); - public static final List specialMissiles = new ArrayList<>(); + + private static Set tnt = new HashSet<>(); + + static { + try { + tnt = WorldEdit.getInstance().getBlockFactory().parseFromListInput("tnt", new ParserContext()); + } catch (Exception e) { + //Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e.getCause()); + } + } private final Clipboard clipboard; private final ItemStack item; - private final int tntCount; - private Missile(File missileFile, boolean special) { + private Missile(File missileFile){ String[] strings = missileFile.getName().split("\\."); String name = strings[0]; String material = strings[1]; - if (!material.endsWith("_SPAWN_EGG")) material += "_SPAWN_EGG"; + if (!material.endsWith("_SPAWN_EGG")) { + material += "_SPAWN_EGG"; + } Material itemType = Material.valueOf(material); + List lore = new ArrayList<>(); + if (strings.length > 3) { + try { + lore.add(graph(Integer.parseInt(strings[2]), 7) + " §7Speed"); + lore.add(graph(Integer.parseInt(strings[3]), 7) + " §7Size"); + // lore.add("§7TNT §8: " + count()); + } catch (NumberFormatException e) { + + } + } + ClipboardFormat format = ClipboardFormats.findByFile(missileFile); try { assert format != null; @@ -73,41 +92,19 @@ public class Missile extends SpecialItem { throw new SecurityException("Corrupt missile"); } - List lore = new ArrayList<>(); - lore(lore, strings, 2, " §7Speed"); - lore(lore, strings, 3, " §7Size"); - int count; - try { - count = count(); - } catch (Exception e) { - count = 0; - } - tntCount = count; - lore.add("§7TNT §8: §e" + tntCount); - - item = createItem(itemType, "§c" + name + " §7(§c" + tntCount + "§7)", 1, lore, special); - if (special) specialMissiles.add(name); - } - - private void lore(List lore, String[] args, int index, String tag) { - if (args.length > index) { - try { - lore.add(graph(Integer.parseInt(args[index]), GRAPH_SIZE) + tag); - return; - } catch (NumberFormatException e) { - // Ignored - } - } - lore.add(graph(0, GRAPH_SIZE) + tag); + item = new ItemStack(itemType, 1); + ItemMeta meta = item.getItemMeta(); + assert meta != null; + meta.setDisplayName("§c" + name); + meta.setLore(lore); + item.setItemMeta(meta); } private String graph(int index, int size) { if (index > size) index = size; StringBuilder st = new StringBuilder(); st.append("§8[§e"); - if (index > 0) { - st.append(repeat(index)); - } + st.append(repeat(index)); st.append("§7"); st.append(repeat(size - index)); st.append("§8]"); @@ -124,9 +121,10 @@ public class Missile extends SpecialItem { } private int count() { - EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1); - BlockTypeMask blockTypeMask = new BlockTypeMask(clipboard, TNT); - return e.countBlocks(clipboard.getRegion(), blockTypeMask); + if (tnt.isEmpty()) { + return 0; + } + return WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1).countBlocks(clipboard.getRegion(), tnt); } @Override @@ -163,38 +161,16 @@ public class Missile extends SpecialItem { return true; } - @Override - public boolean isMissile() { - return true; - } - public static void init(){ - File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "default-missiles"); - if (!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()) { + File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles"); + if(!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()){ throw new SecurityException("Missiles could not be loaded"); } - for (File missileFile : Objects.requireNonNull(missileFolder.listFiles())) { - if (!missileFile.canRead() || !missileFile.isFile()) continue; - new Missile(missileFile, false); + for(File missileFile : Objects.requireNonNull(missileFolder.listFiles())){ + if(!missileFile.canRead() || !missileFile.isFile()) + continue; + + new Missile(missileFile); } } - - public static void randomInit() { - File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles"); - if (!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()) { - return; - } - File[] files = missileFolder.listFiles(); - if (files == null) return; - if (files.length < Config.MissileCount) return; - List pool = new ArrayList<>(files.length); - pool.addAll(Arrays.asList(files)); - - for (int i = 0; i < Config.MissileCount; i++) { - File missileFile = pool.remove(r.nextInt(pool.size())); - if (!missileFile.canRead() || !missileFile.isFile()) continue; - new Missile(missileFile, true); - } - } - } diff --git a/src/de/steamwar/misslewars/items/SpecialItem.java b/src/de/steamwar/misslewars/items/SpecialItem.java index 3b22372..bf131e6 100644 --- a/src/de/steamwar/misslewars/items/SpecialItem.java +++ b/src/de/steamwar/misslewars/items/SpecialItem.java @@ -19,11 +19,8 @@ package de.steamwar.misslewars.items; -import de.steamwar.misslewars.Config; import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -33,58 +30,34 @@ public abstract class SpecialItem { private static final Random random = new Random(); - private static List supportItems = new ArrayList<>(); - private static List missileItems = new ArrayList<>(); + private static List items = new ArrayList<>(); - SpecialItem() { - if (this.isMissile()) { - missileItems.add(this); - return; - } - supportItems.add(this); + SpecialItem(){ + items.add(this); } public abstract ItemStack getItem(); public abstract boolean handleUse(Player p); - public boolean isMissile() { - return false; - } public ItemStack createItem(Material material, String name, int amount) { - return createItem(material, name, amount, new ArrayList<>(), false); - } - - public ItemStack createItem(Material material, String name, int amount, List lore, boolean special) { ItemStack item = new ItemStack(material, amount); ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - meta.setLore(lore); meta.setDisplayName(name); item.setItemMeta(meta); - if (special) item.addUnsafeEnchantment(Enchantment.PROTECTION_FALL, 1); return item; } - public static boolean handleUse(ItemStack item, Player player) { - for (SpecialItem missileItem : missileItems) { - if (item.isSimilar(missileItem.getItem())) { - return missileItem.handleUse(player); - } - } - for (SpecialItem specialItem : supportItems) { - if (item.isSimilar(specialItem.getItem())) { + public static boolean handleUse(ItemStack item, Player player){ + for(SpecialItem specialItem : items){ + if(item.isSimilar(specialItem.getItem())){ return specialItem.handleUse(player); } } return false; } - public static ItemStack getRandomItem() { - if (random.nextDouble() > Config.MissileChance) { - return supportItems.get(random.nextInt(supportItems.size())).getItem(); - } else { - return missileItems.get(random.nextInt(missileItems.size())).getItem(); - } + public static ItemStack getRandomItem(){ + return items.get(random.nextInt(items.size())).getItem(); } }