Skip to content

Commit b28c1a8

Browse files
committed
Probably final touches
1 parent ce6d3b9 commit b28c1a8

File tree

5 files changed

+50
-36
lines changed

5 files changed

+50
-36
lines changed

API/src/main/java/me/ifydev/dimensify/api/DimensifyConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public class DimensifyConstants {
9090
public static final String DIMENSION_UNLOADED = DIMENSIFY_PREFIX + "&2&lDimension '<NAME>' unloaded!";
9191
public static final String CACHE_FORMAT = DIMENSIFY_PREFIX + "&2&lCache Status: &e&lDimensions: <DIMENSIONS> &8&l- &e&lPortals <PORTALS>";
9292
public static final String CACHE_PURGED = DIMENSIFY_PREFIX + "&2&lCache has been purged!";
93+
public static final String LOADING_WORLD = DIMENSIFY_PREFIX + "&2&lLoading world...";
9394

9495
// Permissions
9596
public static final String DIMENSIFY_ADMIN = "dimensify.admin";

API/src/main/java/me/ifydev/dimensify/api/backend/impl/SQLHandler.java

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ public class SQLHandler extends AbstractDataHandler {
4444
private boolean isUsingSQLite = false;
4545
private String baseConnectionUrl;
4646

47-
private String defaultWorld;
48-
4947
public SQLHandler(ConnectionInformation connectionInformation) {
5048
super(connectionInformation);
5149

@@ -113,10 +111,6 @@ public void initialize(String defaultWorld) {
113111
System.out.println("Encountered an error while trying to setup the database:");
114112
e.printStackTrace();
115113
}
116-
117-
this.defaultWorld = defaultWorld;
118-
String defaultDimension = this.getDefaultDimension(true);
119-
if (!defaultDimension.equals("")) this.defaultWorld = defaultDimension;
120114
}
121115

122116
@Override
@@ -224,6 +218,9 @@ public List<PortalMeta> getPortals(boolean skipCache) {
224218
results.getString("world"), Optional.ofNullable(results.getString("destination")),
225219
PortalType.findType(results.getString("type"))
226220
));
221+
results.close();
222+
statement.close();
223+
connection.get().close();
227224
} catch (SQLException e) {
228225
e.printStackTrace();
229226
}
@@ -273,6 +270,9 @@ public List<Dimension> getDimensions(boolean skipCache) {
273270
dimensions.add(new Dimension(
274271
results.getString("name"), results.getString("type"),
275272
Optional.ofNullable(results.getString("meta")), results.getBoolean("default")));
273+
results.close();
274+
statement.close();
275+
connection.get().close();
276276
} catch (SQLException e) {
277277
e.printStackTrace();
278278
return Collections.emptyList();
@@ -282,7 +282,8 @@ public List<Dimension> getDimensions(boolean skipCache) {
282282

283283
@Override
284284
public Optional<Dimension> getDimension(String name) {
285-
if (name.equalsIgnoreCase(defaultWorld)) return Optional.of(new Dimension(defaultWorld, "", Optional.empty(), false));
285+
String defaultDimension = getDefaultDimension(false);
286+
if (name.equalsIgnoreCase(defaultDimension)) return Optional.of(new Dimension(defaultDimension, "", Optional.empty(), false));
286287
return this.dimensions.stream().filter(d -> d.getName().equalsIgnoreCase(name)).findFirst();
287288
}
288289

@@ -299,7 +300,6 @@ public boolean setDefaultDimension(String name) {
299300
if (!dimension.isPresent()) return false;
300301

301302
dimension.get().setDefault(true);
302-
this.defaultWorld = dimension.get().getName();
303303

304304
Optional<Connection> connection = getConnection();
305305
if (!connection.isPresent()) {
@@ -324,9 +324,23 @@ public boolean setDefaultDimension(String name) {
324324

325325
@Override
326326
public String getDefaultDimension(boolean skipCache) {
327-
if (skipCache)
327+
if (!skipCache)
328328
for (Dimension dimension : this.getDimensions(false)) if (dimension.isDefault()) return dimension.getName();
329-
return defaultWorld;
329+
Optional<Connection> connection = getConnection();
330+
if (!connection.isPresent()) return "";
331+
332+
try {
333+
PreparedStatement statement = connection.get().prepareStatement("SELECT * FROM dimensions WHERE `default`=1");
334+
ResultSet results = statement.executeQuery();
335+
336+
if (results.first()) return results.getString("name");
337+
results.close();
338+
statement.close();
339+
connection.get().close();
340+
} catch (SQLException e) {
341+
e.printStackTrace();
342+
}
343+
return "";
330344
}
331345

332346
@Override
@@ -374,6 +388,7 @@ public boolean removeDimension(String name) {
374388
try {
375389
PreparedStatement statement = connection.get().prepareStatement("DELETE FROM dimensions WHERE `name`=?");
376390
statement.setString(1, name);
391+
statement.execute();
377392

378393
statement.close();
379394
connection.get().close();

DimensifySpigot/src/main/java/me/ifydev/dimensifyspigot/commands/DimensifyCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
124124
}
125125
String worldName = args[1];
126126
Bukkit.getScheduler().runTask(plugin, () -> {
127-
String result = ColorUtil.makeReadable(BasicHandler.deleteDimension(worldName));
127+
String result = ColorUtil.makeReadable(BasicHandler.deleteDimension(sender, worldName));
128128
sender.sendMessage(result);
129129
});
130130
} else if (args[0].equalsIgnoreCase("send")) {
@@ -138,7 +138,7 @@ public boolean onCommand(CommandSender sender, Command command, String s, String
138138
return;
139139
}
140140
Bukkit.getScheduler().runTask(plugin, () -> {
141-
String result = ColorUtil.makeReadable(BasicHandler.sendPlayerToDimension(args[1], args[2]));
141+
String result = ColorUtil.makeReadable(BasicHandler.sendPlayerToDimension(sender, args[1], args[2]));
142142
sender.sendMessage(result);
143143
});
144144
} else if (args[0].equalsIgnoreCase("portal")) {

DimensifySpigot/src/main/java/me/ifydev/dimensifyspigot/commands/handlers/BasicHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,33 +118,33 @@ public static String createDimension(CommandSender sender, String dimensionType,
118118
public static String goToDimension(Player player, String dimension) {
119119
DimensifyMain plugin = DimensifyMain.get();
120120
// Make sure this dimension actually exists
121-
Optional<World> world = plugin.getWorldController().getWorld(dimension);
121+
Optional<World> world = plugin.getWorldController().getWorld(player, dimension, false);
122122
if (!world.isPresent())
123123
return DimensifyConstants.INVALID_WORLD.replace("<WORLD>", dimension);
124124
WorldController.enterDimension(player, world.get());
125125
return "";
126126
}
127127

128-
public static String deleteDimension(String dimension) {
128+
public static String deleteDimension(CommandSender sender, String dimension) {
129129
// Make sure we're not deleting the main world.
130130
if (Bukkit.getWorlds().get(0).getName().equals(dimension))
131131
return DimensifyConstants.CANNOT_DELETE_MAIN_WORLD;
132132
DimensifyMain plugin = DimensifyMain.get();
133133

134-
if (!plugin.getWorldController().getWorld(dimension, false).isPresent())
134+
if (!plugin.getApi().getDatabaseHandler().map(db -> db.getDimension(dimension).isPresent()).orElse(false))
135135
return DimensifyConstants.INVALID_WORLD.replace("<WORLD>", dimension);
136136

137137
// World exists, delete it
138-
boolean deleted = plugin.getWorldController().deleteWorld(dimension);
138+
boolean deleted = plugin.getWorldController().deleteWorld(sender, dimension);
139139
String response = deleted ? DimensifyConstants.WORLD_DELETED : DimensifyConstants.INVALID_WORLD;
140140
return response.replace("<WORLD>", dimension);
141141
}
142142

143-
public static String sendPlayerToDimension(String playerName, String dimension) {
143+
public static String sendPlayerToDimension(CommandSender sender, String playerName, String dimension) {
144144
DimensifyMain plugin = DimensifyMain.get();
145145

146146
// Make sure the player and world exist
147-
Optional<World> world = plugin.getWorldController().getWorld(dimension);
147+
Optional<World> world = plugin.getWorldController().getWorld(sender, dimension, false);
148148
if (!world.isPresent())
149149
return DimensifyConstants.INVALID_WORLD.replace("<WORLD>", dimension);
150150
Player player = Bukkit.getPlayerExact(playerName);

DimensifySpigot/src/main/java/me/ifydev/dimensifyspigot/world/WorldController.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.apache.commons.io.FileUtils;
3434
import org.bukkit.Bukkit;
3535
import org.bukkit.World;
36+
import org.bukkit.command.CommandSender;
3637
import org.bukkit.entity.Player;
3738

3839
import java.io.File;
@@ -46,15 +47,16 @@
4647
public class WorldController {
4748

4849
public Optional<World> getWorld(String name) {
49-
return getWorld(name, false);
50+
return getWorld(null, name, false);
5051
}
5152

52-
public Optional<World> getWorld(String name, boolean andMake) {
53+
public Optional<World> getWorld(CommandSender sender, String name, boolean andMake) {
5354
DimensifyMain plugin = DimensifyMain.get();
5455

5556
World world = Bukkit.getWorld(name);
5657

57-
if (world == null && (plugin.getApi().getDatabaseHandler().map(db -> db.getDimension(name).isPresent()).orElse(false)) || andMake) {
58+
if (world == null && (plugin.getApi().getDatabaseHandler().map(db -> db.getDimension(name).isPresent()).orElse(false) || andMake)) {
59+
if (sender != null) sender.sendMessage(ColorUtil.makeReadable(DimensifyConstants.LOADING_WORLD));
5860
this.loadWorld(new DimensifyWorld(name, DimensifyMain.get()));
5961
world = Bukkit.getWorld(name);
6062
}
@@ -79,26 +81,22 @@ public void loadWorld(DimensifyWorld creator) {
7981
db.createDimension(new Dimension(creator.name(), creator.type().getName(), creator.getMeta(), creator.isDefault())));
8082
}
8183

82-
public boolean deleteWorld(String dimensionName) {
83-
World world = Bukkit.getWorld(dimensionName);
84-
if (world == null) return false;
85-
// Teleport all the players from the deleted world, to the main world.
84+
public boolean deleteWorld(CommandSender sender, String dimensionName) {
8685
DimensifyMain plugin = DimensifyMain.get();
87-
Optional<World> defaultDimension = plugin.getWorldController().getWorld(plugin.getApi().getDatabaseHandler()
88-
.map(db -> db.getDefaultDimension(false)).orElse(Bukkit.getWorlds().get(0).getName()));
89-
if (!defaultDimension.isPresent()) {
90-
plugin.getLogger().severe("Could not find a suitable dimension to send players to?!");
91-
return false;
92-
}
93-
world.getPlayers().forEach(player -> player.teleport(defaultDimension.get().getSpawnLocation()));
94-
95-
File folder = world.getWorldFolder();
96-
Bukkit.unloadWorld(world, false);
86+
boolean worldExists = plugin.getApi().getDatabaseHandler().map(db -> db.getDimension(dimensionName).isPresent()).orElse(false);
87+
if (!worldExists) return false;
9788

98-
// Remove from database
89+
Optional<World> world = plugin.getWorldController().getWorld(sender, dimensionName, false);
90+
if (!world.isPresent()) return false;
91+
// Teleport all the players from the deleted world, to the main world.
9992
plugin.getApi().getDatabaseHandler().ifPresent(db ->
10093
db.removeDimension(dimensionName));
10194

95+
world.get().getPlayers().forEach(player -> player.teleport(Bukkit.getWorlds().get(0).getSpawnLocation()));
96+
97+
File folder = world.get().getWorldFolder();
98+
Bukkit.unloadWorld(world.get(), false);
99+
102100
try {
103101
FileUtils.deleteDirectory(folder);
104102
} catch (IOException e) {

0 commit comments

Comments
 (0)