Makes the SignHelper helper class into the proper PortalSignDrawer which each Portal now has one instance of
This commit is contained in:
parent
1d4b988ca4
commit
635d08b1b3
@ -8,7 +8,6 @@ import net.knarcraft.stargate.utility.EconomyHandler;
|
|||||||
import net.knarcraft.stargate.utility.EconomyHelper;
|
import net.knarcraft.stargate.utility.EconomyHelper;
|
||||||
import net.knarcraft.stargate.utility.MaterialHelper;
|
import net.knarcraft.stargate.utility.MaterialHelper;
|
||||||
import net.knarcraft.stargate.utility.PermissionHelper;
|
import net.knarcraft.stargate.utility.PermissionHelper;
|
||||||
import net.knarcraft.stargate.utility.SignHelper;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.data.type.WallSign;
|
import org.bukkit.block.data.type.WallSign;
|
||||||
@ -82,7 +81,7 @@ public class BlockEventListener implements Listener {
|
|||||||
|
|
||||||
Stargate.sendSuccessMessage(player, Stargate.getString("createMsg"));
|
Stargate.sendSuccessMessage(player, Stargate.getString("createMsg"));
|
||||||
Stargate.debug("onSignChange", "Initialized stargate: " + portal.getName());
|
Stargate.debug("onSignChange", "Initialized stargate: " + portal.getName());
|
||||||
Stargate.server.getScheduler().scheduleSyncDelayedTask(Stargate.stargate, () -> SignHelper.drawSign(portal), 1);
|
Stargate.server.getScheduler().scheduleSyncDelayedTask(Stargate.stargate, portal::drawSign, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,8 +21,6 @@ import java.util.Map;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static net.knarcraft.stargate.utility.SignHelper.drawSign;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class represents a portal in space which points to one or several portals
|
* This class represents a portal in space which points to one or several portals
|
||||||
*/
|
*/
|
||||||
@ -30,6 +28,7 @@ public class Portal {
|
|||||||
|
|
||||||
// Gate location block info
|
// Gate location block info
|
||||||
private final PortalLocation location;
|
private final PortalLocation location;
|
||||||
|
private final PortalSignDrawer signDrawer;
|
||||||
|
|
||||||
// Block references
|
// Block references
|
||||||
private final Gate gate;
|
private final Gate gate;
|
||||||
@ -79,6 +78,14 @@ public class Portal {
|
|||||||
this.ownerUUID = ownerUUID;
|
this.ownerUUID = ownerUUID;
|
||||||
this.ownerName = ownerName;
|
this.ownerName = ownerName;
|
||||||
this.options = new PortalOptions(options, destination.length() > 0);
|
this.options = new PortalOptions(options, destination.length() > 0);
|
||||||
|
this.signDrawer = new PortalSignDrawer(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-draws the sign on this portal
|
||||||
|
*/
|
||||||
|
public void drawSign() {
|
||||||
|
this.signDrawer.drawSign();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -153,7 +160,7 @@ public class Portal {
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public void setName(String name) {
|
public void setName(String name) {
|
||||||
this.name = filterName(name);
|
this.name = filterName(name);
|
||||||
drawSign(this);
|
this.drawSign();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -379,7 +386,7 @@ public class Portal {
|
|||||||
destination.open(openFor, false);
|
destination.open(openFor, false);
|
||||||
destination.setDestination(this);
|
destination.setDestination(this);
|
||||||
if (destination.isVerified()) {
|
if (destination.isVerified()) {
|
||||||
drawSign(destination);
|
destination.drawSign();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -550,7 +557,7 @@ public class Portal {
|
|||||||
}
|
}
|
||||||
destination = event.getDestination();
|
destination = event.getDestination();
|
||||||
destinations = event.getDestinations();
|
destinations = event.getDestinations();
|
||||||
drawSign(this);
|
this.drawSign();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,7 +578,7 @@ public class Portal {
|
|||||||
destinations.clear();
|
destinations.clear();
|
||||||
destination = "";
|
destination = "";
|
||||||
activePlayer = null;
|
activePlayer = null;
|
||||||
drawSign(this);
|
this.drawSign();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -623,7 +630,7 @@ public class Portal {
|
|||||||
cycleDestination(direction);
|
cycleDestination(direction);
|
||||||
}
|
}
|
||||||
openTime = System.currentTimeMillis() / 1000;
|
openTime = System.currentTimeMillis() / 1000;
|
||||||
drawSign(this);
|
this.drawSign();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,7 +9,6 @@ import net.knarcraft.stargate.utility.DirectionHelper;
|
|||||||
import net.knarcraft.stargate.utility.EconomyHandler;
|
import net.knarcraft.stargate.utility.EconomyHandler;
|
||||||
import net.knarcraft.stargate.utility.EconomyHelper;
|
import net.knarcraft.stargate.utility.EconomyHelper;
|
||||||
import net.knarcraft.stargate.utility.PermissionHelper;
|
import net.knarcraft.stargate.utility.PermissionHelper;
|
||||||
import net.knarcraft.stargate.utility.SignHelper;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
@ -164,7 +163,7 @@ public class PortalHandler {
|
|||||||
}
|
}
|
||||||
//Update the portal's sign
|
//Update the portal's sign
|
||||||
if (origin.getOptions().isFixed()) {
|
if (origin.getOptions().isFixed()) {
|
||||||
SignHelper.drawSign(origin);
|
origin.drawSign();
|
||||||
}
|
}
|
||||||
//Close portal without destination
|
//Close portal without destination
|
||||||
if (origin.getOptions().isAlwaysOn()) {
|
if (origin.getOptions().isAlwaysOn()) {
|
||||||
@ -585,7 +584,7 @@ public class PortalHandler {
|
|||||||
* @param destinationName <p>The name of the destination portal</p>
|
* @param destinationName <p>The name of the destination portal</p>
|
||||||
*/
|
*/
|
||||||
private static void updateNewPortal(Portal portal, String destinationName) {
|
private static void updateNewPortal(Portal portal, String destinationName) {
|
||||||
SignHelper.drawSign(portal);
|
portal.drawSign();
|
||||||
//Open an always on portal
|
//Open an always on portal
|
||||||
if (portal.getOptions().isRandom() || portal.getOptions().isBungee()) {
|
if (portal.getOptions().isRandom() || portal.getOptions().isBungee()) {
|
||||||
portal.open(true);
|
portal.open(true);
|
||||||
@ -593,7 +592,7 @@ public class PortalHandler {
|
|||||||
Portal destinationPortal = getByName(destinationName, portal.getNetwork());
|
Portal destinationPortal = getByName(destinationName, portal.getNetwork());
|
||||||
if (destinationPortal != null) {
|
if (destinationPortal != null) {
|
||||||
portal.open(true);
|
portal.open(true);
|
||||||
SignHelper.drawSign(destinationPortal);
|
destinationPortal.drawSign();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//Update the block type for the portal's opening to the closed block
|
//Update the block type for the portal's opening to the closed block
|
||||||
@ -618,7 +617,7 @@ public class PortalHandler {
|
|||||||
}
|
}
|
||||||
//Update sign of fixed gates pointing at this gate
|
//Update sign of fixed gates pointing at this gate
|
||||||
if (origin.getOptions().isFixed()) {
|
if (origin.getOptions().isFixed()) {
|
||||||
SignHelper.drawSign(origin);
|
origin.drawSign();
|
||||||
}
|
}
|
||||||
//Open any always on portal pointing at this portal
|
//Open any always on portal pointing at this portal
|
||||||
if (origin.getOptions().isAlwaysOn()) {
|
if (origin.getOptions().isAlwaysOn()) {
|
||||||
@ -941,7 +940,7 @@ public class PortalHandler {
|
|||||||
|
|
||||||
//Re-draw the signs in case a bug in the config prevented the portal from loading and has been fixed since
|
//Re-draw the signs in case a bug in the config prevented the portal from loading and has been fixed since
|
||||||
for (Portal portal : allPortals) {
|
for (Portal portal : allPortals) {
|
||||||
SignHelper.drawSign(portal);
|
portal.drawSign();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -1,22 +1,33 @@
|
|||||||
package net.knarcraft.stargate.utility;
|
package net.knarcraft.stargate.portal;
|
||||||
|
|
||||||
import net.knarcraft.stargate.Stargate;
|
import net.knarcraft.stargate.Stargate;
|
||||||
import net.knarcraft.stargate.portal.Portal;
|
import net.knarcraft.stargate.utility.EconomyHandler;
|
||||||
import net.knarcraft.stargate.portal.PortalHandler;
|
import net.knarcraft.stargate.utility.PermissionHelper;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class helps to draw the sign on a portal as it's a bit too complicated to be contained within the portal class
|
* The portal sign drawer draws the sing of a given portal
|
||||||
*/
|
*/
|
||||||
public final class SignHelper {
|
public class PortalSignDrawer {
|
||||||
|
|
||||||
|
private final Portal portal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws this portal's sign
|
* Instantiates a new portal sign drawer
|
||||||
|
*
|
||||||
|
* @param portal <p>The portal whose sign this portal sign drawer is responsible for drawing</p>
|
||||||
*/
|
*/
|
||||||
public static void drawSign(Portal portal) {
|
public PortalSignDrawer(Portal portal) {
|
||||||
|
this.portal = portal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Draws the sign of the portal this sign drawer is responsible for
|
||||||
|
*/
|
||||||
|
public void drawSign() {
|
||||||
Block signBlock = portal.getSignLocation().getBlock();
|
Block signBlock = portal.getSignLocation().getBlock();
|
||||||
BlockState state = signBlock.getState();
|
BlockState state = signBlock.getState();
|
||||||
if (!(state instanceof Sign sign)) {
|
if (!(state instanceof Sign sign)) {
|
||||||
@ -26,33 +37,35 @@ public final class SignHelper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SignHelper.drawSign(sign, portal);
|
drawSign(sign);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws the sign on this portal
|
* Draws the sign of the portal this sign drawer is responsible for
|
||||||
|
*
|
||||||
|
* @param sign <p>The sign re-draw</p>
|
||||||
*/
|
*/
|
||||||
public static void drawSign(Sign sign, Portal portal) {
|
public void drawSign(Sign sign) {
|
||||||
//Clear sign
|
//Clear sign
|
||||||
for (int index = 0; index <= 3; index++) {
|
for (int index = 0; index <= 3; index++) {
|
||||||
sign.setLine(index, "");
|
sign.setLine(index, "");
|
||||||
}
|
}
|
||||||
Stargate.setLine(sign, 0, ChatColor.WHITE + "-" + ChatColor.BLACK + portal.getName() +
|
Stargate.setLine(sign, 0, ChatColor.WHITE + "-" + Stargate.signColor + portal.getName() +
|
||||||
ChatColor.WHITE + "-");
|
ChatColor.WHITE + "-");
|
||||||
|
|
||||||
if (!portal.isActive()) {
|
if (!portal.isActive()) {
|
||||||
//Default sign text
|
//Default sign text
|
||||||
drawInactiveSign(sign, portal);
|
drawInactiveSign(sign);
|
||||||
} else {
|
} else {
|
||||||
if (portal.getOptions().isBungee()) {
|
if (portal.getOptions().isBungee()) {
|
||||||
//Bungee sign
|
//Bungee sign
|
||||||
drawBungeeSign(sign, portal);
|
drawBungeeSign(sign);
|
||||||
} else if (portal.getOptions().isFixed()) {
|
} else if (portal.getOptions().isFixed()) {
|
||||||
//Sign pointing at one other portal
|
//Sign pointing at one other portal
|
||||||
drawFixedSign(sign, portal);
|
drawFixedSign(sign);
|
||||||
} else {
|
} else {
|
||||||
//Networking stuff
|
//Networking stuff
|
||||||
drawNetworkSign(sign, portal);
|
drawNetworkSign(sign);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,9 +75,9 @@ public final class SignHelper {
|
|||||||
/**
|
/**
|
||||||
* Draws a sign with choose-able network locations
|
* Draws a sign with choose-able network locations
|
||||||
*
|
*
|
||||||
* @param sign <p>The sign to draw on</p>
|
* @param sign <p>The sign to re-draw</p>
|
||||||
*/
|
*/
|
||||||
private static void drawNetworkSign(Sign sign, Portal portal) {
|
private void drawNetworkSign(Sign sign) {
|
||||||
int maxIndex = portal.getDestinations().size() - 1;
|
int maxIndex = portal.getDestinations().size() - 1;
|
||||||
int signLineIndex = 0;
|
int signLineIndex = 0;
|
||||||
int destinationIndex = portal.getDestinations().indexOf(portal.getDestinationName());
|
int destinationIndex = portal.getDestinations().indexOf(portal.getDestinationName());
|
||||||
@ -72,21 +85,21 @@ public final class SignHelper {
|
|||||||
|
|
||||||
//Last, and not only entry. Draw the entry two back
|
//Last, and not only entry. Draw the entry two back
|
||||||
if ((destinationIndex == maxIndex) && (maxIndex > 1)) {
|
if ((destinationIndex == maxIndex) && (maxIndex > 1)) {
|
||||||
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 2, portal);
|
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 2);
|
||||||
}
|
}
|
||||||
//Not first entry. Draw the previous entry
|
//Not first entry. Draw the previous entry
|
||||||
if (destinationIndex > 0) {
|
if (destinationIndex > 0) {
|
||||||
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 1, portal);
|
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 1);
|
||||||
}
|
}
|
||||||
//Draw the chosen entry (line 2 or 3)
|
//Draw the chosen entry (line 2 or 3)
|
||||||
drawNetworkSignChosenLine(freeGatesGreen, sign, ++signLineIndex, portal);
|
drawNetworkSignChosenLine(freeGatesGreen, sign, ++signLineIndex);
|
||||||
//Has another entry and space on the sign
|
//Has another entry and space on the sign
|
||||||
if ((maxIndex >= destinationIndex + 1)) {
|
if ((maxIndex >= destinationIndex + 1)) {
|
||||||
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex + 1, portal);
|
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex + 1);
|
||||||
}
|
}
|
||||||
//Has another entry and space on the sign
|
//Has another entry and space on the sign
|
||||||
if ((maxIndex >= destinationIndex + 2) && (++signLineIndex <= 3)) {
|
if ((maxIndex >= destinationIndex + 2) && (++signLineIndex <= 3)) {
|
||||||
drawNetworkSignLine(freeGatesGreen, sign, signLineIndex, destinationIndex + 2, portal);
|
drawNetworkSignLine(freeGatesGreen, sign, signLineIndex, destinationIndex + 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,15 +110,15 @@ public final class SignHelper {
|
|||||||
* @param sign <p>The sign to draw on</p>
|
* @param sign <p>The sign to draw on</p>
|
||||||
* @param signLineIndex <p>The line to draw on</p>
|
* @param signLineIndex <p>The line to draw on</p>
|
||||||
*/
|
*/
|
||||||
private static void drawNetworkSignChosenLine(boolean freeGatesGreen, Sign sign, int signLineIndex, Portal portal) {
|
private void drawNetworkSignChosenLine(boolean freeGatesGreen, Sign sign, int signLineIndex) {
|
||||||
if (freeGatesGreen) {
|
if (freeGatesGreen) {
|
||||||
Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork());
|
Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork());
|
||||||
boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
|
boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
|
||||||
Stargate.setLine(sign, signLineIndex, (green ? ChatColor.DARK_GREEN : "") + ">" +
|
Stargate.setLine(sign, signLineIndex, (green ? ChatColor.DARK_GREEN : "") + ">" +
|
||||||
portal.getDestinationName() + (green ? ChatColor.DARK_GREEN : "") + "<");
|
portal.getDestinationName() + (green ? ChatColor.DARK_GREEN : "") + "<");
|
||||||
} else {
|
} else {
|
||||||
Stargate.setLine(sign, signLineIndex, ChatColor.BLACK + " >" + portal.getDestinationName() +
|
Stargate.setLine(sign, signLineIndex, Stargate.signColor + " >" + portal.getDestinationName() +
|
||||||
ChatColor.BLACK + "< ");
|
Stargate.signColor + "< ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,8 +130,7 @@ public final class SignHelper {
|
|||||||
* @param signLineIndex <p>The line to draw on</p>
|
* @param signLineIndex <p>The line to draw on</p>
|
||||||
* @param destinationIndex <p>The index of the destination to draw</p>
|
* @param destinationIndex <p>The index of the destination to draw</p>
|
||||||
*/
|
*/
|
||||||
private static void drawNetworkSignLine(boolean freeGatesGreen, Sign sign, int signLineIndex, int destinationIndex,
|
private void drawNetworkSignLine(boolean freeGatesGreen, Sign sign, int signLineIndex, int destinationIndex) {
|
||||||
Portal portal) {
|
|
||||||
if (freeGatesGreen) {
|
if (freeGatesGreen) {
|
||||||
Portal destination = PortalHandler.getByName(portal.getDestinations().get(destinationIndex), portal.getNetwork());
|
Portal destination = PortalHandler.getByName(portal.getDestinations().get(destinationIndex), portal.getNetwork());
|
||||||
boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
|
boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
|
||||||
@ -131,9 +143,9 @@ public final class SignHelper {
|
|||||||
/**
|
/**
|
||||||
* Draws a bungee sign
|
* Draws a bungee sign
|
||||||
*
|
*
|
||||||
* @param sign <p>The sign to draw on</p>
|
* @param sign <p>The sign to re-draw</p>
|
||||||
*/
|
*/
|
||||||
private static void drawBungeeSign(Sign sign, Portal portal) {
|
private void drawBungeeSign(Sign sign) {
|
||||||
Stargate.setLine(sign, 1, Stargate.getString("bungeeSign"));
|
Stargate.setLine(sign, 1, Stargate.getString("bungeeSign"));
|
||||||
Stargate.setLine(sign, 2, ">" + portal.getDestinationName() + "<");
|
Stargate.setLine(sign, 2, ">" + portal.getDestinationName() + "<");
|
||||||
Stargate.setLine(sign, 3, "[" + portal.getNetwork() + "]");
|
Stargate.setLine(sign, 3, "[" + portal.getNetwork() + "]");
|
||||||
@ -142,9 +154,9 @@ public final class SignHelper {
|
|||||||
/**
|
/**
|
||||||
* Draws an inactive sign
|
* Draws an inactive sign
|
||||||
*
|
*
|
||||||
* @param sign <p>The sign to draw on</p>
|
* @param sign <p>The sign to re-draw</p>
|
||||||
*/
|
*/
|
||||||
private static void drawInactiveSign(Sign sign, Portal portal) {
|
private void drawInactiveSign(Sign sign) {
|
||||||
Stargate.setLine(sign, 1, Stargate.getString("signRightClick"));
|
Stargate.setLine(sign, 1, Stargate.getString("signRightClick"));
|
||||||
Stargate.setLine(sign, 2, Stargate.getString("signToUse"));
|
Stargate.setLine(sign, 2, Stargate.getString("signToUse"));
|
||||||
if (!portal.getOptions().isNoNetwork()) {
|
if (!portal.getOptions().isNoNetwork()) {
|
||||||
@ -157,9 +169,9 @@ public final class SignHelper {
|
|||||||
/**
|
/**
|
||||||
* Draws a sign pointing to a fixed location
|
* Draws a sign pointing to a fixed location
|
||||||
*
|
*
|
||||||
* @param sign <p>The sign to draw on</p>
|
* @param sign <p>The sign to re-draw</p>
|
||||||
*/
|
*/
|
||||||
private static void drawFixedSign(Sign sign, Portal portal) {
|
private void drawFixedSign(Sign sign) {
|
||||||
if (portal.getOptions().isRandom()) {
|
if (portal.getOptions().isRandom()) {
|
||||||
Stargate.setLine(sign, 1, "> " + Stargate.getString("signRandom") + " <");
|
Stargate.setLine(sign, 1, "> " + Stargate.getString("signRandom") + " <");
|
||||||
} else {
|
} else {
|
Loading…
x
Reference in New Issue
Block a user