diff --git a/src/main/java/org/sgrewritten/stargate/Stargate.java b/src/main/java/org/sgrewritten/stargate/Stargate.java
index d962f107..7882175c 100644
--- a/src/main/java/org/sgrewritten/stargate/Stargate.java
+++ b/src/main/java/org/sgrewritten/stargate/Stargate.java
@@ -163,10 +163,10 @@ public void onEnable() {
storageAPI = new SQLDatabase(database);
blockHandlerResolver = new BlockHandlerResolver(storageAPI);
registry = new StargateRegistry(storageAPI, blockHandlerResolver);
+ networkManager = new StargateNetworkManager(registry, storageAPI);
bungeeManager = new StargateBungeeManager(this.getRegistry(), this.getLanguageManager(), this.getNetworkManager());
blockLogger = new CoreProtectManager();
storedProperties = new PropertiesDatabase(FileHelper.createHiddenFileIfNotExists(DATA_FOLDER, INTERNAL_FOLDER, INTERNAL_PROPERTIES_FILE));
- networkManager = new StargateNetworkManager(registry, storageAPI);
try {
this.migrateConfigurationAndData();
} catch (IOException | InvalidConfigurationException | SQLException e) {
diff --git a/src/main/java/org/sgrewritten/stargate/api/network/NetworkManager.java b/src/main/java/org/sgrewritten/stargate/api/network/NetworkManager.java
index 2c1f1108..38dcbef0 100644
--- a/src/main/java/org/sgrewritten/stargate/api/network/NetworkManager.java
+++ b/src/main/java/org/sgrewritten/stargate/api/network/NetworkManager.java
@@ -5,6 +5,7 @@
import org.sgrewritten.stargate.api.StargateAPI;
import org.sgrewritten.stargate.api.network.portal.Portal;
import org.sgrewritten.stargate.api.network.portal.PortalFlag;
+import org.sgrewritten.stargate.api.network.portal.RealPortal;
import org.sgrewritten.stargate.api.permission.PermissionManager;
import org.sgrewritten.stargate.exception.TranslatableException;
import org.sgrewritten.stargate.exception.UnimplementedFlagException;
@@ -92,4 +93,13 @@ public interface NetworkManager {
* @param newName
The new name of the portal
*/
void rename(Portal portal, String newName) throws NameConflictException;
+
+ /**
+ * Add portal to network and save to storage
+ * @param portal
+ * @param network
+ */
+ void savePortal(RealPortal portal, Network network) throws NameConflictException;
+
+ void destroyPortal(RealPortal portal);
}
diff --git a/src/main/java/org/sgrewritten/stargate/listener/BlockEventListener.java b/src/main/java/org/sgrewritten/stargate/listener/BlockEventListener.java
index 1aab05ee..b0e5a361 100644
--- a/src/main/java/org/sgrewritten/stargate/listener/BlockEventListener.java
+++ b/src/main/java/org/sgrewritten/stargate/listener/BlockEventListener.java
@@ -99,7 +99,7 @@ public void onBlockBreak(BlockBreakEvent event) {
String msg = languageManager.getErrorMessage(TranslatableMessage.DESTROY);
MessageUtils.sendMessageFromPortal(portal,event.getPlayer(),msg,StargateSendMessagePortalEvent.MessageType.DESTROY);
- portal.destroy();
+ stargateAPI.getNetworkManager().destroyPortal(portal);
try {
stargateAPI.getStorageAPI().removePortalFromStorage(portal);
} catch (StorageWriteException e) {
diff --git a/src/main/java/org/sgrewritten/stargate/network/StargateNetwork.java b/src/main/java/org/sgrewritten/stargate/network/StargateNetwork.java
index 3e1be4f5..40eb9c07 100644
--- a/src/main/java/org/sgrewritten/stargate/network/StargateNetwork.java
+++ b/src/main/java/org/sgrewritten/stargate/network/StargateNetwork.java
@@ -225,7 +225,7 @@ public NetworkType getType() {
@Override
public StorageType getStorageType() {
- return StorageType.LOCAL;
+ return this.storageType;
}
@Override
diff --git a/src/main/java/org/sgrewritten/stargate/network/StargateNetworkManager.java b/src/main/java/org/sgrewritten/stargate/network/StargateNetworkManager.java
index aa38062d..2f7f0b7c 100644
--- a/src/main/java/org/sgrewritten/stargate/network/StargateNetworkManager.java
+++ b/src/main/java/org/sgrewritten/stargate/network/StargateNetworkManager.java
@@ -12,6 +12,7 @@
import org.sgrewritten.stargate.api.network.RegistryAPI;
import org.sgrewritten.stargate.api.network.portal.Portal;
import org.sgrewritten.stargate.api.network.portal.PortalFlag;
+import org.sgrewritten.stargate.api.network.portal.RealPortal;
import org.sgrewritten.stargate.api.permission.PermissionManager;
import org.sgrewritten.stargate.config.ConfigurationHelper;
import org.sgrewritten.stargate.container.TwoTuple;
@@ -153,7 +154,7 @@ public Network createNetwork(String name, NetworkType type, boolean isInterServe
Network network = storageAPI.createNetwork(name, type, isInterServer);
registry.registerNetwork(network);
Stargate.log(
- Level.FINEST, String.format("Adding networkid %s to interServer = %b", network.getId(), isInterServer));
+ Level.FINEST, String.format("Adding network id %s to interServer = %b", network.getId(), isInterServer));
return network;
}
@@ -209,4 +210,26 @@ public void rename(Portal portal, String newName) throws NameConflictException {
portal.getNetwork().updatePortals();
}
+ @Override
+ public void savePortal(RealPortal portal, Network network) throws NameConflictException {
+ network.addPortal(portal);
+ try {
+ storageAPI.savePortalToStorage(portal);
+ } catch (StorageWriteException e) {
+ Stargate.log(e);
+ }
+ }
+
+ @Override
+ public void destroyPortal(RealPortal portal) {
+ portal.getNetwork().removePortal(portal);
+ registry.unregisterPortal(portal);
+ portal.destroy();
+ try {
+ storageAPI.removePortalFromStorage(portal);
+ } catch (StorageWriteException e) {
+ Stargate.log(e);
+ }
+ }
+
}
diff --git a/src/main/java/org/sgrewritten/stargate/util/LegacyPortalStorageLoader.java b/src/main/java/org/sgrewritten/stargate/util/LegacyPortalStorageLoader.java
index f7045f78..d6fb748a 100644
--- a/src/main/java/org/sgrewritten/stargate/util/LegacyPortalStorageLoader.java
+++ b/src/main/java/org/sgrewritten/stargate/util/LegacyPortalStorageLoader.java
@@ -5,8 +5,10 @@
import org.bukkit.World;
import org.sgrewritten.stargate.Stargate;
import org.sgrewritten.stargate.api.StargateAPI;
+import org.sgrewritten.stargate.api.network.portal.RealPortal;
import org.sgrewritten.stargate.exception.InvalidStructureException;
import org.sgrewritten.stargate.exception.TranslatableException;
+import org.sgrewritten.stargate.exception.database.StorageWriteException;
import org.sgrewritten.stargate.exception.name.InvalidNameException;
import org.sgrewritten.stargate.exception.name.NameConflictException;
import org.sgrewritten.stargate.exception.name.NameLengthException;
@@ -62,9 +64,7 @@ public static List loadPortalsFromStorage(String portalSaveLocation, Ser
String worldName = file.getName().replaceAll("\\.db$", "");
BufferedReader reader = FileHelper.getBufferedReader(file);
- // Fix encoding issue / can't convert properly from ansi to utf8
String line = reader.readLine();
- // Convert to utf-8 if ansi is used
while (line != null) {
if (line.startsWith("#") || line.trim().isEmpty()) {
continue;
@@ -120,13 +120,11 @@ private static Portal readPortal(String line, World world, StargateAPI stargateA
gate.addPortalPosition(buttonLocation, PositionType.BUTTON, "Stargate");
}
- Portal portal = PortalCreationHelper.createPortal(network, portalData, gate, stargateAPI);
+ RealPortal portal = PortalCreationHelper.createPortal(network, portalData, gate, stargateAPI);
- // Add the portal to its network and store it to the database
Stargate.log(Level.FINE, String.format("Saving portal %s in network %s from old storage... ",
portalData.name(), portalData.networkName()));
- network.addPortal(portal);
-
+ stargateAPI.getNetworkManager().savePortal(portal, network);
return portal;
}
diff --git a/src/test/java/org/sgrewritten/stargate/StargateTest.java b/src/test/java/org/sgrewritten/stargate/StargateTest.java
index 4fb8841c..f155de57 100644
--- a/src/test/java/org/sgrewritten/stargate/StargateTest.java
+++ b/src/test/java/org/sgrewritten/stargate/StargateTest.java
@@ -176,6 +176,9 @@ public void restart() {
server.getPluginManager().enablePlugin(plugin);
Assertions.assertTrue(plugin.isEnabled());
Network network = plugin.getRegistry().getNetwork(BungeePortal.getLegacyNetworkName(), false);
+ for(String networkName : plugin.getRegistry().getNetworkMap().keySet()){
+ Stargate.log(Level.INFO,networkName);
+ }
assertNotNull(network);
assertNotNull(network.getPortal(PORTAL2));
}
diff --git a/src/test/java/org/sgrewritten/stargate/manager/StargateBungeeManagerTest.java b/src/test/java/org/sgrewritten/stargate/manager/StargateBungeeManagerTest.java
index 01b9954e..ca021552 100644
--- a/src/test/java/org/sgrewritten/stargate/manager/StargateBungeeManagerTest.java
+++ b/src/test/java/org/sgrewritten/stargate/manager/StargateBungeeManagerTest.java
@@ -95,7 +95,7 @@ void updateNetwork() throws TranslatableException, InvalidStructureException {
RealPortal portal2 = PortalFactory.generateFakePortal(world, network, PORTAL2, true);
bungeeManager.updateNetwork(BungeeHelper.generateJsonMessage(portal, StargateProtocolRequestType.PORTAL_ADD));
- bungeeManager.updateNetwork(BungeeHelper.generateJsonMessage(portal2, StargateProtocolRequestType.PORTAL_ADD));
+ bungeeManager.updateNetwork(BungeeHelper.generateJsonMessage(portal2,StargateProtocolRequestType.PORTAL_ADD));
Network network1 = registry.getNetwork(NETWORK, true);
Assertions.assertNotNull(network1);
Assertions.assertNotNull(network1.getPortal(PORTAL));
@@ -108,7 +108,7 @@ void playerConnectOnline() {
bungeeManager.playerConnect(BungeeHelper.generateTeleportJsonMessage(PLAYER, realPortal));
Component componentMessage = player.nextComponentMessage();
- Assertions.assertFalse(componentMessage != null && componentMessage.toString().contains("[ERROR]"), "A error message was sent to the player '" + componentMessage + "'");
+ Assertions.assertFalse(componentMessage != null && componentMessage.toString().contains("[ERROR]"), "An error message was sent to the player '" + componentMessage + "'");
}
@Test
@@ -125,7 +125,7 @@ void legacyPlayerConnectOnline() {
bungeeManager.legacyPlayerConnect(BungeeHelper.generateLegacyTeleportMessage(PLAYER, bungeePortal));
Component componentMessage = player.nextComponentMessage();
- Assertions.assertFalse(componentMessage != null && componentMessage.toString().contains("[ERROR]"), "A error message was sent to the player '" + componentMessage + "'");
+ Assertions.assertFalse(componentMessage != null && componentMessage.toString().contains("[ERROR]"), "An error message was sent to the player '" + componentMessage + "'");
}
@Test
diff --git a/src/test/java/org/sgrewritten/stargate/migration/DataMigratorTest.java b/src/test/java/org/sgrewritten/stargate/migration/DataMigratorTest.java
index a378431e..f263827e 100644
--- a/src/test/java/org/sgrewritten/stargate/migration/DataMigratorTest.java
+++ b/src/test/java/org/sgrewritten/stargate/migration/DataMigratorTest.java
@@ -23,6 +23,7 @@
import org.sgrewritten.stargate.api.BlockHandlerResolver;
import org.sgrewritten.stargate.api.config.ConfigurationOption;
import org.sgrewritten.stargate.api.gate.GateFormatRegistry;
+import org.sgrewritten.stargate.api.network.NetworkManager;
import org.sgrewritten.stargate.config.StargateYamlConfiguration;
import org.sgrewritten.stargate.container.TwoTuple;
import org.sgrewritten.stargate.database.SQLDatabase;
@@ -68,6 +69,7 @@ public class DataMigratorTest {
static private ServerMock server;
private static StargateRegistry registry;
private static StargateAPIMock stargateAPI;
+ private static NetworkManager networkManager;
@BeforeAll
public static void setUp() throws IOException, InvalidConfigurationException, SQLException {
@@ -87,6 +89,7 @@ public static void setUp() throws IOException, InvalidConfigurationException, SQ
StorageAPI storageAPI = new SQLDatabase(sqlDatabase, false, false);
registry = new StargateRegistry(storageAPI,new BlockHandlerResolver(storageAPI));
stargateAPI = new StargateAPIMock(storageAPI,registry);
+ networkManager = stargateAPI.getNetworkManager();
defaultConfigFile = new File("src/main/resources", "config.yml");
server = MockBukkit.mock();
diff --git a/src/test/java/org/sgrewritten/stargate/network/portal/PortalFactory.java b/src/test/java/org/sgrewritten/stargate/network/portal/PortalFactory.java
index e6bb34d4..423aced2 100644
--- a/src/test/java/org/sgrewritten/stargate/network/portal/PortalFactory.java
+++ b/src/test/java/org/sgrewritten/stargate/network/portal/PortalFactory.java
@@ -145,6 +145,8 @@ public static RealPortal generateFakePortal(Location topLeft, Network network, S
throws InvalidStructureException, NameLengthException {
if (createInterServerPortal) {
flags.add(PortalFlag.FANCY_INTER_SERVER);
+ } else {
+ flags.remove(PortalFlag.FANCY_INTER_SERVER);
}
BlockFace facing = BlockFace.EAST;
String gateFileName = "nether.gate";
@@ -165,7 +167,7 @@ public static RealPortal generateFakePortal(Block signBlock, Network network, Se
RealPortal portal = PortalCreationHelper.createPortal(network, name, "destination", "server", flags, new HashSet<>(), gate, UUID.randomUUID(), stargateAPI, null);
- network.addPortal(portal);
+ stargateAPI.getNetworkManager().savePortal(portal,network);
return portal;
}