Skip to content

Commit fede4ac

Browse files
committed
World Link function added
1 parent bd2ae9f commit fede4ac

File tree

11 files changed

+170
-12
lines changed

11 files changed

+170
-12
lines changed

multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/MultiWorldBukkitApiConfiguration.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ public enum Entry {
3939
SETTINGS_AUTO_GAME_MODE_ENABLED("settings.auto-game-mode-enabled", true, false),
4040
SETTINGS_ACCESS_NETHER_WORLD_VIA_COMMAND("settings.access-nether-world-via-command", true, false),
4141
SETTINGS_ACCESS_END_WORLD_VIA_COMMAND("settings.access-end-world-via-command", true, false),
42-
SETTINGS_WORLD_LINK_ENABLED("settings.world-link-enabled", true, true),
42+
SETTINGS_WORLD_LINK_ENABLED("settings.world-link-enabled", true, false),
4343

44-
SETTINGS_DEFAULTS_NORMAL_WORLD("settings.defaults.normal-world", "world", false),
4544
SETTINGS_DEFAULTS_LOAD_AUTO("settings.defaults.load-auto", "false", false),
46-
SETTINGS_DEFAULTS_END_WORLD("settings.defaults.end-world", "end-world", true),
47-
SETTINGS_DEFAULTS_NETHER_WORLD("settings.defaults.nether_world", "nether_world", true),
45+
SETTINGS_DEFAULTS_NORMAL_WORLD("settings.defaults.normal-world", "world", false),
46+
SETTINGS_DEFAULTS_END_WORLD("settings.defaults.end-world", "world_the_end", false),
47+
SETTINGS_DEFAULTS_NETHER_WORLD("settings.defaults.nether-world", "world_nether", false),
4848
SETTINGS_DEFAULTS_DIFFICULTY("settings.defaults.difficulty", "PEACEFUL", false),
4949
SETTINGS_DEFAULTS_GAME_MODE("settings.defaults.game-mode", "SURVIVAL", false),
5050
SETTINGS_DEFAULTS_PVP_ENABLED("settings.defaults.pvp-enabled", true, false),
@@ -103,9 +103,9 @@ public enum Entry {
103103
MESSAGES_COMMANDS_LIST_USAGE("messages.commands.list.usage", "%prefix% §cUsage: /world list", false),
104104
MESSAGES_COMMANDS_LIST_MESSAGE("messages.commands.list.message", "%prefix% §aWorlds: %world_names%", false),
105105

106-
MESSAGES_COMMANDS_LINK_USAGE("messages.commands.link.usage", "%prefix% §cUsage: /world link <World> <End | Nether> <World>", true),
107-
MESSAGES_COMMANDS_LINK_ENVIRONMENT_NOT_EXISTS("messages.commands.link.environment-not-exists", "%prefix% §cThe specified environment does not exist!", true),
108-
MESSAGES_COMMANDS_LINK_SUCCESSFULLY_SET("messages.commands.link.successfully-set", "%prefix% §7You have connected the portal of the environment §b%environment_name% §7in the world §b%world_name% §7with the world §b%target_world_name%", true),
106+
MESSAGES_COMMANDS_LINK_USAGE("messages.commands.link.usage", "%prefix% §cUsage: /world link <World> <End | Nether> <World>", false),
107+
MESSAGES_COMMANDS_LINK_ENVIRONMENT_NOT_EXISTS("messages.commands.link.environment-not-exists", "%prefix% §cThe specified environment does not exist!", false),
108+
MESSAGES_COMMANDS_LINK_SUCCESSFULLY_SET("messages.commands.link.successfully-set", "%prefix% §7You have connected the portal of the environment §b%environment_name% §7in the world §b%world_name% §7with the world §b%target_world_name%", false),
109109

110110
MESSAGES_COMMANDS_LOAD_USAGE("messages.commands.load.usage", "%prefix% §cUsage: /world load <Name>", false),
111111
MESSAGES_COMMANDS_LOAD_WORLD_ALREADY_LOADED("messages.commands.load.world-already-loaded", "%prefix% §7The world §bworld_name% §7is already loaded!", false),

multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/BukkitWorldHolder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public class BukkitWorldHolder implements WorldHolder {
3838
private boolean spawnEntities;
3939
private boolean endPortalAccessible;
4040
private boolean netherPortalAccessible;
41+
private String endWorldName;
42+
private String netherWorldName;
43+
private String normalWorldName;
4144
private List<String> whitelist = new ArrayList<>();
4245
private boolean whitelistEnabled;
4346
private boolean autoLoaded = false;

multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/MultiWorldApiConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ public interface MultiWorldApiConfiguration {
2121

2222
boolean isAutoGameModeEnabled();
2323

24-
@Deprecated
2524
boolean isWorldLinkEnabled();
2625

2726
String getString(@NotNull final String path);

multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldDefaultProperty.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ public enum WorldDefaultProperty {
2323
SPAWN_ENTITIES("spawn-entities", "settings.defaults.spawn-entities"),
2424
END_PORTAL_ACCESSIBLE("end-portal-accessible", "settings.defaults.end-portal-accessible"),
2525
NETHER_PORTAL_ACCESSIBLE("nether-portal-accessible", "settings.defaults.nether-portal-accessible"),
26-
WORLD("world", "settings.defaults.world"),
26+
WORLD("world", "settings.defaults.normal-world"),
2727
END_WORLD("end-world", "settings.defaults.end-world"),
2828
NETHER_WORLD("nether-world", "settings.defaults.nether-world"),
29-
NORMAL_WORLD("world", "settings.defaults.world"),
29+
NORMAL_WORLD("world", "settings.defaults.normal-world"),
3030
WHITELIST_ENABLED("whitelist-enabled", "settings.defaults.whitelist-enabled");
3131

3232
private final String name;

multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldHolder.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,21 @@ public interface WorldHolder {
5353

5454
boolean isAutoLoaded();
5555

56+
@Nullable
57+
String getEndWorldName();
58+
59+
void setEndWorldName(@NotNull final String endWorldName);
60+
61+
@Nullable
62+
String getNetherWorldName();
63+
64+
void setNetherWorldName(@NotNull final String netherWorldName);
65+
66+
@Nullable
67+
String getNormalWorldName();
68+
69+
void setNormalWorldName(@NotNull final String normalWorldName);
70+
71+
72+
5673
}

multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldProperty.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ public enum WorldProperty {
2626
SPAWN_ENTITIES("spawn-entities", true),
2727
END_PORTAL_ACCESSIBLE("end-portal-accessible", true),
2828
NETHER_PORTAL_ACCESSIBLE("nether-portal-accessible", true),
29+
END_WORLD("end-world", true),
30+
NETHER_WORLD("nether-world", true),
31+
NORMAL_WORLD("normal-world", true),
2932
WHITELIST("whitelist", true),
3033
WHITELIST_ENABLED("whitelist-enabled", true);
3134

multiworld-bukkit/src/main/java/com/dev7ex/multiworld/MultiWorldConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ public boolean isAutoGameModeEnabled() {
6262
return super.getBoolean("settings.auto-game-mode-enabled");
6363
}
6464

65-
@Deprecated
6665
@Override
6766
public boolean isWorldLinkEnabled() {
6867
return super.getBoolean("settings.world-link-enabled");

multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/PlayerEnterPortalListener.java

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package com.dev7ex.multiworld.listener;
22

3+
import com.dev7ex.multiworld.MultiWorldPlugin;
34
import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
45
import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
6+
import com.dev7ex.multiworld.api.bukkit.event.user.WorldUserEnterPortalEvent;
57
import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8+
import com.dev7ex.multiworld.api.user.WorldUser;
9+
import org.bukkit.Bukkit;
10+
import org.bukkit.PortalType;
611
import org.bukkit.entity.Player;
712
import org.bukkit.event.EventHandler;
813
import org.bukkit.event.EventPriority;
@@ -19,6 +24,96 @@ public PlayerEnterPortalListener(@NotNull final MultiWorldBukkitApi multiWorldAp
1924
super(multiWorldApi);
2025
}
2126

27+
@EventHandler(priority = EventPriority.NORMAL)
28+
public void handlePlayerPortal(final PlayerPortalEvent event) {
29+
if (!super.getConfiguration().isWorldLinkEnabled()) {
30+
return;
31+
}
32+
33+
final BukkitWorldHolder fromWorldHolder = super.getWorldProvider().getWorldHolder(event.getFrom().getWorld().getName()).orElseThrow();
34+
final Player player = event.getPlayer();
35+
final WorldUser user = super.getUserProvider().getUser(player.getUniqueId()).orElseThrow();
36+
37+
if (event.getTo() == null) {
38+
return;
39+
}
40+
41+
if (event.getTo().getWorld() == null) {
42+
return;
43+
}
44+
45+
switch (event.getTo().getWorld().getEnvironment()) {
46+
case NETHER:
47+
if (fromWorldHolder.getNetherWorldName() == null) {
48+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the nether-world of " + fromWorldHolder.getName() + " but is null!");
49+
event.setCancelled(true);
50+
return;
51+
}
52+
53+
if (super.getWorldProvider().getWorldHolder(fromWorldHolder.getNetherWorldName()).isEmpty()) {
54+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the nether-world of " + fromWorldHolder.getName() + " but the world not exists!");
55+
event.setCancelled(true);
56+
return;
57+
}
58+
final BukkitWorldHolder netherWorldHolder = super.getWorldProvider().getWorldHolder(fromWorldHolder.getNetherWorldName()).get();
59+
60+
if (!netherWorldHolder.isLoaded()) {
61+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the nether-world of " + fromWorldHolder.getName() + " but the world is not loaded!");
62+
event.setCancelled(true);
63+
return;
64+
}
65+
Bukkit.getPluginManager().callEvent(new WorldUserEnterPortalEvent(user, fromWorldHolder, netherWorldHolder, PortalType.NETHER));
66+
event.getTo().setWorld(netherWorldHolder.getWorld());
67+
break;
68+
69+
case NORMAL:
70+
if (fromWorldHolder.getNormalWorldName() == null) {
71+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the normal-world of " + fromWorldHolder.getName() + " but is null!");
72+
event.setCancelled(true);
73+
return;
74+
}
75+
76+
if (super.getWorldProvider().getWorldHolder(fromWorldHolder.getNormalWorldName()).isEmpty()) {
77+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the normal-world of " + fromWorldHolder.getName() + " but the world not exists!");
78+
event.setCancelled(true);
79+
return;
80+
}
81+
final BukkitWorldHolder normalWorldHolder = super.getWorldProvider().getWorldHolder(fromWorldHolder.getNormalWorldName()).get();
82+
83+
if (!normalWorldHolder.isLoaded()) {
84+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the normal-world of " + fromWorldHolder.getName() + " but the world is not loaded!");
85+
event.setCancelled(true);
86+
return;
87+
}
88+
Bukkit.getPluginManager().callEvent(new WorldUserEnterPortalEvent(user, fromWorldHolder, normalWorldHolder, PortalType.CUSTOM));
89+
event.getTo().setWorld(normalWorldHolder.getWorld());
90+
break;
91+
92+
case THE_END:
93+
if (fromWorldHolder.getEndWorldName() == null) {
94+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the end-world of " + fromWorldHolder.getName() + " but is null!");
95+
event.setCancelled(true);
96+
return;
97+
}
98+
99+
if (super.getWorldProvider().getWorldHolder(fromWorldHolder.getEndWorldName()).isEmpty()) {
100+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the end-world of " + fromWorldHolder.getName() + " but the world not exists!");
101+
event.setCancelled(true);
102+
return;
103+
}
104+
final BukkitWorldHolder endWorldHolder = super.getWorldProvider().getWorldHolder(fromWorldHolder.getEndWorldName()).get();
105+
106+
if (!endWorldHolder.isLoaded()) {
107+
MultiWorldPlugin.getInstance().getLogger().warning("Player: " + player.getName() + " try to enter the end-world of " + fromWorldHolder.getName() + " but the world is not loaded!");
108+
event.setCancelled(true);
109+
return;
110+
}
111+
Bukkit.getPluginManager().callEvent(new WorldUserEnterPortalEvent(user, fromWorldHolder, endWorldHolder, PortalType.ENDER));
112+
event.getTo().setWorld(endWorldHolder.getWorld());
113+
break;
114+
}
115+
}
116+
22117
@EventHandler(priority = EventPriority.NORMAL)
23118
public void handlePlayerEnterBlockPortal(final PlayerPortalEvent event) {
24119
final BukkitWorldHolder fromWorldHolder = super.getWorldProvider().getWorldHolder(event.getFrom().getWorld().getName()).orElseThrow();

multiworld-bukkit/src/main/java/com/dev7ex/multiworld/world/DefaultWorldConfiguration.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public void add(@NotNull final BukkitWorldHolder worldHolder) {
4747
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.SPAWN_ENTITIES.getStoragePath(), worldHolder.isSpawnEntities());
4848
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.END_PORTAL_ACCESSIBLE.getStoragePath(), worldHolder.isEndPortalAccessible());
4949
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.NETHER_PORTAL_ACCESSIBLE.getStoragePath(), worldHolder.isNetherPortalAccessible());
50+
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.END_WORLD.getStoragePath(), worldHolder.getEndWorldName());
51+
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.NETHER_WORLD.getStoragePath(), worldHolder.getNetherWorldName());
52+
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.NORMAL_WORLD.getStoragePath(), worldHolder.getNormalWorldName());
5053
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.WHITELIST.getStoragePath(), Collections.emptyList());
5154
super.getFileConfiguration().set(worldHolder.getName() + "." + WorldProperty.WHITELIST_ENABLED.getStoragePath(), worldHolder.isWhitelistEnabled());
5255
super.saveFile();
@@ -134,6 +137,21 @@ public void addMissingProperty(@NotNull final BukkitWorldHolder worldHolder, @No
134137
MultiWorldPlugin.getInstance().getLogger().info("Adding Missing Property [" + property.name() + "] to " + worldHolder.getName());
135138
break;
136139

140+
case NORMAL_WORLD:
141+
this.write(worldHolder, property, this.defaultProperties.getString(WorldDefaultProperty.NORMAL_WORLD));
142+
MultiWorldPlugin.getInstance().getLogger().info("Adding Missing Property [" + property.name() + "] to " + worldHolder.getName());
143+
break;
144+
145+
case NETHER_WORLD:
146+
this.write(worldHolder, property, this.defaultProperties.getString(WorldDefaultProperty.NETHER_WORLD));
147+
MultiWorldPlugin.getInstance().getLogger().info("Adding Missing Property [" + property.name() + "] to " + worldHolder.getName());
148+
break;
149+
150+
case END_WORLD:
151+
this.write(worldHolder, property, this.defaultProperties.getString(WorldDefaultProperty.END_WORLD));
152+
MultiWorldPlugin.getInstance().getLogger().info("Adding Missing Property [" + property.name() + "] to " + worldHolder.getName());
153+
break;
154+
137155
case WHITELIST:
138156
this.write(worldHolder, property, Collections.emptyList());
139157
MultiWorldPlugin.getInstance().getLogger().info("Adding Missing Property [" + property.name() + "] to " + worldHolder.getName());
@@ -175,7 +193,7 @@ public void updateFlag(@NotNull final BukkitWorldHolder worldHolder, @NotNull fi
175193
public void write(@NotNull final BukkitWorldHolder worldHolder, @NotNull final ParsedMap<WorldProperty, Object> worldData) {
176194
for (final WorldProperty property : worldData.keySet()) {
177195
switch (property) {
178-
case CREATOR_NAME: case TYPE: case GAME_MODE: case DIFFICULTY:
196+
case CREATOR_NAME: case TYPE: case GAME_MODE: case DIFFICULTY: case END_WORLD: case NETHER_WORLD: case NORMAL_WORLD:
179197
super.getFileConfiguration().set(worldHolder.getName() + "." + property.getStoragePath(), worldData.getString(property));
180198
break;
181199

@@ -227,6 +245,9 @@ public BukkitWorldHolder getWorldHolder(@NotNull final String name) {
227245
.setSpawnEntities(super.getFileConfiguration().getBoolean(name + "." + WorldProperty.SPAWN_ENTITIES.getStoragePath()))
228246
.setEndPortalAccessible(super.getFileConfiguration().getBoolean(name + "." + WorldProperty.END_PORTAL_ACCESSIBLE.getStoragePath(), true))
229247
.setNetherPortalAccessible(super.getFileConfiguration().getBoolean(name + "." + WorldProperty.NETHER_PORTAL_ACCESSIBLE.getStoragePath(), true))
248+
.setEndWorldName(super.getFileConfiguration().getString(name + "." + WorldProperty.END_WORLD.getStoragePath()))
249+
.setNetherWorldName(super.getFileConfiguration().getString(name + "." + WorldProperty.NETHER_WORLD.getStoragePath()))
250+
.setNormalWorldName(super.getFileConfiguration().getString(name + "." + WorldProperty.NORMAL_WORLD.getStoragePath()))
230251
.setWhitelist(super.getFileConfiguration().getStringList(name + "." + WorldProperty.WHITELIST.getStoragePath()))
231252
.setWhitelistEnabled(super.getFileConfiguration().getBoolean(name + "." + WorldProperty.WHITELIST_ENABLED.getStoragePath()))
232253
.build();

0 commit comments

Comments
 (0)