SteamWar/MissileWars
Archiviert
13
0
Dieser Commit ist enthalten in:
jojo 2020-12-04 22:42:04 +01:00
Ursprung 948d472f40
Commit ea3181cc03
23 geänderte Dateien mit 144 neuen und 176 gelöschten Zeilen

Datei anzeigen

@ -64,20 +64,15 @@ public class CustomItem extends SpecialItem {
public static void init() { public static void init() {
File itemsFolder = new File(MissileWars.getPlugin().getDataFolder(), "items"); File itemsFolder = new File(MissileWars.getPlugin().getDataFolder(), "items");
if (!itemsFolder.exists() || !itemsFolder.canRead() || !itemsFolder.isDirectory()) { if (!itemsFolder.exists() || !itemsFolder.canRead() || !itemsFolder.isDirectory()) throw new SecurityException("Items could not be loaded");
throw new SecurityException("Items could not be loaded");
}
for (File itemFile : Objects.requireNonNull(itemsFolder.listFiles())) { for (File itemFile : Objects.requireNonNull(itemsFolder.listFiles())) {
if (!itemFile.canRead() || !itemFile.isFile()) continue; if (!itemFile.canRead() || !itemFile.isFile()) continue;
try { try {
JsonObject jsonObject = new JsonParser().parse(new FileReader(itemFile)).getAsJsonObject(); JsonObject jsonObject = new JsonParser().parse(new FileReader(itemFile)).getAsJsonObject();
new CustomItem(new ScriptedItem(jsonObject)); new CustomItem(new ScriptedItem(jsonObject));
} catch (JsonSyntaxException e) { } catch (JsonSyntaxException | IOException e) {
e.printStackTrace(); e.printStackTrace();
throw new SecurityException("Item JSON error"); throw new SecurityException("Item JSON error", e);
} catch (IOException e) {
e.printStackTrace();
throw new SecurityException("Corrupt Item");
} }
} }
} }

Datei anzeigen

@ -96,9 +96,7 @@ public class Missile extends SpecialItem {
if (index > size) index = size; if (index > size) index = size;
StringBuilder st = new StringBuilder(); StringBuilder st = new StringBuilder();
st.append("§8[§e"); st.append("§8[§e");
if (index > 0) { if (index > 0) st.append(repeat(index));
st.append(repeat(index));
}
st.append("§7"); st.append("§7");
st.append(repeat(size - index)); st.append(repeat(size - index));
st.append("§8]"); st.append("§8]");
@ -108,9 +106,7 @@ public class Missile extends SpecialItem {
private String repeat(int count) { private String repeat(int count) {
if (count == 0) return ""; if (count == 0) return "";
StringBuilder st = new StringBuilder(); StringBuilder st = new StringBuilder();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) st.append("=");
st.append("=");
}
return st.toString(); return st.toString();
} }
@ -128,13 +124,9 @@ public class Missile extends SpecialItem {
AffineTransform aT = new AffineTransform(); AffineTransform aT = new AffineTransform();
double yaw = (p.getLocation().getYaw() + 360f) % 360; double yaw = (p.getLocation().getYaw() + 360f) % 360;
if (yaw > 45 && yaw <= 135) { if (yaw > 45 && yaw <= 135) aT = aT.rotateY(270);
aT = aT.rotateY(270); else if (yaw > 135 && yaw <= 225) aT = aT.rotateY(180);
} else if (yaw > 135 && yaw <= 225) { else if (yaw > 225 && yaw <= 315) aT = aT.rotateY(90);
aT = aT.rotateY(180);
} else if (yaw > 225 && yaw <= 315) {
aT = aT.rotateY(90);
}
v = v.subtract(dimensions.getX()/2, dimensions.getY() + 2, -2).subtract(offset); v = v.subtract(dimensions.getX()/2, dimensions.getY() + 2, -2).subtract(offset);
v = aT.apply(v.toVector3()).toBlockPoint(); v = aT.apply(v.toVector3()).toBlockPoint();
@ -155,9 +147,7 @@ public class Missile extends SpecialItem {
public static void init() { public static void init() {
File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles"); File missileFolder = new File(MissileWars.getPlugin().getDataFolder(), "missiles");
if (!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()) { if (!missileFolder.exists() || !missileFolder.canRead() || !missileFolder.isDirectory()) throw new SecurityException("Missiles could not be loaded");
throw new SecurityException("Missiles could not be loaded");
}
for (File missileFile : Objects.requireNonNull(missileFolder.listFiles())) { for (File missileFile : Objects.requireNonNull(missileFolder.listFiles())) {
if (!missileFile.canRead() || !missileFile.isFile()) continue; if (!missileFile.canRead() || !missileFile.isFile()) continue;
new Missile(missileFile); new Missile(missileFile);

Datei anzeigen

@ -42,11 +42,8 @@ public abstract class SpecialItem {
private static List<SpecialItem> missileItems = new ArrayList<>(); private static List<SpecialItem> missileItems = new ArrayList<>();
SpecialItem() { SpecialItem() {
if (this.isMissile()) { if (this.isMissile()) missileItems.add(this);
missileItems.add(this); else supportItems.add(this);
} else {
supportItems.add(this);
}
} }
private String materialName = null; private String materialName = null;
@ -78,21 +75,18 @@ public abstract class SpecialItem {
} }
private static boolean handleUse(ItemStack item, Player player, List<SpecialItem> items) { private static boolean handleUse(ItemStack item, Player player, List<SpecialItem> items) {
for (SpecialItem specialItem : items) { for (SpecialItem specialItem : items)
if (item.isSimilar(specialItem.getItem())) return specialItem.handleUse(player); if (item.isSimilar(specialItem.getItem())) return specialItem.handleUse(player);
}
return false; return false;
} }
public static void handleThrow(ProjectileLaunchEvent e) { public static void handleThrow(ProjectileLaunchEvent e) {
String name = e.getEntity().getClass().getName().toLowerCase(); String name = e.getEntity().getClass().getName().toLowerCase();
for (SpecialItem specialItem : supportItems) { for (SpecialItem specialItem : supportItems) {
if (specialItem.materialName == null) { if (specialItem.materialName == null)
specialItem.materialName = specialItem.getItem().getType().name().toLowerCase(); specialItem.materialName = specialItem.getItem().getType().name().toLowerCase();
} if (name.contains(specialItem.materialName))
if (name.contains(specialItem.materialName)) {
specialItem.handleThrow(e.getEntity()); specialItem.handleThrow(e.getEntity());
}
} }
} }
@ -100,11 +94,8 @@ public abstract class SpecialItem {
String name = e.getEntity().getClass().getName().toLowerCase(); String name = e.getEntity().getClass().getName().toLowerCase();
Location location = null; Location location = null;
if (e.getHitEntity() != null) { if (e.getHitEntity() != null) location = e.getHitEntity().getLocation();
location = e.getHitEntity().getLocation(); else if (e.getHitBlock() != null) location = e.getHitBlock().getLocation();
} else if (e.getHitBlock() != null) {
location = e.getHitBlock().getLocation();
}
if (location == null) return; if (location == null) return;
for (SpecialItem specialItem : supportItems) { for (SpecialItem specialItem : supportItems) {
@ -115,11 +106,8 @@ public abstract class SpecialItem {
} }
public static ItemStack getRandomItem() { public static ItemStack getRandomItem() {
if (random.nextDouble() > Config.MissileChance) { if (random.nextDouble() > Config.MissileChance) return supportItems.get(random.nextInt(supportItems.size())).getItem();
return supportItems.get(random.nextInt(supportItems.size())).getItem(); else return missileItems.get(random.nextInt(missileItems.size())).getItem();
} else {
return missileItems.get(random.nextInt(missileItems.size())).getItem();
}
} }
} }

Datei anzeigen

@ -20,10 +20,8 @@
package de.steamwar.misslewars.scripts; package de.steamwar.misslewars.scripts;
public enum LocationType { public enum LocationType {
STATIC, STATIC,
DYNAMIC, DYNAMIC,
DEFAULT, DEFAULT,
CUSTOM CUSTOM
} }

Datei anzeigen

@ -20,7 +20,5 @@
package de.steamwar.misslewars.scripts; package de.steamwar.misslewars.scripts;
public abstract class RunnableScript { public abstract class RunnableScript {
public abstract boolean execute(RunnableScriptEvent runnableScriptEvent); public abstract boolean execute(RunnableScriptEvent runnableScriptEvent);
} }

Datei anzeigen

@ -39,14 +39,10 @@ public class RunnableScriptEvent {
public Location getLocation() { public Location getLocation() {
// Custom location // Custom location
if (locationType == LocationType.CUSTOM && customLocation != null) { if (locationType == LocationType.CUSTOM && customLocation != null) return customLocation;
return customLocation;
}
// Static initial Location // Static initial Location
if (locationType == LocationType.STATIC) { if (locationType == LocationType.STATIC) return location;
return location;
}
// Dynamic Location if entity is not null // Dynamic Location if entity is not null
if (locationType == LocationType.DYNAMIC) { if (locationType == LocationType.DYNAMIC) {
@ -56,9 +52,7 @@ public class RunnableScriptEvent {
// Default Location is static if EventType is onClick otherwise dynamic // Default Location is static if EventType is onClick otherwise dynamic
if (eventType == ScriptedItem.EventType.onClick) return location; if (eventType == ScriptedItem.EventType.onClick) return location;
if (entity != null) { if (entity != null) return entity.getLocation();
return entity.getLocation();
}
return location; return location;
} }

Datei anzeigen

@ -76,13 +76,6 @@ public class Script {
runnableScriptList.add(runnableScript); runnableScriptList.add(runnableScript);
} }
@Override
public String toString() {
return "Script{" +
"runnableScriptList=" + runnableScriptList +
'}';
}
public static Script parseScript(JsonArray jsonArray) { public static Script parseScript(JsonArray jsonArray) {
Script script = new Script(); Script script = new Script();
jsonArray.forEach(jsonElement -> { jsonArray.forEach(jsonElement -> {
@ -94,11 +87,9 @@ public class Script {
} }
private static RunnableScript parseScriptSnippet(JsonObject jsonObject) { private static RunnableScript parseScriptSnippet(JsonObject jsonObject) {
if (!jsonObject.has("type")) { if (!jsonObject.has("type"))
return null; return null;
} switch (jsonObject.getAsJsonPrimitive("type").getAsString().toLowerCase()) {
String type = jsonObject.getAsJsonPrimitive("type").getAsString();
switch (type.toLowerCase()) {
case "delay": case "delay":
return new DelayScript(jsonObject); return new DelayScript(jsonObject);
case "filter": case "filter":

Datei anzeigen

@ -62,33 +62,25 @@ public class ScriptedItem {
public ScriptedItem(JsonObject jsonObject) { public ScriptedItem(JsonObject jsonObject) {
itemStack = createItemStack(jsonObject); itemStack = createItemStack(jsonObject);
if (jsonObject.has("entityName")) { if (jsonObject.has("entityName"))
entityName = jsonObject.get("entityName").getAsString(); entityName = jsonObject.get("entityName").getAsString();
}
for (EventType eventType : EventType.values()) { for (EventType eventType : EventType.values()) {
String eventString = "EVENT." + eventType.name(); String eventString = "EVENT." + eventType.name();
if (!jsonObject.has(eventString)) continue; if (!jsonObject.has(eventString) || !jsonObject.get(eventString).isJsonArray()) continue;
if (!jsonObject.get(eventString).isJsonArray()) continue;
scriptMap.put(eventType, Script.parseScript(jsonObject.getAsJsonArray(eventString))); scriptMap.put(eventType, Script.parseScript(jsonObject.getAsJsonArray(eventString)));
} }
} }
private ItemStack createItemStack(JsonObject jsonObject) { private ItemStack createItemStack(JsonObject jsonObject) {
String type = jsonObject.getAsJsonPrimitive("type").getAsString(); ItemStack itemStack = new ItemStack(Material.valueOf(jsonObject.getAsJsonPrimitive("type").getAsString()), jsonObject.getAsJsonPrimitive("amount").getAsInt());
String name = jsonObject.getAsJsonPrimitive("name").getAsString();
int amount = jsonObject.getAsJsonPrimitive("amount").getAsInt();
ItemStack itemStack = new ItemStack(Material.valueOf(type), amount);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) return itemStack; if (itemMeta == null) return itemStack;
itemMeta.setDisplayName(name); itemMeta.setDisplayName(jsonObject.getAsJsonPrimitive("name").getAsString());
if (jsonObject.has("lore")) { if (jsonObject.has("lore")) {
List<String> lore = new ArrayList<>(); List<String> lore = new ArrayList<>();
jsonObject.getAsJsonArray("lore").forEach(jsonElement -> { jsonObject.getAsJsonArray("lore").forEach(jsonElement -> lore.add(jsonElement.getAsString()));
lore.add(jsonElement.getAsString());
});
itemMeta.setLore(lore); itemMeta.setLore(lore);
} }

Datei anzeigen

@ -22,7 +22,5 @@ package de.steamwar.misslewars.scripts.function;
import de.steamwar.misslewars.scripts.RunnableScriptEvent; import de.steamwar.misslewars.scripts.RunnableScriptEvent;
public interface ScriptBooleanFunction { public interface ScriptBooleanFunction {
boolean execute(RunnableScriptEvent runnableScriptEvent); boolean execute(RunnableScriptEvent runnableScriptEvent);
} }

Datei anzeigen

@ -22,7 +22,5 @@ package de.steamwar.misslewars.scripts.function;
import de.steamwar.misslewars.scripts.RunnableScriptEvent; import de.steamwar.misslewars.scripts.RunnableScriptEvent;
public interface ScriptVoidDoubleFunction { public interface ScriptVoidDoubleFunction {
void execute(RunnableScriptEvent runnableScriptEvent, double... doubles); void execute(RunnableScriptEvent runnableScriptEvent, double... doubles);
} }

Datei anzeigen

@ -22,7 +22,5 @@ package de.steamwar.misslewars.scripts.function;
import de.steamwar.misslewars.scripts.RunnableScriptEvent; import de.steamwar.misslewars.scripts.RunnableScriptEvent;
public interface ScriptVoidFunction { public interface ScriptVoidFunction {
void execute(RunnableScriptEvent runnableScriptEvent); void execute(RunnableScriptEvent runnableScriptEvent);
} }

Datei anzeigen

@ -47,11 +47,8 @@ public class DelayScript extends RunnableScript {
public DelayScript(JsonObject delay) { public DelayScript(JsonObject delay) {
JsonPrimitive jsonPrimitive = delay.getAsJsonPrimitive("time"); JsonPrimitive jsonPrimitive = delay.getAsJsonPrimitive("time");
if (jsonPrimitive.isString()) { if (jsonPrimitive.isString()) delayTime = delayMap.getOrDefault(jsonPrimitive.getAsString().toLowerCase(), 0);
delayTime = delayMap.getOrDefault(jsonPrimitive.getAsString().toLowerCase(), 0); else if (jsonPrimitive.isNumber()) delayTime = jsonPrimitive.getAsInt();
} else if (jsonPrimitive.isNumber()) {
delayTime = jsonPrimitive.getAsInt();
}
} }
@Override @Override

Datei anzeigen

@ -40,15 +40,11 @@ public class FilterScript extends RunnableScript {
Location location = runnableScriptEvent.getLocation(); Location location = runnableScriptEvent.getLocation();
int bz = MissileWars.getBlueTeam().getPortalZ(); int bz = MissileWars.getBlueTeam().getPortalZ();
int rz = MissileWars.getRedTeam().getPortalZ(); int rz = MissileWars.getRedTeam().getPortalZ();
int offset = (int) Math.signum(bz - rz) * 5;
int offset = sign(bz - rz) * 5;
int blockZ = location.getBlockZ(); int blockZ = location.getBlockZ();
if (offset > 0) { if (offset > 0) return (blockZ > bz - offset) || (blockZ < rz + offset);
return (blockZ > bz - offset) || (blockZ < rz + offset); else return (blockZ < bz - offset) || (blockZ > rz + offset);
} else {
return (blockZ < bz - offset) || (blockZ > rz + offset);
}
}); });
filterMap.put("nearspawn", runnableScriptEvent -> { filterMap.put("nearspawn", runnableScriptEvent -> {
Location location = runnableScriptEvent.getLocation(); Location location = runnableScriptEvent.getLocation();
@ -56,29 +52,19 @@ public class FilterScript extends RunnableScript {
}); });
} }
private static int sign(int i) {
if (i < 0) return -1;
return i > 0 ? 1 : 0;
}
private boolean inverted = false; private boolean inverted = false;
private ScriptBooleanFunction filter; private ScriptBooleanFunction filter;
public FilterScript(JsonObject filter) { public FilterScript(JsonObject filter) {
this.filter = filterMap.getOrDefault(getString(filter, "filter", "").toLowerCase(), null); this.filter = filterMap.getOrDefault(getString(filter, "filter", "").toLowerCase(), null);
if (filter.has("invert")) { if (filter.has("invert")) inverted = filter.getAsJsonPrimitive("invert").getAsBoolean();
inverted = filter.getAsJsonPrimitive("invert").getAsBoolean();
}
} }
@Override @Override
public boolean execute(RunnableScriptEvent runnableScriptEvent) { public boolean execute(RunnableScriptEvent runnableScriptEvent) {
if (filter == null) return true; if (filter == null) return true;
if (inverted) { if (inverted) return !filter.execute(runnableScriptEvent);
return !filter.execute(runnableScriptEvent); else return filter.execute(runnableScriptEvent);
} else {
return filter.execute(runnableScriptEvent);
}
} }
} }

Datei anzeigen

@ -24,9 +24,10 @@ import de.steamwar.misslewars.scripts.RunnableScript;
import de.steamwar.misslewars.scripts.RunnableScriptEvent; import de.steamwar.misslewars.scripts.RunnableScriptEvent;
import de.steamwar.misslewars.scripts.ScriptedItem; import de.steamwar.misslewars.scripts.ScriptedItem;
import de.steamwar.misslewars.scripts.function.ScriptVoidFunction; import de.steamwar.misslewars.scripts.function.ScriptVoidFunction;
import de.steamwar.misslewars.scripts.utils.ScriptShortcut;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.entity.Fireball; import org.bukkit.entity.Fireball;
import org.bukkit.entity.Player; import org.bukkit.entity.Projectile;
import static de.steamwar.misslewars.scripts.utils.EntityUtils.setFireballOptions; import static de.steamwar.misslewars.scripts.utils.EntityUtils.setFireballOptions;
import static de.steamwar.misslewars.scripts.utils.EntityUtils.setProjectileOptions; import static de.steamwar.misslewars.scripts.utils.EntityUtils.setProjectileOptions;
@ -36,23 +37,26 @@ public class LaunchScript extends RunnableScript {
private ScriptVoidFunction launch = null; private ScriptVoidFunction launch = null;
public LaunchScript(JsonObject launch) { public LaunchScript(JsonObject launch) {
switch (launch.getAsJsonPrimitive("entity").getAsString().toLowerCase()) { ScriptShortcut<Projectile> scriptShortcut = getEntity(launch.getAsJsonPrimitive("entity").getAsString());
if (scriptShortcut == null) return;
this.launch = runnableScriptEvent -> {
Projectile projectile = runnableScriptEvent.getPlayer().launchProjectile(scriptShortcut.entityClass);
scriptShortcut.consumer.accept(launch, projectile, runnableScriptEvent);
};
}
private ScriptShortcut getEntity(String name) {
switch (name.toLowerCase()) {
case "fireball": case "fireball":
this.launch = runnableScriptEvent -> { return new ScriptShortcut<>(Fireball.class, (jsonObject, entity, runnableScriptEvent) -> {
Fireball fireball = runnableScriptEvent.getPlayer().launchProjectile(Fireball.class); setFireballOptions(entity, jsonObject);
setFireballOptions(fireball, launch); entity.setDirection(runnableScriptEvent.getLocation().getDirection());
fireball.setDirection(runnableScriptEvent.getLocation().getDirection()); });
};
break;
case "arrow": case "arrow":
this.launch = runnableScriptEvent -> { return new ScriptShortcut<>(Arrow.class, (jsonObject, entity, runnableScriptEvent) -> setProjectileOptions(entity, jsonObject));
Arrow arrow = runnableScriptEvent.getPlayer().launchProjectile(Arrow.class);
setProjectileOptions(arrow, launch);
};
break;
default:
break;
} }
return null;
} }
@Override @Override

Datei anzeigen

@ -44,9 +44,7 @@ public class LocationScript extends RunnableScript {
locationTypeMap.put("default", LocationType.DEFAULT); locationTypeMap.put("default", LocationType.DEFAULT);
locationMap.put("offsetentity", (runnableScriptEvent, doubles) -> { locationMap.put("offsetentity", (runnableScriptEvent, doubles) -> {
if (runnableScriptEvent.entity == null) { if (runnableScriptEvent.entity == null) return;
return;
}
Location location1 = runnableScriptEvent.entity.getLocation(); Location location1 = runnableScriptEvent.entity.getLocation();
runnableScriptEvent.setCustomLocation(location1.getX() + doubles[0], location1.getY() + doubles[1], location1.getZ() + doubles[2]); runnableScriptEvent.setCustomLocation(location1.getX() + doubles[0], location1.getY() + doubles[1], location1.getZ() + doubles[2]);
}); });
@ -54,9 +52,7 @@ public class LocationScript extends RunnableScript {
Location location1 = runnableScriptEvent.getLocation(); Location location1 = runnableScriptEvent.getLocation();
runnableScriptEvent.setCustomLocation(location1.getX() + doubles[0], location1.getY() + doubles[1], location1.getZ() + doubles[2]); runnableScriptEvent.setCustomLocation(location1.getX() + doubles[0], location1.getY() + doubles[1], location1.getZ() + doubles[2]);
}); });
ScriptVoidDoubleFunction absoluteLocation = (runnableScriptEvent, doubles) -> { ScriptVoidDoubleFunction absoluteLocation = (runnableScriptEvent, doubles) -> runnableScriptEvent.setCustomLocation(doubles[0], doubles[1], doubles[2]);
runnableScriptEvent.setCustomLocation(doubles[0], doubles[1], doubles[2]);
};
locationMap.put("absolut", absoluteLocation); locationMap.put("absolut", absoluteLocation);
locationMap.put("fix", absoluteLocation); locationMap.put("fix", absoluteLocation);
locationMap.put("fixed", absoluteLocation); locationMap.put("fixed", absoluteLocation);
@ -65,9 +61,7 @@ public class LocationScript extends RunnableScript {
private LocationType locationType = null; private LocationType locationType = null;
private ScriptVoidDoubleFunction locationExecutor = null; private ScriptVoidDoubleFunction locationExecutor = null;
private double x = 0; private double x, y, z = 0;
private double y = 0;
private double z = 0;
public LocationScript(JsonObject location) { public LocationScript(JsonObject location) {
if (location.has("location")) { if (location.has("location")) {

Datei anzeigen

@ -50,11 +50,8 @@ public class PasteScript extends RunnableScript {
private final Clipboard clipboard; private final Clipboard clipboard;
private final BlockVector3 centeredOffset; private final BlockVector3 centeredOffset;
private boolean centered; private boolean centered, ignoreAir;
private boolean ignoreAir; private int xOffset, yOffset, zOffset = 0;
private int xOffset = 0;
private int yOffset = 0;
private int zOffset = 0;
public PasteScript(JsonObject paste) { public PasteScript(JsonObject paste) {
String schemFileName = paste.getAsJsonPrimitive("schem").getAsString(); String schemFileName = paste.getAsJsonPrimitive("schem").getAsString();
@ -70,23 +67,21 @@ public class PasteScript extends RunnableScript {
centered = getBoolean(paste, "centered", false); centered = getBoolean(paste, "centered", false);
ignoreAir = getBoolean(paste, "ignoreAir", false); ignoreAir = getBoolean(paste, "ignoreAir", false);
if (paste.has("offset")) { if (paste.has("offset"))
JsonArray jsonArray = paste.getAsJsonArray("offset"); return;
if (jsonArray.size() == 3) { JsonArray jsonArray = paste.getAsJsonArray("offset");
xOffset = jsonArray.get(0).getAsInt(); if (jsonArray.size() == 3)
yOffset = jsonArray.get(1).getAsInt(); return;
zOffset = jsonArray.get(2).getAsInt(); xOffset = jsonArray.get(0).getAsInt();
} yOffset = jsonArray.get(1).getAsInt();
} zOffset = jsonArray.get(2).getAsInt();
} }
@Override @Override
public boolean execute(RunnableScriptEvent runnableScriptEvent) { public boolean execute(RunnableScriptEvent runnableScriptEvent) {
Location location = runnableScriptEvent.getLocation(); Location location = runnableScriptEvent.getLocation();
BlockVector3 paste = BlockVector3.at(location.getX() + xOffset, location.getY() + yOffset, location.getZ() + zOffset); BlockVector3 paste = BlockVector3.at(location.getX() + xOffset, location.getY() + yOffset, location.getZ() + zOffset);
if (centered) { if (centered) paste = paste.subtract(centeredOffset);
paste = paste.subtract(centeredOffset);
}
EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1); EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1);
Operations.completeBlindly(new ClipboardHolder(clipboard).createPaste(editSession).ignoreAirBlocks(ignoreAir).to(paste).build()); Operations.completeBlindly(new ClipboardHolder(clipboard).createPaste(editSession).ignoreAirBlocks(ignoreAir).to(paste).build());

Datei anzeigen

@ -41,9 +41,8 @@ public class PotionScript extends RunnableScript {
boolean icon = getBoolean(potion, "icon", true); boolean icon = getBoolean(potion, "icon", true);
PotionEffectType potionEffectType = PotionEffectType.getByName(potion.getAsJsonPrimitive("potion").getAsString()); PotionEffectType potionEffectType = PotionEffectType.getByName(potion.getAsJsonPrimitive("potion").getAsString());
if (potionEffectType == null) { if (potionEffectType == null)
return; return;
}
potionEffect = new PotionEffect(potionEffectType, duration, amplifier, ambient, particles, icon); potionEffect = new PotionEffect(potionEffectType, duration, amplifier, ambient, particles, icon);
} }

Datei anzeigen

@ -26,9 +26,7 @@ import org.bukkit.entity.Player;
public class RemoveScript extends RunnableScript { public class RemoveScript extends RunnableScript {
public RemoveScript(JsonObject jsonObject) { public RemoveScript(JsonObject jsonObject) {}
}
@Override @Override
public boolean execute(RunnableScriptEvent runnableScriptEvent) { public boolean execute(RunnableScriptEvent runnableScriptEvent) {

Datei anzeigen

@ -23,28 +23,32 @@ import com.google.gson.JsonObject;
import de.steamwar.misslewars.scripts.RunnableScript; import de.steamwar.misslewars.scripts.RunnableScript;
import de.steamwar.misslewars.scripts.RunnableScriptEvent; import de.steamwar.misslewars.scripts.RunnableScriptEvent;
import de.steamwar.misslewars.scripts.function.ScriptVoidFunction; import de.steamwar.misslewars.scripts.function.ScriptVoidFunction;
import de.steamwar.misslewars.scripts.utils.ScriptShortcut;
import org.bukkit.entity.Entity;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import java.util.HashMap; import static de.steamwar.misslewars.scripts.utils.EntityUtils.setTNTPrimedOptions;
import java.util.Map;
import static de.steamwar.misslewars.scripts.utils.EntityUtils.*;
public class SummonScript extends RunnableScript { public class SummonScript extends RunnableScript {
private ScriptVoidFunction summon = null; private ScriptVoidFunction summon = null;
public SummonScript(JsonObject summon) { public SummonScript(JsonObject summon) {
switch (summon.getAsJsonPrimitive("entity").getAsString().toLowerCase()) { ScriptShortcut<Entity> scriptShortcut = getEntity(summon.getAsJsonPrimitive("entity").getAsString());
if (scriptShortcut == null) return;
this.summon = runnableScriptEvent -> {
Entity entity = runnableScriptEvent.entity.getWorld().spawn(runnableScriptEvent.getLocation(), scriptShortcut.entityClass);
scriptShortcut.consumer.accept(summon, entity, runnableScriptEvent);
};
}
private ScriptShortcut getEntity(String name) {
switch (name.toLowerCase()) {
case "tntprimed": case "tntprimed":
this.summon = runnableScriptEvent -> { return new ScriptShortcut<>(TNTPrimed.class, (jsonObject, entity, runnableScriptEvent) -> setTNTPrimedOptions(entity, jsonObject));
TNTPrimed tnt = runnableScriptEvent.entity.getWorld().spawn(runnableScriptEvent.getLocation(), TNTPrimed.class);
setTNTPrimedOptions(tnt, summon);
};
break;
default:
break;
} }
return null;
} }
@Override @Override

Datei anzeigen

@ -47,7 +47,6 @@ public class EntityUtils {
setEntityOptions(explosive, jsonObject); setEntityOptions(explosive, jsonObject);
} }
public static void setFireballOptions(Fireball fireball, JsonObject jsonObject) { public static void setFireballOptions(Fireball fireball, JsonObject jsonObject) {
setProjectileOptions(fireball, jsonObject); setProjectileOptions(fireball, jsonObject);
setExplosiveOptions(fireball, jsonObject); setExplosiveOptions(fireball, jsonObject);

Datei anzeigen

@ -22,11 +22,6 @@ public class JsonUtils {
return defaultValue; return defaultValue;
} }
public static double getDouble(JsonObject jsonObject, String key, double defaultValue) {
if (jsonObject.has(key)) return jsonObject.getAsJsonPrimitive(key).getAsDouble();
return defaultValue;
}
public static float getFloat(JsonObject jsonObject, String key, float defaultValue) { public static float getFloat(JsonObject jsonObject, String key, float defaultValue) {
if (jsonObject.has(key)) return jsonObject.getAsJsonPrimitive(key).getAsFloat(); if (jsonObject.has(key)) return jsonObject.getAsJsonPrimitive(key).getAsFloat();
return defaultValue; return defaultValue;

Datei anzeigen

@ -0,0 +1,33 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.misslewars.scripts.utils;
import com.google.gson.JsonObject;
import de.steamwar.misslewars.scripts.RunnableScriptEvent;
public class ScriptShortcut<T> {
public Class<T> entityClass;
public TriConsumer<JsonObject, T, RunnableScriptEvent> consumer;
public ScriptShortcut(Class<T> entityClass, TriConsumer<JsonObject, T, RunnableScriptEvent> consumer) {
this.entityClass = entityClass;
this.consumer = consumer;
}
}

Datei anzeigen

@ -0,0 +1,24 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2020 SteamWar.de-Serverteam
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.misslewars.scripts.utils;
public interface TriConsumer<T, R, K> {
void accept(T t, R r, K k);
}