added rotation

This commit is contained in:
2024-07-20 16:38:13 +02:00
parent 315750475a
commit e48413d111
5 changed files with 51 additions and 10 deletions

View File

@@ -0,0 +1,8 @@
package eu.mhsl.minecraft.pixelblocks.pixelblock;
public enum Direction {
POSITIVE_X,
POSITIVE_Z,
NEGATIVE_X,
NEGATIVE_Z
}

View File

@@ -9,6 +9,7 @@ import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;
import org.codehaus.plexus.util.FileUtils;
import java.io.File;
@@ -16,6 +17,7 @@ import java.io.IOException;
import java.util.*;
import static eu.mhsl.minecraft.pixelblocks.PixelBlocks.*;
import static java.lang.Math.abs;
public class PixelBlock {
public static List<PixelBlock> placedPixelBlocks = new ArrayList<>();
@@ -25,6 +27,7 @@ public class PixelBlock {
public static boolean liveUpdate = true;
public Location pixelBlockLocation;
public Direction direction;
public ArrayList<Pixel> pixels = new ArrayList<>();
public Interaction hitbox;
public ItemDisplay barrier;
@@ -38,6 +41,7 @@ public class PixelBlock {
this.uuid = blockUUID;
this.pixelBlockLocation = originLocation.toBlockLocation();
this.direction = Direction.POSITIVE_Z;
this.pixelBlockLocation.setYaw(0);
this.pixelBlockLocation.setPitch(0);
this.ownerUID = ownerUID;
@@ -76,6 +80,22 @@ public class PixelBlock {
return plugin.getDataFolder().getPath() + pathSeparator + pixelBlock.uuid.toString();
}
public static Direction vectorToDirection(Vector vector) {
if(abs(vector.getX()) > abs(vector.getZ())) {
if(vector.getX() >= 0) {
return Direction.POSITIVE_X;
} else {
return Direction.NEGATIVE_X;
}
} else {
if(vector.getZ() >= 0) {
return Direction.POSITIVE_Z;
} else {
return Direction.NEGATIVE_Z;
}
}
}
void createPixelWorld() {
File file = new File(getWorldPathFromPixelblock(this));
@@ -327,8 +347,13 @@ public class PixelBlock {
Location blockLocation = Objects.requireNonNull(Bukkit
.getWorld(getWorldPathFromPixelblock(this)))
.getSpawnLocation()
.clone()
.add(relativeLocation.x(), relativeLocation.y(), relativeLocation.z());
.clone();
switch (this.direction) {
case POSITIVE_Z -> blockLocation.add(relativeLocation.x(), relativeLocation.y(), relativeLocation.z());
case NEGATIVE_Z -> blockLocation.add((pixelsPerBlock-1)-relativeLocation.x(), relativeLocation.y(), (pixelsPerBlock-1)-relativeLocation.z());
case POSITIVE_X -> blockLocation.add((pixelsPerBlock-1)-relativeLocation.z(), relativeLocation.y(), relativeLocation.x());
case NEGATIVE_X -> blockLocation.add(relativeLocation.z(), relativeLocation.y(), (pixelsPerBlock-1)-relativeLocation.x());
}
BlockData block = blockLocation.getBlock().getBlockData();
if(block.getMaterial() != Material.AIR) {
@@ -407,13 +432,14 @@ public class PixelBlock {
}
}
public boolean place(Location placeLocation) {
public boolean place(Location placeLocation, Direction direction) {
Location newLocation = placeLocation.toBlockLocation();
newLocation.setPitch(0);
newLocation.setYaw(0);
if(PixelBlock.getPixelBlockFromLocation(newLocation) == null || PixelBlock.getPixelBlockFromLocation(newLocation) == this) {
this.pixelBlockLocation = newLocation;
this.direction = direction;
update();
dataBase.savePixelBlock(this);
placedPixelBlocks.add(this);