Skip to content

Commit

Permalink
Refactor vector system to be cleaner
Browse files Browse the repository at this point in the history
- 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
  • Loading branch information
octylFractal committed Oct 14, 2018
1 parent 815f14d commit 2668209
Show file tree
Hide file tree
Showing 228 changed files with 4,202 additions and 3,890 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@

import com.google.common.base.Function;
import com.sk89q.worldedit.NotABlockException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.extension.input.InputParseException;
import com.sk89q.worldedit.extension.input.ParserContext;
import com.sk89q.worldedit.math.BlockVector3d;
import com.sk89q.worldedit.math.Vector3d;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockState;
Expand All @@ -42,6 +43,7 @@
import com.sk89q.worldedit.world.gamemode.GameModes;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
Expand Down Expand Up @@ -159,7 +161,7 @@ public static org.bukkit.World adapt(World world) {
*/
public static Location adapt(org.bukkit.Location location) {
checkNotNull(location);
Vector position = asVector(location);
Vector3d position = asVector(location);
return new com.sk89q.worldedit.util.Location(
adapt(location.getWorld()),
position,
Expand All @@ -175,7 +177,7 @@ public static Location adapt(org.bukkit.Location location) {
*/
public static org.bukkit.Location adapt(Location location) {
checkNotNull(location);
Vector position = location.toVector();
Vector3d position = location.toVector();
return new org.bukkit.Location(
adapt((World) location.getExtent()),
position.getX(), position.getY(), position.getZ(),
Expand All @@ -190,7 +192,22 @@ public static org.bukkit.Location adapt(Location location) {
* @param position the WorldEdit position
* @return a Bukkit location
*/
public static org.bukkit.Location adapt(org.bukkit.World world, Vector position) {
public static org.bukkit.Location adapt(org.bukkit.World world, Vector3d position) {
checkNotNull(world);
checkNotNull(position);
return new org.bukkit.Location(
world,
position.getX(), position.getY(), position.getZ());
}

/**
* Create a Bukkit location from a WorldEdit position with a Bukkit world.
*
* @param world the Bukkit world
* @param position the WorldEdit position
* @return a Bukkit location
*/
public static org.bukkit.Location adapt(org.bukkit.World world, BlockVector3d position) {
checkNotNull(world);
checkNotNull(position);
return new org.bukkit.Location(
Expand Down Expand Up @@ -221,9 +238,20 @@ public static org.bukkit.Location adapt(org.bukkit.World world, Location locatio
* @param location The Bukkit location
* @return a WorldEdit vector
*/
public static Vector asVector(org.bukkit.Location location) {
public static Vector3d asVector(org.bukkit.Location location) {
checkNotNull(location);
return new Vector3d(location.getX(), location.getY(), location.getZ());
}

/**
* Create a WorldEdit BlockVector from a Bukkit location.
*
* @param location The Bukkit location
* @return a WorldEdit vector
*/
public static BlockVector3d asBlockVector(org.bukkit.Location location) {
checkNotNull(location);
return new Vector(location.getX(), location.getY(), location.getZ());
return new BlockVector3d(location.getX(), location.getY(), location.getZ());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,24 @@
package com.sk89q.worldedit.bukkit;

import com.sk89q.util.StringUtil;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
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.BlockVector3d;
import com.sk89q.worldedit.math.Vector3d;
import com.sk89q.worldedit.session.SessionKey;
import com.sk89q.worldedit.util.HandSide;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.gamemode.GameMode;
import com.sk89q.worldedit.world.gamemode.GameModes;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -115,7 +117,7 @@ public void printError(String msg) {
}

@Override
public void setPosition(Vector pos, float pitch, float yaw) {
public void setPosition(Vector3d pos, float pitch, float yaw) {
player.teleport(new Location(player.getWorld(), pos.getX(), pos.getY(),
pos.getZ(), yaw, pitch));
}
Expand Down Expand Up @@ -173,7 +175,7 @@ public void floatAt(int x, int y, int z, boolean alwaysGlass) {
return;
}

setPosition(new Vector(x + 0.5, y, z + 0.5));
setPosition(new Vector3d(x + 0.5, y, z + 0.5));
player.setFlying(true);
}

Expand All @@ -185,7 +187,7 @@ public BaseEntity getState() {
@Override
public com.sk89q.worldedit.util.Location getLocation() {
Location nativeLocation = player.getLocation();
Vector position = BukkitAdapter.asVector(nativeLocation);
Vector3d position = BukkitAdapter.asVector(nativeLocation);
return new com.sk89q.worldedit.util.Location(
getWorld(),
position,
Expand Down Expand Up @@ -243,7 +245,7 @@ public boolean isPersistent() {
}

@Override
public void sendFakeBlock(Vector pos, BlockStateHolder block) {
public void sendFakeBlock(BlockVector3d pos, BlockStateHolder block) {
Location loc = new Location(player.getWorld(), pos.getX(), pos.getY(), pos.getZ());
if (block == null) {
player.sendBlockChange(loc, player.getWorld().getBlockAt(loc).getBlockData());
Expand All @@ -252,7 +254,7 @@ public void sendFakeBlock(Vector pos, BlockStateHolder block) {
if (block instanceof BaseBlock && ((BaseBlock) block).hasNbtData()) {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
adapter.sendFakeNBT(player, pos, ((BaseBlock) block).getNbtData());
adapter.sendFakeNBT(player, pos.toVector3d(), ((BaseBlock) block).getNbtData());
if (block.getBlockType() == BlockTypes.STRUCTURE_BLOCK) {
adapter.sendFakeOP(player);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@

import static com.google.common.base.Preconditions.checkNotNull;

import com.sk89q.worldedit.BlockVector2D;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.Vector2D;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.history.change.BlockChange;
import com.sk89q.worldedit.math.BlockVector2d;
import com.sk89q.worldedit.math.BlockVector3d;
import com.sk89q.worldedit.math.Vector3d;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.TreeGenerator;
import com.sk89q.worldedit.world.AbstractWorld;
Expand All @@ -39,6 +39,7 @@
import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.weather.WeatherType;
import com.sk89q.worldedit.world.weather.WeatherTypes;

import org.bukkit.Effect;
import org.bukkit.TreeType;
import org.bukkit.World;
Expand Down Expand Up @@ -90,7 +91,7 @@ public List<com.sk89q.worldedit.entity.Entity> getEntities(Region region) {
List<Entity> ents = world.getEntities();
List<com.sk89q.worldedit.entity.Entity> entities = new ArrayList<>();
for (Entity ent : ents) {
if (region.contains(BukkitAdapter.asVector(ent.getLocation()))) {
if (region.contains(BukkitAdapter.asBlockVector(ent.getLocation()))) {
entities.add(BukkitAdapter.adapt(ent));
}
}
Expand Down Expand Up @@ -159,22 +160,22 @@ public String getName() {
}

@Override
public int getBlockLightLevel(Vector pt) {
public int getBlockLightLevel(BlockVector3d pt) {
return getWorld().getBlockAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()).getLightLevel();
}

@Override
public boolean regenerate(Region region, EditSession editSession) {
BlockStateHolder[] history = new BlockStateHolder[16 * 16 * (getMaxY() + 1)];

for (Vector2D chunk : region.getChunks()) {
Vector min = new Vector(chunk.getBlockX() * 16, 0, chunk.getBlockZ() * 16);
for (BlockVector2d chunk : region.getChunks()) {
BlockVector3d min = new BlockVector3d(chunk.getBlockX() * 16, 0, chunk.getBlockZ() * 16);

// First save all the blocks inside
for (int x = 0; x < 16; ++x) {
for (int y = 0; y < (getMaxY() + 1); ++y) {
for (int z = 0; z < 16; ++z) {
Vector pt = min.add(x, y, z);
BlockVector3d pt = min.add(x, y, z);
int index = y * 16 * 16 + z * 16 + x;
history[index] = editSession.getFullBlock(pt);
}
Expand All @@ -191,14 +192,14 @@ public boolean regenerate(Region region, EditSession editSession) {
for (int x = 0; x < 16; ++x) {
for (int y = 0; y < (getMaxY() + 1); ++y) {
for (int z = 0; z < 16; ++z) {
Vector pt = min.add(x, y, z);
BlockVector3d pt = min.add(x, y, z);
int index = y * 16 * 16 + z * 16 + x;

// We have to restore the block if it was outside
if (!region.contains(pt)) {
editSession.smartSetBlock(pt, history[index]);
} else { // Otherwise fool with history
editSession.getChangeSet().add(new BlockChange(pt.toBlockVector(), history[index], editSession.getFullBlock(pt)));
editSession.getChangeSet().add(new BlockChange(pt, history[index], editSession.getFullBlock(pt)));
}
}
}
Expand Down Expand Up @@ -237,7 +238,7 @@ private Inventory getBlockInventory(Chest chest) {
}

@Override
public boolean clearContainerBlockContents(Vector pt) {
public boolean clearContainerBlockContents(BlockVector3d pt) {
Block block = getWorld().getBlockAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ());
if (block == null) {
return false;
Expand Down Expand Up @@ -291,21 +292,21 @@ public static TreeType toBukkitTreeType(TreeGenerator.TreeType type) {
}

@Override
public boolean generateTree(TreeGenerator.TreeType type, EditSession editSession, Vector pt) {
public boolean generateTree(TreeGenerator.TreeType type, EditSession editSession, BlockVector3d pt) {
World world = getWorld();
TreeType bukkitType = toBukkitTreeType(type);
return type != null && world.generateTree(BukkitAdapter.adapt(world, pt), bukkitType,
new EditSessionBlockChangeDelegate(editSession));
}

@Override
public void dropItem(Vector pt, BaseItemStack item) {
public void dropItem(Vector3d pt, BaseItemStack item) {
World world = getWorld();
world.dropItemNaturally(BukkitAdapter.adapt(world, pt), BukkitAdapter.adapt(item));
}

@Override
public void checkLoadedChunk(Vector pt) {
public void checkLoadedChunk(BlockVector3d pt) {
World world = getWorld();

if (!world.isChunkLoaded(pt.getBlockX() >> 4, pt.getBlockZ() >> 4)) {
Expand Down Expand Up @@ -337,15 +338,15 @@ public int getMaxY() {
}

@Override
public void fixAfterFastMode(Iterable<BlockVector2D> chunks) {
public void fixAfterFastMode(Iterable<BlockVector2d> chunks) {
World world = getWorld();
for (BlockVector2D chunkPos : chunks) {
for (BlockVector2d chunkPos : chunks) {
world.refreshChunk(chunkPos.getBlockX(), chunkPos.getBlockZ());
}
}

@Override
public boolean playEffect(Vector position, int type, int data) {
public boolean playEffect(Vector3d position, int type, int data) {
World world = getWorld();

final Effect effect = effects.get(type);
Expand Down Expand Up @@ -404,18 +405,18 @@ public void setWeather(WeatherType weatherType, long duration) {
}

@Override
public void simulateBlockMine(Vector pt) {
public void simulateBlockMine(BlockVector3d pt) {
getWorld().getBlockAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()).breakNaturally();
}

@Override
public com.sk89q.worldedit.world.block.BlockState getBlock(Vector position) {
public com.sk89q.worldedit.world.block.BlockState getBlock(BlockVector3d position) {
Block bukkitBlock = getWorld().getBlockAt(position.getBlockX(), position.getBlockY(), position.getBlockZ());
return BukkitAdapter.adapt(bukkitBlock.getBlockData());
}

@Override
public boolean setBlock(Vector position, BlockStateHolder block, boolean notifyAndLight) throws WorldEditException {
public boolean setBlock(BlockVector3d position, BlockStateHolder block, boolean notifyAndLight) throws WorldEditException {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
try {
Expand All @@ -438,7 +439,7 @@ public boolean setBlock(Vector position, BlockStateHolder block, boolean notifyA
}

@Override
public BaseBlock getFullBlock(Vector position) {
public BaseBlock getFullBlock(BlockVector3d position) {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
return adapter.getBlock(BukkitAdapter.adapt(getWorld(), position));
Expand All @@ -448,7 +449,7 @@ public BaseBlock getFullBlock(Vector position) {
}

@Override
public BaseBiome getBiome(Vector2D position) {
public BaseBiome getBiome(BlockVector2d position) {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
int id = adapter.getBiomeId(getWorld().getBiome(position.getBlockX(), position.getBlockZ()));
Expand All @@ -459,7 +460,7 @@ public BaseBiome getBiome(Vector2D position) {
}

@Override
public boolean setBiome(Vector2D position, BaseBiome biome) {
public boolean setBiome(BlockVector2d position, BaseBiome biome) {
BukkitImplAdapter adapter = WorldEditPlugin.getInstance().getBukkitImplAdapter();
if (adapter != null) {
Biome bukkitBiome = adapter.getBiome(biome.getId());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@

import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.math.BlockVector3d;

import org.bukkit.BlockChangeDelegate;
import org.bukkit.block.data.BlockData;

Expand All @@ -40,7 +40,7 @@ public EditSessionBlockChangeDelegate(EditSession editSession) {
@Override
public boolean setBlockData(int x, int y, int z, BlockData blockData) {
try {
editSession.setBlock(new Vector(x, y, z), BukkitAdapter.adapt(blockData));
editSession.setBlock(new BlockVector3d(x, y, z), BukkitAdapter.adapt(blockData));
} catch (MaxChangedBlocksException e) {
return false;
}
Expand All @@ -49,7 +49,7 @@ public boolean setBlockData(int x, int y, int z, BlockData blockData) {

@Override
public BlockData getBlockData(int x, int y, int z) {
return BukkitAdapter.adapt(editSession.getBlock(new Vector(x, y, z)));
return BukkitAdapter.adapt(editSession.getBlock(new BlockVector3d(x, y, z)));
}

@Override
Expand All @@ -59,7 +59,7 @@ public int getHeight() {

@Override
public boolean isEmpty(int x, int y, int z) {
return editSession.getBlock(new Vector(x, y, z)).getBlockType().getMaterial().isAir();
return editSession.getBlock(new BlockVector3d(x, y, z)).getBlockType().getMaterial().isAir();
}

}
Loading

0 comments on commit 2668209

Please sign in to comment.