Gets rid of the rest of the modX and modY usages, and removes some unused code

This commit is contained in:
Kristian Knarvik 2021-10-08 18:23:42 +02:00
parent a68dc4b464
commit fff4d8d78b
20 changed files with 150 additions and 279 deletions

View File

@ -229,12 +229,16 @@ public class LanguageLoader {
public void debug() {
Set<String> keys = loadedStringTranslations.keySet();
for (String key : keys) {
Stargate.debug("LanguageLoader::Debug::loadedStringTranslations", key + " => " + loadedStringTranslations.get(key));
Stargate.debug("LanguageLoader::Debug::loadedStringTranslations", key + " => " +
loadedStringTranslations.get(key));
}
if (loadedBackupStrings == null) {
return;
}
if (loadedBackupStrings == null) return;
keys = loadedBackupStrings.keySet();
for (String key : keys) {
Stargate.debug("LanguageLoader::Debug::loadedBackupStrings", key + " => " + loadedBackupStrings.get(key));
Stargate.debug("LanguageLoader::Debug::loadedBackupStrings", key + " => " +
loadedBackupStrings.get(key));
}
}

View File

@ -322,6 +322,9 @@ public class Stargate extends JavaPlugin {
// It is important to load languages here, as they are used during reloadGates()
languageLoader = new LanguageLoader(languageFolder, Stargate.languageName);
if (debuggingEnabled) {
languageLoader.debug();
}
this.createMissingFolders();
this.loadGates();

View File

@ -8,9 +8,9 @@ import org.bukkit.Material;
*/
public class BlockChangeRequest {
private BlockLocation blockLocation;
private Material newMaterial;
private Axis newAxis;
private final BlockLocation blockLocation;
private final Material newMaterial;
private final Axis newAxis;
/**
* Instantiates a new block change request
@ -34,15 +34,6 @@ public class BlockChangeRequest {
return blockLocation;
}
/**
* Sets the location of the block
*
* @param blockLocation <p>The new location of the block</p>
*/
public void setBlockLocation(BlockLocation blockLocation) {
this.blockLocation = blockLocation;
}
/**
* Gets the material to change the block into
*
@ -52,15 +43,6 @@ public class BlockChangeRequest {
return newMaterial;
}
/**
* Sets the material to change the block into
*
* @param material <p>The new material</p>
*/
public void setMaterial(Material material) {
newMaterial = material;
}
/**
* Gets the axis to orient the block along
*
@ -70,13 +52,4 @@ public class BlockChangeRequest {
return newAxis;
}
/**
* Sets the axis to orient the block along
*
* @param axis <p>The new axis to orient the block along</p>
*/
public void setAxis(Axis axis) {
newAxis = axis;
}
}

View File

@ -62,73 +62,53 @@ public class BlockLocation extends Location {
* @param z <p>The z position relative to this block's position</p>
* @return <p>A new block location</p>
*/
public BlockLocation makeRelative(int x, int y, int z) {
public BlockLocation makeRelativeBlockLocation(int x, int y, int z) {
return (BlockLocation) this.clone().add(x, y, z);
}
/**
* Makes a location relative to the block location
*
* @param x <p>The x position relative to this block's position</p>
* @param y <p>The y position relative to this block's position</p>
* @param z <p>The z position relative to this block's position</p>
* @param yaw <p>The yaw of the location</p>
* @param rotY <p>The y rotation of the location</p>
* @param x <p>The x position relative to this block's position</p>
* @param y <p>The y position relative to this block's position</p>
* @param z <p>The z position relative to this block's position</p>
* @param yaw <p>The yaw of the location</p>
* @return <p>A new location</p>
*/
public Location makeRelativeLoc(double x, double y, double z, float yaw, float rotY) {
public Location makeRelativeLocation(double x, double y, double z, float yaw) {
Location newLocation = this.clone();
newLocation.setYaw(yaw);
newLocation.setPitch(rotY);
newLocation.setPitch(0);
return newLocation.add(x, y, z);
}
/**
* Gets a location relative to this block location
*
* @param vector <p>The relative block vector describing the relative location</p>
* @param yaw <p>The yaw pointing in the distance direction</p>
* @param relativeVector <p>The relative block vector describing the relative location</p>
* @param yaw <p>The yaw pointing in the distance direction</p>
* @return <p>A location relative to this location</p>
*/
public BlockLocation getRelativeLocation(RelativeBlockVector vector, double yaw) {
Vector combined = DirectionHelper.getCoordinateVectorFromRelativeVector(vector.getRight(), vector.getDepth(),
vector.getDistance(), yaw);
return makeRelative(combined.getBlockX(), combined.getBlockY(), combined.getBlockZ());
}
/**
* Makes a block location relative to the current origin according to given parameters
*
* <p>See {@link RelativeBlockVector} to understand better. modX or modZ should always be 0 while the other is 1
* or -1.</p>
*
* @param right <p>The amount of right steps from the top-left origin</p>
* @param depth <p>The amount of downward steps from the top-left origin</p>
* @param distance <p>The distance outward from the top-left origin</p>
* @param modX <p>X modifier. If modX = -1, X will increase as right increases</p>
* @param modY <p>Y modifier. modY = 1 for Y decreasing as depth increases</p>
* @param modZ <p>Z modifier. If modZ = 1, X will increase as distance increases</p>
* @return A new location relative to this block location
*/
public BlockLocation modRelative(int right, int depth, int distance, int modX, int modY, int modZ) {
return makeRelative(-right * modX + distance * modZ, -depth * modY, -right * modZ + -distance * modX);
public BlockLocation getRelativeLocation(RelativeBlockVector relativeVector, double yaw) {
Vector realVector = DirectionHelper.getCoordinateVectorFromRelativeVector(relativeVector.getRight(),
relativeVector.getDepth(), relativeVector.getDistance(), yaw);
return makeRelativeBlockLocation(realVector.getBlockX(), realVector.getBlockY(), realVector.getBlockZ());
}
/**
* Makes a location relative to the current location according to given parameters
*
* @param right <p></p>
* @param depth <p>The y position relative to the current position</p>
* @param distance <p>The distance away from the previous location to the new location</p>
* @param yaw <p>The yaw of the location</p>
* @param rotY <p>Unused</p>
* @param modX <p>x modifier. Defines movement along the x-axis. 0 for no movement</p>
* @param modY <p>Unused</p>
* @param modZ <p>z modifier. Defines movement along the z-axis. 0 for no movement</p>
* @param right <p>The amount of blocks to go right when looking the opposite direction from the yaw</p>
* @param depth <p>The amount of blocks to go downwards when looking the opposite direction from the yaw</p>
* @param distance <p>The amount of blocks to go outwards when looking the opposite direction from the yaw</p>
* @param portalYaw <p>The yaw when looking out from the portal</p>
* @param yaw <p>The yaw of the travelling entity</p>
* @return A new location relative to this block location
*/
public Location modRelativeLoc(double right, double depth, double distance, float yaw, float rotY, int modX, int modY, int modZ) {
return makeRelativeLoc(0.5 + -right * modX + distance * modZ, depth, 0.5 + -right * modZ + -distance * modX, yaw, 0);
public Location getRelativeLocation(double right, double depth, double distance, float portalYaw, float yaw) {
Vector realVector = DirectionHelper.getCoordinateVectorFromRelativeVector(right, depth, distance, portalYaw);
return makeRelativeLocation(0.5 + realVector.getBlockX(), realVector.getBlockY(),
0.5 + realVector.getBlockZ(), yaw);
}
/**
@ -193,7 +173,7 @@ public class BlockLocation extends Location {
} else {
return;
}
parent = this.makeRelative(offsetX, offsetY, offsetZ);
parent = this.makeRelativeBlockLocation(offsetX, offsetY, offsetZ);
}
@Override

View File

@ -14,6 +14,8 @@ public class RelativeBlockVector {
private final int depth;
private final int distance;
public enum Property {RIGHT, DEPTH, DISTANCE}
/**
* Instantiates a new relative block vector
*
@ -27,6 +29,35 @@ public class RelativeBlockVector {
this.distance = distance;
}
/**
* Adds a value to one of the properties of this relative block vector
*
* @param propertyToAddTo <p>The property to change</p>
* @param valueToAdd <p>The value to add to the property</p>
* @return <p>A new relative block vector with the property altered</p>
*/
public RelativeBlockVector addToVector(Property propertyToAddTo, int valueToAdd) {
switch (propertyToAddTo) {
case RIGHT:
return new RelativeBlockVector(this.right + valueToAdd, this.depth, this.distance);
case DEPTH:
return new RelativeBlockVector(this.right, this.depth + valueToAdd, this.distance);
case DISTANCE:
return new RelativeBlockVector(this.right, this.depth, this.distance + valueToAdd);
default:
throw new IllegalArgumentException("Invalid relative block vector property given");
}
}
/**
* Gets a relative block vector which is this inverted (pointing in the opposite direction)
*
* @return <p>This vector, but inverted</p>
*/
public RelativeBlockVector invert() {
return new RelativeBlockVector(-this.right, -this.depth, -this.distance);
}
/**
* Gets the distance to the right relative to the origin
*

View File

@ -8,6 +8,7 @@ import org.jetbrains.annotations.NotNull;
/**
* This event should be called whenever a player opens a stargate
*/
@SuppressWarnings({"unused"})
public class StargateOpenEvent extends StargatePlayerEvent {
private static final HandlerList handlers = new HandlerList();

View File

@ -6,6 +6,7 @@ import org.bukkit.entity.Player;
/**
* An abstract event describing any stargate event where a player is involved
*/
@SuppressWarnings("unused")
public abstract class StargatePlayerEvent extends StargateEvent {
private final Player player;

View File

@ -41,9 +41,9 @@ public class StargatePortalEvent extends StargatePlayerEvent {
}
/**
* Return the destination gate
* Return the destination portal
*
* @return destination gate
* @return <p>The destination portal</p>
*/
public Portal getDestination() {
return destination;
@ -52,14 +52,14 @@ public class StargatePortalEvent extends StargatePlayerEvent {
/**
* Return the location of the players exit point
*
* @return org.bukkit.Location Location of the exit point
* @return <p>Location of the exit point</p>
*/
public Location getExit() {
return exit;
}
/**
* Set the location of the players exit point
* Set the location of the player's exit point
*/
public void setExit(Location loc) {
this.exit = loc;

View File

@ -244,7 +244,7 @@ public class PlayerEventListener implements Listener {
}
/**
* This method handles right clicking of a sign or button belonging to a stargate
* This method handles right-clicking of a sign or button belonging to a stargate
*
* @param event <p>The event triggering the right-click</p>
* @param player <p>The player doing the right-click</p>

View File

@ -15,7 +15,7 @@ import org.bukkit.event.world.WorldUnloadEvent;
public class WorldEventListener implements Listener {
/**
* This listener listens for the loading of a world and loads all all gates from the world if not already loaded
* This listener listens for the loading of a world and loads all gates from the world if not already loaded
*
* @param event <p>The triggered world load event</p>
*/

View File

@ -26,8 +26,8 @@ public class Gate {
private final Map<Character, Material> types;
//Gate materials
private Material portalOpenBlock;
private Material portalClosedBlock;
private final Material portalOpenBlock;
private final Material portalClosedBlock;
private final Material portalButton;
// Economy information
@ -74,15 +74,6 @@ public class Gate {
return layout;
}
/**
* Gets the material types each layout character represents
*
* @return <p>The material types each layout character represents</p>
*/
public Map<Character, Material> getTypes() {
return types;
}
/**
* Gets the material type used for this gate's control blocks
*
@ -110,15 +101,6 @@ public class Gate {
return portalOpenBlock;
}
/**
* Sets the block to use for the opening when a portal using this gate is open
*
* @param type <p>The block type to use for the opening when open</p>
*/
public void setPortalOpenBlock(Material type) {
portalOpenBlock = type;
}
/**
* Gets the block type to use for the opening when a portal using this gate is closed
*
@ -128,15 +110,6 @@ public class Gate {
return portalClosedBlock;
}
/**
* Sets the block type to use for the opening when a portal using this gate is closed
*
* @param type <p>The block type to use for the opening when closed</p>
*/
public void setPortalClosedBlock(Material type) {
portalClosedBlock = type;
}
/**
* Gets the material to use for a portal's button if using this gate type
*
@ -186,36 +159,33 @@ public class Gate {
* Checks whether a portal's gate matches this gate type
*
* @param topLeft <p>The top-left block of the portal's gate</p>
* @param modX <p>The x modifier used</p>
* @param modZ <p>The z modifier used</p>
* @param yaw <p>The yaw when looking directly outwards</p>
* @return <p>True if this gate matches the portal</p>
*/
public boolean matches(BlockLocation topLeft, int modX, int modZ) {
return matches(topLeft, modX, modZ, false);
public boolean matches(BlockLocation topLeft, double yaw) {
return matches(topLeft, yaw, false);
}
/**
* Checks whether a portal's gate matches this gate type
*
* @param topLeft <p>The top-left block of the portal's gate</p>
* @param modX <p>The x modifier used</p>
* @param modZ <p>The z modifier used</p>
* @param yaw <p>The yaw when looking directly outwards</p>
* @param onCreate <p>Whether this is used in the context of creating a new gate</p>
* @return <p>True if this gate matches the portal</p>
*/
public boolean matches(BlockLocation topLeft, int modX, int modZ, boolean onCreate) {
return verifyGateEntrancesMatch(topLeft, modX, modZ, onCreate) && verifyGateBorderMatches(topLeft, modX, modZ);
public boolean matches(BlockLocation topLeft, double yaw, boolean onCreate) {
return verifyGateEntrancesMatch(topLeft, yaw, onCreate) && verifyGateBorderMatches(topLeft, yaw);
}
/**
* Verifies that all border blocks of a portal gate matches this gate type
*
* @param topLeft <p>The top-left block of the portal</p>
* @param modX <p>The x modifier used</p>
* @param modZ <p>The z modifier used</p>
* @param yaw <p>The yaw when looking directly outwards</p>
* @return <p>True if all border blocks of the gate match the layout</p>
*/
private boolean verifyGateBorderMatches(BlockLocation topLeft, int modX, int modZ) {
private boolean verifyGateBorderMatches(BlockLocation topLeft, double yaw) {
Map<Character, Material> portalTypes = new HashMap<>(types);
for (RelativeBlockVector borderVector : layout.getBorder()) {
int rowIndex = borderVector.getRight();
@ -223,7 +193,7 @@ public class Gate {
Character key = layout.getLayout()[lineIndex][rowIndex];
Material materialInLayout = portalTypes.get(key);
Material materialAtLocation = getBlockAt(topLeft, borderVector, modX, modZ).getType();
Material materialAtLocation = getBlockAt(topLeft, borderVector, yaw).getType();
if (materialInLayout == null) {
portalTypes.put(key, materialAtLocation);
} else if (materialAtLocation != materialInLayout) {
@ -239,19 +209,20 @@ public class Gate {
* Verifies that all entrances of a portal gate matches this gate type
*
* @param topLeft <p>The top-left block of this portal</p>
* @param modX <p>The x modifier used</p>
* @param modZ <p>The z modifier used</p>
* @param yaw <p>The yaw when looking directly outwards</p>
* @param onCreate <p>Whether this is used in the context of creating a new gate</p>
* @return <p>Whether this is used in the context of creating a new gate</p>
*/
private boolean verifyGateEntrancesMatch(BlockLocation topLeft, int modX, int modZ, boolean onCreate) {
private boolean verifyGateEntrancesMatch(BlockLocation topLeft, double yaw, boolean onCreate) {
if (Stargate.ignoreEntrance) {
return true;
}
Stargate.debug("verifyGateEntrancesMatch", String.valueOf(topLeft));
for (RelativeBlockVector entranceVector : layout.getEntrances()) {
Material type = getBlockAt(topLeft, entranceVector, modX, modZ).getType();
Stargate.debug("verifyGateEntrancesMatch", String.valueOf(entranceVector));
Material type = getBlockAt(topLeft, entranceVector, yaw).getType();
// Ignore entrance if it's air and we're creating a new gate
//Ignore entrance if it's air, and we're creating a new gate
if (onCreate && type == Material.AIR) {
continue;
}
@ -270,8 +241,8 @@ public class Gate {
* @param vector <p>The relative block vector</p>
* @return <p>The block at the given relative position</p>
*/
private BlockLocation getBlockAt(BlockLocation topLeft, RelativeBlockVector vector, int modX, int modZ) {
return DirectionHelper.getBlockAt(topLeft, vector, modX, modZ);
private BlockLocation getBlockAt(BlockLocation topLeft, RelativeBlockVector vector, double yaw) {
return DirectionHelper.getBlockAt(topLeft, vector, yaw);
}
/**
@ -371,6 +342,7 @@ public class Gate {
* @param value <p>The value of the config key</p>
* @throws IOException <p>If unable to write to the buffered writer</p>
*/
@SuppressWarnings("SameParameterValue")
private void writeConfig(BufferedWriter bufferedWriter, String key, boolean value) throws IOException {
writeConfig(bufferedWriter, "%s=%b", key, value);
}

View File

@ -378,7 +378,7 @@ public class GateHandler {
}
if (files == null || files.length == 0) {
//The gates folder was not found. Assume this is the first run
//The gates-folder was not found. Assume this is the first run
if (directory.mkdir()) {
populateDefaults(gateFolder);
}

View File

@ -78,30 +78,24 @@ public class Portal {
* @param button <p>The location of the portal's open button</p>
* @param destination <p>The destination defined on the sign's destination line</p>
* @param name <p>The name of the portal defined on the sign's first line</p>
* @param verified <p>Whether the portal's gate has been verified to match its template</p>
* @param network <p>The network the portal belongs to, defined on the sign's network line</p>
* @param gate <p>The gate template this portal uses</p>
* @param ownerUUID <p>The UUID of the gate's owner</p>
* @param ownerName <p>The name of the gate's owner</p>
* @param options <p>A map containing all possible portal options</p>
*/
Portal(PortalLocation portalLocation, BlockLocation button,
String destination, String name, boolean verified, String network, Gate gate, UUID ownerUUID,
String ownerName, Map<PortalOption, Boolean> options) {
Portal(PortalLocation portalLocation, BlockLocation button, String destination, String name, String network,
Gate gate, UUID ownerUUID, String ownerName, Map<PortalOption, Boolean> options) {
this.location = portalLocation;
this.destination = destination;
this.button = button;
this.verified = verified;
this.verified = false;
this.network = network;
this.name = name;
this.gate = gate;
this.ownerUUID = ownerUUID;
this.ownerName = ownerName;
this.options = new PortalOptions(options, destination.length() > 0);
if (verified) {
this.drawSign();
}
}
/**
@ -145,6 +139,7 @@ public class Portal {
*
* @param network <p>The new network for this gate</p>
*/
@SuppressWarnings("unused")
public void setNetwork(String network) {
this.network = network;
}
@ -172,6 +167,7 @@ public class Portal {
*
* @param name <p>The new name of this portal</p>
*/
@SuppressWarnings("unused")
public void setName(String name) {
this.name = filterName(name);
drawSign();
@ -275,6 +271,7 @@ public class Portal {
*
* @param owner <p>The new UUID of this portal's owner</p>
*/
@SuppressWarnings("unused")
public void setOwner(UUID owner) {
this.ownerUUID = owner;
}
@ -348,24 +345,22 @@ public class Portal {
* Open this portal
*
* @param force <p>Whether to force this portal open, even if it's already open for some player</p>
* @return <p>True if the portal was opened</p>
*/
public boolean open(boolean force) {
return open(null, force);
public void open(boolean force) {
open(null, force);
}
/**
* Open this portal
*
* @param force <p>Whether to force this portal open, even if it's already open for some player</p>
* @return <p>True if the portal was opened</p>
*/
public boolean open(Player openFor, boolean force) {
public void open(Player openFor, boolean force) {
//Call the StargateOpenEvent
StargateOpenEvent event = new StargateOpenEvent(openFor, this, force);
Stargate.server.getPluginManager().callEvent(event);
if (event.isCancelled() || (isOpen() && !event.getForce())) {
return false;
return;
}
//Change the opening blocks to the correct type
@ -376,7 +371,6 @@ public class Portal {
}
updatePortalOpenState(openFor);
return true;
}
/**
@ -401,7 +395,9 @@ public class Portal {
destination.getDestinationName().equalsIgnoreCase(getName())) && !destination.isOpen()) {
destination.open(openFor, false);
destination.setDestination(this);
if (destination.isVerified()) destination.drawSign();
if (destination.isVerified()) {
destination.drawSign();
}
}
}
}
@ -636,9 +632,11 @@ public class Portal {
RelativeBlockVector relativeExit = gate.getLayout().getExit();
if (relativeExit != null) {
BlockLocation exit = getBlockAt(relativeExit);
int back = (options.isBackwards()) ? -1 : 1;
exitLocation = exit.modRelativeLoc(0D, 0D, 1, traveller.getYaw(),
traveller.getPitch(), getModX() * back, 1, getModZ() * back);
float yaw = traveller.getYaw();
if (options.isBackwards()) {
yaw += 180;
}
exitLocation = exit.getRelativeLocation(0D, 0D, 1, this.getYaw(), yaw);
if (entity != null) {
double entitySize = EntityHelper.getEntityMaxSize(entity);
@ -791,24 +789,6 @@ public class Portal {
return this.location.getSignLocation();
}
/**
* Gets the x modifier used by this portal
*
* @return <p>The x modifier used by this portal</p>
*/
public int getModX() {
return this.location.getModX();
}
/**
* Gets the z modifier used by this portal
*
* @return <p>The z modifier used by this portal</p>
*/
public int getModZ() {
return this.location.getModZ();
}
/**
* Gets the rotation of this portal
*
@ -864,7 +844,7 @@ public class Portal {
if (!Stargate.verifyPortals) {
return true;
}
return gate.matches(getTopLeft(), getModX(), getModZ());
return gate.matches(getTopLeft(), getYaw());
}
/**
@ -1014,7 +994,7 @@ public class Portal {
* @return <p>The block at the given relative position</p>
*/
public BlockLocation getBlockAt(RelativeBlockVector vector) {
return DirectionHelper.getBlockAt(getTopLeft(), vector, getModX(), getModZ());
return DirectionHelper.getBlockAt(getTopLeft(), vector, getYaw());
}
/**

View File

@ -1,6 +0,0 @@
package net.knarcraft.stargate.portal;
public class PortalDirection {
}

View File

@ -20,7 +20,6 @@ import org.bukkit.block.data.Directional;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.entity.Player;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.util.Vector;
import java.io.BufferedWriter;
import java.io.File;
@ -245,6 +244,7 @@ public class PortalHandler {
//Return early if the sign is not placed on a block, or the block is not a control block
if (idParent == null || GateHandler.getGatesByControlBlock(idParent).length == 0) {
Stargate.debug("createPortal", "Control block not registered");
return null;
}
@ -269,14 +269,10 @@ public class PortalHandler {
//Get the direction the button should be facing
BlockFace buttonFacing = DirectionHelper.getBlockFaceFromYaw(yaw);
//Get the x and z modifiers
Vector direction = DirectionHelper.getDirectionVectorFromYaw(yaw);
//TODO: Figure out how modX and modZ really works and simplify it
int modX = -direction.getBlockZ();
int modZ = direction.getBlockX();
PortalLocation portalLocation = new PortalLocation();
portalLocation.setButtonFacing(buttonFacing).setYaw(yaw).setModX(modX).setModZ(modZ).setSignLocation(signLocation);
portalLocation.setButtonFacing(buttonFacing).setYaw(yaw).setSignLocation(signLocation);
Stargate.debug("createPortal", "Finished getting all portal info");
//Try and find a gate matching the new portal
Gate gate = findMatchingGate(portalLocation, player);
@ -287,6 +283,7 @@ public class PortalHandler {
//If the portal is a bungee portal and invalid, abort here
if (!isValidBungeePortal(portalOptions, player, destinationName, network)) {
Stargate.debug("createPortal", "Portal is an invalid bungee portal");
return null;
}
@ -344,7 +341,7 @@ public class PortalHandler {
}
//Check if a conflict exists
if (conflictsWithExistingPortal(gate, portalLocation.getTopLeft(), modX, modZ, player)) {
if (conflictsWithExistingPortal(gate, portalLocation.getTopLeft(), yaw, player)) {
return null;
}
@ -392,8 +389,7 @@ public class PortalHandler {
//Get all gates with the used type of control blocks
Gate[] possibleGates = GateHandler.getGatesByControlBlock(signParent);
int modX = portalLocation.getModX();
int modZ = portalLocation.getModZ();
double yaw = portalLocation.getYaw();
Gate gate = null;
for (Gate possibleGate : possibleGates) {
@ -403,9 +399,8 @@ public class PortalHandler {
portalLocation.setButtonVector(null);
for (RelativeBlockVector controlVector : vectors) {
//Assuming the top-left location is pointing to the gate's top-left location, check if it's a match
BlockLocation possibleTopLocation = parent.modRelative(-controlVector.getRight(),
-controlVector.getDepth(), -controlVector.getDistance(), modX, 1, modZ);
if (possibleGate.matches(possibleTopLocation, modX, modZ, true)) {
BlockLocation possibleTopLocation = parent.getRelativeLocation(controlVector.invert(), yaw);
if (possibleGate.matches(possibleTopLocation, portalLocation.getYaw(), true)) {
gate = possibleGate;
portalLocation.setTopLeft(possibleTopLocation);
} else {
@ -422,19 +417,16 @@ public class PortalHandler {
*
* @param gate <p>The gate type of the new portal</p>
* @param topLeft <p>The top-left block of the new portal</p>
* @param modX <p>The x-modifier for the new portal</p>
* @param modZ <p>The new z-modifier for the new portal</p>
* @param yaw <p>The yaw when looking directly outwards from the portal</p>
* @param player <p>The player creating the new portal</p>
* @return <p>True if a conflict was found. False otherwise</p>
*/
private static boolean conflictsWithExistingPortal(Gate gate, BlockLocation topLeft, int modX, int modZ,
Player player) {
private static boolean conflictsWithExistingPortal(Gate gate, BlockLocation topLeft, double yaw, Player player) {
//TODO: Make a quicker check. Could just check for control block conflicts if all code is changed to account for
// getting several hits at a single location when checking for the existence of a portal. May make
// everything slower overall? Would make for cooler gates though.
for (RelativeBlockVector borderVector : gate.getLayout().getBorder()) {
BlockLocation borderBlockLocation = topLeft.modRelative(borderVector.getRight(), borderVector.getDepth(),
borderVector.getDistance(), modX, 1, modZ);
BlockLocation borderBlockLocation = topLeft.getRelativeLocation(borderVector, yaw);
if (getByBlock(borderBlockLocation.getBlock()) != null) {
Stargate.debug("createPortal", "Gate conflicts with existing gate");
Stargate.sendErrorMessage(player, Stargate.getString("createConflict"));
@ -463,7 +455,7 @@ public class PortalHandler {
Map<PortalOption, Boolean> portalOptions, String denyMessage,
String[] lines, boolean deny) {
Portal portal = new Portal(portalLocation, null, destinationName, portalName,
false, network, gate, player.getUniqueId(), player.getName(), portalOptions);
network, gate, player.getUniqueId(), player.getName(), portalOptions);
int createCost = EconomyHandler.getCreateCost(player, gate);
@ -569,8 +561,10 @@ public class PortalHandler {
*/
private static void generatePortalButton(Portal portal, BlockLocation topLeft, RelativeBlockVector buttonVector,
BlockFace buttonFacing) {
BlockLocation button = topLeft.modRelative(buttonVector.getRight(), buttonVector.getDepth(),
buttonVector.getDistance() + 1, portal.getModX(), 1, portal.getModZ());
//Go one block outwards to find the button's location rather than the control block's location
BlockLocation button = topLeft.getRelativeLocation(buttonVector.addToVector(
RelativeBlockVector.Property.DISTANCE, 1), portal.getYaw());
Directional buttonData = (Directional) Bukkit.createBlockData(portal.getGate().getPortalButton());
buttonData.setFacing(buttonFacing);
button.getBlock().setBlockData(buttonData);
@ -724,15 +718,15 @@ public class PortalHandler {
adjacentPositions.add(centerLocation);
for (int index = 1; index <= range; index++) {
adjacentPositions.add(centerLocation.makeRelative(index, 0, 0));
adjacentPositions.add(centerLocation.makeRelative(-index, 0, 0));
adjacentPositions.add(centerLocation.makeRelative(0, 0, index));
adjacentPositions.add(centerLocation.makeRelative(0, 0, -index));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(index, 0, 0));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(-index, 0, 0));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(0, 0, index));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(0, 0, -index));
if (index < range) {
adjacentPositions.add(centerLocation.makeRelative(index, 0, index));
adjacentPositions.add(centerLocation.makeRelative(-index, 0, -index));
adjacentPositions.add(centerLocation.makeRelative(index, 0, -index));
adjacentPositions.add(centerLocation.makeRelative(-index, 0, index));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(index, 0, index));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(-index, 0, -index));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(index, 0, -index));
adjacentPositions.add(centerLocation.makeRelativeBlockLocation(-index, 0, index));
}
}
@ -796,8 +790,8 @@ public class PortalHandler {
builder.append(portal.getName()).append(':');
builder.append(portal.getSignLocation().toString()).append(':');
builder.append((button != null) ? button.toString() : "").append(':');
builder.append(portal.getModX()).append(':');
builder.append(portal.getModZ()).append(':');
builder.append(0).append(':');
builder.append(0).append(':');
builder.append(portal.getYaw()).append(':');
builder.append(portal.getTopLeft().toString()).append(':');
builder.append(portal.getGate().getFilename()).append(':');
@ -958,8 +952,6 @@ public class PortalHandler {
PortalLocation portalLocation = new PortalLocation();
portalLocation.setSignLocation(new BlockLocation(world, portalData[1]));
BlockLocation button = (portalData[2].length() > 0) ? new BlockLocation(world, portalData[2]) : null;
portalLocation.setModX(Integer.parseInt(portalData[3]));
portalLocation.setModZ(Integer.parseInt(portalData[4]));
portalLocation.setYaw(Float.parseFloat(portalData[5]));
portalLocation.setTopLeft(new BlockLocation(world, portalData[6]));
Gate gate = GateHandler.getGateByName(portalData[7]);
@ -995,7 +987,7 @@ public class PortalHandler {
}
//Creates the new portal
Portal portal = new Portal(portalLocation, button, destination, name, false,
Portal portal = new Portal(portalLocation, button, destination, name,
network, gate, ownerUUID, ownerName, getPortalOptions(portalData));
registerPortal(portal);

View File

@ -9,11 +9,10 @@ import org.bukkit.block.BlockFace;
/**
* Keeps track of location related data for a portal
*/
@SuppressWarnings("UnusedReturnValue")
public class PortalLocation {
private BlockLocation topLeft;
private int modX;
private int modZ;
private float yaw;
private BlockLocation signLocation;
private RelativeBlockVector buttonVector;
@ -28,24 +27,6 @@ public class PortalLocation {
return topLeft;
}
/**
* Gets the x-modifier for the portal
*
* @return <p>The x-modifier for the portal</p>
*/
public int getModX() {
return modX;
}
/**
* Gets the z-modifier for the portal
*
* @return <p>The z-modifier for the portal</p>
*/
public int getModZ() {
return modZ;
}
/**
* Gets the yaw for looking outwards from the portal
*
@ -115,28 +96,6 @@ public class PortalLocation {
return this;
}
/**
* Sets the portal's x-modifier
*
* @param modX <p>The portal's new x-modifier</p>
* @return <p>The portal location Object</p>
*/
public PortalLocation setModX(int modX) {
this.modX = modX;
return this;
}
/**
* Sets the portal's z-modifier
*
* @param modZ <p>The portal's new z-modifier</p>
* @return <p>The portal location Object</p>
*/
public PortalLocation setModZ(int modZ) {
this.modZ = modZ;
return this;
}
/**
* Sets the portal's yaw
*

View File

@ -125,7 +125,7 @@ public final class BungeeHelper {
Stargate.bungeeQueue.put(playerName.toLowerCase(), destination);
} else {
Portal destinationPortal = PortalHandler.getBungeePortal(destination);
// Specified an invalid gate. For now we'll just let them connect at their current location
// Specified an invalid gate. For now, we'll just let them connect at their current location
if (destinationPortal == null) {
Stargate.logger.info(Stargate.getString("prefix") + "Bungee gate " + destination + " does not exist");
return;

View File

@ -7,7 +7,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.util.Vector;
/**
* This class helps with direction-dependent (modX, modZ) calculations
* This class helps with direction-dependent calculations
*/
public final class DirectionHelper {
@ -81,7 +81,7 @@ public final class DirectionHelper {
} else if (yaw == 270) {
return new Vector(1, 0, 0);
} else {
throw new IllegalArgumentException("Invalid yaw given");
throw new IllegalArgumentException(String.format("Invalid yaw %f given", yaw));
}
}
@ -97,16 +97,6 @@ public final class DirectionHelper {
return topLeft.getRelativeLocation(vector, yaw);
}
/**
* Gets the block at a relative block vector location
*
* @param vector <p>The relative block vector</p>
* @return <p>The block at the given relative position</p>
*/
public static BlockLocation getBlockAt(BlockLocation topLeft, RelativeBlockVector vector, int modX, int modZ) {
return topLeft.modRelative(vector.getRight(), vector.getDepth(), vector.getDistance(), modX, 1, modZ);
}
/**
* Moves a location relatively
*

View File

@ -39,7 +39,7 @@ public final class EconomyHelper {
return false;
}
//Send the deduct message to the player
//Send the deduct-message to the player
sendDeductMessage(entrancePortal.getName(), player, cost);
if (entrancePortal.getGate().getToOwner()) {

View File

@ -62,7 +62,7 @@ public class BlockLocationTest {
@Test
public void makeRelativeTest() {
BlockLocation location = new BlockLocation(mockWorld, 3, 7, 19);
BlockLocation newLocation = location.makeRelative(34, 65, 75);
BlockLocation newLocation = location.makeRelativeBlockLocation(34, 65, 75);
assertEquals(37, newLocation.getBlockX());
assertEquals(72, newLocation.getBlockY());
assertEquals(94, newLocation.getBlockZ());
@ -82,13 +82,4 @@ public class BlockLocationTest {
assertEquals("56,87,34", location.toString());
}
@Test
public void modRelativeTest() {
BlockLocation location = new BlockLocation(mockWorld, 5, 5, 5);
BlockLocation relativeLocation = location.modRelative(4, 2, 1, -1, 1, 0);
assertEquals(9, relativeLocation.getBlockX());
assertEquals(3, relativeLocation.getBlockY());
assertEquals(6, relativeLocation.getBlockZ());
}
}