Refactor vector system to be cleaner

- Move Vector, etc. into `.math` package
- Drop many methods that will be auto-promoted anyways, eg. with
`divide(int)` and `divide(double)` the first is now gone.
- Take Block vectors into their own class hierarchy
- Make it clear throughout the API what takes blockvectors
- many more improvements
This commit is contained in:
Kenzie Togami
2018-10-14 03:40:53 -07:00
parent d7c528247b
commit 399e0ad5fa
230 changed files with 4216 additions and 3913 deletions

View File

@ -21,12 +21,13 @@ package com.sk89q.worldedit.sponge;
import com.flowpowered.math.vector.Vector3d;
import com.sk89q.util.StringUtil;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.extension.platform.AbstractPlayerActor;
import com.sk89q.worldedit.extent.inventory.BlockBag;
import com.sk89q.worldedit.internal.cui.CUIEvent;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.session.SessionKey;
import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.util.Location;
@ -34,6 +35,7 @@ import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.gamemode.GameMode;
import com.sk89q.worldedit.world.gamemode.GameModes;
import com.sk89q.worldedit.world.item.ItemTypes;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.data.type.HandTypes;
import org.spongepowered.api.entity.living.player.Player;
@ -144,7 +146,7 @@ public class SpongePlayer extends AbstractPlayerActor {
}
@Override
public void setPosition(Vector pos, float pitch, float yaw) {
public void setPosition(Vector3 pos, float pitch, float yaw) {
org.spongepowered.api.world.Location<World> loc = new org.spongepowered.api.world.Location<>(
this.player.getWorld(), pos.getX(), pos.getY(), pos.getZ()
);
@ -185,7 +187,7 @@ public class SpongePlayer extends AbstractPlayerActor {
}
@Override
public void sendFakeBlock(Vector pos, BlockStateHolder block) {
public void sendFakeBlock(BlockVector3 pos, BlockStateHolder block) {
org.spongepowered.api.world.Location<World> loc = player.getWorld().getLocation(pos.getX(), pos.getY(), pos.getZ());
if (block == null) {
player.sendBlockChange(loc.getBlockPosition(), loc.getBlock());

View File

@ -24,22 +24,24 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.flowpowered.math.vector.Vector3d;
import com.flowpowered.math.vector.Vector3i;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.registry.state.Property;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.AbstractWorld;
import com.sk89q.worldedit.world.biome.BaseBiome;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.weather.WeatherType;
import com.sk89q.worldedit.world.weather.WeatherTypes;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.block.BlockSnapshot;
import org.spongepowered.api.block.BlockState;
@ -134,7 +136,7 @@ public abstract class SpongeWorld extends AbstractWorld {
private static final BlockSnapshot.Builder builder = BlockSnapshot.builder();
@Override
public boolean setBlock(Vector position, BlockStateHolder block, boolean notifyAndLight) throws WorldEditException {
public boolean setBlock(BlockVector3 position, BlockStateHolder block, boolean notifyAndLight) throws WorldEditException {
checkNotNull(position);
checkNotNull(block);
@ -167,7 +169,7 @@ public abstract class SpongeWorld extends AbstractWorld {
}
@Override
public int getBlockLightLevel(Vector position) {
public int getBlockLightLevel(BlockVector3 position) {
checkNotNull(position);
BlockState state = getWorld().getBlock(new Vector3i(position.getX(), position.getY(), position.getZ()));
@ -185,13 +187,13 @@ public abstract class SpongeWorld extends AbstractWorld {
}
@Override
public BaseBiome getBiome(Vector2D position) {
public BaseBiome getBiome(BlockVector2 position) {
checkNotNull(position);
return new BaseBiome(SpongeWorldEdit.inst().getAdapter().resolve(getWorld().getBiome(position.getBlockX(), 0, position.getBlockZ())));
}
@Override
public boolean setBiome(Vector2D position, BaseBiome biome) {
public boolean setBiome(BlockVector2 position, BaseBiome biome) {
checkNotNull(position);
checkNotNull(biome);
@ -200,7 +202,7 @@ public abstract class SpongeWorld extends AbstractWorld {
}
@Override
public void dropItem(Vector position, BaseItemStack item) {
public void dropItem(Vector3 position, BaseItemStack item) {
checkNotNull(position);
checkNotNull(item);
@ -218,7 +220,7 @@ public abstract class SpongeWorld extends AbstractWorld {
}
@Override
public void simulateBlockMine(Vector position) {
public void simulateBlockMine(BlockVector3 position) {
// TODO
}
@ -247,7 +249,7 @@ public abstract class SpongeWorld extends AbstractWorld {
List<Entity> entities = new ArrayList<>();
for (org.spongepowered.api.entity.Entity entity : getWorld().getEntities()) {
org.spongepowered.api.world.Location<World> loc = entity.getLocation();
if (region.contains(new Vector(loc.getX(), loc.getY(), loc.getZ()))) {
if (region.contains(new BlockVector3(loc.getX(), loc.getY(), loc.getZ()))) {
entities.add(new SpongeEntity(entity));
}
}
@ -279,7 +281,7 @@ public abstract class SpongeWorld extends AbstractWorld {
}
// Overwrite any data set by the NBT application
Vector dir = location.getDirection();
Vector3 dir = location.getDirection();
newEnt.setLocationAndRotation(
new org.spongepowered.api.world.Location<>(getWorld(), pos),

View File

@ -20,11 +20,12 @@
package com.sk89q.worldedit.sponge.adapter;
import com.flowpowered.math.vector.Vector3d;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.sponge.SpongeWorld;
import com.sk89q.worldedit.util.Location;
import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.world.World;
@ -56,7 +57,7 @@ public interface SpongeImplAdapter {
}
default Location adapt(org.spongepowered.api.world.Location<org.spongepowered.api.world.World> loc, Vector3d rot) {
Vector position = new Vector(loc.getX(), loc.getY(), loc.getZ());
Vector3 position = new Vector3(loc.getX(), loc.getY(), loc.getZ());
return new Location(getWorld(loc.getExtent()), position, (float) rot.getY(), (float) rot.getX());
}