Do not require WorldEdit for CuboidRegion

This commit is contained in:
Brokkonaut
2019-08-27 20:10:12 +02:00
parent 2f92fd3426
commit a7967e9b1e
4 changed files with 45 additions and 44 deletions

View File

@ -2,8 +2,8 @@ package de.diddiz.LogBlock;
import de.diddiz.LogBlock.config.Config;
import de.diddiz.util.BukkitUtils;
import de.diddiz.util.CuboidRegion;
import de.diddiz.util.Utils;
import de.diddiz.worldedit.CuboidRegion;
import de.diddiz.worldedit.WorldEditHelper;
import org.bukkit.Location;
@ -792,11 +792,7 @@ public final class QueryParams implements Cloneable {
if (player == null) {
throw new IllegalArgumentException("You have to be a player to use selection");
}
if (WorldEditHelper.hasWorldEdit()) {
setSelection(CuboidRegion.fromPlayerSelection(player));
} else {
throw new IllegalArgumentException("WorldEdit not found!");
}
setSelection(WorldEditHelper.getSelectedRegion(player));
} else if (param.equals("time") || param.equals("since")) {
since = values.length > 0 ? parseTimeSpec(values) : defaultTime;
if (since == -1) {

View File

@ -2,7 +2,7 @@ package de.diddiz.LogBlock.listeners;
import de.diddiz.LogBlock.*;
import de.diddiz.util.BukkitUtils;
import de.diddiz.worldedit.CuboidRegion;
import de.diddiz.util.CuboidRegion;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;

View File

@ -1,16 +1,7 @@
package de.diddiz.worldedit;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region;
package de.diddiz.util;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.BlockVector;
public class CuboidRegion implements Cloneable {
@ -29,31 +20,6 @@ public class CuboidRegion implements Cloneable {
this.max.setZ(Math.max(first.getBlockZ(), second.getBlockZ()));
}
public static CuboidRegion fromPlayerSelection(Player player) {
Plugin worldEditPlugin = player.getServer().getPluginManager().getPlugin("WorldEdit");
LocalSession session = ((WorldEditPlugin) worldEditPlugin).getSession(player);
World world = player.getWorld();
com.sk89q.worldedit.world.World weWorld = BukkitAdapter.adapt(world);
if (!weWorld.equals(session.getSelectionWorld())) {
throw new IllegalArgumentException("No selection defined");
}
Region selection;
try {
selection = session.getSelection(weWorld);
} catch (IncompleteRegionException e) {
throw new IllegalArgumentException("No selection defined");
}
if (selection == null) {
throw new IllegalArgumentException("No selection defined");
}
if (!(selection instanceof com.sk89q.worldedit.regions.CuboidRegion)) {
throw new IllegalArgumentException("You have to define a cuboid selection");
}
BlockVector3 min = selection.getMinimumPoint();
BlockVector3 max = selection.getMaximumPoint();
return new CuboidRegion(world, new BlockVector(min.getBlockX(), min.getBlockY(), min.getBlockZ()), new BlockVector(max.getBlockX(), max.getBlockY(), max.getBlockZ()));
}
public static CuboidRegion fromCorners(World world, Location first, Location second) {
return new CuboidRegion(world, new BlockVector(first.getBlockX(), first.getBlockY(), first.getBlockZ()), new BlockVector(second.getBlockX(), second.getBlockY(), second.getBlockZ()));
}

View File

@ -11,10 +11,12 @@ import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.BlockVector;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.DoubleTag;
import com.sk89q.jnbt.FloatTag;
@ -24,11 +26,15 @@ import com.sk89q.jnbt.NBTOutputStream;
import com.sk89q.jnbt.NamedTag;
import com.sk89q.jnbt.ShortTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region;
import de.diddiz.LogBlock.LogBlock;
import de.diddiz.util.CuboidRegion;
public class WorldEditHelper {
private static boolean checkedForWorldEdit;
@ -58,9 +64,19 @@ public class WorldEditHelper {
}
public static Entity restoreEntity(Location location, EntityType type, byte[] serialized) {
if (!hasWorldEdit()) {
return null;
}
return Internal.restoreEntity(location, type, serialized);
}
public static CuboidRegion getSelectedRegion(Player player) throws IllegalArgumentException {
if (!hasWorldEdit()) {
throw new IllegalArgumentException("WorldEdit not found!");
}
return Internal.getSelectedRegion(player);
}
private static class Internal {
private static WorldEditPlugin worldEdit;
private static Method getBukkitImplAdapter;
@ -133,5 +149,28 @@ public class WorldEditHelper {
return null;
}
public static CuboidRegion getSelectedRegion(Player player) throws IllegalArgumentException {
LocalSession session = worldEdit.getSession(player);
World world = player.getWorld();
com.sk89q.worldedit.world.World weWorld = BukkitAdapter.adapt(world);
if (!weWorld.equals(session.getSelectionWorld())) {
throw new IllegalArgumentException("No selection defined");
}
Region selection;
try {
selection = session.getSelection(weWorld);
} catch (IncompleteRegionException e) {
throw new IllegalArgumentException("No selection defined");
}
if (selection == null) {
throw new IllegalArgumentException("No selection defined");
}
if (!(selection instanceof com.sk89q.worldedit.regions.CuboidRegion)) {
throw new IllegalArgumentException("You have to define a cuboid selection");
}
BlockVector3 min = selection.getMinimumPoint();
BlockVector3 max = selection.getMaximumPoint();
return new CuboidRegion(world, new BlockVector(min.getBlockX(), min.getBlockY(), min.getBlockZ()), new BlockVector(max.getBlockX(), max.getBlockY(), max.getBlockZ()));
}
}
}