mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-11-09 12:20:30 +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;
|
package de.erethon.dungeonsxl.sign;
|
||||||
|
|
||||||
|
import de.erethon.commons.misc.BlockUtil;
|
||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -37,7 +38,7 @@ public abstract class LocationSign extends DSign {
|
|||||||
double x = getSign().getX() + 0.5;
|
double x = getSign().getX() + 0.5;
|
||||||
double y = getSign().getY();
|
double y = getSign().getY();
|
||||||
double z = getSign().getZ() + 0.5;
|
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;
|
float pitch = 0;
|
||||||
location = new Location(getGameWorld().getWorld(), x, y, z, yaw, pitch);
|
location = new Location(getGameWorld().getWorld(), x, y, z, yaw, pitch);
|
||||||
}
|
}
|
||||||
@ -49,23 +50,4 @@ public abstract class LocationSign extends DSign {
|
|||||||
return location;
|
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;
|
package de.erethon.dungeonsxl.sign;
|
||||||
|
|
||||||
import de.erethon.caliburn.item.VanillaItem;
|
import de.erethon.caliburn.item.VanillaItem;
|
||||||
|
import de.erethon.commons.misc.BlockUtil;
|
||||||
import de.erethon.commons.misc.NumberUtil;
|
import de.erethon.commons.misc.NumberUtil;
|
||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||||
@ -36,7 +37,7 @@ public class TeleportSign extends LocationSign {
|
|||||||
public boolean check() {
|
public boolean check() {
|
||||||
for (int i = 1; i <= 2; i++) {
|
for (int i = 1; i <= 2; i++) {
|
||||||
if (!lines[i].isEmpty()) {
|
if (!lines[i].isEmpty()) {
|
||||||
if (letterToYaw(lines[i].charAt(0)) == -1) {
|
if (BlockUtil.lettersToYaw(lines[i]) == -1) {
|
||||||
String[] loc = lines[i].split(",");
|
String[] loc = lines[i].split(",");
|
||||||
if (loc.length != 3) {
|
if (loc.length != 3) {
|
||||||
return false;
|
return false;
|
||||||
@ -52,7 +53,7 @@ public class TeleportSign extends LocationSign {
|
|||||||
super.onInit();
|
super.onInit();
|
||||||
for (int i = 1; i <= 2; i++) {
|
for (int i = 1; i <= 2; i++) {
|
||||||
if (!lines[i].isEmpty()) {
|
if (!lines[i].isEmpty()) {
|
||||||
int yaw = letterToYaw(lines[i].charAt(0));
|
int yaw = BlockUtil.lettersToYaw(lines[i]);
|
||||||
if (yaw != -1) {
|
if (yaw != -1) {
|
||||||
location.setYaw(yaw);
|
location.setYaw(yaw);
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,11 +17,11 @@
|
|||||||
package de.erethon.dungeonsxl.world.block;
|
package de.erethon.dungeonsxl.world.block;
|
||||||
|
|
||||||
import de.erethon.caliburn.item.ExItem;
|
import de.erethon.caliburn.item.ExItem;
|
||||||
|
import de.erethon.commons.misc.BlockUtil;
|
||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.world.DGameWorld;
|
import de.erethon.dungeonsxl.world.DGameWorld;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
@ -33,224 +33,21 @@ public class PlaceableBlock extends GameBlock {
|
|||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
private Set<ExItem> materials = new HashSet<>();
|
private Set<ExItem> materials = new HashSet<>();
|
||||||
|
private Set<BlockFace> faces = 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;
|
|
||||||
|
|
||||||
public PlaceableBlock(DungeonsXL plugin, Block block, String ids, String directions) {
|
public PlaceableBlock(DungeonsXL plugin, Block block, String ids, String directions) {
|
||||||
super(plugin, block);
|
super(plugin, block);
|
||||||
|
|
||||||
// Split ids
|
for (String id : ids.split(",")) {
|
||||||
if (!ids.isEmpty()) {
|
|
||||||
String[] splittedIds = ids.split(",");
|
|
||||||
for (String id : splittedIds) {
|
|
||||||
ExItem item = plugin.getCaliburn().getExItem(id);
|
ExItem item = plugin.getCaliburn().getExItem(id);
|
||||||
if (item != null) {
|
if (item != null) {
|
||||||
materials.add(item);
|
materials.add(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Read directions
|
faces.add(BlockFace.SELF);
|
||||||
if (directions.length() == 6) {
|
for (String direction : directions.split(",")) {
|
||||||
for (byte direction = 0; direction < 6; direction++) {
|
faces.add(BlockUtil.lettersToBlockFace(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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,42 +57,16 @@ public class PlaceableBlock extends GameBlock {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can build
|
public boolean canPlace(Block toPlace, ExItem material) {
|
||||||
public static boolean canBuildHere(Block block, BlockFace blockFace, ExItem mat, DGameWorld gameWorld) {
|
return faces.contains(toPlace.getFace(block)) && (materials.isEmpty() || materials.contains(material));
|
||||||
for (PlaceableBlock gamePlacableBlock : gameWorld.getPlaceableBlocks()) {
|
|
||||||
if (gamePlacableBlock.block.getFace(block) != BlockFace.SELF) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(gamePlacableBlock.materials.contains(mat) || gamePlacableBlock.materials.isEmpty())) {
|
public static boolean canBuildHere(Block block, BlockFace blockFace, ExItem material, DGameWorld gameWorld) {
|
||||||
continue;
|
for (PlaceableBlock gamePlaceableBlock : gameWorld.getPlaceableBlocks()) {
|
||||||
}
|
if (gamePlaceableBlock.canPlace(block, material)) {
|
||||||
|
|
||||||
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) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user