|
@@ -16,38 +16,38 @@
|
|
|
* along with MissileWars. If not, see <https://www.gnu.org/licenses/>.
|
|
|
*/
|
|
|
|
|
|
-package de.butzlabben.missilewars.missile.paste.r1_16.fawe;
|
|
|
+package de.butzlabben.missilewars.missile.paste.v1_20.fawe;
|
|
|
|
|
|
import com.sk89q.worldedit.WorldEdit;
|
|
|
-import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
|
|
-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.extent.clipboard.io.ClipboardReader;
|
|
|
import com.sk89q.worldedit.function.operation.Operation;
|
|
|
import com.sk89q.worldedit.function.operation.Operations;
|
|
|
import com.sk89q.worldedit.math.BlockVector3;
|
|
|
import com.sk89q.worldedit.math.transform.AffineTransform;
|
|
|
-import com.sk89q.worldedit.regions.CuboidRegion;
|
|
|
import com.sk89q.worldedit.session.ClipboardHolder;
|
|
|
import com.sk89q.worldedit.world.World;
|
|
|
import org.bukkit.Material;
|
|
|
+import org.bukkit.block.Block;
|
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
|
import java.io.File;
|
|
|
-import java.util.Set;
|
|
|
+import java.io.FileInputStream;
|
|
|
import java.util.logging.Level;
|
|
|
|
|
|
/**
|
|
|
* @author Daniel Nägele
|
|
|
*/
|
|
|
-public class R1_16Paster {
|
|
|
+public class FAWE_Paster {
|
|
|
|
|
|
public void pasteMissile(File schematic, Vector locationVec, int rotation, org.bukkit.World world,
|
|
|
Material glassBlockReplace, int replaceRadius, Material replaceMaterial, int replaceTicks, JavaPlugin plugin) {
|
|
|
|
|
|
- pasteSchematic(schematic, locationVec, world, rotation, plugin);
|
|
|
+ pasteSchematic(schematic, locationVec, rotation, world, plugin);
|
|
|
|
|
|
// Remove "Replacer-Block" after a short time to update the pasted schematic structure via (normal) WorldEdit:
|
|
|
new BukkitRunnable() {
|
|
@@ -62,19 +62,20 @@ public class R1_16Paster {
|
|
|
* This method executes the paste command via FAWE.
|
|
|
*
|
|
|
* @param schematic (File) the target WorldEdit schematic file
|
|
|
- * @param locationVec (Vector)
|
|
|
+ * @param locationVec (Vector) the abstract block location
|
|
|
* @param world (World) the target world for the WorldEdit action
|
|
|
* @param rotation (int) the target schematic rotation
|
|
|
* @param plugin (JavaPlugin) the basis plugin
|
|
|
*/
|
|
|
- public void pasteSchematic(File schematic, Vector locationVec, org.bukkit.World world, int rotation, JavaPlugin plugin) {
|
|
|
+ public void pasteSchematic(File schematic, Vector locationVec, int rotation, org.bukkit.World world, JavaPlugin plugin) {
|
|
|
World weWorld = new BukkitWorld(world);
|
|
|
- BlockVector3 blockVec = fromBukkitVector(locationVec);
|
|
|
-
|
|
|
- try (Clipboard clipboard = ClipboardFormats.findByFile(schematic).load(schematic);
|
|
|
+ BlockVector3 blockVec = getBlockVector(locationVec);
|
|
|
+ ClipboardFormat clipboardFormat = ClipboardFormats.findByFile(schematic);
|
|
|
+
|
|
|
+ try (ClipboardReader clipboardReader = clipboardFormat.getReader(new FileInputStream(schematic));
|
|
|
var session = WorldEdit.getInstance().newEditSession(weWorld)) {
|
|
|
|
|
|
- ClipboardHolder clipboardHolder = new ClipboardHolder(clipboard);
|
|
|
+ ClipboardHolder clipboardHolder = new ClipboardHolder(clipboardReader.read());
|
|
|
clipboardHolder.setTransform(new AffineTransform().rotateY(rotation));
|
|
|
|
|
|
Operation pasteBuilder = clipboardHolder
|
|
@@ -94,23 +95,32 @@ public class R1_16Paster {
|
|
|
* This method removes the temporary "Replacer-Block", so that the (asynchronously)
|
|
|
* paste structure via FAWE gets an update.
|
|
|
*
|
|
|
- * @param locationVec (Vector)
|
|
|
+ * @param locationVec (Vector) the abstract block location
|
|
|
* @param world (World) the target world for the WorldEdit action
|
|
|
- * @param radius (int) the configured update-radius
|
|
|
+ * @param replaceRadius (int) the configured "Replace radius" (= half diagonals)
|
|
|
* @param replaceMaterial (Material) the target material for the replacement
|
|
|
*/
|
|
|
- private void removeTempBlock(Vector locationVec, org.bukkit.World world, int radius, Material replaceMaterial) {
|
|
|
- World weWorld = new BukkitWorld(world);
|
|
|
- BlockVector3 blockVec = fromBukkitVector(locationVec);
|
|
|
-
|
|
|
- var radiusVec = BlockVector3.at(radius, radius, radius);
|
|
|
-
|
|
|
- weWorld.replaceBlocks(new CuboidRegion(blockVec.subtract(radiusVec), blockVec.add(radiusVec)),
|
|
|
- Set.of(BukkitAdapter.adapt(replaceMaterial.createBlockData()).toBaseBlock()),
|
|
|
- BukkitAdapter.adapt(Material.AIR.createBlockData()));
|
|
|
+ public void removeTempBlock(Vector locationVec, org.bukkit.World world, int replaceRadius, Material replaceMaterial) {
|
|
|
+ int startX = locationVec.getBlockX() - replaceRadius;
|
|
|
+ int endX = locationVec.getBlockX() + replaceRadius;
|
|
|
+ int startY = locationVec.getBlockY() - replaceRadius;
|
|
|
+ int endY = locationVec.getBlockY() + replaceRadius;
|
|
|
+ int startZ = locationVec.getBlockZ() - replaceRadius;
|
|
|
+ int endZ = locationVec.getBlockZ() + replaceRadius;
|
|
|
+
|
|
|
+ for (int x = startX; x <= endX; x++) {
|
|
|
+ for (int y = startY; y <= endY; y++) {
|
|
|
+ for (int z = startZ; z <= endZ; z++) {
|
|
|
+ Block block = world.getBlockAt(x, y, z);
|
|
|
+ if (block.getType() == replaceMaterial) {
|
|
|
+ block.setType(Material.AIR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- private BlockVector3 fromBukkitVector(org.bukkit.util.Vector pos) {
|
|
|
- return BlockVector3.at(pos.getX(), pos.getY(), pos.getZ());
|
|
|
+ public static BlockVector3 getBlockVector(org.bukkit.util.Vector locationVec) {
|
|
|
+ return BlockVector3.at(locationVec.getX(), locationVec.getY(), locationVec.getZ());
|
|
|
}
|
|
|
}
|