Add Missile Lore
Dieser Commit ist enthalten in:
Ursprung
72e3c4ee3f
Commit
4cb0242974
@ -22,68 +22,48 @@ 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.BaseBlock;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||
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;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Missile extends SpecialItem {
|
||||
|
||||
private static final World world = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
|
||||
private static Set<BaseBlock> 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 static final BlockType TNT = BlockTypes.TNT;
|
||||
private static final int GRAPH_SIZE = 7;
|
||||
|
||||
private final Clipboard clipboard;
|
||||
private final ItemStack item;
|
||||
private final int tntCount;
|
||||
|
||||
private Missile(File missileFile){
|
||||
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<String> 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;
|
||||
@ -92,19 +72,35 @@ public class Missile extends SpecialItem {
|
||||
throw new SecurityException("Corrupt missile");
|
||||
}
|
||||
|
||||
item = new ItemStack(itemType, 1);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
assert meta != null;
|
||||
meta.setDisplayName("§c" + name);
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore(lore, strings, 2, " §7Speed");
|
||||
lore(lore, strings, 3, " §7Size");
|
||||
|
||||
tntCount = count();
|
||||
lore.add("§7TNT §8: §e" + tntCount);
|
||||
|
||||
item = createItem(itemType, "§c" + name, 1, lore, false);
|
||||
}
|
||||
|
||||
private void lore(List<String> 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);
|
||||
}
|
||||
|
||||
private String graph(int index, int size) {
|
||||
if (index > size) index = size;
|
||||
StringBuilder st = new StringBuilder();
|
||||
st.append("§8[§e");
|
||||
st.append(repeat(index));
|
||||
if (index > 0) {
|
||||
st.append(repeat(index));
|
||||
}
|
||||
st.append("§7");
|
||||
st.append(repeat(size - index));
|
||||
st.append("§8]");
|
||||
@ -121,19 +117,22 @@ public class Missile extends SpecialItem {
|
||||
}
|
||||
|
||||
private int count() {
|
||||
if (tnt.isEmpty()) {
|
||||
try {
|
||||
EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
|
||||
BlockTypeMask blockTypeMask = new BlockTypeMask(clipboard, TNT);
|
||||
return e.countBlocks(clipboard.getRegion(), blockTypeMask);
|
||||
} catch (Exception e) {
|
||||
return 0;
|
||||
}
|
||||
return WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1).countBlocks(clipboard.getRegion(), tnt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItem(){
|
||||
public ItemStack getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleUse(Player p){
|
||||
public boolean handleUse(Player p) {
|
||||
BlockVector3 dimensions = clipboard.getDimensions();
|
||||
Location location = p.getLocation();
|
||||
BlockVector3 v = BlockVector3.ZERO;
|
||||
@ -141,11 +140,11 @@ public class Missile extends SpecialItem {
|
||||
AffineTransform aT = new AffineTransform();
|
||||
|
||||
double yaw = (p.getLocation().getYaw() + 360f) % 360;
|
||||
if(yaw > 45 && yaw <= 135) {
|
||||
if (yaw > 45 && yaw <= 135) {
|
||||
aT = aT.rotateY(270);
|
||||
}else if(yaw > 135 && yaw <= 225) {
|
||||
} else if (yaw > 135 && yaw <= 225) {
|
||||
aT = aT.rotateY(180);
|
||||
}else if(yaw > 225 && yaw <= 315) {
|
||||
} else if (yaw > 225 && yaw <= 315) {
|
||||
aT = aT.rotateY(90);
|
||||
}
|
||||
|
||||
@ -161,16 +160,27 @@ public class Missile extends SpecialItem {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void init(){
|
||||
File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles");
|
||||
if(!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()){
|
||||
public static void init() {
|
||||
File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "default-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;
|
||||
for (File missileFile : Objects.requireNonNull(missileFolder.listFiles())) {
|
||||
if (!missileFile.canRead() || !missileFile.isFile()) continue;
|
||||
new Missile(missileFile);
|
||||
}
|
||||
otherInit();
|
||||
}
|
||||
|
||||
public static void otherInit() {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,7 +20,9 @@
|
||||
package de.steamwar.misslewars.items;
|
||||
|
||||
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;
|
||||
|
||||
@ -40,11 +42,18 @@ public abstract class SpecialItem {
|
||||
public abstract boolean handleUse(Player p);
|
||||
|
||||
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<String> 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;
|
||||
}
|
||||
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren