diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 25bd6118a..fbdf2b8ac 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -29,7 +29,7 @@ dependencies { "modImplementation"("net.fabricmc.fabric-api:fabric-api:0.31.0+1.16") - "modImplementation"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { + "modCompileOnly"("com.sk89q.worldedit:worldedit-fabric-mc1.16:7.2.0-SNAPSHOT") { exclude(group = "com.google.guava", module = "guava") exclude(group = "com.google.code.gson", module = "gson") exclude(group = "it.unimi.dsi", module = "fastutil") diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java index b53bff68f..78c1211b5 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/FabricBlock.java @@ -7,7 +7,7 @@ import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.BlockType; import com.dfsek.terra.api.platform.block.state.BlockState; import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.FluidBlock; import net.minecraft.util.math.BlockPos; import net.minecraft.world.WorldAccess; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java index 4d15d1c16..be4eb316b 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricDirectional.java @@ -2,8 +2,8 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.data.Directional; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.block.FabricBlockData; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.DirectionProperty; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java index 1633df9ab..d8e88d566 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricOrientable.java @@ -2,8 +2,8 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.Axis; import com.dfsek.terra.api.platform.block.data.Orientable; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.block.FabricBlockData; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.EnumProperty; import net.minecraft.util.math.Direction; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java index 390702582..cf0d0c277 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricSlab.java @@ -1,7 +1,7 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.data.Slab; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.Properties; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java index 098cd75d6..d18ec13da 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/block/data/FabricStairs.java @@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.block.data; import com.dfsek.terra.api.platform.block.BlockFace; import com.dfsek.terra.api.platform.block.data.Stairs; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.BlockState; import net.minecraft.state.property.Properties; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index efac7ee53..78ab7f8a2 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -7,8 +7,8 @@ import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.world.generation.TerraChunkGenerator; import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.config.pack.ConfigPack; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.TerraFabricPlugin; +import com.dfsek.terra.fabric.util.FabricAdapter; import com.dfsek.terra.world.TerraWorld; import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D; import com.dfsek.terra.world.generation.math.samplers.Sampler; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java index 219968106..1f801f1d0 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/handle/FabricWorldHandle.java @@ -1,9 +1,13 @@ package com.dfsek.terra.fabric.handle; +import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.entity.EntityType; +import com.dfsek.terra.api.platform.entity.Player; import com.dfsek.terra.api.platform.handle.WorldHandle; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.api.util.generic.pair.Pair; import com.dfsek.terra.fabric.block.FabricBlockData; +import com.dfsek.terra.fabric.util.FabricAdapter; +import com.dfsek.terra.fabric.util.WorldEditUtil; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.block.BlockState; @@ -33,4 +37,14 @@ public class FabricWorldHandle implements WorldHandle { if(identifier == null) identifier = Identifier.tryParse("minecraft:" + id.toLowerCase(Locale.ROOT)); return (EntityType) Registry.ENTITY_TYPE.get(identifier); } + + @Override + public Pair getSelectedLocation(Player player) { + try { + Class.forName("com.sk89q.worldedit.WorldEdit"); + } catch(ClassNotFoundException e) { + throw new IllegalStateException("WorldEdit is not installed."); + } + return WorldEditUtil.getSelection(player); + } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java index 1450344a8..74c5ccd23 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockEntityMixin.java @@ -3,8 +3,8 @@ package com.dfsek.terra.fabric.mixin.implementations.block; import com.dfsek.terra.api.platform.block.Block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.state.BlockState; -import com.dfsek.terra.fabric.FabricAdapter; import com.dfsek.terra.fabric.block.FabricBlock; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.entity.BlockEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java index 4e77e28ea..579b404f8 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/block/BlockMixin.java @@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.mixin.implementations.block; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.block.BlockType; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java index 1f255e1a6..d829f7fe3 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/mixin/implementations/entity/EntityMixin.java @@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.mixin.implementations.entity; import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.world.World; -import com.dfsek.terra.fabric.FabricAdapter; +import com.dfsek.terra.fabric.util.FabricAdapter; import net.minecraft.entity.Entity; import net.minecraft.text.LiteralText; import net.minecraft.text.Text; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAdapter.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java similarity index 99% rename from platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAdapter.java rename to platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java index 62037173c..8c197d573 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricAdapter.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricAdapter.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.fabric; +package com.dfsek.terra.fabric.util; import com.dfsek.terra.api.math.vector.Vector3; import com.dfsek.terra.api.platform.block.Axis; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java new file mode 100644 index 000000000..159e4fbc8 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/WorldEditUtil.java @@ -0,0 +1,29 @@ +package com.dfsek.terra.fabric.util; + +import com.dfsek.terra.api.math.vector.Location; +import com.dfsek.terra.api.platform.entity.Player; +import com.dfsek.terra.api.util.generic.pair.Pair; +import com.sk89q.worldedit.IncompleteRegionException; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.regions.Region; +import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.world.World; + +public final class WorldEditUtil { + public static Pair getSelection(Player player) { + WorldEdit worldEdit = WorldEdit.getInstance(); + try { + Region selection = worldEdit.getSessionManager() + .get(com.sk89q.worldedit.fabric.FabricAdapter.adaptPlayer((ServerPlayerEntity) player)) + .getSelection(com.sk89q.worldedit.fabric.FabricAdapter.adapt((World) player.getWorld())); + BlockVector3 min = selection.getMinimumPoint(); + BlockVector3 max = selection.getMaximumPoint(); + Location l1 = new Location(player.getWorld(), min.getBlockX(), min.getBlockY(), min.getBlockZ()); + Location l2 = new Location(player.getWorld(), max.getBlockX(), max.getBlockY(), max.getBlockZ()); + return Pair.of(l1, l2); + } catch(IncompleteRegionException e) { + throw new IllegalStateException("No selection has been made", e); + } + } +}