mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-11-28 13:36:33 +01:00
Use new directions util (needs testing!)
This commit is contained in:
parent
c3c0539736
commit
af9083bf35
@ -16,6 +16,7 @@
|
||||
*/
|
||||
package de.erethon.dungeonsxl.sign;
|
||||
|
||||
import de.erethon.commons.misc.BlockUtil;
|
||||
import de.erethon.dungeonsxl.DungeonsXL;
|
||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||
import org.bukkit.Location;
|
||||
@ -37,7 +38,7 @@ public abstract class LocationSign extends DSign {
|
||||
double x = getSign().getX() + 0.5;
|
||||
double y = getSign().getY();
|
||||
double z = getSign().getZ() + 0.5;
|
||||
float yaw = letterToYaw(((org.bukkit.material.Sign) getSign().getData()).getFacing().getOppositeFace().name().charAt(0));
|
||||
float yaw = BlockUtil.blockFaceToYaw(((org.bukkit.material.Sign) getSign().getData()).getFacing().getOppositeFace());
|
||||
float pitch = 0;
|
||||
location = new Location(getGameWorld().getWorld(), x, y, z, yaw, pitch);
|
||||
}
|
||||
@ -49,23 +50,4 @@ public abstract class LocationSign extends DSign {
|
||||
return location;
|
||||
}
|
||||
|
||||
public static int letterToYaw(char c) {
|
||||
switch (c) {
|
||||
case 'S':
|
||||
case 's':
|
||||
return 0;
|
||||
case 'W':
|
||||
case 'w':
|
||||
return 90;
|
||||
case 'N':
|
||||
case 'n':
|
||||
return 180;
|
||||
case 'E':
|
||||
case 'e':
|
||||
return -90;
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
package de.erethon.dungeonsxl.sign;
|
||||
|
||||
import de.erethon.caliburn.item.VanillaItem;
|
||||
import de.erethon.commons.misc.BlockUtil;
|
||||
import de.erethon.commons.misc.NumberUtil;
|
||||
import de.erethon.dungeonsxl.DungeonsXL;
|
||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||
@ -36,7 +37,7 @@ public class TeleportSign extends LocationSign {
|
||||
public boolean check() {
|
||||
for (int i = 1; i <= 2; i++) {
|
||||
if (!lines[i].isEmpty()) {
|
||||
if (letterToYaw(lines[i].charAt(0)) == -1) {
|
||||
if (BlockUtil.lettersToYaw(lines[i]) == -1) {
|
||||
String[] loc = lines[i].split(",");
|
||||
if (loc.length != 3) {
|
||||
return false;
|
||||
@ -52,7 +53,7 @@ public class TeleportSign extends LocationSign {
|
||||
super.onInit();
|
||||
for (int i = 1; i <= 2; i++) {
|
||||
if (!lines[i].isEmpty()) {
|
||||
int yaw = letterToYaw(lines[i].charAt(0));
|
||||
int yaw = BlockUtil.lettersToYaw(lines[i]);
|
||||
if (yaw != -1) {
|
||||
location.setYaw(yaw);
|
||||
} else {
|
||||
|
@ -17,11 +17,11 @@
|
||||
package de.erethon.dungeonsxl.world.block;
|
||||
|
||||
import de.erethon.caliburn.item.ExItem;
|
||||
import de.erethon.commons.misc.BlockUtil;
|
||||
import de.erethon.dungeonsxl.DungeonsXL;
|
||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
@ -33,224 +33,21 @@ public class PlaceableBlock extends GameBlock {
|
||||
|
||||
// Variables
|
||||
private Set<ExItem> materials = new HashSet<>();
|
||||
|
||||
private boolean onTop = false;
|
||||
private boolean onBottom = false;
|
||||
private boolean onNorth = false;
|
||||
private boolean onSouth = false;
|
||||
private boolean onEast = false;
|
||||
private boolean onWest = false;
|
||||
private Set<BlockFace> faces = new HashSet<>();
|
||||
|
||||
public PlaceableBlock(DungeonsXL plugin, Block block, String ids, String directions) {
|
||||
super(plugin, block);
|
||||
|
||||
// Split ids
|
||||
if (!ids.isEmpty()) {
|
||||
String[] splittedIds = ids.split(",");
|
||||
for (String id : splittedIds) {
|
||||
ExItem item = plugin.getCaliburn().getExItem(id);
|
||||
if (item != null) {
|
||||
materials.add(item);
|
||||
}
|
||||
for (String id : ids.split(",")) {
|
||||
ExItem item = plugin.getCaliburn().getExItem(id);
|
||||
if (item != null) {
|
||||
materials.add(item);
|
||||
}
|
||||
}
|
||||
|
||||
// Read directions
|
||||
if (directions.length() == 6) {
|
||||
for (byte direction = 0; direction < 6; direction++) {
|
||||
boolean positive = String.valueOf(directions.charAt(direction)).equals("x");
|
||||
|
||||
if (!positive) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (direction == 0) {
|
||||
onTop = true;
|
||||
}
|
||||
|
||||
if (direction == 1) {
|
||||
onBottom = true;
|
||||
}
|
||||
|
||||
if (block.getType() == Material.WALL_SIGN) {
|
||||
byte data = block.getData();
|
||||
switch (data) {
|
||||
case 3:
|
||||
if (direction == 2) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 3) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 4) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 5) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (direction == 5) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 2) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 3) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 4) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (direction == 4) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 5) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 2) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 3) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 5:
|
||||
if (direction == 3) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 4) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 5) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 2) {
|
||||
onWest = true;
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
byte data = block.getData();
|
||||
switch (data) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 15:
|
||||
if (direction == 2) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 3) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 4) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 5) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case 4:
|
||||
case 3:
|
||||
case 5:
|
||||
case 6:
|
||||
if (direction == 5) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 2) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 3) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 4) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 8:
|
||||
case 7:
|
||||
case 9:
|
||||
case 10:
|
||||
if (direction == 4) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 5) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 2) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 3) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
case 12:
|
||||
case 11:
|
||||
case 13:
|
||||
case 14:
|
||||
if (direction == 3) {
|
||||
onNorth = true;
|
||||
}
|
||||
|
||||
if (direction == 4) {
|
||||
onEast = true;
|
||||
}
|
||||
|
||||
if (direction == 5) {
|
||||
onSouth = true;
|
||||
}
|
||||
|
||||
if (direction == 2) {
|
||||
onWest = true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
onTop = true;
|
||||
onBottom = true;
|
||||
onNorth = true;
|
||||
onEast = true;
|
||||
onSouth = true;
|
||||
onWest = true;
|
||||
faces.add(BlockFace.SELF);
|
||||
for (String direction : directions.split(",")) {
|
||||
faces.add(BlockUtil.lettersToBlockFace(direction));
|
||||
}
|
||||
}
|
||||
|
||||
@ -260,42 +57,16 @@ public class PlaceableBlock extends GameBlock {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Can build
|
||||
public static boolean canBuildHere(Block block, BlockFace blockFace, ExItem mat, DGameWorld gameWorld) {
|
||||
for (PlaceableBlock gamePlacableBlock : gameWorld.getPlaceableBlocks()) {
|
||||
if (gamePlacableBlock.block.getFace(block) != BlockFace.SELF) {
|
||||
continue;
|
||||
}
|
||||
public boolean canPlace(Block toPlace, ExItem material) {
|
||||
return faces.contains(toPlace.getFace(block)) && (materials.isEmpty() || materials.contains(material));
|
||||
}
|
||||
|
||||
if (!(gamePlacableBlock.materials.contains(mat) || gamePlacableBlock.materials.isEmpty())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (blockFace == BlockFace.NORTH && gamePlacableBlock.onNorth) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blockFace == BlockFace.SOUTH && gamePlacableBlock.onSouth) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blockFace == BlockFace.EAST && gamePlacableBlock.onEast) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blockFace == BlockFace.WEST && gamePlacableBlock.onWest) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blockFace == BlockFace.UP && gamePlacableBlock.onTop) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (blockFace == BlockFace.DOWN && gamePlacableBlock.onBottom) {
|
||||
public static boolean canBuildHere(Block block, BlockFace blockFace, ExItem material, DGameWorld gameWorld) {
|
||||
for (PlaceableBlock gamePlaceableBlock : gameWorld.getPlaceableBlocks()) {
|
||||
if (gamePlaceableBlock.canPlace(block, material)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user