package tech.sbdevelopment.v10lift.api.objects; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; import org.bukkit.Material; import org.bukkit.block.BlockFace; import javax.annotation.Nonnull; import java.util.Map; /** * A liftblock object, for a block in a lift. */ @Getter @NoArgsConstructor @ToString public class LiftBlock implements Comparable { private String world; private int x; @Setter private int y; private int z; //Only used for cabine blocks, because those need caching! @Setter private Material mat; private byte data; private BlockFace face; private String bisected; private String slabtype; private String[] signLines; //Only used for inputs! private String floor; @Setter private boolean active = false; //Only used for chests public Map[] serializedItemStacks = null; /** * A floor based liftblock, without material (no caching) * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param floor The floorname of the block */ public LiftBlock(String world, int x, int y, int z, String floor) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = null; this.data = 0; this.face = null; this.signLines = null; this.floor = floor; this.bisected = null; this.slabtype = null; } /** * 1.12 liftblock, with material and data [NO SIGN] * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block * @param data The data of the block */ public LiftBlock(String world, int x, int y, int z, Material mat, byte data) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = null; this.data = data; this.signLines = null; this.floor = null; this.bisected = null; this.slabtype = null; } /** * 1.12 liftblock (signs) * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block * @param data The data of the block * @param signLines The lines of the sign */ public LiftBlock(String world, int x, int y, int z, Material mat, byte data, String[] signLines) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = null; this.data = data; this.signLines = signLines; this.floor = null; this.bisected = null; this.slabtype = null; } /** * 1.13 liftblock, without a direction * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block */ public LiftBlock(String world, int x, int y, int z, Material mat) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = null; this.data = 0; this.signLines = null; this.floor = null; this.bisected = null; this.slabtype = null; } /** * 1.13 liftblock with a direction * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block * @param face The blockface of the block */ public LiftBlock(String world, int x, int y, int z, Material mat, BlockFace face) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = face; this.data = 0; this.signLines = null; this.floor = null; this.bisected = null; this.slabtype = null; } /** * 1.13 liftblock, with a direction and a bisected * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block * @param face The blockface of the block * @param bisected The bisected of the block */ public LiftBlock(String world, int x, int y, int z, Material mat, BlockFace face, String bisected) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = face; this.data = 0; this.signLines = null; this.floor = null; this.bisected = bisected; this.slabtype = null; } /** * 1/13 liftblock (sign) * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block * @param face The blockface of the block * @param signLines The lines of the sign */ public LiftBlock(String world, int x, int y, int z, Material mat, BlockFace face, String[] signLines) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = face; this.data = 0; this.signLines = signLines; this.floor = null; this.bisected = null; this.slabtype = null; } /** * 1.13 liftblock (slab) * * @param world The world * @param x The x-pos * @param y The y-pos * @param z The z-pos * @param mat The Material of the block * @param slabtype The typ of slab (low, high, double) */ public LiftBlock(String world, int x, int y, int z, Material mat, String slabtype) { this.world = world; this.x = x; this.y = y; this.z = z; this.mat = mat; this.face = null; this.data = 0; this.signLines = null; this.floor = null; this.bisected = null; this.slabtype = slabtype; } @Override public int compareTo(@Nonnull LiftBlock lb) { int ret = Integer.compare(y, lb.y); if (ret == 0) ret = Integer.compare(x, lb.x); if (ret == 0) ret = Integer.compare(z, lb.z); return ret; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof LiftBlock)) { if (!(o instanceof LiftSign)) return false; LiftSign other = (LiftSign) o; return world.equals(other.getWorld()) && x == other.getX() && y == other.getY() && z == other.getZ(); } LiftBlock other = (LiftBlock) o; return world.equals(other.world) && x == other.x && y == other.y && z == other.z; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((world == null) ? 0 : world.hashCode()); result = prime * result + x; result = prime * result + y; result = prime * result + z; return result; } }