Add LocationScript
Dieser Commit ist enthalten in:
Ursprung
b7ef14f814
Commit
090185558f
@ -24,11 +24,22 @@ import org.bukkit.entity.Entity;
|
|||||||
|
|
||||||
public interface RunnableScript {
|
public interface RunnableScript {
|
||||||
|
|
||||||
|
enum LocationType {
|
||||||
|
|
||||||
|
STATIC,
|
||||||
|
DYNAMIC,
|
||||||
|
DEFAULT,
|
||||||
|
CUSTOM
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
class RunnableScriptEvent {
|
class RunnableScriptEvent {
|
||||||
|
|
||||||
public final ScriptedItem.EventType eventType;
|
public final ScriptedItem.EventType eventType;
|
||||||
public final Entity entity;
|
public final Entity entity;
|
||||||
private final Location location;
|
private final Location location;
|
||||||
|
private Location customLocation;
|
||||||
|
private LocationType locationType = LocationType.DEFAULT;
|
||||||
|
|
||||||
public RunnableScriptEvent(ScriptedItem.EventType eventType, Entity entity, Location location) {
|
public RunnableScriptEvent(ScriptedItem.EventType eventType, Entity entity, Location location) {
|
||||||
this.eventType = eventType;
|
this.eventType = eventType;
|
||||||
@ -37,6 +48,23 @@ public interface RunnableScript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation() {
|
public Location getLocation() {
|
||||||
|
// Custom location
|
||||||
|
if (locationType == LocationType.CUSTOM && customLocation != null) {
|
||||||
|
return customLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Static initial Location
|
||||||
|
if (locationType == LocationType.STATIC) {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dynamic Location if entity is not null
|
||||||
|
if (locationType == LocationType.DYNAMIC) {
|
||||||
|
if (entity != null) return entity.getLocation();
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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();
|
||||||
@ -44,6 +72,19 @@ public interface RunnableScript {
|
|||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setLocationType(LocationType locationType) {
|
||||||
|
if (locationType == null) return;
|
||||||
|
this.locationType = locationType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomLocation(double x, double y, double z) {
|
||||||
|
setCustomLocation(x, y, z, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomLocation(double x, double y, double z, float pitch, float yaw) {
|
||||||
|
this.customLocation = new Location(location.getWorld(), x, y, z, yaw, pitch);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean execute(RunnableScriptEvent runnableScriptEvent);
|
boolean execute(RunnableScriptEvent runnableScriptEvent);
|
||||||
|
@ -49,6 +49,8 @@ public class ScriptParser {
|
|||||||
return new RemoveScript(jsonObject);
|
return new RemoveScript(jsonObject);
|
||||||
case "launch":
|
case "launch":
|
||||||
return new LaunchScript(jsonObject);
|
return new LaunchScript(jsonObject);
|
||||||
|
case "location":
|
||||||
|
return new LocationScript(jsonObject);
|
||||||
case "paste":
|
case "paste":
|
||||||
return new PasteScript(jsonObject);
|
return new PasteScript(jsonObject);
|
||||||
case "potion":
|
case "potion":
|
||||||
|
@ -55,7 +55,7 @@ public class DelayScript implements RunnableScript {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else if (jsonPrimitive.isNumber()) {
|
||||||
delayTime = jsonPrimitive.getAsInt();
|
delayTime = jsonPrimitive.getAsInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
76
src/de/steamwar/misslewars/scripts/implemented/LocationScript.java
Normale Datei
76
src/de/steamwar/misslewars/scripts/implemented/LocationScript.java
Normale Datei
@ -0,0 +1,76 @@
|
|||||||
|
package de.steamwar.misslewars.scripts.implemented;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import de.steamwar.misslewars.scripts.RunnableScript;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
public class LocationScript implements RunnableScript {
|
||||||
|
|
||||||
|
private LocationType locationType = null;
|
||||||
|
private LocationExecutor locationExecutor = null;
|
||||||
|
|
||||||
|
private interface LocationExecutor {
|
||||||
|
|
||||||
|
void location(RunnableScriptEvent runnableScriptEvent);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocationScript(JsonObject location) {
|
||||||
|
if (location.has("location")) {
|
||||||
|
JsonObject jsonObject = location.getAsJsonObject("location");
|
||||||
|
double x = jsonObject.getAsJsonPrimitive("x").getAsDouble();
|
||||||
|
double y = jsonObject.getAsJsonPrimitive("y").getAsDouble();
|
||||||
|
double z = jsonObject.getAsJsonPrimitive("z").getAsDouble();
|
||||||
|
switch (jsonObject.getAsJsonPrimitive("type").getAsString().toLowerCase()) {
|
||||||
|
case "absolute":
|
||||||
|
case "fix":
|
||||||
|
case "fixed":
|
||||||
|
locationExecutor = runnableScriptEvent -> runnableScriptEvent.setCustomLocation(x, y, z);
|
||||||
|
break;
|
||||||
|
case "offsetEntity":
|
||||||
|
locationExecutor = runnableScriptEvent -> {
|
||||||
|
if (runnableScriptEvent.entity == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Location location1 = runnableScriptEvent.entity.getLocation();
|
||||||
|
runnableScriptEvent.setCustomLocation(location1.getX() + x, location1.getY() + y, location1.getZ() + z);
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case "offsetLocation":
|
||||||
|
locationExecutor = runnableScriptEvent -> {
|
||||||
|
Location location1 = runnableScriptEvent.getLocation();
|
||||||
|
runnableScriptEvent.setCustomLocation(location1.getX() + x, location1.getY() + y, location1.getZ() + z);
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
locationType = LocationType.CUSTOM;
|
||||||
|
} else if (location.has("locationType")) {
|
||||||
|
switch (location.getAsJsonPrimitive("locationType").getAsString().toLowerCase()) {
|
||||||
|
case "static":
|
||||||
|
locationType = LocationType.STATIC;
|
||||||
|
break;
|
||||||
|
case "dynamic":
|
||||||
|
locationType = LocationType.DYNAMIC;
|
||||||
|
break;
|
||||||
|
case "custom":
|
||||||
|
locationType = LocationType.CUSTOM;
|
||||||
|
break;
|
||||||
|
case "default":
|
||||||
|
default:
|
||||||
|
locationType = LocationType.DEFAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean execute(RunnableScriptEvent runnableScriptEvent) {
|
||||||
|
if (locationType == null) return false;
|
||||||
|
runnableScriptEvent.setLocationType(locationType);
|
||||||
|
if (locationExecutor != null) {
|
||||||
|
locationExecutor.location(runnableScriptEvent);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
In neuem Issue referenzieren
Einen Benutzer sperren