This interface extends {@link MultiWorldApi} to provide Bukkit-specific functionality,
19 | * including world management, configuration, and command handling.
This class serves as a foundation for event listeners, ensuring easy access to essential
20 | * MultiWorld components such as world management, user handling, and translation services.
21 | *
22 | * @author Dev7ex
23 | * @since 18.06.2023
24 | */
25 | public abstract class MultiWorldListener implements Listener {
26 |
27 | private final MultiWorldBukkitApi multiWorldApi;
28 |
29 | /**
30 | * Constructs a MultiWorldListener with the given MultiWorldBukkitApi.
31 | *
32 | * @param multiWorldApi The {@link MultiWorldBukkitApi} instance providing access to the API.
33 | */
34 | public MultiWorldListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
35 | this.multiWorldApi = multiWorldApi;
36 | }
37 |
38 | /**
39 | * Retrieves the MultiWorld API configuration.
40 | *
41 | * @return The {@link MultiWorldBukkitApiConfiguration} instance.
42 | */
43 | public MultiWorldBukkitApiConfiguration getConfiguration() {
44 | return this.multiWorldApi.getConfiguration();
45 | }
46 |
47 | /**
48 | * Retrieves the prefix used for messages in the plugin.
49 | *
50 | * @return The plugin message prefix.
51 | */
52 | public String getPrefix() {
53 | return this.multiWorldApi.getConfiguration().getPrefix();
54 | }
55 |
56 | /**
57 | * Retrieves the Bukkit console command sender.
58 | *
59 | * @return The {@link ConsoleCommandSender} instance.
60 | */
61 | public ConsoleCommandSender getConsoleSender() {
62 | return this.multiWorldApi.getConsoleSender();
63 | }
64 |
65 | /**
66 | * Retrieves the translation provider for handling translations.
67 | *
68 | * @return The {@link BukkitTranslationProvider} instance.
69 | */
70 | public BukkitTranslationProvider getTranslationProvider() {
71 | return this.multiWorldApi.getTranslationProvider();
72 | }
73 |
74 | /**
75 | * Retrieves the provider for managing users in Bukkit worlds.
76 | *
77 | * @return The {@link BukkitWorldUserProvider} instance.
78 | */
79 | public BukkitWorldUserProvider getUserProvider() {
80 | return this.multiWorldApi.getUserProvider();
81 | }
82 |
83 | /**
84 | * Retrieves the provider for generating Bukkit worlds.
85 | *
86 | * @return The {@link BukkitWorldGeneratorProvider} instance.
87 | */
88 | public BukkitWorldGeneratorProvider getWorldGeneratorProvider() {
89 | return this.multiWorldApi.getWorldGeneratorProvider();
90 | }
91 |
92 | /**
93 | * Retrieves the configuration settings for a Bukkit world.
94 | *
95 | * @return The {@link BukkitWorldConfiguration} instance.
96 | */
97 | public BukkitWorldConfiguration getWorldConfiguration() {
98 | return this.multiWorldApi.getWorldConfiguration();
99 | }
100 |
101 | /**
102 | * Retrieves the world manager responsible for handling Bukkit worlds.
103 | *
104 | * @return The {@link BukkitWorldManager} instance.
105 | */
106 | public BukkitWorldManager getWorldManager() {
107 | return this.multiWorldApi.getWorldManager();
108 | }
109 |
110 | /**
111 | * Retrieves the provider for accessing information about Bukkit worlds.
112 | *
113 | * @return The {@link BukkitWorldProvider} instance.
114 | */
115 | public BukkitWorldProvider getWorldProvider() {
116 | return this.multiWorldApi.getWorldProvider();
117 | }
118 |
119 | }
120 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes dedicated to handling triggered code executions.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.event;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/plugin/MultiWorldEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.plugin;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.event.Event;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * Base class for events related to the MultiWorld plugin.
11 | * Provides access to the MultiWorldBukkitApi instance.
12 | *
13 | * @author Dev7ex
14 | * @since 18.06.2023
15 | */
16 | @Getter(AccessLevel.PUBLIC)
17 | abstract class MultiWorldEvent extends Event {
18 |
19 | private final MultiWorldBukkitApi multiWorldApi;
20 |
21 | /**
22 | * Constructs a MultiWorldEvent with the given MultiWorldBukkitApi instance.
23 | *
24 | * @param multiWorldApi The MultiWorldBukkitApi instance.
25 | */
26 | MultiWorldEvent(@NotNull final MultiWorldBukkitApi multiWorldApi) {
27 | this.multiWorldApi = multiWorldApi;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/plugin/MultiWorldStartupCompleteEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.plugin;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.event.HandlerList;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * Event triggered when MultiWorld has finished loading.
11 | * This event provides information about the duration of the startup process.
12 | *
13 | * @author itsTyrion
14 | * @since 29.11.2022
15 | */
16 | @Getter(AccessLevel.PUBLIC)
17 | public class MultiWorldStartupCompleteEvent extends MultiWorldEvent {
18 |
19 | private static final HandlerList HANDLERS = new HandlerList();
20 | private final long startupDuration;
21 |
22 | /**
23 | * Constructs a MultiWorldStartupCompleteEvent with the given MultiWorldBukkitApi instance and startup duration.
24 | *
25 | * @param multiWorldApi The MultiWorldBukkitApi instance.
26 | * @param startupDuration The duration of the startup process, in milliseconds.
27 | */
28 | public MultiWorldStartupCompleteEvent(@NotNull final MultiWorldBukkitApi multiWorldApi, final long startupDuration) {
29 | super(multiWorldApi);
30 | this.startupDuration = startupDuration;
31 | }
32 |
33 | /**
34 | * Retrieves the handler list for this event.
35 | *
36 | * @return The handler list.
37 | */
38 | public static HandlerList getHandlerList() {
39 | return MultiWorldStartupCompleteEvent.HANDLERS;
40 | }
41 |
42 | @Override
43 | public @NotNull HandlerList getHandlers() {
44 | return MultiWorldStartupCompleteEvent.HANDLERS;
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/plugin/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Events related to MultiWorld.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.event.plugin;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/user/WorldUserEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.event.Event;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * Represents an abstract event related to a world user.
11 | * All events involving world users should extend this class.
12 | *
13 | * @author Dev7ex
14 | * @since 18.06.2023
15 | */
16 | @Getter(AccessLevel.PUBLIC)
17 | abstract class WorldUserEvent extends Event {
18 |
19 | private final BukkitWorldUser user;
20 |
21 | /**
22 | * Constructs a new WorldUserEvent.
23 | *
24 | * @param user The WorldUser associated with the event.
25 | */
26 | WorldUserEvent(@NotNull final BukkitWorldUser user) {
27 | this.user = user;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/user/WorldUserLoginEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.event.HandlerList;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * Represents an event triggered when a world user logs in.
11 | * This event is called after the user successfully logs in.
12 | *
13 | * @author Dev7ex
14 | * @since 18.06.2023
15 | */
16 | @Getter(AccessLevel.PUBLIC)
17 | public class WorldUserLoginEvent extends WorldUserEvent {
18 |
19 | private static final HandlerList HANDLERS = new HandlerList();
20 |
21 | /**
22 | * Constructs a new WorldUserLoginEvent.
23 | *
24 | * @param user The WorldUser who logged in.
25 | */
26 | public WorldUserLoginEvent(@NotNull final BukkitWorldUser user) {
27 | super(user);
28 | }
29 |
30 | /**
31 | * Gets the handler list for this event.
32 | *
33 | * @return The handler list.
34 | */
35 | public static HandlerList getHandlerList() {
36 | return WorldUserLoginEvent.HANDLERS;
37 | }
38 |
39 | @Override
40 | public @NotNull HandlerList getHandlers() {
41 | return WorldUserLoginEvent.HANDLERS;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/user/WorldUserLogoutEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.event.HandlerList;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * Represents an event triggered when a world user logs out.
11 | * This event is called after the user successfully logs out.
12 | *
13 | * @author Dev7ex
14 | * @since 18.06.2023
15 | */
16 | @Getter(AccessLevel.PUBLIC)
17 | public class WorldUserLogoutEvent extends WorldUserEvent {
18 |
19 | private static final HandlerList HANDLERS = new HandlerList();
20 |
21 | /**
22 | * Constructs a new WorldUserLogoutEvent.
23 | *
24 | * @param user The WorldUser who logged out.
25 | */
26 | public WorldUserLogoutEvent(@NotNull final BukkitWorldUser user) {
27 | super(user);
28 | }
29 |
30 | /**
31 | * Gets the handler list for this event.
32 | *
33 | * @return The handler list.
34 | */
35 | public static HandlerList getHandlerList() {
36 | return WorldUserLogoutEvent.HANDLERS;
37 | }
38 |
39 | @Override
40 | public @NotNull HandlerList getHandlers() {
41 | return WorldUserLogoutEvent.HANDLERS;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/user/WorldUserPortalEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
4 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
5 | import lombok.AccessLevel;
6 | import lombok.Getter;
7 | import lombok.Setter;
8 | import org.bukkit.PortalType;
9 | import org.bukkit.event.HandlerList;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | /**
13 | * This event is called when a user enters a portal in a world.
14 | * It extends WorldUserEvent.
15 | * It provides information about the user, the current world they are in, the portal world they will be teleported to, and the type of portal.
16 | *
17 | * @author Dev7ex
18 | * @since 29.06.2023
19 | */
20 | @Getter(AccessLevel.PUBLIC)
21 | @Setter(AccessLevel.PUBLIC)
22 | public class WorldUserPortalEvent extends WorldUserEvent {
23 |
24 | private static final HandlerList HANDLERS = new HandlerList();
25 | private boolean cancelled = false;
26 | private final BukkitWorldHolder currentWorldHolder;
27 | private final BukkitWorldHolder portalWorldHolder;
28 | private final PortalType portalType;
29 |
30 | /**
31 | * Constructs a new WorldUserEnterPortalEvent.
32 | *
33 | * @param user The user entering the portal.
34 | * @param currentWorldHolder The BukkitWorldHolder of the current world the user is in.
35 | * @param portalWorldHolder The BukkitWorldHolder of the portal world the user will be teleported to.
36 | * @param portalType The type of portal the user is entering.
37 | */
38 | public WorldUserPortalEvent(@NotNull final BukkitWorldUser user, @NotNull final BukkitWorldHolder currentWorldHolder, @NotNull final BukkitWorldHolder portalWorldHolder, @NotNull final PortalType portalType) {
39 | super(user);
40 | this.currentWorldHolder = currentWorldHolder;
41 | this.portalWorldHolder = portalWorldHolder;
42 | this.portalType = portalType;
43 | }
44 |
45 | /**
46 | * Gets the HandlerList for this event.
47 | *
48 | * @return The HandlerList for this event.
49 | */
50 | public static HandlerList getHandlerList() {
51 | return WorldUserPortalEvent.HANDLERS;
52 | }
53 |
54 | /**
55 | * Gets the handlers for this event.
56 | *
57 | * @return The handlers for this event.
58 | */
59 | @Override
60 | public @NotNull HandlerList getHandlers() {
61 | return WorldUserPortalEvent.HANDLERS;
62 | }
63 |
64 | }
65 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/user/WorldUserTeleportWorldEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
4 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
5 | import lombok.AccessLevel;
6 | import lombok.Getter;
7 | import lombok.Setter;
8 | import org.bukkit.event.Cancellable;
9 | import org.bukkit.event.HandlerList;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | /**
13 | * This event is called when a user is teleported between worlds.
14 | * It extends WorldUserEvent and implements Cancellable.
15 | * It provides information about the user, the world they were in before the teleportation, and the world they will be teleported to.
16 | *
17 | * @author Dev7ex
18 | * @since 18.06.2023
19 | */
20 | @Getter(AccessLevel.PUBLIC)
21 | @Setter(AccessLevel.PUBLIC)
22 | public class WorldUserTeleportWorldEvent extends WorldUserEvent implements Cancellable {
23 |
24 | private static final HandlerList HANDLERS = new HandlerList();
25 | private boolean cancelled = false;
26 | private BukkitWorldHolder lastWorldHolder;
27 | private BukkitWorldHolder nextWorldHolder;
28 |
29 | /**
30 | * Constructs a new WorldUserTeleportWorldEvent.
31 | *
32 | * @param user The user being teleported.
33 | * @param lastWorldHolder The BukkitWorldHolder of the world the user was in before the teleportation.
34 | * @param nextWorldHolder The BukkitWorldHolder of the world the user will be teleported to.
35 | */
36 | public WorldUserTeleportWorldEvent(@NotNull final BukkitWorldUser user, @NotNull final BukkitWorldHolder lastWorldHolder, @NotNull final BukkitWorldHolder nextWorldHolder) {
37 | super(user);
38 | this.lastWorldHolder = lastWorldHolder;
39 | this.nextWorldHolder = nextWorldHolder;
40 | }
41 |
42 | /**
43 | * Gets the HandlerList for this event.
44 | *
45 | * @return The HandlerList for this event.
46 | */
47 | public static HandlerList getHandlerList() {
48 | return WorldUserTeleportWorldEvent.HANDLERS;
49 | }
50 |
51 | /**
52 | * Gets the handlers for this event.
53 | *
54 | * @return The handlers for this event.
55 | */
56 | @Override
57 | public @NotNull HandlerList getHandlers() {
58 | return WorldUserTeleportWorldEvent.HANDLERS;
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/user/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Events relating to users.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.event.user;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/WorldCloneEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.command.CommandSender;
8 | import org.bukkit.event.Cancellable;
9 | import org.bukkit.event.HandlerList;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | import java.io.File;
13 |
14 | /**
15 | * Represents an event that occurs when a world is cloned.
16 | * This event is called before the world is cloned.
17 | * If the event is cancelled, the world will not be cloned.
18 | *
19 | * @author Dev7ex
20 | * @since 18.06.2023
21 | */
22 | @Getter(AccessLevel.PUBLIC)
23 | @Setter(AccessLevel.PUBLIC)
24 | public class WorldCloneEvent extends WorldEvent implements Cancellable {
25 |
26 | private static final HandlerList HANDLERS = new HandlerList();
27 | private boolean cancelled = false;
28 |
29 | private final String clonedName;
30 | private final File sourceFolder;
31 | private final File destinationFolder;
32 |
33 | /**
34 | * Constructs a new WorldCloneEvent.
35 | *
36 | * @param worldHolder The BukkitWorldHolder of the world being cloned.
37 | * @param commandSender The command sender initiating the clone operation.
38 | * @param clonedName The name of the cloned world.
39 | * @param sourceFolder The source folder of the world being cloned.
40 | * @param destinationFolder The destination folder where the cloned world will be placed.
41 | */
42 | public WorldCloneEvent(@NotNull final BukkitWorldHolder worldHolder, @NotNull final CommandSender commandSender,
43 | @NotNull final String clonedName, @NotNull final File sourceFolder,
44 | @NotNull final File destinationFolder) {
45 | super(worldHolder, commandSender);
46 | this.clonedName = clonedName;
47 | this.sourceFolder = sourceFolder;
48 | this.destinationFolder = destinationFolder;
49 | }
50 |
51 | /**
52 | * Gets the handler list for this event.
53 | *
54 | * @return The handler list.
55 | */
56 | public static HandlerList getHandlerList() {
57 | return WorldCloneEvent.HANDLERS;
58 | }
59 |
60 | /**
61 | * {@inheritDoc}
62 | */
63 | @Override
64 | public @NotNull HandlerList getHandlers() {
65 | return WorldCloneEvent.HANDLERS;
66 | }
67 |
68 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/WorldCreateEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.command.CommandSender;
8 | import org.bukkit.event.Cancellable;
9 | import org.bukkit.event.HandlerList;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | /**
13 | * Represents an event that occurs when a world is created.
14 | * This event is called after the world is created.
15 | * If the event is cancelled, the world creation process will be halted.
16 | *
17 | * @author Dev7ex
18 | * @since 18.06.2023
19 | */
20 | @Getter(AccessLevel.PUBLIC)
21 | @Setter(AccessLevel.PUBLIC)
22 | public class WorldCreateEvent extends WorldEvent implements Cancellable {
23 |
24 | private static final HandlerList HANDLERS = new HandlerList();
25 | private boolean cancelled = false;
26 |
27 | /**
28 | * Constructs a new WorldCreateEvent.
29 | *
30 | * @param worldHolder The BukkitWorldHolder of the world being created.
31 | * @param commandSender The command sender initiating the world creation.
32 | */
33 | public WorldCreateEvent(@NotNull final BukkitWorldHolder worldHolder, @NotNull final CommandSender commandSender) {
34 | super(worldHolder, commandSender);
35 | }
36 |
37 | /**
38 | * Gets the handler list for this event.
39 | *
40 | * @return The handler list.
41 | */
42 | public static HandlerList getHandlerList() {
43 | return WorldCreateEvent.HANDLERS;
44 | }
45 |
46 | /**
47 | * {@inheritDoc}
48 | */
49 | @Override
50 | public @NotNull HandlerList getHandlers() {
51 | return WorldCreateEvent.HANDLERS;
52 | }
53 |
54 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/WorldDeleteEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.command.CommandSender;
8 | import org.bukkit.event.Cancellable;
9 | import org.bukkit.event.HandlerList;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | /**
13 | * Represents an event that occurs when a world is deleted.
14 | * This event is called before the world is deleted.
15 | * If the event is cancelled, the world deletion process will be halted.
16 | *
17 | * @author Dev7ex
18 | * @since 18.06.2023
19 | */
20 | @Getter(AccessLevel.PUBLIC)
21 | @Setter(AccessLevel.PUBLIC)
22 | public class WorldDeleteEvent extends WorldEvent implements Cancellable {
23 |
24 | private static final HandlerList HANDLERS = new HandlerList();
25 | private boolean cancelled = false;
26 |
27 | /**
28 | * Constructs a new WorldDeleteEvent.
29 | *
30 | * @param worldHolder The BukkitWorldHolder of the world being deleted.
31 | * @param commandSender The command sender initiating the world deletion.
32 | */
33 | public WorldDeleteEvent(@NotNull final BukkitWorldHolder worldHolder, @NotNull final CommandSender commandSender) {
34 | super(worldHolder, commandSender);
35 | }
36 |
37 | /**
38 | * Gets the handler list for this event.
39 | *
40 | * @return The handler list.
41 | */
42 | public static HandlerList getHandlerList() {
43 | return WorldDeleteEvent.HANDLERS;
44 | }
45 |
46 | /**
47 | * {@inheritDoc}
48 | */
49 | @Override
50 | public @NotNull HandlerList getHandlers() {
51 | return WorldDeleteEvent.HANDLERS;
52 | }
53 |
54 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/WorldEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.command.CommandSender;
7 | import org.bukkit.event.Event;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | /**
11 | * Represents a base class for events related to worlds.
12 | * This class should be extended by specific world-related events.
13 | *
14 | * @author Dev7ex
15 | * @since 18.06.2023
16 | */
17 | @Getter(AccessLevel.PUBLIC)
18 | abstract class WorldEvent extends Event {
19 |
20 | private final BukkitWorldHolder worldHolder;
21 | private final CommandSender commandSender;
22 |
23 | /**
24 | * Constructs a new WorldEvent.
25 | *
26 | * @param worldHolder The BukkitWorldHolder associated with the event.
27 | * @param commandSender The command sender related to the event.
28 | */
29 | WorldEvent(@NotNull final BukkitWorldHolder worldHolder, @NotNull final CommandSender commandSender) {
30 | this.worldHolder = worldHolder;
31 | this.commandSender = commandSender;
32 | }
33 |
34 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/WorldFlagChangeEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
4 | import com.dev7ex.multiworld.api.world.WorldFlag;
5 | import lombok.AccessLevel;
6 | import lombok.Getter;
7 | import lombok.Setter;
8 | import org.bukkit.command.CommandSender;
9 | import org.bukkit.event.Cancellable;
10 | import org.bukkit.event.HandlerList;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | /**
14 | * Represents an event triggered when a world flag is changed.
15 | * This event can be cancelled.
16 | *
17 | * @author Dev7ex
18 | * @since 29.06.2023
19 | */
20 | @Getter(AccessLevel.PUBLIC)
21 | @Setter(AccessLevel.PUBLIC)
22 | public class WorldFlagChangeEvent extends WorldEvent implements Cancellable {
23 |
24 | private static final HandlerList HANDLERS = new HandlerList();
25 | private boolean cancelled = false;
26 | private WorldFlag flag;
27 | private String value;
28 |
29 | /**
30 | * Constructs a new WorldFlagChangeEvent.
31 | *
32 | * @param worldHolder The BukkitWorldHolder associated with the event.
33 | * @param commandSender The command sender related to the event.
34 | * @param flag The flag that was changed.
35 | * @param value The new value of the flag.
36 | */
37 | public WorldFlagChangeEvent(@NotNull final BukkitWorldHolder worldHolder, @NotNull final CommandSender commandSender, @NotNull final WorldFlag flag, @NotNull final String value) {
38 | super(worldHolder, commandSender);
39 | this.flag = flag;
40 | this.value = value;
41 | }
42 |
43 | /**
44 | * Returns the handler list.
45 | *
46 | * @return The handler list.
47 | */
48 | public static HandlerList getHandlerList() {
49 | return WorldFlagChangeEvent.HANDLERS;
50 | }
51 |
52 | @Override
53 | public @NotNull HandlerList getHandlers() {
54 | return WorldFlagChangeEvent.HANDLERS;
55 | }
56 |
57 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/WorldGameRuleChangeEvent.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.event.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.GameRule;
8 | import org.bukkit.command.CommandSender;
9 | import org.bukkit.event.Cancellable;
10 | import org.bukkit.event.HandlerList;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | /**
14 | * Represents an event triggered when a game rule is changed in a world.
15 | * This event can be cancelled.
16 | *
17 | * @author Dev7ex
18 | * @since 29.03.2024
19 | */
20 | @Getter(AccessLevel.PUBLIC)
21 | @Setter(AccessLevel.PUBLIC)
22 | public class WorldGameRuleChangeEvent extends WorldEvent implements Cancellable {
23 |
24 | private static final HandlerList HANDLERS = new HandlerList();
25 | private boolean cancelled = false;
26 | private GameRule> gameRule;
27 | private String value;
28 |
29 | /**
30 | * Constructs a new WorldGameRuleChangeEvent.
31 | *
32 | * @param worldHolder The BukkitWorldHolder associated with the event.
33 | * @param commandSender The command sender related to the event.
34 | * @param gameRule The game rule that was changed.
35 | * @param value The new value of the game rule.
36 | */
37 | public WorldGameRuleChangeEvent(@NotNull final BukkitWorldHolder worldHolder, @NotNull final CommandSender commandSender, @NotNull final GameRule> gameRule, @NotNull final String value) {
38 | super(worldHolder, commandSender);
39 | this.gameRule = gameRule;
40 | this.value = value;
41 | }
42 |
43 | /**
44 | * Returns the handler list.
45 | *
46 | * @return The handler list.
47 | */
48 | public static HandlerList getHandlerList() {
49 | return WorldGameRuleChangeEvent.HANDLERS;
50 | }
51 |
52 | @Override
53 | public @NotNull HandlerList getHandlers() {
54 | return WorldGameRuleChangeEvent.HANDLERS;
55 | }
56 |
57 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/event/world/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Events related to worlds.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.event.world;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * The root package of the MultiWorld API, contains generalized API classes.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/translation/BukkitTranslationProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.translation;
2 |
3 | import com.dev7ex.multiworld.api.translation.TranslationProvider;
4 | import org.bukkit.command.CommandSender;
5 |
6 | /**
7 | * @author Dev7ex
8 | * @since 10.07.2024
9 | */
10 | public interface BukkitTranslationProvider extends TranslationProvider {}
11 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/user/BukkitWorldUser.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.user;
2 |
3 | import com.dev7ex.common.bukkit.entity.EntityResolver;
4 | import com.dev7ex.multiworld.api.user.WorldUser;
5 | import org.bukkit.entity.Player;
6 |
7 | /**
8 | * @author Dev7ex
9 | * @since 07.06.2024
10 | */
11 | public interface BukkitWorldUser extends WorldUser, EntityResolver {}
12 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/user/BukkitWorldUserConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.user;
2 |
3 | import com.dev7ex.multiworld.api.user.WorldUserConfiguration;
4 |
5 | /**
6 | * @author Dev7ex
7 | * @since 07.06.2024
8 | */
9 | public interface BukkitWorldUserConfiguration extends WorldUserConfiguration {
10 | }
11 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/user/BukkitWorldUserProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.user;
2 |
3 | import com.dev7ex.multiworld.api.user.WorldUserProvider;
4 |
5 | /**
6 | * @author Dev7ex
7 | * @since 07.06.2024
8 | */
9 | public interface BukkitWorldUserProvider extends WorldUserProvider {
10 | }
11 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/BukkitWorldConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world;
2 |
3 | import com.dev7ex.multiworld.api.world.WorldConfiguration;
4 |
5 | /**
6 | * Represents the configuration of a Bukkit world in a multi-world environment.
7 | * Extends WorldConfiguration with BukkitWorldHolder as the generic type parameter.
8 | * This interface provides methods for configuring Bukkit worlds.
9 | *
10 | * @author Dev7ex
11 | * @since 18.06.2023
12 | */
13 | public interface BukkitWorldConfiguration extends WorldConfiguration {
14 | }
15 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/BukkitWorldEnvironment.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world;
2 |
3 | import com.dev7ex.multiworld.api.world.WorldEnvironment;
4 | import com.dev7ex.multiworld.api.world.WorldType;
5 | import org.bukkit.World;
6 | import org.jetbrains.annotations.NotNull;
7 |
8 | /**
9 | * @author Dev7ex
10 | * @since 29.06.2024
11 | */
12 | public class BukkitWorldEnvironment {
13 |
14 | public static World.Environment from(@NotNull final WorldEnvironment environment) {
15 | return switch (environment) {
16 | case NORMAL -> World.Environment.NORMAL;
17 | case NETHER -> World.Environment.NETHER;
18 | case THE_END -> World.Environment.THE_END;
19 | default -> World.Environment.CUSTOM;
20 | };
21 | }
22 |
23 | public static World.Environment from(@NotNull final WorldType type) {
24 | return switch (type) {
25 | case NORMAL -> World.Environment.NORMAL;
26 | case NETHER -> World.Environment.NETHER;
27 | case THE_END -> World.Environment.THE_END;
28 | default -> World.Environment.CUSTOM;
29 | };
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/BukkitWorldManager.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world;
2 |
3 | import com.dev7ex.multiworld.api.world.WorldManager;
4 |
5 | /**
6 | * Represents a manager for Bukkit worlds in a multi-world environment.
7 | * Extends WorldManager interface.
8 | * This interface provides functionality for managing Bukkit worlds.
9 | *
10 | * @author Dev7ex
11 | * @since 27.06.2023
12 | */
13 | public interface BukkitWorldManager extends WorldManager {
14 | }
15 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/BukkitWorldProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world;
2 |
3 | import com.dev7ex.multiworld.api.world.WorldProvider;
4 |
5 | /**
6 | * Represents a provider for Bukkit worlds in a multi-world environment.
7 | * Extends WorldProvider interface with BukkitWorldHolder as the generic type parameter.
8 | * This interface provides functionality for managing Bukkit worlds.
9 | *
10 | * @author Dev7ex
11 | * @since 18.06.2023
12 | */
13 | public interface BukkitWorldProvider extends WorldProvider {
14 | }
15 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/BukkitWorldType.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world;
2 |
3 | import com.dev7ex.multiworld.api.world.WorldType;
4 | import org.bukkit.World;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | /**
8 | * Utility class for converting Bukkit world environments to corresponding WorldType.
9 | * This class provides static methods for mapping Bukkit world environments to WorldType enum values.
10 | *
11 | * @author Dev7ex
12 | * @since 18.06.2023
13 | */
14 | public class BukkitWorldType {
15 |
16 | // Private constructor to prevent instantiation of this utility class
17 | private BukkitWorldType() {
18 | }
19 |
20 | /**
21 | * Converts a Bukkit world environment to a corresponding WorldType enum value.
22 | *
23 | * @param environment The Bukkit world environment.
24 | * @return The corresponding WorldType.
25 | */
26 | public static WorldType fromEnvironment(@NotNull final World.Environment environment) {
27 | return switch (environment) {
28 | case THE_END -> WorldType.THE_END;
29 | case NETHER -> WorldType.NETHER;
30 | default -> WorldType.NORMAL;
31 | };
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/biome/BukkitBiomeHolder.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.biome;
2 |
3 | import com.dev7ex.multiworld.api.world.biome.BiomeHolder;
4 | import org.bukkit.block.Biome;
5 |
6 | /**
7 | * @author Dev7ex
8 | * @since 06.11.2024
9 | */
10 | public interface BukkitBiomeHolder extends BiomeHolder {
11 | }
12 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/BukkitWorldGenerator.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.generator;
2 |
3 | import com.dev7ex.multiworld.api.world.generator.WorldGenerator;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.generator.ChunkGenerator;
8 | import org.bukkit.plugin.Plugin;
9 | import org.jetbrains.annotations.NotNull;
10 |
11 | /**
12 | * Represents a Bukkit implementation of a custom world generator.
13 | * Extends ChunkGenerator and implements WorldGenerator.
14 | * This class can be used to generate custom terrain and structures for Bukkit worlds.
15 | *
16 | * @author Dev7ex
17 | * @since 26.03.2024
18 | */
19 | @Getter(AccessLevel.PUBLIC)
20 | @Setter(AccessLevel.PUBLIC)
21 | public class BukkitWorldGenerator extends ChunkGenerator implements WorldGenerator {
22 |
23 | private Plugin plugin;
24 |
25 | /**
26 | * Constructs a new BukkitWorldGenerator with the given plugin.
27 | *
28 | * @param plugin The Bukkit plugin associated with this world generator.
29 | */
30 | public BukkitWorldGenerator(@NotNull final Plugin plugin) {
31 | this.plugin = plugin;
32 | }
33 |
34 | /**
35 | * Default constructor for BukkitWorldGenerator.
36 | * This constructor is needed for Bukkit to properly instantiate the generator.
37 | */
38 | public BukkitWorldGenerator() {}
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/BukkitWorldGeneratorHolder.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.generator;
2 |
3 | import com.dev7ex.multiworld.api.world.generator.WorldGeneratorHolder;
4 | import lombok.AccessLevel;
5 | import lombok.Getter;
6 | import org.bukkit.plugin.Plugin;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * Represents a Bukkit implementation of a WorldGeneratorHolder.
11 | * It holds a reference to the Bukkit plugin that provides the world generator.
12 | *
13 | * @author Dev7ex
14 | * @since 06.06.2024
15 | */
16 | @Getter(AccessLevel.PUBLIC)
17 | public class BukkitWorldGeneratorHolder implements WorldGeneratorHolder {
18 |
19 | private final Plugin plugin;
20 |
21 | /**
22 | * Constructs a new BukkitWorldGeneratorHolder with the given plugin.
23 | *
24 | * @param plugin The Bukkit plugin providing the world generator.
25 | */
26 | public BukkitWorldGeneratorHolder(@NotNull final Plugin plugin) {
27 | this.plugin = plugin;
28 | }
29 |
30 | /**
31 | * Gets the name of the plugin providing the world generator.
32 | *
33 | * @return The name of the plugin.
34 | */
35 | @Override
36 | public String getName() {
37 | return this.plugin.getName();
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/BukkitWorldGeneratorProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.generator;
2 |
3 | import com.dev7ex.multiworld.api.world.generator.WorldGeneratorProvider;
4 |
5 | /**
6 | * Represents a provider for Bukkit world generators in a multi-world environment.
7 | * Extends WorldGeneratorProvider interface.
8 | * This interface provides functionality for managing Bukkit world generators.
9 | *
10 | * @author Dev7ex
11 | * @since 29.06.2023
12 | */
13 | public interface BukkitWorldGeneratorProvider extends WorldGeneratorProvider {}
14 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/defaults/FlatWorldGenerator.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.generator.defaults;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.generator.BukkitWorldGenerator;
4 | import lombok.NoArgsConstructor;
5 | import org.bukkit.Material;
6 | import org.bukkit.World;
7 | import org.bukkit.block.Biome;
8 | import org.bukkit.generator.ChunkGenerator;
9 | import org.bukkit.plugin.Plugin;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | import java.util.Random;
13 |
14 | /**
15 | * Generates a flat world with bedrock at the bottom and grass blocks on top.
16 | * This class extends BukkitWorldGenerator and overrides the generateChunkData method.
17 | * It is used to create flat worlds in Bukkit.
18 | *
19 | * @author Dev7ex
20 | * @since 20.05.2021
21 | */
22 | @NoArgsConstructor
23 | public class FlatWorldGenerator extends BukkitWorldGenerator {
24 |
25 | /**
26 | * Constructs a new FlatWorldGenerator with the given plugin.
27 | *
28 | * @param plugin The Bukkit plugin associated with this generator.
29 | */
30 | public FlatWorldGenerator(@NotNull final Plugin plugin) {
31 | super(plugin);
32 | }
33 |
34 | /**
35 | * Generates the chunk data for a flat world.
36 | *
37 | * @param world The Bukkit world.
38 | * @param random The random number generator.
39 | * @param x The X-coordinate of the chunk.
40 | * @param z The Z-coordinate of the chunk.
41 | * @param biome The biome grid.
42 | * @return The generated chunk data.
43 | */
44 | @Override
45 | public @NotNull ChunkGenerator.ChunkData generateChunkData(@NotNull final World world, @NotNull final Random random, final int x, final int z, @NotNull final ChunkGenerator.BiomeGrid biome) {
46 | final ChunkGenerator.ChunkData chunkData = super.createChunkData(world);
47 |
48 | // Set bedrock at the bottom
49 | chunkData.setRegion(0, 0, 0, 16, 1, 16, Material.BEDROCK);
50 |
51 | // Set grass blocks on top
52 | chunkData.setRegion(0, 1, 0, 16, 64, 16, Material.GRASS_BLOCK);
53 |
54 | // Set plains biome for all chunks
55 | for (int chunkX = 0; chunkX < 15; chunkX++) {
56 | for (int chunkZ = 0; chunkZ < 15; chunkZ++) {
57 | if (biome.getBiome(chunkX, chunkZ) != Biome.PLAINS) {
58 | biome.setBiome(chunkX, chunkZ, Biome.PLAINS);
59 | }
60 | }
61 | }
62 | return chunkData;
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/defaults/VoidWorldGenerator.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.generator.defaults;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.generator.BukkitWorldGenerator;
4 | import lombok.NoArgsConstructor;
5 | import org.bukkit.Location;
6 | import org.bukkit.Material;
7 | import org.bukkit.World;
8 | import org.bukkit.block.Biome;
9 | import org.bukkit.generator.ChunkGenerator;
10 | import org.bukkit.plugin.Plugin;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | import java.util.Random;
14 |
15 | /**
16 | * Generates a void world with a single stone block at the spawn location.
17 | * This class extends BukkitWorldGenerator and overrides the generateChunkData method.
18 | * It is used to create void worlds in Bukkit.
19 | *
20 | * @author Dev7ex
21 | * @since 20.05.2021
22 | */
23 | @NoArgsConstructor
24 | public class VoidWorldGenerator extends BukkitWorldGenerator {
25 |
26 | /**
27 | * Constructs a new VoidWorldGenerator with the given plugin.
28 | *
29 | * @param plugin The Bukkit plugin associated with this generator.
30 | */
31 | public VoidWorldGenerator(@NotNull final Plugin plugin) {
32 | super(plugin);
33 | }
34 |
35 | /**
36 | * Generates the chunk data for a void world.
37 | *
38 | * @param world The Bukkit world.
39 | * @param random The random number generator.
40 | * @param x The X-coordinate of the chunk.
41 | * @param z The Z-coordinate of the chunk.
42 | * @param biome The biome grid.
43 | * @return The generated chunk data.
44 | */
45 | @Override
46 | public @NotNull ChunkGenerator.ChunkData generateChunkData(@NotNull final World world, @NotNull final Random random, final int x, final int z, @NotNull final ChunkGenerator.BiomeGrid biome) {
47 | final ChunkGenerator.ChunkData chunkData = super.createChunkData(world);
48 |
49 | // Set a stone block at the center of the world as the spawn location
50 | if ((x == 0) && (z == 0)) {
51 | chunkData.setBlock(0, 63, 0, Material.STONE);
52 | world.setSpawnLocation(new Location(world, 0, 64, 0));
53 | }
54 |
55 | // Set plains biome for all chunks
56 | for (int chunkX = 0; chunkX < 16; chunkX++) {
57 | for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
58 | if (biome.getBiome(chunkX, chunkZ) != Biome.PLAINS) {
59 | biome.setBiome(chunkX, chunkZ, Biome.PLAINS);
60 | }
61 | }
62 | }
63 | return chunkData;
64 | }
65 |
66 | }
67 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/defaults/WaterWorldGenerator.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.generator.defaults;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.world.generator.BukkitWorldGenerator;
4 | import lombok.NoArgsConstructor;
5 | import org.bukkit.Location;
6 | import org.bukkit.Material;
7 | import org.bukkit.World;
8 | import org.bukkit.block.Biome;
9 | import org.bukkit.generator.ChunkGenerator;
10 | import org.bukkit.plugin.Plugin;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | import java.util.Random;
14 |
15 | /**
16 | * Generates a water world with a single stone block at the spawn location.
17 | * This class extends BukkitWorldGenerator and overrides the generateChunkData method.
18 | * It is used to create water worlds in Bukkit.
19 | *
20 | * @author Dev7ex
21 | * @since 26.03.2024
22 | */
23 | @NoArgsConstructor
24 | public class WaterWorldGenerator extends BukkitWorldGenerator {
25 |
26 | /**
27 | * Constructs a new WaterWorldGenerator with the given plugin.
28 | *
29 | * @param plugin The Bukkit plugin associated with this generator.
30 | */
31 | public WaterWorldGenerator(@NotNull final Plugin plugin) {
32 | super(plugin);
33 | }
34 |
35 | /**
36 | * Generates the chunk data for a water world.
37 | *
38 | * @param world The Bukkit world.
39 | * @param random The random number generator.
40 | * @param x The X-coordinate of the chunk.
41 | * @param z The Z-coordinate of the chunk.
42 | * @param biome The biome grid.
43 | * @return The generated chunk data.
44 | */
45 | @Override
46 | public @NotNull ChunkGenerator.ChunkData generateChunkData(@NotNull final World world, @NotNull final Random random, final int x, final int z, @NotNull final ChunkGenerator.BiomeGrid biome) {
47 | final ChunkGenerator.ChunkData chunkData = super.createChunkData(world);
48 |
49 | // Set bedrock at the bottom
50 | chunkData.setRegion(0, 0, 0, 16, 1, 16, Material.BEDROCK);
51 |
52 | // Set water blocks covering the surface
53 | chunkData.setRegion(0, 1, 0, 16, 64, 16, Material.WATER);
54 |
55 | // Set a stone block at the center of the world as the spawn location
56 | if ((x == 0) && (z == 0)) {
57 | chunkData.setBlock(0, 63, 0, Material.STONE);
58 | world.setSpawnLocation(new Location(world, 0, 64, 0));
59 | }
60 |
61 | // Set ocean biome for all chunks
62 | for (int chunkX = 0; chunkX < 15; chunkX++) {
63 | for (int chunkZ = 0; chunkZ < 15; chunkZ++) {
64 | if (biome.getBiome(chunkX, chunkZ) != Biome.OCEAN) {
65 | biome.setBiome(chunkX, chunkZ, Biome.OCEAN);
66 | }
67 | }
68 | }
69 | return chunkData;
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/generator/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes relevant to generators.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.world.generator;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/location/BukkitWorldLocation.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.bukkit.world.location;
2 |
3 | import com.dev7ex.multiworld.api.world.location.WorldLocation;
4 | import lombok.*;
5 | import org.bukkit.Bukkit;
6 | import org.bukkit.Location;
7 | import org.jetbrains.annotations.NotNull;
8 |
9 | /**
10 | * @author Dev7ex
11 | * @since 30.06.2023
12 | */
13 | @Setter(AccessLevel.PUBLIC)
14 | @Getter(AccessLevel.PUBLIC)
15 | @Builder(setterPrefix = "set")
16 | @NoArgsConstructor
17 | public class BukkitWorldLocation implements WorldLocation {
18 |
19 | private String worldName;
20 | private double x;
21 | private double z;
22 | private double y;
23 | private double yaw;
24 | private double pitch;
25 |
26 | public BukkitWorldLocation(@NotNull final String worldName, final double x, final double y, final double z, final double yaw, final double pitch) {
27 | this.worldName = worldName;
28 | this.x = x;
29 | this.y = y;
30 | this.z = z;
31 | this.yaw = yaw;
32 | this.pitch = pitch;
33 | }
34 |
35 | public static BukkitWorldLocation of(@NotNull final Location location) {
36 | final BukkitWorldLocation worldLocation = new BukkitWorldLocation();
37 | worldLocation.setWorldName(location.getWorld().getName());
38 | worldLocation.setX(location.getX());
39 | worldLocation.setY(location.getY());
40 | worldLocation.setZ(location.getZ());
41 | worldLocation.setYaw(location.getYaw());
42 | worldLocation.setPitch(location.getPitch());
43 | return worldLocation;
44 | }
45 |
46 | public static Location to(@NotNull final WorldLocation location) {
47 | return new Location(Bukkit.getWorld(location.getWorldName()), location.getX(), location.getY(), location.getZ(), (float) location.getYaw(), (float) location.getPitch());
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/location/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes relevant to locations.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.world.location;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-bukkit/src/main/java/com/dev7ex/multiworld/api/bukkit/world/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes relevant to worlds.
3 | */
4 | package com.dev7ex.multiworld.api.bukkit.world;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | multiworld-api
9 | com.dev7ex
10 | 1.7.4-SNAPSHOT
11 |
12 |
13 | MultiWorld-API-Core
14 | multiworld-api-core
15 |
16 |
17 | ${project.source.version}
18 | ${project.source.version}
19 | ${project.source.encoding}
20 |
21 |
22 |
23 |
24 | com.dev7ex
25 | facilis-common-core
26 | ${dependency.facilis.common.version}
27 | provided
28 |
29 |
30 |
31 | org.projectlombok
32 | lombok
33 | ${dependency.lombok.version}
34 | provided
35 |
36 |
37 |
38 | org.jetbrains
39 | annotations
40 | ${dependency.annotations.version}
41 | provided
42 |
43 |
44 |
45 |
46 | ${project.name}-${project.version}
47 | clean package
48 |
49 |
50 |
51 | .
52 | src/main/resources
53 | true
54 |
55 |
56 | **/.*.*
57 |
58 |
59 |
60 |
61 |
62 |
63 | org.apache.maven.plugins
64 | maven-shade-plugin
65 | ${maven.shade.plugin.version}
66 |
67 |
68 | package
69 |
70 | shade
71 |
72 |
73 |
74 |
75 |
76 |
77 | org.apache.maven.plugins
78 | maven-compiler-plugin
79 | ${maven.compiler.plugin.version}
80 |
81 | true
82 | lines,vars,source
83 | UTF-8
84 | true
85 | true
86 | ${project.source.version}
87 | ${project.source.version}
88 |
89 |
90 |
91 |
92 | org.apache.maven.plugins
93 | maven-javadoc-plugin
94 | ${maven.javadoc.plugin.version}
95 |
96 |
97 | attach-javadocs
98 |
99 | jar
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/MultiWorldApi.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api;
2 |
3 | import com.dev7ex.multiworld.api.translation.TranslationProvider;
4 | import com.dev7ex.multiworld.api.user.WorldUserProvider;
5 | import com.dev7ex.multiworld.api.world.WorldConfiguration;
6 | import com.dev7ex.multiworld.api.world.WorldManager;
7 | import com.dev7ex.multiworld.api.world.WorldProvider;
8 | import com.dev7ex.multiworld.api.world.generator.WorldGeneratorProvider;
9 | import org.jetbrains.annotations.NotNull;
10 | import org.jetbrains.annotations.Nullable;
11 |
12 | import java.io.File;
13 |
14 | /**
15 | * Interface for interacting with the MultiWorld API.
16 | * Provides access to various functionalities and data related to MultiWorld.
17 | *
18 | *
This interface serves as the main entry point for retrieving configurations, providers,
19 | * and managers related to the MultiWorld system.
20 | *
21 | * @author Dev7ex
22 | * @since 20.12.2022
23 | */
24 | public interface MultiWorldApi {
25 |
26 | /**
27 | * Retrieves the configuration settings for MultiWorld.
28 | *
29 | * @return The {@link MultiWorldApiConfiguration} instance containing the configuration settings.
30 | */
31 | @NotNull
32 | MultiWorldApiConfiguration getConfiguration();
33 |
34 | /**
35 | * Retrieves the translation provider.
36 | *
37 | * @return The {@link TranslationProvider} used for handling translations.
38 | */
39 | @NotNull
40 | TranslationProvider> getTranslationProvider();
41 |
42 | /**
43 | * Retrieves the user provider for worlds.
44 | *
45 | * @return The {@link WorldUserProvider} instance responsible for managing world users.
46 | */
47 | @NotNull
48 | WorldUserProvider> getUserProvider();
49 |
50 | /**
51 | * Retrieves the provider for generating worlds.
52 | *
53 | * @return The {@link WorldGeneratorProvider} responsible for world generation.
54 | */
55 | @NotNull
56 | WorldGeneratorProvider, ?> getWorldGeneratorProvider();
57 |
58 | /**
59 | * Retrieves the configuration settings for a world.
60 | *
61 | * @return The {@link WorldConfiguration} instance representing world-specific settings.
62 | */
63 | @NotNull
64 | WorldConfiguration> getWorldConfiguration();
65 |
66 | /**
67 | * Retrieves the manager for managing worlds.
68 | *
69 | * @return The {@link WorldManager} instance responsible for managing worlds.
70 | */
71 | @NotNull
72 | WorldManager getWorldManager();
73 |
74 | /**
75 | * Retrieves the provider for accessing information about worlds.
76 | *
77 | * @return The {@link WorldProvider} instance offering world-related data access.
78 | */
79 | @NotNull
80 | WorldProvider> getWorldProvider();
81 |
82 | /**
83 | * Retrieves the folder where user-related data is stored.
84 | *
85 | * @return The {@link File} instance representing the user data folder, or null if unavailable.
86 | */
87 | @Nullable
88 | File getUserFolder();
89 |
90 | /**
91 | * Retrieves the folder where backups of worlds are stored.
92 | *
93 | * @return The {@link File} instance representing the backup folder, or null if unavailable.
94 | */
95 | @Nullable
96 | File getBackupFolder();
97 |
98 | }
99 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/MultiWorldApiConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api;
2 |
3 | import com.dev7ex.common.collect.map.ParsedMap;
4 | import com.dev7ex.multiworld.api.world.WorldDefaultProperty;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | import java.text.SimpleDateFormat;
8 | import java.util.List;
9 |
10 | /**
11 | * Interface for accessing configuration settings of the MultiWorld plugin.
12 | * Provides methods to retrieve various configuration parameters.
13 | *
14 | * @author Dev7ex
15 | * @since 18.06.2023
16 | */
17 | public interface MultiWorldApiConfiguration {
18 |
19 | /**
20 | * Retrieves a string value from the configuration.
21 | *
22 | * @param path The path to the configuration value.
23 | * @return The string value at the specified path.
24 | */
25 | String getString(@NotNull final String path);
26 |
27 | /**
28 | * Retrieves a boolean value from the configuration.
29 | *
30 | * @param path The path to the configuration value.
31 | * @return The boolean value at the specified path.
32 | */
33 | boolean getBoolean(@NotNull final String path);
34 |
35 | /**
36 | * Retrieves an integer value from the configuration.
37 | *
38 | * @param path The path to the configuration value.
39 | * @return The integer value at the specified path.
40 | */
41 | int getInteger(@NotNull final String path);
42 |
43 | /**
44 | * Retrieves a message from the configuration.
45 | *
46 | * @param path The path to the configuration value.
47 | * @return The message at the specified path.
48 | */
49 | String getMessage(@NotNull final String path);
50 |
51 | /**
52 | * Retrieves the prefix used in messages from the configuration.
53 | *
54 | * @return The message prefix.
55 | */
56 | String getPrefix();
57 |
58 | /**
59 | * Retrieves the time format used in the plugin.
60 | *
61 | * @return The time format.
62 | */
63 | SimpleDateFormat getTimeFormat();
64 |
65 | /**
66 | * Checks if auto game mode is enabled.
67 | *
68 | * @return True if auto game mode is enabled, otherwise false.
69 | */
70 | boolean isAutoGameModeEnabled();
71 |
72 | /**
73 | * Checks if world linking is enabled.
74 | *
75 | * @return True if world linking is enabled, otherwise false.
76 | */
77 | boolean isWorldLinkEnabled();
78 |
79 | /**
80 | * Checks if the automatic world unloading system is enabled.
81 | *
82 | * This method indicates whether the system responsible for automatically
83 | * unloading inactive or unused worlds is currently active. When enabled,
84 | * worlds that have not been accessed for a certain period will be
85 | * automatically unloaded to free up resources.
86 | *
87 | * @return {@code true} if the auto-unload system is enabled, {@code false} otherwise.
88 | */
89 | boolean isAutoUnloadSystemEnabled();
90 |
91 |
92 | /**
93 | * Checks if Nether world access via command is allowed.
94 | *
95 | * @return True if Nether world access via command is allowed, otherwise false.
96 | */
97 | boolean canNetherWorldAccessViaCommand();
98 |
99 | /**
100 | * Checks if End world access via command is allowed.
101 | *
102 | * @return True if End world access via command is allowed, otherwise false.
103 | */
104 | boolean canEndWorldAccessViaCommand();
105 |
106 | /**
107 | * Retrieves the delay in seconds before a world is automatically unloaded.
108 | *
109 | * Worlds that are no longer needed or are inactive will be unloaded after
110 | * this specified delay. The delay helps to ensure that resources are freed
111 | * efficiently, while allowing for any pending processes or tasks related to
112 | * the world to be completed.
113 | *
114 | * @return the delay in seconds before the world is automatically unloaded.
115 | */
116 | long getAutoUnloadSystemDelay();
117 |
118 | long getAutoUnloadLoadDelay();
119 |
120 |
121 | /**
122 | * Retrieves the default properties for worlds.
123 | *
124 | * @return The default properties for worlds.
125 | */
126 | ParsedMap getDefaultProperties();
127 |
128 | /**
129 | * Retrieves a list of strings from the configuration.
130 | *
131 | * @param path The path to the configuration value.
132 | * @return The list of strings at the specified path.
133 | */
134 | List getStringList(@NotNull final String path);
135 |
136 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/MultiWorldApiProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api;
2 |
3 | import org.jetbrains.annotations.NotNull;
4 |
5 | /**
6 | * Acts as a gateway for obtaining an instance of the MultiWorldApi,
7 | * allowing users to manage various aspects across different worlds.
8 | *
9 | * @author Dev7ex
10 | * @since 20.12.2022
11 | */
12 | public class MultiWorldApiProvider {
13 |
14 | private static MultiWorldApi multiWorldApi;
15 |
16 | /**
17 | * Registers the MultiWorldApi instance.
18 | *
19 | * @param multiWorldApi The MultiWorldApi instance to register.
20 | */
21 | public static void registerApi(@NotNull final MultiWorldApi multiWorldApi) {
22 | MultiWorldApiProvider.multiWorldApi = multiWorldApi;
23 | }
24 |
25 | /**
26 | * Unregisters the MultiWorldApi instance.
27 | */
28 | public static void unregisterApi() {
29 | MultiWorldApiProvider.multiWorldApi = null;
30 | }
31 |
32 | /**
33 | * Retrieves the registered MultiWorldApi instance.
34 | *
35 | * @return The registered MultiWorldApi instance.
36 | */
37 | public static MultiWorldApi getMultiWorldApi() {
38 | return MultiWorldApiProvider.multiWorldApi;
39 | }
40 |
41 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Test
3 | */
4 | package com.dev7ex.multiworld.api;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/translation/TranslationProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.translation;
2 |
3 | import com.dev7ex.common.io.file.configuration.FileConfiguration;
4 | import org.jetbrains.annotations.NotNull;
5 |
6 | import java.io.File;
7 | import java.util.List;
8 | import java.util.Locale;
9 | import java.util.Map;
10 |
11 | /**
12 | * @author Dev7ex
13 | * @since 10.07.2024
14 | */
15 | public interface TranslationProvider {
16 |
17 | Map getTranslationConfigurations();
18 |
19 | void register(@NotNull final Locale locale, @NotNull final File file);
20 |
21 | void unregister(@NotNull final Locale locale);
22 |
23 | Locale getDefaultLocale();
24 |
25 | String getMessage(@NotNull final E entity, @NotNull final String path);
26 |
27 | List getMessageList(@NotNull final E entity, @NotNull final String path);
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/user/WorldUser.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.user;
2 |
3 | import com.dev7ex.multiworld.api.world.WorldHolder;
4 | import com.dev7ex.multiworld.api.world.location.WorldLocation;
5 | import org.jetbrains.annotations.NotNull;
6 | import org.jetbrains.annotations.Nullable;
7 |
8 | import java.util.UUID;
9 |
10 | /**
11 | * Represents a user within the multi-world system.
12 | * This interface provides methods to access user-related information and settings.
13 | *
14 | * @author Dev7ex
15 | * @since 18.06.2023
16 | */
17 | public interface WorldUser {
18 |
19 | /**
20 | * Gets the unique identifier of the user.
21 | *
22 | * @return The UUID of the user.
23 | */
24 | UUID getUniqueId();
25 |
26 | /**
27 | * Gets the name of the user.
28 | *
29 | * @return The name of the user.
30 | */
31 | String getName();
32 |
33 | /**
34 | * Gets the configuration of the user.
35 | *
36 | * @return The configuration of the user.
37 | */
38 | WorldUserConfiguration getConfiguration();
39 |
40 | /**
41 | * Sets the configuration of the user.
42 | *
43 | * @param configuration The new configuration of the user.
44 | */
45 | void setConfiguration(@NotNull final WorldUserConfiguration configuration);
46 |
47 | /**
48 | * Gets the last known location of the user.
49 | *
50 | * @return The last known location of the user, or null if not available.
51 | */
52 | @Nullable
53 | WorldLocation getLastLocation();
54 |
55 | /**
56 | * Sets the last known location of the user.
57 | *
58 | * @param location The last known location of the user.
59 | */
60 | void setLastLocation(@Nullable final WorldLocation location);
61 |
62 | long getFirstLogin();
63 |
64 | void setFirstLogin(final long firstLogin);
65 |
66 | /**
67 | * Gets the timestamp of the user's last login.
68 | *
69 | * @return The timestamp of the user's last login.
70 | */
71 | long getLastLogin();
72 |
73 | /**
74 | * Sets the timestamp of the user's last login.
75 | *
76 | * @param lastLogin The timestamp of the user's last login.
77 | */
78 | void setLastLogin(final long lastLogin);
79 |
80 | /**
81 | * Sends a message to the user.
82 | *
83 | * @param message The message to send.
84 | */
85 | void sendMessage(@NotNull final String message);
86 |
87 | /**
88 | * Teleports the user to the specified world.
89 | *
90 | * @param worldHolder The WorldHolder representing the destination world.
91 | */
92 | void teleport(@NotNull final WorldHolder worldHolder);
93 |
94 | }
95 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/user/WorldUserConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.user;
2 |
3 | import com.dev7ex.common.collect.map.ParsedMap;
4 | import org.jetbrains.annotations.NotNull;
5 |
6 | /**
7 | * Represents the configuration of a user within the multi-world system.
8 | * This interface provides methods to read and write user configuration data.
9 | *
10 | * @author Dev7ex
11 | * @since 18.06.2023
12 | */
13 | public interface WorldUserConfiguration {
14 |
15 | /**
16 | * Reads the user configuration data.
17 | *
18 | * @return A parsed map containing the user configuration data.
19 | */
20 | ParsedMap read();
21 |
22 | /**
23 | * Reads specific properties from the user configuration data.
24 | *
25 | * @param properties The properties to read.
26 | * @return A parsed map containing the specified user configuration data.
27 | */
28 | ParsedMap read(@NotNull final WorldUserProperty... properties);
29 |
30 | /**
31 | * Writes user configuration data.
32 | *
33 | * @param userData The user configuration data to write.
34 | */
35 | void write(@NotNull final ParsedMap userData);
36 |
37 | /**
38 | * Saves the user configuration data to a file.
39 | */
40 | void save();
41 |
42 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/user/WorldUserProperty.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.user;
2 |
3 | import lombok.AccessLevel;
4 | import lombok.Getter;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | /**
8 | * Represents properties associated with a user in the multi-world system.
9 | * These properties include unique ID, name, last location, and last login time.
10 | *
11 | * @author Dev7ex
12 | * @since 18.06.2023
13 | */
14 | @Getter(AccessLevel.PUBLIC)
15 | public enum WorldUserProperty {
16 |
17 | UNIQUE_ID("unique-id"),
18 | NAME("name"),
19 | LAST_LOCATION("last-location"),
20 | FIRST_LOGIN("first-login"),
21 | LAST_LOGIN("last-login");
22 |
23 | private final String storagePath;
24 |
25 | WorldUserProperty(@NotNull final String storagePath) {
26 | this.storagePath = storagePath;
27 | }
28 |
29 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/user/WorldUserProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.user;
2 |
3 | import org.jetbrains.annotations.NotNull;
4 |
5 | import java.util.Map;
6 | import java.util.Optional;
7 | import java.util.UUID;
8 |
9 | /**
10 | * Provides methods for managing user data within the multi-world system.
11 | * Users can be registered, unregistered, retrieved by unique ID or name,
12 | * and their data can be saved.
13 | *
14 | * @param The type of WorldUser implementation.
15 | * @author Dev7ex
16 | * @since 18.06.2023
17 | */
18 | public interface WorldUserProvider {
19 |
20 | /**
21 | * Registers a user in the multi-world system.
22 | *
23 | * @param user The user to register.
24 | */
25 | void registerUser(@NotNull final T user);
26 |
27 | /**
28 | * Unregisters a user from the multi-world system.
29 | *
30 | * @param uniqueId The unique ID of the user to unregister.
31 | */
32 | void unregisterUser(@NotNull final UUID uniqueId);
33 |
34 | /**
35 | * Retrieves a user by their unique ID.
36 | *
37 | * @param uniqueId The unique ID of the user to retrieve.
38 | * @return An optional containing the user if found, otherwise empty.
39 | */
40 | Optional getUser(@NotNull final UUID uniqueId);
41 |
42 | /**
43 | * Retrieves a user by their name.
44 | *
45 | * @param name The name of the user to retrieve.
46 | * @return An optional containing the user if found, otherwise empty.
47 | */
48 | Optional getUser(@NotNull final String name);
49 |
50 | /**
51 | * Saves the data of a user.
52 | *
53 | * @param user The user whose data to save.
54 | */
55 | void saveUser(@NotNull final T user);
56 |
57 | /**
58 | * Saves specific properties of a user.
59 | *
60 | * @param user The user whose data to save.
61 | * @param properties The properties to save.
62 | */
63 | void saveUser(@NotNull final T user, @NotNull final WorldUserProperty... properties);
64 |
65 | /**
66 | * Retrieves a map of all registered users, keyed by their unique ID.
67 | *
68 | * @return A map containing all registered users.
69 | */
70 | Map getUsers();
71 |
72 | }
73 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/user/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes relevant to user.
3 | */
4 | package com.dev7ex.multiworld.api.user;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldConfiguration.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import com.dev7ex.common.collect.map.ParsedMap;
4 | import org.jetbrains.annotations.NotNull;
5 |
6 | import java.util.Map;
7 |
8 | /**
9 | * Represents a configuration for a world.
10 | * This interface provides methods for adding, removing, and retrieving properties of a world.
11 | *
12 | * @param The type of WorldHolder associated with this configuration.
13 | * @author Dev7ex
14 | * @since 18.06.2023
15 | */
16 | public interface WorldConfiguration {
17 |
18 | /**
19 | * Adds the specified world holder to this configuration.
20 | *
21 | * @param worldHolder The world holder to add.
22 | */
23 | void add(@NotNull final T worldHolder);
24 |
25 | /**
26 | * Removes the specified world holder from this configuration.
27 | *
28 | * @param worldHolder The world holder to remove.
29 | */
30 | void remove(@NotNull final T worldHolder);
31 |
32 | /**
33 | * Removes the world with the specified name from this configuration.
34 | *
35 | * @param name The name of the world to remove.
36 | */
37 | void remove(@NotNull final String name);
38 |
39 | /**
40 | * Checks if this configuration contains the world with the specified name.
41 | *
42 | * @param name The name of the world to check.
43 | * @return true if this configuration contains the world, otherwise false.
44 | */
45 | boolean contains(@NotNull final String name);
46 |
47 | /**
48 | * Gets the value of the specified property for the given world holder.
49 | *
50 | * @param worldHolder The world holder.
51 | * @param property The property to retrieve.
52 | * @return The value of the property.
53 | */
54 | Object getValue(@NotNull final WorldHolder worldHolder, @NotNull final WorldProperty property);
55 |
56 | /**
57 | * Checks if the specified world has the given property.
58 | *
59 | * @param name The name of the world.
60 | * @param property The property to check.
61 | * @return true if the world has the property, otherwise false.
62 | */
63 | boolean hasProperty(@NotNull final String name, @NotNull final WorldProperty property);
64 |
65 | /**
66 | * Adds the missing property for the specified world holder.
67 | *
68 | * @param worldHolder The world holder.
69 | * @param property The missing property to add.
70 | */
71 | void addMissingProperty(@NotNull final T worldHolder, @NotNull final WorldProperty property);
72 |
73 | /**
74 | * Updates the flag for the specified world holder.
75 | *
76 | * @param worldHolder The world holder.
77 | * @param worldFlag The flag to update.
78 | * @param value The new value of the flag.
79 | */
80 | void updateFlag(@NotNull final T worldHolder, @NotNull final WorldFlag worldFlag, @NotNull final String value);
81 |
82 | /**
83 | * Writes the specified world data to the configuration.
84 | *
85 | * @param worldHolder The world holder.
86 | * @param worldData The world data to write.
87 | */
88 | void write(@NotNull final T worldHolder, @NotNull final ParsedMap worldData);
89 |
90 | /**
91 | * Writes the specified data for the given property to the configuration.
92 | *
93 | * @param worldHolder The world holder.
94 | * @param property The property.
95 | * @param data The data to write.
96 | */
97 | void write(@NotNull final T worldHolder, @NotNull final WorldProperty property, @NotNull final Object data);
98 |
99 | /**
100 | * Gets the world holder with the specified name.
101 | *
102 | * @param name The name of the world.
103 | * @return The world holder, or null if not found.
104 | */
105 | T getWorldHolder(@NotNull final String name);
106 |
107 | /**
108 | * Gets a map of all world holders in this configuration, where the key is the name of the world.
109 | *
110 | * @return A map of world holders.
111 | */
112 | Map getWorldHolders();
113 |
114 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldDefaultProperty.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import lombok.AccessLevel;
4 | import lombok.Getter;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | import java.util.Arrays;
8 | import java.util.Optional;
9 |
10 | /**
11 | * Represents default properties for worlds.
12 | * This enum provides methods to obtain default property values and their storage paths.
13 | *
14 | * @author Dev7ex
15 | * @since 18.06.2023
16 | */
17 | @Getter(AccessLevel.PUBLIC)
18 | public enum WorldDefaultProperty {
19 |
20 | AUTO_LOAD_ENABLED("auto-load-enabled", "settings.defaults.auto-load-enabled"),
21 | AUTO_UNLOAD_ENABLED("auto-unload-enabled", "settings.defaults.auto-unload-enabled"),
22 | DIFFICULTY("difficulty", "settings.defaults.difficulty"),
23 | END_PORTAL_ACCESSIBLE("end-portal-accessible", "settings.defaults.end-portal-accessible"),
24 | END_WORLD("end-world", "settings.defaults.end-world"),
25 | GAME_MODE("game-mode", "settings.defaults.game-mode"),
26 | FORCE_GAME_MODE("force-game-mode", "settings.defaults.force-game-mode"),
27 | HUNGER_ENABLED("hunger-enabled", "settings.defaults.hunger-enabled"),
28 | KEEP_SPAWN_IN_MEMORY("keep-spawn-in-memory", "settings.defaults.keep-spawn-in-memory"),
29 | NETHER_PORTAL_ACCESSIBLE("nether-portal-accessible", "settings.defaults.nether-portal-accessible"),
30 | NETHER_WORLD("nether-world", "settings.defaults.nether-world"),
31 | NORMAL_WORLD("world", "settings.defaults.normal-world"),
32 | PVP_ENABLED("pvp-enabled", "settings.defaults.pvp-enabled"),
33 | RECEIVE_ACHIEVEMENTS("receive-achievements", "settings.defaults.receive-achievements"),
34 | REDSTONE_ENABLED("redstone-enabled", "settings.defaults.redstone-enabled"),
35 | SPAWN_ANIMALS("spawn-animals", "settings.defaults.spawn-animals"),
36 | SPAWN_ENTITIES("spawn-entities", "settings.defaults.spawn-entities"),
37 | SPAWN_MONSTERS("spawn-monsters", "settings.defaults.spawn-monsters"),
38 | WEATHER_ENABLED("weather-enabled", "settings.defaults.weather-enabled"),
39 | WHITELIST_ENABLED("whitelist-enabled", "settings.defaults.whitelist-enabled"),
40 | WORLD("world", "settings.defaults.normal-world");
41 |
42 |
43 |
44 | private final String name;
45 | private final String storagePath;
46 |
47 | WorldDefaultProperty(@NotNull final String name, @NotNull final String storagePath) {
48 | this.name = name;
49 | this.storagePath = storagePath;
50 | }
51 |
52 | /**
53 | * Returns an Optional containing the WorldDefaultProperty enum constant with the specified name,
54 | * or an empty Optional if no such constant exists.
55 | *
56 | * @param name The name of the WorldDefaultProperty constant to find.
57 | * @return An Optional containing the found WorldDefaultProperty constant, or an empty Optional if not found.
58 | */
59 | public static Optional fromString(final String name) {
60 | return Arrays.stream(WorldDefaultProperty.values()).filter(property -> property.name.equalsIgnoreCase(name)).findFirst();
61 | }
62 |
63 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldEnvironment.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import org.jetbrains.annotations.NotNull;
4 |
5 | import java.util.Arrays;
6 | import java.util.List;
7 | import java.util.Optional;
8 |
9 | /**
10 | * Represents different types of world environments.
11 | * This enum provides methods to convert between WorldType and WorldEnvironment,
12 | * as well as to obtain string representations of the environment.
13 | *
14 | * @author Dev7ex
15 | * @since 26.06.2023
16 | */
17 | public enum WorldEnvironment {
18 |
19 | CUSTOM,
20 | NORMAL,
21 | NETHER,
22 | THE_END;
23 |
24 | /**
25 | * Converts a WorldType to its corresponding WorldEnvironment.
26 | *
27 | * @param worldType The WorldType to convert.
28 | * @return The corresponding WorldEnvironment.
29 | */
30 | public static WorldEnvironment fromType(final WorldType worldType) {
31 | return switch (worldType) {
32 | case THE_END -> WorldEnvironment.THE_END;
33 | case NETHER -> WorldEnvironment.NETHER;
34 | case NORMAL -> WorldEnvironment.NORMAL;
35 | default -> WorldEnvironment.CUSTOM;
36 | };
37 | }
38 |
39 | /**
40 | * Returns a list of string representations of all available WorldEnvironment values.
41 | *
42 | * @return A list of string representations of WorldEnvironment values.
43 | */
44 | public static List toStringList() {
45 | return Arrays.stream(WorldEnvironment.values()).map(Enum::name).toList();
46 | }
47 |
48 | /**
49 | * Returns an Optional containing the WorldEnvironment enum constant with the specified name,
50 | * or an empty Optional if no such constant exists.
51 | *
52 | * @param name The name of the WorldEnvironment constant to find.
53 | * @return An Optional containing the found WorldEnvironment constant, or an empty Optional if not found.
54 | */
55 | public static Optional fromString(@NotNull final String name) {
56 | return Arrays.stream(WorldEnvironment.values()).filter(worldType -> worldType.name().equalsIgnoreCase(name)).findFirst();
57 | }
58 |
59 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldFlag.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import lombok.AccessLevel;
4 | import lombok.Getter;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | import java.util.Arrays;
8 | import java.util.List;
9 | import java.util.Optional;
10 |
11 | /**
12 | * Represents flags that can be set for a world, such as whether achievements are received or monsters spawn.
13 | * This enum provides methods to access the storage path and possible values for each flag.
14 | *
15 | * @author Dev7ex
16 | * @since 23.05.2021
17 | */
18 | @Getter(AccessLevel.PUBLIC)
19 | public enum WorldFlag {
20 |
21 | AUTO_LOAD_ENABLED("flag.auto-load-enabled", List.of("false", "true")),
22 | AUTO_UNLOAD_ENABLED("flag.auto-unload-enabled", List.of("false", "true")),
23 | DIFFICULTY("flag.difficulty", List.of("EASY", "HARD", "NORMAL", "PEACEFUL")),
24 | END_PORTAL_ACCESSIBLE("flag.end-portal-accessible", List.of("false", "true")),
25 | GAME_MODE("flag.game-mode", List.of("ADVENTURE", "CREATIVE", "SURVIVAL", "SPECTATOR")),
26 | FORCE_GAME_MODE("flag.force-game-mode", List.of("false", "true", "false-with-permission")),
27 | HUNGER_ENABLED("flag.hunger-enabled", List.of("false", "true")),
28 | KEEP_SPAWN_IN_MEMORY("flag.keep-spawn-in-memory", List.of("false", "true")),
29 | NETHER_PORTAL_ACCESSIBLE("flag.nether-portal-accessible", List.of("false", "true")),
30 | PVP_ENABLED("flag.pvp-enabled", List.of("false", "true")),
31 | RECEIVE_ACHIEVEMENTS("flag.receive-achievements", List.of("false", "true")),
32 | REDSTONE_ENABLED("flag.redstone-enabled", List.of("false", "true")),
33 | SPAWN_ANIMALS("flag.spawn-animals", List.of("false", "true")),
34 | SPAWN_ENTITIES("flag.spawn-entities", List.of("false", "true")),
35 | SPAWN_MONSTERS("flag.spawn-monsters", List.of("false", "true")),
36 | WEATHER_ENABLED("flag.weather-enabled", List.of("false", "true"));
37 |
38 | private final String storagePath;
39 | private final List values;
40 |
41 | /**
42 | * Constructs a WorldFlag with the given storage path and possible values.
43 | *
44 | * @param storagePath The storage path of the flag.
45 | * @param values The possible values of the flag.
46 | */
47 | WorldFlag(@NotNull final String storagePath, @NotNull final List values) {
48 | this.storagePath = storagePath;
49 | this.values = values;
50 | }
51 |
52 | /**
53 | * Returns a list of string representations of all available WorldFlag values.
54 | *
55 | * @return A list of string representations of WorldFlag values.
56 | */
57 | public static List toStringList() {
58 | return Arrays.stream(WorldFlag.values()).map(Enum::name).toList();
59 | }
60 |
61 | /**
62 | * Returns an Optional containing the WorldFlag enum constant with the specified name,
63 | * or an empty Optional if no such constant exists.
64 | *
65 | * @param name The name of the WorldFlag constant to find.
66 | * @return An Optional containing the found WorldFlag constant, or an empty Optional if not found.
67 | */
68 | public static Optional fromString(final String name) {
69 | return Arrays.stream(WorldFlag.values()).filter(worldFlag -> worldFlag.name().equalsIgnoreCase(name)).findFirst();
70 | }
71 |
72 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldProperty.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import lombok.AccessLevel;
4 | import lombok.Getter;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | import java.util.Arrays;
8 | import java.util.Optional;
9 |
10 | /**
11 | * Represents properties associated with a world.
12 | * Each property has a storage path and can be modifiable.
13 | * Provides methods to retrieve properties based on their storage path.
14 | *
15 | * @author Dev7ex
16 | * @since 18.06.2023
17 | */
18 | @Getter(AccessLevel.PUBLIC)
19 | public enum WorldProperty {
20 |
21 | AUTO_LOAD_ENABLED("flag.auto-load-enabled", true),
22 | AUTO_UNLOAD_ENABLED("flag.auto-unload-enabled", true),
23 | CREATION_TIMESTAMP("creation-timestamp", true),
24 | CREATOR_NAME("creator-name", true),
25 | DIFFICULTY("flag.difficulty", true),
26 | END_PORTAL_ACCESSIBLE("flag.end-portal-accessible", true),
27 | ENVIRONMENT("generation.environment", false),
28 | GAME_MODE("flag.game-mode", true),
29 | FORCE_GAME_MODE("flag.force-game-mode", true),
30 | GENERATOR("generation.generator", false),
31 | HUNGER_ENABLED("flag.hunger-enabled", true),
32 | KEEP_SPAWN_IN_MEMORY("flag.keep-spawn-in-memory", true),
33 | LINKED_END_WORLD("end-world", true),
34 | LINKED_NETHER_WORLD("nether-world", true),
35 | LINKED_OVERWORLD("overworld", true),
36 | NETHER_PORTAL_ACCESSIBLE("flag.nether-portal-accessible", true),
37 | PVP_ENABLED("flag.pvp-enabled", true),
38 | RECEIVE_ACHIEVEMENTS("flag.receive-achievements", true),
39 | REDSTONE_ENABLED("flag.redstone-enabled", true),
40 | SPAWN_ANIMALS("flag.spawn-animals", true),
41 | SPAWN_ENTITIES("flag.spawn-entities", true),
42 | SPAWN_MONSTERS("flag.spawn-monsters", true),
43 | TYPE("generation.type", true),
44 | WEATHER_ENABLED("flag.weather-enabled", true),
45 | WHITELIST("whitelist.entries", true),
46 | WHITELIST_ENABLED("whitelist.enabled", true);
47 |
48 | private final String storagePath;
49 | private final boolean modifiable;
50 |
51 | WorldProperty(@NotNull final String storagePath, final boolean modifiable) {
52 | this.storagePath = storagePath;
53 | this.modifiable = modifiable;
54 | }
55 |
56 | /**
57 | * Retrieves a WorldProperty enum constant based on its storage path.
58 | *
59 | * @param storagePath The storage path of the property.
60 | * @return An Optional containing the matching WorldProperty, or empty if not found.
61 | */
62 | public static Optional fromStoragePath(@NotNull final String storagePath) {
63 | return Arrays.stream(WorldProperty.values())
64 | .filter(property -> property.getStoragePath().equalsIgnoreCase(storagePath))
65 | .findFirst();
66 | }
67 |
68 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import org.jetbrains.annotations.NotNull;
4 |
5 | import java.util.Map;
6 | import java.util.Optional;
7 |
8 | /**
9 | * A provider interface for managing worlds.
10 | * Implementations of this interface handle the registration, retrieval,
11 | * and configuration of world holders.
12 | *
13 | * @param The type of world holder managed by this provider.
14 | * @author Dev7ex
15 | * @since 18.06.2023
16 | */
17 | public interface WorldProvider {
18 |
19 | /**
20 | * Registers a new world holder.
21 | *
22 | * @param worldHolder The world holder to register.
23 | */
24 | void register(@NotNull final T worldHolder);
25 |
26 | /**
27 | * Unregisters a world holder by its name.
28 | *
29 | * @param name The name of the world holder to unregister.
30 | */
31 | void unregister(@NotNull final String name);
32 |
33 | /**
34 | * Checks if a world holder with the given name is registered.
35 | *
36 | * @param name The name of the world holder to check.
37 | * @return True if the world holder is registered, false otherwise.
38 | */
39 | boolean isRegistered(@NotNull final String name);
40 |
41 | /**
42 | * Retrieves a world holder by its name.
43 | *
44 | * @param name The name of the world holder to retrieve.
45 | * @return An Optional containing the retrieved world holder, or empty if not found.
46 | */
47 | Optional getWorldHolder(@NotNull final String name);
48 |
49 | T getDefaultWorldHolder();
50 |
51 | /**
52 | * Retrieves all registered world holders.
53 | *
54 | * @return A map of world holder names to their corresponding world holders.
55 | */
56 | Map getWorldHolders();
57 |
58 | /**
59 | * Retrieves the configuration associated with this world provider.
60 | *
61 | * @return The configuration of the world provider.
62 | */
63 | WorldConfiguration getConfiguration();
64 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/WorldType.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world;
2 |
3 | import lombok.AccessLevel;
4 | import lombok.Getter;
5 |
6 | import java.util.Arrays;
7 | import java.util.List;
8 | import java.util.Optional;
9 |
10 | /**
11 | * An enumeration representing different types of worlds.
12 | * Each world type has a boolean flag indicating if it belongs to the overworld.
13 | *
14 | * @author Dev7ex
15 | * @since 20.05.2021
16 | */
17 | @Getter(AccessLevel.PUBLIC)
18 | public enum WorldType {
19 |
20 | /**
21 | * Represents a custom world type.
22 | */
23 | CUSTOM(false),
24 |
25 | /**
26 | * Represents an end world type.
27 | */
28 | THE_END(false),
29 |
30 | /**
31 | * Represents a nether world type.
32 | */
33 | NETHER(false),
34 |
35 | /**
36 | * Represents a normal world type.
37 | */
38 | NORMAL(true);
39 |
40 | private final boolean overWorld;
41 |
42 | /**
43 | * Constructs a WorldType with the given overworld flag.
44 | *
45 | * @param overWorld True if the world belongs to the overworld, false otherwise.
46 | */
47 | WorldType(final boolean overWorld) {
48 | this.overWorld = overWorld;
49 | }
50 |
51 | /**
52 | * Retrieves a list of string representations of all WorldType values.
53 | *
54 | * @return A list of string representations of WorldType values.
55 | */
56 | public static List toStringList() {
57 | return Arrays.stream(WorldType.values()).map(Enum::name).toList();
58 | }
59 |
60 | /**
61 | * Retrieves a WorldType enum value from its string representation.
62 | *
63 | * @param name The string representation of the WorldType.
64 | * @return An Optional containing the corresponding WorldType enum value, or empty if not found.
65 | */
66 | public static Optional fromString(final String name) {
67 | return Arrays.stream(WorldType.values())
68 | .filter(worldType -> worldType.name().equalsIgnoreCase(name.toUpperCase()))
69 | .findFirst();
70 | }
71 |
72 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/biome/BiomeHolder.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world.biome;
2 |
3 | /**
4 | * @author Dev7ex
5 | * @since 23.02.2024
6 | */
7 | public interface BiomeHolder {
8 |
9 | V getBiome();
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/generator/WorldGenerator.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world.generator;
2 |
3 | /**
4 | * Represents a world generator.
5 | * Implementations of this interface provide methods for generating worlds.
6 | *
7 | * @author Dev7ex
8 | * @since 26.03.2024
9 | */
10 | public interface WorldGenerator {
11 |
12 | /**
13 | * Gets the name of the world generator.
14 | *
15 | * @return The name of the world generator.
16 | */
17 | default String getName() {
18 | return this.getClass().getSimpleName();
19 | }
20 |
21 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/generator/WorldGeneratorHolder.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world.generator;
2 |
3 | /**
4 | * Represents a holder for a world generator.
5 | * Implementations of this interface provide methods to retrieve the name of the world generator.
6 | *
7 | * @author Dev7ex
8 | * @since 06.06.2024
9 | */
10 | public interface WorldGeneratorHolder {
11 |
12 | /**
13 | * Gets the name of the world generator.
14 | *
15 | * @return The name of the world generator.
16 | */
17 | String getName();
18 |
19 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/generator/WorldGeneratorProperty.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world.generator;
2 |
3 | import lombok.AccessLevel;
4 | import lombok.Getter;
5 | import org.jetbrains.annotations.NotNull;
6 |
7 | /**
8 | * @author Dev7ex
9 | * @since 07.06.2024
10 | */
11 | @Getter(AccessLevel.PUBLIC)
12 | public enum WorldGeneratorProperty {
13 |
14 | NAME("name"),
15 | AUTHOR("author"),
16 | SETTINGS_SPAWN_X("settings.spawn.x"),
17 | SETTINGS_SPAWN_Y("settings.spawn.y"),
18 | SETTINGS_SPAWN_Z("settings.spawn.z"),
19 | ENVIRONMENT("environment"),
20 | SEED("seed"),
21 | TYPE("type"),
22 | GENERATOR("generator"),
23 | HARDCORE("hardcore"),
24 | GENERATE_STRUCTURES("generate-structures"),
25 | SINGLE_BIOME("single-biome"),
26 | BIOME("biome"),
27 | BIOMES("biomes");
28 |
29 | private final String storagePath;
30 |
31 | WorldGeneratorProperty(@NotNull final String storagePath) {
32 | this.storagePath = storagePath;
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/generator/WorldGeneratorProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world.generator;
2 |
3 | import java.util.List;
4 | import java.util.Map;
5 |
6 | /**
7 | * Represents a provider for world generators.
8 | * Implementations of this interface provide methods to retrieve a map of world generators.
9 | *
10 | * @param The type of WorldGeneratorHolder.
11 | * @since 29.06.2023
12 | */
13 | public interface WorldGeneratorProvider {
14 |
15 | /**
16 | * Retrieves a map of custom world generators.
17 | *
18 | * @return A map containing instances of WorldGeneratorHolder as keys and their corresponding world generator names as values.
19 | */
20 | Map getCustomGenerators();
21 |
22 | /**
23 | * Retrieves a map of file-based world generators.
24 | *
25 | * @return A map containing instances of WorldGeneratorHolder as keys and their corresponding world generators as values.
26 | */
27 | Map getFileGenerators();
28 |
29 | /**
30 | * Retrieves a map of default world generators.
31 | *
32 | * @return A map containing instances of WorldGeneratorHolder as keys and their corresponding default world generators as values.
33 | */
34 | List getDefaultGenerators();
35 |
36 | /**
37 | * Checks if a custom world generator is registered.
38 | *
39 | * @param generator The name of the generator to check.
40 | * @return True if the generator is registered, false otherwise.
41 | */
42 | boolean isRegistered(String generator);
43 |
44 | List getAllGenerators();
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/location/WorldLocation.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.api.world.location;
2 |
3 | import org.jetbrains.annotations.NotNull;
4 |
5 | /**
6 | * Represents a location in a world.
7 | * This interface provides methods for accessing and modifying the coordinates and orientation of the location.
8 | *
9 | * @author Dev7ex
10 | * @since 30.06.2023
11 | */
12 | public interface WorldLocation {
13 |
14 | /**
15 | * Gets the name of the world associated with this location.
16 | *
17 | * @return The name of the world.
18 | */
19 | String getWorldName();
20 |
21 | /**
22 | * Sets the name of the world associated with this location.
23 | *
24 | * @param worldName The name of the world.
25 | */
26 | void setWorldName(@NotNull final String worldName);
27 |
28 | /**
29 | * Gets the x-coordinate of this location.
30 | *
31 | * @return The x-coordinate.
32 | */
33 | double getX();
34 |
35 | /**
36 | * Sets the x-coordinate of this location.
37 | *
38 | * @param x The x-coordinate.
39 | */
40 | void setX(final double x);
41 |
42 | /**
43 | * Gets the y-coordinate of this location.
44 | *
45 | * @return The y-coordinate.
46 | */
47 | double getY();
48 |
49 | /**
50 | * Sets the y-coordinate of this location.
51 | *
52 | * @param y The y-coordinate.
53 | */
54 | void setY(final double y);
55 |
56 | /**
57 | * Gets the z-coordinate of this location.
58 | *
59 | * @return The z-coordinate.
60 | */
61 | double getZ();
62 |
63 | /**
64 | * Sets the z-coordinate of this location.
65 | *
66 | * @param z The z-coordinate.
67 | */
68 | void setZ(final double z);
69 |
70 | /**
71 | * Gets the yaw of this location.
72 | *
73 | * @return The yaw.
74 | */
75 | double getYaw();
76 |
77 | /**
78 | * Sets the yaw of this location.
79 | *
80 | * @param yaw The yaw.
81 | */
82 | void setYaw(final double yaw);
83 |
84 | /**
85 | * Gets the pitch of this location.
86 | *
87 | * @return The pitch.
88 | */
89 | double getPitch();
90 |
91 | /**
92 | * Sets the pitch of this location.
93 | *
94 | * @param pitch The pitch.
95 | */
96 | void setPitch(final double pitch);
97 |
98 | }
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/location/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes relevant to locations.
3 | */
4 | package com.dev7ex.multiworld.api.world.location;
--------------------------------------------------------------------------------
/multiworld-api/multiworld-api-core/src/main/java/com/dev7ex/multiworld/api/world/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Classes relevant to worlds.
3 | */
4 | package com.dev7ex.multiworld.api.world;
--------------------------------------------------------------------------------
/multiworld-api/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | multiworld
9 | com.dev7ex
10 | 1.7.4-SNAPSHOT
11 |
12 |
13 | MultiWorld-API
14 | multiworld-api
15 | pom
16 |
17 |
18 | multiworld-api-core
19 | multiworld-api-bukkit
20 |
21 |
22 |
23 | ${project.source.version}
24 | ${project.source.version}
25 | ${project.source.encoding}
26 |
27 |
28 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/BackCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.multiworld.MultiWorldPlugin;
6 | import com.dev7ex.multiworld.api.bukkit.event.user.WorldUserTeleportWorldEvent;
7 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
8 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
9 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
10 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
11 | import org.bukkit.Bukkit;
12 | import org.bukkit.command.CommandSender;
13 | import org.bukkit.entity.Player;
14 | import org.jetbrains.annotations.NotNull;
15 |
16 | /**
17 | * @author Dev7ex
18 | * @since 20.05.2021
19 | */
20 | @BukkitCommandProperties(name = "back", permission = "multiworld.command.world.back")
21 | public class BackCommand extends BukkitCommand {
22 |
23 | private final DefaultTranslationProvider translationProvider;
24 | private final DefaultWorldProvider worldProvider;
25 |
26 | public BackCommand(@NotNull final MultiWorldPlugin plugin) {
27 | super(plugin);
28 |
29 | this.translationProvider = plugin.getTranslationProvider();
30 | this.worldProvider = plugin.getWorldProvider();
31 | }
32 |
33 | @Override
34 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
35 | if (!(commandSender instanceof Player player)) {
36 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.no-console-command")
37 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
38 | .replaceAll("%command_name%", super.getName()));
39 | return;
40 | }
41 |
42 | if (arguments.length != 1) {
43 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.back.usage")
44 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
45 | return;
46 | }
47 | final BukkitWorldUser user = MultiWorldPlugin.getInstance()
48 | .getUserProvider()
49 | .getUser(player.getUniqueId())
50 | .orElseThrow();
51 |
52 | if (user.getLastLocation() == null) {
53 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.back.world-not-exists")
54 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
55 | .replaceAll("%world_name%", player.getWorld().getName()));
56 | return;
57 | }
58 |
59 | if (MultiWorldPlugin.getInstance().getWorldProvider().getWorldHolder(user.getLastLocation().getWorldName()).isEmpty()) {
60 | commandSender.sendMessage(super.getConfiguration().getString("general.world.not-exists")
61 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
62 | .replaceAll("%world_name%", player.getWorld().getName()));
63 | return;
64 | }
65 | final BukkitWorldHolder currentWorldHolder = this.worldProvider.getWorldHolder(player.getWorld().getName())
66 | .orElseThrow();
67 | final BukkitWorldHolder nextWorldHolder = this.worldProvider.getWorldHolder(user.getLastLocation().getWorldName())
68 | .orElseThrow();
69 |
70 | if (!nextWorldHolder.isLoaded()) {
71 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-loaded")
72 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
73 | .replaceAll("%world_name%", player.getWorld().getName()));
74 | return;
75 | }
76 |
77 | if (user.getLastLocation().getWorldName().equalsIgnoreCase(player.getWorld().getName())) {
78 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.back.already-there")
79 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
80 | .replaceAll("%world_name%", player.getWorld().getName()));
81 | return;
82 | }
83 | final WorldUserTeleportWorldEvent event = new WorldUserTeleportWorldEvent(user, currentWorldHolder, nextWorldHolder);
84 | Bukkit.getPluginManager().callEvent(event);
85 |
86 | if (event.isCancelled()) {
87 | return;
88 | }
89 | player.teleport(nextWorldHolder.getWorld().getSpawnLocation());
90 | }
91 |
92 | }
93 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/BackupCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
8 | import com.dev7ex.multiworld.world.DefaultWorldManager;
9 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
10 | import org.bukkit.command.CommandSender;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | import java.util.ArrayList;
14 | import java.util.Collections;
15 | import java.util.List;
16 |
17 | /**
18 | * @author Dev7ex
19 | * @since 19.06.2023
20 | */
21 | @BukkitCommandProperties(name = "backup", permission = "multiworld.command.world.backup")
22 | public class BackupCommand extends BukkitCommand implements BukkitTabCompleter {
23 |
24 | private final DefaultTranslationProvider translationProvider;
25 | private final DefaultWorldManager worldManager;
26 | private final DefaultWorldProvider worldProvider;
27 |
28 | public BackupCommand(@NotNull final MultiWorldPlugin plugin) {
29 | super(plugin);
30 |
31 | this.translationProvider = plugin.getTranslationProvider();
32 | this.worldManager = plugin.getWorldManager();
33 | this.worldProvider = plugin.getWorldProvider();
34 | }
35 |
36 | @Override
37 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
38 | if (arguments.length != 2) {
39 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.backup.usage")
40 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
41 | return;
42 | }
43 |
44 | if (arguments[1].equalsIgnoreCase("%creator_name%")) {
45 | arguments[1] = arguments[1].replaceAll("%creator_name%", commandSender.getName());
46 | }
47 |
48 | if (!this.worldProvider.isRegistered(arguments[1])) {
49 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender,"general.world.not-exists")
50 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
51 | .replaceAll("%world_name%", arguments[1]));
52 | return;
53 | }
54 | this.worldManager.createBackup(commandSender.getName(), arguments[1]);
55 | }
56 |
57 | @Override
58 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
59 | if (arguments.length != 2) {
60 | return Collections.emptyList();
61 | }
62 | return new ArrayList<>(this.worldProvider.getWorldHolders().keySet());
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/CloneCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
8 | import com.dev7ex.multiworld.world.DefaultWorldManager;
9 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
10 | import org.bukkit.command.CommandSender;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | import java.util.ArrayList;
14 | import java.util.Collections;
15 | import java.util.List;
16 |
17 | /**
18 | * @author Dev7ex
19 | * @since 26.06.2023
20 | */
21 | @BukkitCommandProperties(name = "clone", permission = "multiworld.command.world.clone")
22 | public class CloneCommand extends BukkitCommand implements BukkitTabCompleter {
23 |
24 | private final DefaultTranslationProvider translationProvider;
25 | private final DefaultWorldManager worldManager;
26 | private final DefaultWorldProvider worldProvider;
27 |
28 | public CloneCommand(@NotNull final MultiWorldPlugin plugin) {
29 | super(plugin);
30 |
31 | this.translationProvider = plugin.getTranslationProvider();
32 | this.worldManager = plugin.getWorldManager();
33 | this.worldProvider = plugin.getWorldProvider();
34 | }
35 |
36 | @Override
37 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
38 | if (arguments.length != 3) {
39 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "messages.commands.clone.usage")
40 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
41 | return;
42 | }
43 |
44 | if (arguments[2].equalsIgnoreCase("%creator_name%")) {
45 | arguments[2] = arguments[2].replaceAll("%creator_name%", commandSender.getName());
46 | }
47 |
48 | if (MultiWorldPlugin.getInstance().getWorldProvider().isRegistered(arguments[2])) {
49 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender,"general.world.already-exists")
50 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
51 | .replaceAll("%world_name%", arguments[2]));
52 | return;
53 | }
54 | this.worldManager.cloneWorld(commandSender.getName(), arguments[1], arguments[2]);
55 | }
56 |
57 | @Override
58 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
59 | if (arguments.length != 2) {
60 | return Collections.emptyList();
61 | }
62 | return new ArrayList<>(this.worldProvider.getWorldHolders().keySet());
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/DeleteCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.common.io.file.Files;
7 | import com.dev7ex.multiworld.MultiWorldPlugin;
8 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
9 | import com.dev7ex.multiworld.world.DefaultWorldManager;
10 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
11 | import org.bukkit.Bukkit;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | import java.io.File;
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 | /**
20 | * @author Dev7ex
21 | * @since 20.05.2021
22 | */
23 | @BukkitCommandProperties(name = "delete", permission = "multiworld.command.world.delete")
24 | public class DeleteCommand extends BukkitCommand implements BukkitTabCompleter {
25 |
26 | private final DefaultTranslationProvider translationProvider;
27 | private final DefaultWorldManager worldManager;
28 | private final DefaultWorldProvider worldProvider;
29 |
30 | public DeleteCommand(@NotNull final MultiWorldPlugin plugin) {
31 | super(plugin);
32 |
33 | this.translationProvider = plugin.getTranslationProvider();
34 | this.worldManager = plugin.getWorldManager();
35 | this.worldProvider = plugin.getWorldProvider();
36 | }
37 |
38 | @Override
39 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
40 | if (arguments.length != 2) {
41 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "messages.commands.delete.usage")
42 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
43 | return;
44 | }
45 |
46 | if (arguments[1].equalsIgnoreCase("%creator_name%")) {
47 | arguments[1] = arguments[1].replaceAll("%creator_name%", commandSender.getName());
48 | }
49 |
50 | if (this.worldProvider.getWorldHolder(arguments[1]).isEmpty()) {
51 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-exists")
52 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
53 | .replaceAll("%world_name%", arguments[1]));
54 | return;
55 | }
56 | final File worldFolder = new File(Bukkit.getWorldContainer(), arguments[1]);
57 |
58 | if (!worldFolder.exists()) {
59 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-exists")
60 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
61 | .replaceAll("%world_name%", arguments[1]));
62 | return;
63 | }
64 |
65 | if ((!Files.containsFile(worldFolder, "level.dat")) && (!Files.containsFile(worldFolder, "session.lock"))) {
66 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-exists")
67 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
68 | .replaceAll("%world_name%", arguments[1]));
69 | return;
70 | }
71 |
72 | if (arguments[1].equalsIgnoreCase(MultiWorldPlugin.getInstance().getConfiguration().getString("settings.defaults.normal-world"))) {
73 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.delete.world.delete-locked")
74 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
75 | .replaceAll("%world_name%", arguments[1]));
76 | return;
77 | }
78 | this.worldManager.deleteWorld(commandSender.getName(), arguments[1]);
79 | }
80 |
81 | @Override
82 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
83 | final List worlds = new ArrayList<>(this.worldProvider.getWorldHolders().keySet());
84 | worlds.remove(super.getConfiguration().getString("settings.defaults.normal-world"));
85 | return worlds;
86 | }
87 |
88 | }
89 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/HelpCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.multiworld.MultiWorldPlugin;
6 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
7 | import org.bukkit.command.CommandSender;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | /**
11 | * @author Dev7ex
12 | * @since 18.06.2023
13 | */
14 | @BukkitCommandProperties(name = "help", permission = "multiworld.command.world")
15 | public class HelpCommand extends BukkitCommand {
16 |
17 | private final DefaultTranslationProvider translationProvider;
18 |
19 | public HelpCommand(final MultiWorldPlugin plugin) {
20 | super(plugin);
21 |
22 | this.translationProvider = plugin.getTranslationProvider();
23 | }
24 |
25 | @Override
26 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
27 | this.translationProvider.getMessageList(commandSender, "commands.world.help.message")
28 | .forEach(message -> commandSender.sendMessage(message.replaceAll("%prefix%", super.getConfiguration().getPrefix())));
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/ListCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.multiworld.MultiWorldPlugin;
6 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
7 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
8 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
9 | import net.md_5.bungee.api.ChatColor;
10 | import org.bukkit.command.CommandSender;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | import java.util.Set;
14 |
15 | /**
16 | * @author Dev7ex
17 | * @since 20.05.2021
18 | */
19 | @BukkitCommandProperties(name = "list", permission = "multiworld.command.world.list")
20 | public class ListCommand extends BukkitCommand {
21 |
22 | private final DefaultTranslationProvider translationProvider;
23 | private final DefaultWorldProvider worldProvider;
24 |
25 | public ListCommand(@NotNull final MultiWorldPlugin plugin) {
26 | super(plugin);
27 |
28 | this.translationProvider = plugin.getTranslationProvider();
29 | this.worldProvider = plugin.getWorldProvider();
30 | }
31 |
32 | @Override
33 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
34 | if (arguments.length != 1) {
35 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.list.usage")
36 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
37 | return;
38 | }
39 |
40 | final StringBuilder stringBuilder = new StringBuilder();
41 | final Set worldEntries = this.worldProvider.getWorldHolders().keySet();
42 |
43 | for (final String worldEntry : worldEntries) {
44 | final BukkitWorldHolder worldHolder = this.worldProvider.getWorldHolder(worldEntry)
45 | .orElseThrow();
46 |
47 | if (!stringBuilder.isEmpty()) {
48 | stringBuilder.append(ChatColor.GRAY);
49 | stringBuilder.append(", ");
50 | }
51 | stringBuilder.append(worldHolder.isLoaded() ? ChatColor.GREEN : ChatColor.RED).append(worldEntry);
52 | }
53 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.list.message")
54 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
55 | .replaceAll("%world_names%", stringBuilder.toString()));
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/LoadCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
9 | import com.dev7ex.multiworld.world.DefaultWorldManager;
10 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
11 | import org.bukkit.Bukkit;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | import java.util.List;
16 |
17 | /**
18 | * @author Dev7ex
19 | * @since 20.05.2021
20 | */
21 | @BukkitCommandProperties(name = "load", permission = "multiworld.command.world.load")
22 | public class LoadCommand extends BukkitCommand implements BukkitTabCompleter {
23 |
24 | private final DefaultTranslationProvider translationProvider;
25 | private final DefaultWorldManager worldManager;
26 | private final DefaultWorldProvider worldProvider;
27 |
28 | public LoadCommand(@NotNull final MultiWorldPlugin plugin) {
29 | super(plugin);
30 |
31 | this.translationProvider = plugin.getTranslationProvider();
32 | this.worldManager = plugin.getWorldManager();
33 | this.worldProvider = plugin.getWorldProvider();
34 | }
35 |
36 | @Override
37 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
38 | if (arguments.length != 2) {
39 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "messages.commands.load.usage")
40 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
41 | return;
42 | }
43 |
44 | if (arguments[1].equalsIgnoreCase("%creator_name%")) {
45 | arguments[1] = arguments[1].replaceAll("%creator_name%", commandSender.getName());
46 | }
47 |
48 | if (this.worldProvider.getWorldHolder(arguments[1]).isEmpty()) {
49 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-exists")
50 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
51 | .replaceAll("%world_name%", arguments[1]));
52 | return;
53 | }
54 |
55 | if (Bukkit.getWorld(arguments[1]) != null) {
56 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.already-loaded")
57 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
58 | .replaceAll("%world_name%", arguments[1]));
59 | return;
60 | }
61 | this.worldManager.loadWorld(commandSender.getName(), arguments[1]);
62 | }
63 |
64 | @Override
65 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
66 | return this.worldProvider.getWorldHolders()
67 | .values()
68 | .stream()
69 | .filter(bukkitWorldHolder -> !bukkitWorldHolder.isLoaded())
70 | .map(BukkitWorldHolder::getName)
71 | .toList();
72 | }
73 |
74 | }
75 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/ReloadCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.multiworld.MultiWorldPlugin;
6 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
7 | import org.bukkit.command.CommandSender;
8 | import org.jetbrains.annotations.NotNull;
9 |
10 | /**
11 | * @author Dev7ex
12 | * @since 28.12.2022
13 | */
14 | @BukkitCommandProperties(name = "reload", permission = "multiworld.command.world.reload")
15 | public class ReloadCommand extends BukkitCommand {
16 |
17 | private final DefaultTranslationProvider translationProvider;
18 |
19 | public ReloadCommand(@NotNull final MultiWorldPlugin plugin) {
20 | super(plugin);
21 |
22 | this.translationProvider = plugin.getTranslationProvider();
23 | }
24 |
25 | @Override
26 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
27 | if (arguments.length != 1) {
28 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.reload.usage")
29 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
30 | return;
31 | }
32 | super.getConfiguration().load();
33 |
34 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender,"commands.world.reload.message")
35 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/UnloadCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
9 | import com.dev7ex.multiworld.world.DefaultWorldManager;
10 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
11 | import org.bukkit.Bukkit;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | import java.util.List;
16 |
17 | /**
18 | * @author Dev7ex
19 | * @since 20.05.2021
20 | */
21 | @BukkitCommandProperties(name = "unload", permission = "multiworld.command.world.unload")
22 | public class UnloadCommand extends BukkitCommand implements BukkitTabCompleter {
23 |
24 | private final DefaultTranslationProvider translationProvider;
25 | private final DefaultWorldManager worldManager;
26 | private final DefaultWorldProvider worldProvider;
27 |
28 | public UnloadCommand(@NotNull final MultiWorldPlugin plugin) {
29 | super(plugin);
30 |
31 | this.translationProvider = plugin.getTranslationProvider();
32 | this.worldManager = plugin.getWorldManager();
33 | this.worldProvider = plugin.getWorldProvider();
34 | }
35 |
36 | @Override
37 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
38 | if (arguments.length != 2) {
39 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "messages.commands.load.usage")
40 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
41 | return;
42 | }
43 |
44 | if (arguments[1].equalsIgnoreCase("%creator_name%")) {
45 | arguments[1] = arguments[1].replaceAll("%creator_name%", commandSender.getName());
46 | }
47 |
48 | if (this.worldProvider.getWorldHolder(arguments[1]).isEmpty()) {
49 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-exists")
50 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
51 | .replaceAll("%world_name%", arguments[1]));
52 | return;
53 | }
54 |
55 | if (arguments[1].equalsIgnoreCase(super.getConfiguration().getString("settings.defaults.normal-world"))) {
56 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.unload-locked")
57 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
58 | .replaceAll("%world_name%", arguments[1]));
59 | return;
60 | }
61 |
62 | if (Bukkit.getWorld(arguments[1]) == null) {
63 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-loaded")
64 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
65 | .replaceAll("%world_name%", arguments[1]));
66 | }
67 | this.worldManager.unloadWorld(commandSender.getName(), arguments[1]);
68 | }
69 |
70 | @Override
71 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
72 | return this.worldProvider
73 | .getWorldHolders()
74 | .values()
75 | .stream()
76 | .filter(BukkitWorldHolder::isLoaded)
77 | .map(BukkitWorldHolder::getName)
78 | .toList();
79 | }
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/VersionCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.multiworld.MultiWorldPlugin;
6 | import com.dev7ex.multiworld.util.Colored;
7 | import com.dev7ex.multiworld.util.PluginUpdater;
8 | import net.md_5.bungee.api.ChatColor;
9 | import org.bukkit.command.CommandSender;
10 | import org.bukkit.plugin.PluginDescriptionFile;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | /**
14 | * @author Dev7ex
15 | * @since 22.07.2024
16 | */
17 | @BukkitCommandProperties(name = "version", permission = "multiworld.command.world.version")
18 | public class VersionCommand extends BukkitCommand {
19 |
20 | private final PluginUpdater updater;
21 | private final PluginDescriptionFile descriptionFile;
22 |
23 | public VersionCommand(@NotNull final MultiWorldPlugin plugin) {
24 | super(plugin);
25 |
26 | this.updater = plugin.getUpdater();
27 | this.descriptionFile = plugin.getDescription();
28 | }
29 |
30 | @Override
31 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
32 | final MultiWorldPlugin plugin = MultiWorldPlugin.getInstance();
33 |
34 | commandSender.sendMessage(" ");
35 | commandSender.sendMessage("§f§m §r§r " + super.getConfiguration().getPrefix() + " §f§m ");
36 | commandSender.sendMessage(" ");
37 | commandSender.sendMessage("§8» §bVersion: §a" + this.descriptionFile.getVersion());
38 | commandSender.sendMessage("§8» §bAuthors: " + this.getAuthors());
39 | commandSender.sendMessage("§8» §bSupport: §adiscord.dev7ex.com");
40 | commandSender.sendMessage("§8» §bWiki: §ahttps://github.com/Dev7ex/MultiWorld/wiki");
41 | commandSender.sendMessage("§8» §bReport Bug: §ahttps://github.com/Dev7ex/MultiWorld/issues");
42 | commandSender.sendMessage("§8» §bUpdate Available: " + Colored.getColoredBoolean(this.updater.isUpdateAvailable()));
43 | commandSender.sendMessage(" ");
44 | commandSender.sendMessage("§f§m §r§r " + super.getConfiguration().getPrefix() + " §f§m ");
45 | commandSender.sendMessage(" ");
46 | }
47 |
48 | private String getAuthors() {
49 | final StringBuilder stringBuilder = new StringBuilder();
50 |
51 | for (final String author : this.descriptionFile.getAuthors()) {
52 | if (!stringBuilder.isEmpty()) {
53 | stringBuilder.append(ChatColor.GRAY);
54 | stringBuilder.append(", ");
55 | }
56 | stringBuilder.append(ChatColor.GREEN).append(author);
57 | }
58 | return stringBuilder.toString();
59 | }
60 |
61 | }
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/WhitelistCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.command.world.whitelist.ListCommand;
8 | import com.dev7ex.multiworld.command.world.whitelist.*;
9 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
10 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
11 | import com.google.common.collect.Lists;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 | import org.jetbrains.annotations.Nullable;
15 |
16 | import java.util.ArrayList;
17 | import java.util.Collections;
18 | import java.util.List;
19 | import java.util.Objects;
20 |
21 | /**
22 | * @author Dev7ex
23 | * @since 29.06.2023
24 | */
25 | @BukkitCommandProperties(name = "whitelist", permission = "multiworld.command.world.whitelist")
26 | public class WhitelistCommand extends BukkitCommand implements BukkitTabCompleter {
27 |
28 | private final DefaultTranslationProvider translationProvider;
29 | private final DefaultWorldProvider worldProvider;
30 |
31 | public WhitelistCommand(@NotNull final MultiWorldPlugin plugin) {
32 | super(plugin);
33 |
34 | this.translationProvider = plugin.getTranslationProvider();
35 | this.worldProvider = plugin.getWorldProvider();
36 |
37 | super.registerSubCommand(new AddCommand(plugin));
38 | super.registerSubCommand(new DisableCommand(plugin));
39 | super.registerSubCommand(new EnableCommand(plugin));
40 | super.registerSubCommand(new HelpCommand(plugin));
41 | super.registerSubCommand(new ListCommand(plugin));
42 | super.registerSubCommand(new RemoveCommand(plugin));
43 | }
44 |
45 | @Override
46 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
47 | if ((arguments.length < 3) || (arguments.length > 4)) {
48 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.usage")
49 | .replaceAll("%prefix%", super.getConfiguration().getPrefix()));
50 | return;
51 | }
52 |
53 | if (this.worldProvider.getWorldHolder(arguments[1]).isEmpty()) {
54 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "general.world.not-exists")
55 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
56 | .replaceAll("%world_name%", arguments[1]));
57 | return;
58 | }
59 |
60 | if (super.getSubCommand(arguments[2].toLowerCase()).isEmpty()) {
61 | Objects.requireNonNull(super.getSubCommand(HelpCommand.class)).execute(commandSender, arguments);
62 | return;
63 | }
64 | super.getSubCommand(arguments[2].toLowerCase())
65 | .get()
66 | .execute(commandSender, arguments);
67 | }
68 |
69 | @Nullable
70 | @Override
71 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
72 | if ((arguments.length < 2) || (arguments.length > 4)) {
73 | return Collections.emptyList();
74 | }
75 |
76 | if (arguments.length == 2) {
77 | return new ArrayList<>(this.worldProvider.getWorldHolders().keySet());
78 | }
79 |
80 | if (arguments.length == 3) {
81 | return Lists.newArrayList(super.getSubCommands().keySet());
82 | }
83 |
84 | if (super.getSubCommand(arguments[2].toLowerCase()).isEmpty()) {
85 | return Collections.emptyList();
86 | }
87 | final BukkitCommand subCommand = super.getSubCommand(arguments[2].toLowerCase())
88 | .get();
89 |
90 | if (!(subCommand instanceof BukkitTabCompleter)) {
91 | return Collections.emptyList();
92 | }
93 | return ((BukkitTabCompleter) subCommand).onTabComplete(commandSender, arguments);
94 | }
95 |
96 | }
97 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/whitelist/AddCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world.whitelist;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.api.world.WorldProperty;
9 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
10 | import com.dev7ex.multiworld.world.DefaultWorldConfiguration;
11 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
12 | import com.google.common.collect.Lists;
13 | import org.bukkit.Bukkit;
14 | import org.bukkit.command.CommandSender;
15 | import org.bukkit.entity.HumanEntity;
16 | import org.jetbrains.annotations.NotNull;
17 |
18 | import java.util.Collections;
19 | import java.util.List;
20 |
21 | /**
22 | * @author Dev7ex
23 | * @since 15.02.2024
24 | */
25 | @BukkitCommandProperties(name = "add", permission = "multiworld.command.whitelist.add")
26 | public class AddCommand extends BukkitCommand implements BukkitTabCompleter {
27 |
28 | private final DefaultTranslationProvider translationProvider;
29 | private final DefaultWorldConfiguration worldConfiguration;
30 | private final DefaultWorldProvider worldProvider;
31 |
32 | public AddCommand(@NotNull final MultiWorldPlugin plugin) {
33 | super(plugin);
34 |
35 | this.translationProvider = plugin.getTranslationProvider();
36 | this.worldConfiguration = plugin.getWorldConfiguration();
37 | this.worldProvider = plugin.getWorldProvider();
38 | }
39 |
40 | @Override
41 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
42 | final BukkitWorldHolder worldHolder = this.worldProvider
43 | .getWorldHolder(arguments[1])
44 | .orElseThrow();
45 |
46 | if (worldHolder.getWhitelist().contains(arguments[3])) {
47 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.add.already-added")
48 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
49 | .replaceAll("%world_name%", arguments[1])
50 | .replaceAll("%player_name%", arguments[3]));
51 | return;
52 | }
53 | worldHolder.getWhitelist().add(arguments[3]);
54 | this.worldConfiguration.write(worldHolder, WorldProperty.WHITELIST, worldHolder.getWhitelist());
55 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.add.successfully-added")
56 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
57 | .replaceAll("%world_name%", arguments[1])
58 | .replaceAll("%player_name%", arguments[3]));
59 | }
60 |
61 | @Override
62 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
63 | if (arguments.length != 4) {
64 | return Collections.emptyList();
65 | }
66 | final BukkitWorldHolder worldHolder = this.worldProvider
67 | .getWorldHolder(arguments[1])
68 | .orElseThrow();
69 |
70 | final List completions = Lists.newArrayList(Bukkit.getOnlinePlayers()
71 | .stream()
72 | .map(HumanEntity::getName)
73 | .toList());
74 | completions.removeAll(worldHolder.getWhitelist());
75 |
76 | return completions;
77 | }
78 |
79 | }
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/whitelist/DisableCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world.whitelist;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.api.world.WorldProperty;
9 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
10 | import com.dev7ex.multiworld.world.DefaultWorldConfiguration;
11 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | import java.util.Collections;
16 | import java.util.List;
17 |
18 | /**
19 | * @author Dev7ex
20 | * @since 15.02.2024
21 | */
22 | @BukkitCommandProperties(name = "disable", permission = "multiworld.command.whitelist.disable")
23 | public class DisableCommand extends BukkitCommand implements BukkitTabCompleter {
24 |
25 | private final DefaultTranslationProvider translationProvider;
26 | private final DefaultWorldConfiguration worldConfiguration;
27 | private final DefaultWorldProvider worldProvider;
28 |
29 | public DisableCommand(@NotNull final MultiWorldPlugin plugin) {
30 | super(plugin);
31 |
32 | this.translationProvider = plugin.getTranslationProvider();
33 | this.worldConfiguration = plugin.getWorldConfiguration();
34 | this.worldProvider = plugin.getWorldProvider();
35 | }
36 |
37 | @Override
38 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
39 | final BukkitWorldHolder worldHolder = this.worldProvider.getWorldHolder(arguments[1])
40 | .orElseThrow();
41 |
42 | if (!worldHolder.isWhitelistEnabled()) {
43 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.disable.already-disabled")
44 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
45 | .replaceAll("%world_name%", arguments[1]));
46 | return;
47 | }
48 | worldHolder.setWhitelistEnabled(false);
49 | this.worldConfiguration.write(worldHolder, WorldProperty.WHITELIST_ENABLED, false);
50 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.disable.successfully-disabled")
51 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
52 | .replaceAll("%world_name%", arguments[1]));
53 | }
54 |
55 | @Override
56 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
57 | return Collections.emptyList();
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/whitelist/EnableCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world.whitelist;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.api.world.WorldProperty;
9 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
10 | import com.dev7ex.multiworld.world.DefaultWorldConfiguration;
11 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | import java.util.Collections;
16 | import java.util.List;
17 |
18 | /**
19 | * @author Dev7ex
20 | * @since 15.02.2024
21 | */
22 | @BukkitCommandProperties(name = "enable", permission = "multiworld.command.whitelist.enable")
23 | public class EnableCommand extends BukkitCommand implements BukkitTabCompleter {
24 |
25 | private final DefaultTranslationProvider translationProvider;
26 | private final DefaultWorldConfiguration worldConfiguration;
27 | private final DefaultWorldProvider worldProvider;
28 |
29 | public EnableCommand(@NotNull final MultiWorldPlugin plugin) {
30 | super(plugin);
31 |
32 | this.translationProvider = plugin.getTranslationProvider();
33 | this.worldConfiguration = plugin.getWorldConfiguration();
34 | this.worldProvider = plugin.getWorldProvider();
35 | }
36 |
37 | @Override
38 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
39 | final BukkitWorldHolder worldHolder = this.worldProvider
40 | .getWorldHolder(arguments[1])
41 | .orElseThrow();
42 |
43 | if (worldHolder.isWhitelistEnabled()) {
44 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.enable.already-enabled")
45 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
46 | .replaceAll("%world_name%", arguments[1]));
47 | return;
48 | }
49 | worldHolder.setWhitelistEnabled(true);
50 | this.worldConfiguration.write(worldHolder, WorldProperty.WHITELIST_ENABLED, true);
51 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.enable.successfully-enabled")
52 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
53 | .replaceAll("%world_name%", arguments[1]));
54 | }
55 |
56 | @Override
57 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
58 | return Collections.emptyList();
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/whitelist/ListCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world.whitelist;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
9 | import com.dev7ex.multiworld.world.DefaultWorldConfiguration;
10 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
11 | import org.bukkit.Bukkit;
12 | import org.bukkit.ChatColor;
13 | import org.bukkit.command.CommandSender;
14 | import org.jetbrains.annotations.NotNull;
15 |
16 | import java.util.Collections;
17 | import java.util.List;
18 |
19 | /**
20 | * @author Dev7ex
21 | * @since 15.02.2024
22 | */
23 | @BukkitCommandProperties(name = "list", permission = "multiworld.command.whitelist.list")
24 | public class ListCommand extends BukkitCommand implements BukkitTabCompleter {
25 |
26 | private final DefaultTranslationProvider translationProvider;
27 | private final DefaultWorldConfiguration worldConfiguration;
28 | private final DefaultWorldProvider worldProvider;
29 |
30 | public ListCommand(@NotNull final MultiWorldPlugin plugin) {
31 | super(plugin);
32 |
33 | this.translationProvider = plugin.getTranslationProvider();
34 | this.worldConfiguration = plugin.getWorldConfiguration();
35 | this.worldProvider = plugin.getWorldProvider();
36 | }
37 |
38 | @Override
39 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
40 | final BukkitWorldHolder worldHolder = this.worldProvider.getWorldHolder(arguments[1])
41 | .orElseThrow();
42 |
43 | if (worldHolder.getWhitelist().isEmpty()) {
44 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.list.empty")
45 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
46 | .replaceAll("%world_name%", arguments[1]));
47 | return;
48 | }
49 | final StringBuilder stringBuilder = new StringBuilder();
50 |
51 | for (final String name : worldHolder.getWhitelist()) {
52 | if (!stringBuilder.isEmpty()) {
53 | stringBuilder.append(ChatColor.GRAY);
54 | stringBuilder.append(", ");
55 | }
56 | stringBuilder.append(Bukkit.getPlayer(name) != null ? ChatColor.GREEN : ChatColor.RED).append(name);
57 | }
58 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender,"commands.world.whitelist.list.message")
59 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
60 | .replaceAll("%world_name%", arguments[1])
61 | .replaceAll("%player_names%", stringBuilder.toString()));
62 | }
63 |
64 | @Override
65 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
66 | return Collections.emptyList();
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/command/world/whitelist/RemoveCommand.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.command.world.whitelist;
2 |
3 | import com.dev7ex.common.bukkit.command.BukkitCommand;
4 | import com.dev7ex.common.bukkit.command.BukkitCommandProperties;
5 | import com.dev7ex.common.bukkit.command.completer.BukkitTabCompleter;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.api.world.WorldProperty;
9 | import com.dev7ex.multiworld.translation.DefaultTranslationProvider;
10 | import com.dev7ex.multiworld.world.DefaultWorldConfiguration;
11 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
12 | import org.bukkit.command.CommandSender;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | import java.util.Collections;
16 | import java.util.List;
17 |
18 | /**
19 | * @author Dev7ex
20 | * @since 15.02.2024
21 | */
22 | @BukkitCommandProperties(name = "remove", permission = "multiworld.command.whitelist.remove")
23 | public class RemoveCommand extends BukkitCommand implements BukkitTabCompleter {
24 |
25 | private final DefaultTranslationProvider translationProvider;
26 | private final DefaultWorldConfiguration worldConfiguration;
27 | private final DefaultWorldProvider worldProvider;
28 |
29 | public RemoveCommand(@NotNull final MultiWorldPlugin plugin) {
30 | super(plugin);
31 |
32 | this.translationProvider = plugin.getTranslationProvider();
33 | this.worldConfiguration = plugin.getWorldConfiguration();
34 | this.worldProvider = plugin.getWorldProvider();
35 | }
36 |
37 | @Override
38 | public void execute(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
39 | final BukkitWorldHolder worldHolder = this.worldProvider.getWorldHolder(arguments[1])
40 | .orElseThrow();
41 |
42 | if (!worldHolder.getWhitelist().contains(arguments[3])) {
43 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.remove.already-removed")
44 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
45 | .replaceAll("%world_name%", arguments[1])
46 | .replaceAll("%player_name%", arguments[3]));
47 | return;
48 | }
49 | worldHolder.getWhitelist().remove(arguments[3]);
50 | this.worldConfiguration.write(worldHolder, WorldProperty.WHITELIST, worldHolder.getWhitelist());
51 | commandSender.sendMessage(this.translationProvider.getMessage(commandSender, "commands.world.whitelist.remove.successfully-removed")
52 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
53 | .replaceAll("%world_name%", arguments[1])
54 | .replaceAll("%player_name%", arguments[3]));
55 | }
56 |
57 | @Override
58 | public List onTabComplete(@NotNull final CommandSender commandSender, @NotNull final String[] arguments) {
59 | if (arguments.length != 4) {
60 | return Collections.emptyList();
61 | }
62 |
63 | final BukkitWorldHolder worldHolder = this.worldProvider
64 | .getWorldHolder(arguments[1])
65 | .orElseThrow();
66 |
67 | if (worldHolder.getWhitelist().isEmpty()) {
68 | return Collections.emptyList();
69 | }
70 | return worldHolder.getWhitelist();
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/hook/DefaultHookProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.hook;
2 |
3 | import com.dev7ex.common.bukkit.plugin.module.PluginModule;
4 | import com.dev7ex.multiworld.MultiWorldPlugin;
5 | import com.dev7ex.multiworld.hook.permission.MultiPermsHook;
6 | import com.dev7ex.multiworld.hook.placeholder.PlaceholderHook;
7 | import org.bukkit.Bukkit;
8 |
9 | /**
10 | * @author Dev7ex
11 | * @since 19.08.2024
12 | */
13 | public class DefaultHookProvider implements PluginModule {
14 |
15 | @Override
16 | public void onEnable() {
17 | if (Bukkit.getPluginManager().isPluginEnabled("MultiPerms")) {
18 | new MultiPermsHook().register();
19 | MultiWorldPlugin.getInstance().getLogger().info("Successfully injected into MultiPerms");
20 | }
21 |
22 | if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
23 | new PlaceholderHook(MultiWorldPlugin.getInstance()).register();
24 | MultiWorldPlugin.getInstance().getLogger().info("Successfully injected into PlaceholderAPI");
25 | }
26 | }
27 |
28 | @Override
29 | public void onDisable() {}
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/hook/permission/MultiPermsHook.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.hook.permission;
2 |
3 | import com.dev7ex.multiperms.api.MultiPermsApiProvider;
4 | import com.dev7ex.multiperms.api.bukkit.MultiPermsBukkitApi;
5 | import com.dev7ex.multiperms.api.hook.PermissionHook;
6 | import com.dev7ex.multiworld.MultiWorldPlugin;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author Dev7ex
12 | * @since 19.08.2024
13 | */
14 | public class MultiPermsHook implements PermissionHook {
15 |
16 | private final MultiPermsBukkitApi multiPermsApi = (MultiPermsBukkitApi) MultiPermsApiProvider.getMultiPermsApi();
17 |
18 | @Override
19 | public List getPermissions() {
20 | return List.of("multiworld.bypass.forcegamemode",
21 | "multiworld.command.world",
22 | "multiworld.command.world.back",
23 | "multiworld.command.world.backup",
24 | "multiworld.command.world.clone",
25 | "multiworld.command.world.create",
26 | "multiworld.command.world.delete",
27 | "multiworld.command.world.flag",
28 | "multiworld.command.world.gamerule",
29 | "multiworld.command.world.help",
30 | "multiworld.command.world.import",
31 | "multiworld.command.world.info",
32 | "multiworld.command.world.link",
33 | "multiworld.command.world.list",
34 | "multiworld.command.world.load",
35 | "multiworld.command.world.reload",
36 | "multiworld.command.world.teleport",
37 | "multiworld.command.world.unload",
38 | "multiworld.command.world.version",
39 | "multiworld.command.world.whitelist",
40 | "multiworld.command.world.whitelist.add",
41 | "multiworld.command.world.whitelist.disable",
42 | "multiworld.command.world.whitelist.enable",
43 | "multiworld.command.world.whitelist.list",
44 | "multiworld.command.world.whitelist.remove");
45 | }
46 |
47 | @Override
48 | public void register() {
49 | this.multiPermsApi.getPermissionHookProvider()
50 | .register(MultiWorldPlugin.getInstance(), this);
51 | }
52 |
53 | @Override
54 | public void unregister() {
55 | this.multiPermsApi.getPermissionHookProvider()
56 | .unregister(MultiWorldPlugin.getInstance());
57 | }
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/entity/EntitySpawnListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.entity;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
6 | import org.bukkit.entity.LivingEntity;
7 | import org.bukkit.event.EventHandler;
8 | import org.bukkit.event.EventPriority;
9 | import org.bukkit.event.entity.EntitySpawnEvent;
10 | import org.jetbrains.annotations.NotNull;
11 |
12 | /**
13 | * Listens for entity spawn events and cancels them based on world configurations.
14 | * This class extends MultiWorldListener to utilize multi-world functionality.
15 | *
16 | * @author Dev7ex
17 | * @since 06.03.2024
18 | */
19 | public class EntitySpawnListener extends MultiWorldListener {
20 |
21 | /**
22 | * Constructs an EntitySpawnListener with the given MultiWorldBukkitApi instance.
23 | *
24 | * @param multiWorldApi The MultiWorldBukkitApi instance.
25 | */
26 | public EntitySpawnListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
27 | super(multiWorldApi);
28 | }
29 |
30 | /**
31 | * Handles the entity spawn event and cancels it if configured to disallow entity spawning.
32 | *
33 | * @param event The EntitySpawnEvent.
34 | */
35 | @EventHandler(priority = EventPriority.NORMAL)
36 | public void handleEntitySpawn(final EntitySpawnEvent event) {
37 | if (event.getLocation().getWorld() == null) {
38 | return;
39 | }
40 | final String worldName = event.getLocation().getWorld().getName();
41 |
42 | if (super.getWorldProvider().getWorldHolder(worldName).isEmpty()) {
43 | return;
44 | }
45 | final BukkitWorldHolder worldHolder = super.getWorldProvider()
46 | .getWorldHolder(worldName)
47 | .get();
48 |
49 | if (!(event.getEntity() instanceof LivingEntity)) {
50 | return;
51 | }
52 | if (!worldHolder.isSpawnEntities()) {
53 | event.setCancelled(true);
54 | }
55 | }
56 |
57 | }
58 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/player/PlayerAdvancementDoneListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.player;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
6 | import org.bukkit.World;
7 | import org.bukkit.advancement.Advancement;
8 | import org.bukkit.advancement.AdvancementProgress;
9 | import org.bukkit.entity.Player;
10 | import org.bukkit.event.EventHandler;
11 | import org.bukkit.event.EventPriority;
12 | import org.bukkit.event.player.PlayerAdvancementDoneEvent;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | /**
16 | * Listener for player advancements.
17 | * This listener handles the event when a player completes an advancement.
18 | * It revokes the advancement if the world settings specify that achievements should not be received.
19 | *
20 | * @since 29.03.2024
21 | */
22 | public class PlayerAdvancementDoneListener extends MultiWorldListener {
23 |
24 | /**
25 | * Constructs a new PlayerAdvancementDoneListener.
26 | *
27 | * @param multiWorldApi The MultiWorldBukkitApi instance.
28 | */
29 | public PlayerAdvancementDoneListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
30 | super(multiWorldApi);
31 | }
32 |
33 | /**
34 | * Handles the PlayerAdvancementDoneEvent.
35 | * If the world does not allow receiving achievements, the completed advancement is revoked.
36 | *
37 | * @param event The PlayerAdvancementDoneEvent.
38 | */
39 | @EventHandler(priority = EventPriority.NORMAL)
40 | public void handlePlayerAdvancementDone(final PlayerAdvancementDoneEvent event) {
41 | final Player player = event.getPlayer();
42 | final World world = player.getWorld();
43 | final BukkitWorldHolder worldHolder = super.getWorldProvider()
44 | .getWorldHolder(world.getName())
45 | .orElseThrow();
46 |
47 | if (worldHolder.isReceiveAchievements()) {
48 | return;
49 | }
50 | final Advancement advancement = event.getAdvancement();
51 | final AdvancementProgress progress = player.getAdvancementProgress(advancement);
52 |
53 | if (progress.isDone()) {
54 | progress.getAwardedCriteria().forEach(progress::revokeCriteria);
55 | }
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/player/PlayerChangeWorldListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.player;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.event.user.WorldUserTeleportWorldEvent;
6 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import org.bukkit.Bukkit;
9 | import org.bukkit.World;
10 | import org.bukkit.entity.Player;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.EventPriority;
13 | import org.bukkit.event.player.PlayerTeleportEvent;
14 | import org.jetbrains.annotations.NotNull;
15 |
16 | /**
17 | * Listener for player teleport events.
18 | * This listener handles the event when a player teleports between worlds.
19 | * It triggers a custom event if the player teleports from one registered world to another.
20 | *
21 | * @since 07.06.2024
22 | */
23 | public class PlayerChangeWorldListener extends MultiWorldListener {
24 |
25 | /**
26 | * Constructs a PlayerTeleportListener with the given MultiWorldBukkitApi.
27 | *
28 | * @param multiWorldApi The MultiWorldBukkitApi instance.
29 | */
30 | public PlayerChangeWorldListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
31 | super(multiWorldApi);
32 | }
33 |
34 | /**
35 | * Handles the PlayerTeleportEvent.
36 | * If the player teleports from one registered world to another, it triggers a WorldUserTeleportWorldEvent.
37 | *
38 | * @param event The PlayerTeleportEvent.
39 | */
40 | @EventHandler(priority = EventPriority.NORMAL)
41 | public void handlePlayerTeleport(final PlayerTeleportEvent event) {
42 | final Player player = event.getPlayer();
43 | final World to = event.getTo() != null ? event.getTo().getWorld() : null;
44 | final World from = event.getFrom().getWorld();
45 |
46 | if ((to == null) || (from == null)) {
47 | return;
48 | }
49 |
50 | // Fix https://github.com/Dev7ex/MultiWorld/issues/37
51 | if (from.getName().equalsIgnoreCase(to.getName())) {
52 | return;
53 | }
54 |
55 | // Ensure both the source and destination worlds are registered
56 | if ((super.getWorldProvider().getWorldHolder(to.getName()).isEmpty())
57 | || (super.getWorldProvider().getWorldHolder(from.getName()).isEmpty())) {
58 | return;
59 | }
60 | final BukkitWorldHolder lastWorldHolder = super.getWorldProvider().getWorldHolder(from.getName()).get();
61 | final BukkitWorldHolder nextWorldHolder = super.getWorldProvider().getWorldHolder(to.getName()).get();
62 |
63 | if (super.getUserProvider().getUser(player.getUniqueId()).isEmpty()) {
64 | return;
65 | }
66 | final BukkitWorldUser user = super.getUserProvider().getUser(player.getUniqueId()).get();
67 | Bukkit.getPluginManager().callEvent(new WorldUserTeleportWorldEvent(user, lastWorldHolder, nextWorldHolder));
68 | }
69 |
70 | }
71 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/player/PlayerDamagePlayerListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.player;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
6 | import org.bukkit.entity.EntityType;
7 | import org.bukkit.entity.Player;
8 | import org.bukkit.entity.Projectile;
9 | import org.bukkit.event.EventHandler;
10 | import org.bukkit.event.EventPriority;
11 | import org.bukkit.event.entity.EntityDamageByEntityEvent;
12 | import org.jetbrains.annotations.NotNull;
13 |
14 | /**
15 | * Listener for player damage events.
16 | * This listener handles the event when a player is damaged by another entity.
17 | * It cancels the event if PvP is disabled in the world settings.
18 | *
19 | * @since 29.06.2023
20 | */
21 | public class PlayerDamagePlayerListener extends MultiWorldListener {
22 |
23 | /**
24 | * Constructs a new PlayerDamagePlayerListener.
25 | *
26 | * @param multiWorldApi The MultiWorldBukkitApi instance.
27 | */
28 | public PlayerDamagePlayerListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
29 | super(multiWorldApi);
30 | }
31 |
32 | /**
33 | * Handles the EntityDamageByEntityEvent.
34 | * If the entity damaged is a player and PvP is disabled in the world, the event is cancelled.
35 | *
36 | * @param event The EntityDamageByEntityEvent.
37 | */
38 | @EventHandler(priority = EventPriority.NORMAL)
39 | public void handlePlayerDamagePlayer(final EntityDamageByEntityEvent event) {
40 | // Check if the damaged entity is a player
41 | if (event.getEntity().getType() != EntityType.PLAYER) {
42 | return;
43 | }
44 | final Player player = (Player) event.getEntity();
45 |
46 | // Get the world holder for the current world
47 | final BukkitWorldHolder worldHolder = super.getWorldProvider()
48 | .getWorldHolder(player.getWorld().getName())
49 | .orElse(null);
50 |
51 | // If the worldHolder is null or PvP is enabled in the world, return
52 | if ((worldHolder == null) || (worldHolder.isPvpEnabled())) {
53 | return;
54 | }
55 |
56 | // Check if the damager is a projectile
57 | if (event.getDamager() instanceof Projectile) {
58 | final Projectile projectile = (Projectile) event.getDamager();
59 |
60 | if (projectile.getShooter() instanceof Player) {
61 | event.setCancelled(true);
62 | }
63 | return;
64 | }
65 |
66 | if (event.getDamager().getType() == EntityType.PLAYER) {
67 | event.setCancelled(true);
68 | }
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/user/UserTeleportWorldListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.event.user.WorldUserTeleportWorldEvent;
6 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
7 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
8 | import com.dev7ex.multiworld.api.bukkit.world.location.BukkitWorldLocation;
9 | import org.bukkit.Bukkit;
10 | import org.bukkit.entity.Player;
11 | import org.bukkit.event.EventHandler;
12 | import org.bukkit.event.EventPriority;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | /**
16 | * Listens for events related to user teleportation between worlds.
17 | */
18 | public class UserTeleportWorldListener extends MultiWorldListener {
19 |
20 | /**
21 | * Constructs a new UserTeleportWorldListener.
22 | *
23 | * @param multiWorldApi The MultiWorldBukkitApi instance.
24 | */
25 | public UserTeleportWorldListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
26 | super(multiWorldApi);
27 | }
28 |
29 | /**
30 | * Handles user game mode change upon world teleportation.
31 | *
32 | * @param event The WorldUserTeleportWorldEvent.
33 | */
34 | @EventHandler(priority = EventPriority.NORMAL)
35 | public void onUserGameModeChange(final WorldUserTeleportWorldEvent event) {
36 | final Player player = Bukkit.getPlayer(event.getUser().getUniqueId());
37 | if (!super.getConfiguration().isAutoGameModeEnabled()) {
38 | return;
39 | }
40 | if (event.getNextWorldHolder().getForceGameMode().equalsIgnoreCase("false")) {
41 | return;
42 | }
43 | if (event.getNextWorldHolder().getForceGameMode().equalsIgnoreCase("false-with-permission")) {
44 | if (player.hasPermission("multiworld.bypass.forcegamemode")) {
45 | return;
46 | }
47 | }
48 | player.setGameMode(event.getNextWorldHolder().getGameMode());
49 | }
50 |
51 | /**
52 | * Handles user entering a world upon teleportation.
53 | *
54 | * @param event The WorldUserTeleportWorldEvent.
55 | */
56 | @EventHandler(priority = EventPriority.NORMAL)
57 | public void handleUserEnterWorld(final WorldUserTeleportWorldEvent event) {
58 | final BukkitWorldUser user = event.getUser();
59 | final Player player = user.getEntity();
60 | final BukkitWorldHolder nextWorldHolder = event.getNextWorldHolder();
61 |
62 | user.setLastLocation(BukkitWorldLocation.of(player.getLocation()));
63 |
64 | if (!nextWorldHolder.isWhitelistEnabled()) {
65 | return;
66 | }
67 |
68 | if (nextWorldHolder.getWhitelist().contains(user.getName())) {
69 | return;
70 | }
71 |
72 | if (player.hasPermission("multiworld.whitelist.ignore")) {
73 | return;
74 | }
75 | user.setLastLocation(null);
76 | player.sendMessage(super.getConfiguration().getString("messages.general.world-whitelist-block-trespassing")
77 | .replaceAll("%prefix%", super.getConfiguration().getPrefix())
78 | .replaceAll("%world_name%", nextWorldHolder.getName()));
79 | event.setCancelled(true);
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/world/WorldActivityListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
6 | import org.bukkit.event.EventHandler;
7 | import org.bukkit.event.EventPriority;
8 | import org.bukkit.event.block.BlockBreakEvent;
9 | import org.bukkit.event.block.BlockPlaceEvent;
10 | import org.bukkit.event.player.PlayerInteractEvent;
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | /**
14 | * @author Dev7ex
15 | * @since 19.09.2024
16 | */
17 | public class WorldActivityListener extends MultiWorldListener {
18 |
19 | /**
20 | * Constructs a MultiWorldListener with the given MultiWorldBukkitApi.
21 | *
22 | * @param multiWorldApi The MultiWorldBukkitApi instance.
23 | */
24 | public WorldActivityListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
25 | super(multiWorldApi);
26 | }
27 |
28 | @EventHandler(priority = EventPriority.NORMAL)
29 | public void handlePlayerInteract(final PlayerInteractEvent event) {
30 | final String worldName = event.getPlayer().getWorld().getName();
31 |
32 | if (super.getWorldProvider().getWorldHolder(worldName).isEmpty()) {
33 | return;
34 | }
35 | final BukkitWorldHolder worldHolder = super.getWorldProvider()
36 | .getWorldHolder(worldName)
37 | .get();
38 |
39 | worldHolder.setLastActivity(System.currentTimeMillis());
40 | }
41 |
42 | @EventHandler(priority = EventPriority.NORMAL)
43 | public void handleWorldBlockBreak(final BlockBreakEvent event) {
44 | final String worldName = event.getBlock().getWorld().getName();
45 |
46 | if (super.getWorldProvider().getWorldHolder(worldName).isEmpty()) {
47 | return;
48 | }
49 | final BukkitWorldHolder worldHolder = super.getWorldProvider()
50 | .getWorldHolder(worldName)
51 | .get();
52 |
53 | worldHolder.setLastActivity(System.currentTimeMillis());
54 | }
55 |
56 | @EventHandler(priority = EventPriority.NORMAL)
57 | public void handleWorldBlockBreak(final BlockPlaceEvent event) {
58 | final String worldName = event.getBlock().getWorld().getName();
59 |
60 | if (super.getWorldProvider().getWorldHolder(worldName).isEmpty()) {
61 | return;
62 | }
63 | final BukkitWorldHolder worldHolder = super.getWorldProvider()
64 | .getWorldHolder(worldName)
65 | .get();
66 |
67 | worldHolder.setLastActivity(System.currentTimeMillis());
68 | }
69 |
70 | }
71 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/listener/world/WorldInitializeListener.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.listener.world;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.MultiWorldBukkitApi;
4 | import com.dev7ex.multiworld.api.bukkit.event.MultiWorldListener;
5 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldType;
6 | import com.dev7ex.multiworld.api.world.WorldEnvironment;
7 | import com.dev7ex.multiworld.api.world.WorldType;
8 | import org.bukkit.Bukkit;
9 | import org.bukkit.World;
10 | import org.bukkit.event.EventHandler;
11 | import org.bukkit.event.EventPriority;
12 | import org.bukkit.event.world.WorldInitEvent;
13 | import org.jetbrains.annotations.NotNull;
14 |
15 | /**
16 | * @author Dev7ex
17 | * @since 02.02.2025
18 | */
19 | public class WorldInitializeListener extends MultiWorldListener {
20 |
21 | /**
22 | * Constructs a MultiWorldListener with the given MultiWorldBukkitApi.
23 | *
24 | * @param multiWorldApi The MultiWorldBukkitApi instance.
25 | */
26 | public WorldInitializeListener(@NotNull final MultiWorldBukkitApi multiWorldApi) {
27 | super(multiWorldApi);
28 | }
29 |
30 | @EventHandler(priority = EventPriority.NORMAL)
31 | public void handleWorldInitialize(final WorldInitEvent event) {
32 | final World world = event.getWorld();
33 |
34 | if (super.getWorldProvider().getWorldHolder(world.getName()).isPresent()) {
35 | return;
36 | }
37 | final WorldType worldType = BukkitWorldType.fromEnvironment(world.getEnvironment());
38 | super.getWorldManager().importWorld(Bukkit.getConsoleSender().getName(), world.getName(), WorldEnvironment.fromType(worldType), worldType);
39 |
40 | super.getConsoleSender().sendMessage(String.format("§cThe world %s was registered by MultiWorld.", event.getWorld().getName()));
41 | super.getConsoleSender().sendMessage("§cPlease note that you may have to change the flags yourself if this world has special properties like Void WorldType or similar");
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/task/WorldUnloadTask.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.task;
2 |
3 | import com.dev7ex.common.scheduler.task.Task;
4 | import com.dev7ex.multiworld.MultiWorldConfiguration;
5 | import com.dev7ex.multiworld.MultiWorldPlugin;
6 | import com.dev7ex.multiworld.api.bukkit.world.BukkitWorldHolder;
7 | import com.dev7ex.multiworld.world.DefaultWorldProvider;
8 | import org.bukkit.Bukkit;
9 | import org.jetbrains.annotations.NotNull;
10 |
11 | import java.util.Queue;
12 | import java.util.concurrent.ConcurrentLinkedQueue;
13 | import java.util.concurrent.TimeUnit;
14 |
15 | /**
16 | * @author Dev7ex
17 | * @since 18.09.2024
18 | */
19 | public class WorldUnloadTask implements Task {
20 |
21 | private final DefaultWorldProvider worldProvider;
22 | private final Queue worldUnloadQueue = new ConcurrentLinkedQueue<>();
23 | private final MultiWorldConfiguration configuration = MultiWorldPlugin.getInstance().getConfiguration();
24 |
25 | public WorldUnloadTask(@NotNull final DefaultWorldProvider worldProvider) {
26 | this.worldProvider = worldProvider;
27 | }
28 |
29 | @Override
30 | public void run() {
31 | for (final BukkitWorldHolder worldHolder : this.worldProvider.getWorldHolders().values()) {
32 | if (!worldHolder.isAutoUnloadEnabled()) {
33 | continue;
34 | }
35 |
36 | if (!worldHolder.isLoaded()) {
37 | continue;
38 | }
39 |
40 | if ((System.currentTimeMillis() - worldHolder.getLoadTimeStamp()) < TimeUnit.SECONDS.toMillis(this.configuration.getAutoUnloadLoadDelay())) {
41 | continue;
42 | }
43 |
44 | if (!worldHolder.getWorld().getPlayers().isEmpty()) {
45 | return;
46 | }
47 |
48 | if (worldHolder.getName().equalsIgnoreCase(this.configuration.getString("settings.defaults.normal-world"))) {
49 | return;
50 | }
51 |
52 | if ((System.currentTimeMillis() - worldHolder.getLastActivity()) >= (this.configuration.getAutoUnloadSystemDelay() * 1000L)) {
53 | if (!this.worldUnloadQueue.contains(worldHolder)) {
54 | this.worldUnloadQueue.add(worldHolder);
55 | }
56 | }
57 | }
58 |
59 | if (!this.worldUnloadQueue.isEmpty()) {
60 | final BukkitWorldHolder worldToUnload = this.worldUnloadQueue.poll();
61 |
62 | if (worldToUnload != null) {
63 | this.worldProvider.getWorldManager().unloadWorld(Bukkit.getConsoleSender().getName(), worldToUnload.getName());
64 | }
65 | }
66 | }
67 |
68 | }
69 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/user/User.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.user;
2 |
3 | import com.dev7ex.multiworld.api.bukkit.user.BukkitWorldUser;
4 | import com.dev7ex.multiworld.api.bukkit.world.location.BukkitWorldLocation;
5 | import com.dev7ex.multiworld.api.user.WorldUserConfiguration;
6 | import com.dev7ex.multiworld.api.world.WorldHolder;
7 | import com.dev7ex.multiworld.api.world.location.WorldLocation;
8 | import lombok.AccessLevel;
9 | import lombok.Getter;
10 | import lombok.Setter;
11 | import org.bukkit.Bukkit;
12 | import org.bukkit.entity.Player;
13 | import org.bukkit.event.player.PlayerTeleportEvent;
14 | import org.jetbrains.annotations.NotNull;
15 |
16 | import java.util.UUID;
17 |
18 | /**
19 | * Represents a user in the MultiWorld system.
20 | * This class implements BukkitWorldUser and EntityResolver for Player entities.
21 | * It manages user-specific information and actions within the world.
22 | *
23 | * @since 18.06.2023
24 | */
25 | @Getter(AccessLevel.PUBLIC)
26 | @Setter(AccessLevel.PUBLIC)
27 | public class User implements BukkitWorldUser {
28 |
29 | private final UUID uniqueId;
30 | private final String name;
31 | private WorldUserConfiguration configuration;
32 | private WorldLocation lastLocation;
33 | private long firstLogin;
34 | private long lastLogin;
35 |
36 | /**
37 | * Constructs a new User with the specified unique ID and name.
38 | *
39 | * @param uniqueId The unique ID of the user.
40 | * @param name The name of the user.
41 | */
42 | public User(@NotNull final UUID uniqueId, @NotNull final String name) {
43 | this.uniqueId = uniqueId;
44 | this.name = name;
45 | }
46 |
47 | /**
48 | * Sends a message to the user.
49 | *
50 | * @param message The message to send.
51 | */
52 | @Override
53 | public void sendMessage(@NotNull final String message) {
54 | this.getEntity().sendMessage(message);
55 | }
56 |
57 | /**
58 | * Teleports the user to the spawn location of the specified world.
59 | *
60 | * @param worldHolder The holder of the world to teleport to.
61 | */
62 | @Override
63 | public void teleport(@NotNull final WorldHolder worldHolder) {
64 | this.getEntity().teleport(BukkitWorldLocation.to(worldHolder.getSpawnLocation()), PlayerTeleportEvent.TeleportCause.PLUGIN);
65 | }
66 |
67 | /**
68 | * Gets the Bukkit Player entity associated with this user.
69 | *
70 | * @return The Bukkit Player entity.
71 | */
72 | @Override
73 | public Player getEntity() {
74 | return Bukkit.getPlayer(this.uniqueId);
75 | }
76 |
77 | }
78 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/util/Colored.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.util;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.Difficulty;
5 | import org.bukkit.GameMode;
6 | import org.jetbrains.annotations.NotNull;
7 |
8 | /**
9 | * @author Dev7ex
10 | * @since 22.10.2024
11 | */
12 | public class Colored {
13 |
14 | public static String getColoredBoolean(final boolean value) {
15 | if (value) {
16 | return ChatColor.GREEN + "true";
17 | }
18 | return ChatColor.RED + "false";
19 | }
20 |
21 | public static String getColoredGameMode(@NotNull final GameMode gameMode) {
22 | return switch (gameMode) {
23 | case ADVENTURE, SURVIVAL -> ChatColor.GREEN + gameMode.toString();
24 | case CREATIVE -> ChatColor.RED + gameMode.toString();
25 | case SPECTATOR -> ChatColor.DARK_GREEN + gameMode.toString();
26 | };
27 | }
28 |
29 | public static String getColoredBooleanWithOption(@NotNull final String value) {
30 | if (value.equalsIgnoreCase("true")) {
31 | return ChatColor.GREEN + "true";
32 | } else if (value.equalsIgnoreCase("false")) {
33 | return ChatColor.RED + "false";
34 | } else {
35 | return ChatColor.YELLOW + value;
36 | }
37 | }
38 |
39 | public static String getColoredDifficulty(@NotNull final Difficulty difficulty) {
40 | return switch (difficulty) {
41 | case PEACEFUL -> ChatColor.GREEN + difficulty.toString();
42 | case EASY -> ChatColor.DARK_GREEN + difficulty.toString();
43 | case NORMAL -> ChatColor.YELLOW + difficulty.toString();
44 | case HARD -> ChatColor.RED + difficulty.toString();
45 | };
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/java/com/dev7ex/multiworld/world/generator/DefaultWorldGeneratorProvider.java:
--------------------------------------------------------------------------------
1 | package com.dev7ex.multiworld.world.generator;
2 |
3 | import com.dev7ex.common.bukkit.plugin.module.PluginModule;
4 | import com.dev7ex.multiworld.MultiWorldPlugin;
5 | import com.dev7ex.multiworld.api.bukkit.world.generator.BukkitWorldGenerator;
6 | import com.dev7ex.multiworld.api.bukkit.world.generator.BukkitWorldGeneratorHolder;
7 | import com.dev7ex.multiworld.api.bukkit.world.generator.BukkitWorldGeneratorProvider;
8 | import com.dev7ex.multiworld.api.bukkit.world.generator.defaults.FlatWorldGenerator;
9 | import com.dev7ex.multiworld.api.bukkit.world.generator.defaults.VoidWorldGenerator;
10 | import com.dev7ex.multiworld.api.bukkit.world.generator.defaults.WaterWorldGenerator;
11 | import com.dev7ex.multiworld.api.world.generator.WorldGenerator;
12 | import lombok.AccessLevel;
13 | import lombok.Getter;
14 | import org.bukkit.Bukkit;
15 | import org.bukkit.plugin.Plugin;
16 |
17 | import java.util.ArrayList;
18 | import java.util.HashMap;
19 | import java.util.List;
20 | import java.util.Map;
21 |
22 | /**
23 | * Default implementation of a world generator provider for managing custom world generators.
24 | * This module scans all enabled plugins to find and register their custom world generators.
25 | * It implements PluginModule and BukkitWorldGeneratorProvider.
26 | *
27 | * @author Dev7ex
28 | * @since 29.06.2023
29 | */
30 | @Getter(AccessLevel.PUBLIC)
31 | public class DefaultWorldGeneratorProvider implements PluginModule, BukkitWorldGeneratorProvider {
32 |
33 | private final Map customGenerators = new HashMap<>();
34 | private final List defaultGenerators = new ArrayList<>();
35 | private final Map fileGenerators = new HashMap<>();
36 |
37 | /**
38 | * Called when the module is enabled.
39 | * Scans all enabled plugins to find and register their custom world generators.
40 | */
41 | @Override
42 | public void onEnable() {
43 | for (final Plugin plugin : Bukkit.getServer().getPluginManager().getPlugins()) {
44 | if (!plugin.isEnabled()) {
45 | continue;
46 | }
47 | try {
48 | if (plugin.getDefaultWorldGenerator("world", "") == null) {
49 | continue;
50 | }
51 | } catch (final Exception exception) {
52 | MultiWorldPlugin.getInstance().getLogger().severe(plugin.getName() + " could not be loaded");
53 | continue;
54 | }
55 | this.customGenerators.put(new BukkitWorldGeneratorHolder(plugin), plugin.getDescription().getName());
56 | }
57 | this.defaultGenerators.add(new FlatWorldGenerator(MultiWorldPlugin.getInstance()));
58 | this.defaultGenerators.add(new VoidWorldGenerator(MultiWorldPlugin.getInstance()));
59 | this.defaultGenerators.add(new WaterWorldGenerator(MultiWorldPlugin.getInstance()));
60 |
61 | MultiWorldPlugin.getInstance().getLogger().info("Found: [" + this.customGenerators.values().size() + "] World Generator");
62 | }
63 |
64 | /**
65 | * Called when the module is disabled.
66 | * Clears the list of custom world generators.
67 | */
68 | @Override
69 | public void onDisable() {
70 | this.customGenerators.clear();
71 | this.defaultGenerators.clear();
72 | this.fileGenerators.clear();
73 | }
74 |
75 | /**
76 | * Checks if a custom world generator is registered.
77 | *
78 | * @param generator The name of the generator to check.
79 | * @return True if the generator is registered, false otherwise.
80 | */
81 | @Override
82 | public boolean isRegistered(final String generator) {
83 | return (this.customGenerators.containsValue(generator))
84 | || (this.defaultGenerators.stream()
85 | .anyMatch(generator1 -> generator1.getName().equalsIgnoreCase(generator)));
86 | }
87 |
88 | @Override
89 | public List getAllGenerators() {
90 | final List allGenerators = new ArrayList<>();
91 |
92 | allGenerators.addAll(this.customGenerators.values());
93 | allGenerators.addAll(this.defaultGenerators.stream().map(WorldGenerator::getName).toList());
94 | allGenerators.addAll(this.fileGenerators.values().stream().map(WorldGenerator::getName).toList());
95 |
96 | return allGenerators;
97 | }
98 |
99 | }
100 |
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/resources/config.yml:
--------------------------------------------------------------------------------
1 | # __ ___ ____ _ _ __ __ __
2 | # / |/ /_ __/ / /_(_) | / /___ _____/ /___/ /
3 | # / /|_/ / / / / / __/ /| | /| / / __ \/ ___/ / __ /
4 | # / / / / /_/ / / /_/ / | |/ |/ / /_/ / / / / /_/ /
5 | # /_/ /_/\__,_/_/\__/_/ |__/|__/\____/_/ /_/\__,_/
6 | #
7 | # Copyright (c) 2021 - 2024 by Dev7ex
8 | # Version: ${project.version}
9 | config-version: ${project.version}
10 | # General
11 | prefix: '§8[§bMultiWorld§8]§r'
12 | # Settings
13 | settings:
14 | # Should you be able to enter Nether/End worlds with the command /world telport
15 | access-nether-world-via-command: true
16 | access-end-world-via-command: true
17 | # Should the auto-game-mode per world work?
18 | auto-game-mode-enabled: true
19 | # Delay in seconds after a world is loaded before it becomes eligible for auto-unloading (300 = 5 minutes)
20 | auto-unload-load-delay: 300
21 | # Delay in Seconds (900 = 15min)
22 | auto-unload-system-delay: 1800
23 | # Enables automatic unloading of inactive worlds.
24 | auto-unload-system-enabled: true
25 | # Standard values for new worlds
26 | defaults:
27 | # Specifies whether the server should automatically load the worlds upon starting
28 | auto-load-enabled: false
29 | # Determines whether the server should automatically unload chunks that are not being used
30 | auto-unload-enabled: false
31 | # Sets the game's difficulty level. "PEACEFUL" means no hostile mobs will spawn, and players cannot starve
32 | difficulty: PEACEFUL
33 | # Determines whether players have access to the End portal, allowing them to enter the End
34 | end-portal-accessible: true
35 | # Specifies the name of the world that serves as the End
36 | end-world: world_the_end
37 | # Sets the game mode to Survival, where players must gather resources, manage health, and survive against mobs
38 | game-mode: SURVIVAL
39 | # Enables the per-world enforcement of a player's game mode automatically. 'auto-game-mode-enabled' above must be set to true!
40 | # Set to "true" to force the world's game mode, set to "false" to disable that world from forcing its game mode.
41 | # Set to "false-with-permission" to force the world's game mode for all players who DO NOT have the permission "multiworld.bypass.forcegamemode".
42 | force-game-mode: false-with-permission
43 | # Enables the hunger mechanic, causing players to lose food points over time and need to eat to maintain their health and energy
44 | hunger-enabled: true
45 | # Determines whether the server should keep the spawn chunks loaded in memory even when no players are nearby.
46 | # Set this to true to ensure that spawn chunks are always active, which can be useful for certain redstone machines or farms
47 | keep-spawn-in-memory: false
48 | # Determines whether players have access to Nether portals, allowing them to enter the Nether
49 | nether-portal-accessible: true
50 | # Specifies the name of the world that serves as the Nether
51 | nether-world: world_nether
52 | # Specifies the name of the main world
53 | normal-world: world
54 | # Enables player versus player combat, allowing players to attack each other
55 | pvp-enabled: true
56 | # Allows players to receive achievements during gameplay
57 | receive-achievements: true
58 | # Enables the functionality of Redstone, allowing players to use Redstone mechanisms and devices
59 | redstone-enabled: true
60 | # Allows animals to spawn naturally in the world
61 | spawn-animals: true
62 | # Allows all entities, including items, mobs, and other non-player characters, to spawn in the world
63 | spawn-entities: true
64 | # Allows hostile mobs to spawn naturally in the world
65 | spawn-monsters: true
66 | # Enables weather changes such as rain, thunderstorms, and snow
67 | weather-enabled: true
68 | # Disables the whitelist feature, allowing any player to join the world without needing to be added to a whitelist
69 | whitelist-enabled: false
70 | # The time format in which information is displayed
71 | time-format: dd.MM.yyyy HH:mm:ss
72 | # Should MultiWorld connect the worlds with each other via the registered data?
73 | world-link-enabled: true
--------------------------------------------------------------------------------
/multiworld-bukkit/src/main/resources/plugin.yml:
--------------------------------------------------------------------------------
1 | api-version: 1.17
2 | author: Dev7ex
3 | database: false
4 | depend: [ FacilisCommon ]
5 | description: ${project.description}
6 | libraries:
7 | - commons-io:commons-io:${dependency.commons.io.version}
8 | load: POSTWORLD
9 | loadbefore: [ ]
10 | main: com.dev7ex.multiworld.MultiWorldPlugin
11 | name: MultiWorld
12 | prefix: MultiWorld
13 | softdepend: [ PlaceholderAPI, MultiPerms ]
14 | version: ${project.version}
15 | website: https://www.spigotmc.org/resources/multiworld.92559/
16 | commands:
17 | world:
18 | aliases: [ multiworld, mw ]
19 | description: Main Command for all World Commands
20 | permission: multiworld.command.world
21 | usage: /world
22 | permissions:
23 | multiworld.*:
24 | default: op
25 | description: All MultiWorld permissions, ideally given to administrators.
26 | multiworld.bypass.*:
27 | default: op
28 | description: Allows users to bypass specific per-world flag settings.
29 | children:
30 | multiworld.bypass.forcegamemode: true
31 | multiworld.command.world:
32 | default: op
33 | description: Ability to run /multiworld help.
34 | multiworld.command.world.*:
35 | default: op
36 | description: Ability to run all /multiworld commands.
37 | children:
38 | multiworld.command.world.back: true
39 | multiworld.command.world.backup: true
40 | multiworld.command.world.clone: true
41 | multiworld.command.world.create: true
42 | multiworld.command.world.delete: true
43 | multiworld.command.world.flag: true
44 | multiworld.command.world.gamerule: true
45 | multiworld.command.world.import: true
46 | multiworld.command.world.info: true
47 | multiworld.command.world.link: true
48 | multiworld.command.world.list: true
49 | multiworld.command.world.load: true
50 | multiworld.command.world.reload: true
51 | multiworld.command.world.teleport: true
52 | multiworld.command.world.unload: true
53 | multiworld.command.world.version: true
54 | multiworld.command.world.whitelist: true
55 | multiworld.command.world.whitelist.add: true
56 | multiworld.command.world.whitelist.disable: true
57 | multiworld.command.world.whitelist.enable: true
58 | multiworld.command.world.whitelist.list: true
59 | multiworld.command.world.whitelist.remove: true
--------------------------------------------------------------------------------
/multiworld-resources/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 |
8 | com.dev7ex
9 | multiworld
10 | 1.7.4-SNAPSHOT
11 |
12 |
13 | MultiWorld-Resources
14 | multiworld-resources
15 |
16 |
17 | ${project.source.version}
18 | ${project.source.version}
19 | ${project.source.encoding}
20 |
21 |
22 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.5.7-2024-03-30.md:
--------------------------------------------------------------------------------
1 | # Changelog Version 1.5.7
2 | **Date:** 30.03.2024
3 |
4 | ## Additions
5 |
6 | +  **Adding**: Achievements can now be deactivated. (#32)
7 | +  **Adding**: A function to set the gamerule for each world via MultiWorld. The TabCompletion of `/mw gamerule` shows the current value for a gamerule with a number as its value.
8 |
9 | ## Fixes
10 |
11 | -  **Fixing**: Fixed a bug where a newly created world throws an exception when adding a player to the whitelist. (#33)
12 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.5.7-2024-03-30.txt:
--------------------------------------------------------------------------------
1 | » Fixed a bug where a newly created world throws an exception when adding a player to the whitelist (#33)
2 | » Achievements can now be deactivated (#32)
3 | Messages are still displayed, however, these can be deactivated via the gamerule
4 | » It is now possible to set the gamerule for each world via MultiWorld.
5 | The TabCompletion of /mw gamerule shows the current value for a gamerule with a number as value
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.5.8-2024-04-06.txt:
--------------------------------------------------------------------------------
1 | Version: 1.5.8
2 | FacilisCommon Version: 1.0.5
3 |
4 | » The TimeFormat in the Info Command is now adjustable in the config.yml
5 | » The MultiWorld API has been improved
6 | » The last login of users is saved (for a future update)
7 | » Fix an error where flags are not read correctly
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.5.9-2024-06-18.txt:
--------------------------------------------------------------------------------
1 | Adding JavaDocs for almost all classes
2 | Improve WorldGenerator for Future Update
3 | Improve Internal Project Structure for Future Update
4 | In version 1.6.0 the support for 1.16 will be removed
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.0-2024-06-24.txt:
--------------------------------------------------------------------------------
1 | Fixing NullPointerException (#34)
2 | Create Command now has clearly defined arguments for creating with seeds, generators or worldtypes (mw create <-g, -s, -t> )
3 | Fixing World Link not working (#35)
4 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.1-2024-07-16.txt:
--------------------------------------------------------------------------------
1 | Fixing: https://github.com/Dev7ex/MultiWorld/issues/37
2 | Fixing: Missing Dependency https://github.com/Dev7ex/MultiWorld/issues/39
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.2-2024-07-31.txt:
--------------------------------------------------------------------------------
1 | Syntax of the World Create command changed
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.3-2024-08-12.txt:
--------------------------------------------------------------------------------
1 | » Adding WorldFlag (REDSTONE_ENABLED, HUNGER_ENABLED, KEEP_SPAWN_IN_MEMORY, WEATHER_ENABLED)
2 | » Optimize Code
3 | » Improve Create and Import Command
4 | » Add Version Command
5 | » Improve Load Command
6 | » Improve World Creation
7 | » Add Language Support (https://github.com/Dev7ex/MultiWorld/issues/38)
8 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.4-2024-08-12.txt:
--------------------------------------------------------------------------------
1 | Fixing incorrect pull from github of old entries in config.yml
2 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.5-2024-08-20.txt:
--------------------------------------------------------------------------------
1 | Updating Dependencies
2 | Adding MultiPerms Hook
3 | Fix World Creation Error wrong end type
4 | Fix that worlds are not loaded automatically
5 | Fix wrong permission message in world command
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.6-2024-08-24.txt:
--------------------------------------------------------------------------------
1 | Adding zh_CN.json
2 | Fixing CommandException in World Creator Command by using Custom Environment
3 | Fixing World with special generators couldn't be load when server starting (#46)
4 | Fixing Teleport Command cannot teleport
5 | Fixing incorret spelling
6 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.7-2024-09-04.md:
--------------------------------------------------------------------------------
1 | # Changelog Version 1.6.7
2 |
3 | ## Fixes
4 |
5 | -  **Fixing**: Custom Generators were not working.
6 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.8-2024-10-10.md:
--------------------------------------------------------------------------------
1 | # Changelog Version 1.6.8
2 |
3 | 1. Adding World Auto Unload System
4 | 2. Adding Variable that stores the first login of a multiworld user
5 |
6 | 3. Updating User file format to JSON
7 |
8 | Fixing
9 |
10 | Removing
11 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.6.9-2024-10-27.md:
--------------------------------------------------------------------------------
1 | # Changelog Version 1.6.9
2 |
3 | - **Adding**: Translation for the info command.
4 | - **Adding**: Colored class to display GameMode, Difficulty, and boolean values in colors.
5 | - **Fixing**: Resolved the issue where the info command did not display usage.
6 | - **Updating**: Improved the listing of the info command.
7 | - **Updating**: Updated the world load method to reduce errors.
8 | - **Updating**: Java project version changed from 16 to 17.
9 | - **Updating**: Minor code improvements.
10 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/1.7.0-2024-11-06.md:
--------------------------------------------------------------------------------
1 | ### [Version 1.7.0]
2 |
3 | - **Adding**: Added a plugin updater that informs the console and OP users about a new update. (Color Green)
4 | - **Fixing**: Fixed the display error in the info command. (Color Orange)
5 | - **Fixing**: Resolved an issue where a world could not be loaded when it was created with the custom parameter. (Color Orange)
6 | - **Updating**: The version command now shows only a variable to indicate whether an update is available. (Color Blue)
7 | - **Updating**: Improved the code. (Color Blue)
8 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/CHANGELOG-2024-12-07.md:
--------------------------------------------------------------------------------
1 | ### [Version 1.7.1]
2 |
3 | - **Adding** Ukrainian translation
4 | - **Adding** WaterWorldGenerator
5 |
6 | - **Fixing** missing placeholder replacement in the Clone command
7 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/CHANGELOG-2025-01-20.md:
--------------------------------------------------------------------------------
1 | ### [Version 1.7.2]
2 |
3 | - **Fixing**: Resolved an issue where the default world was incorrectly shown as unloaded despite being loaded. (#54)
4 | - **Fixing**: Fixed an error occurring when adding a player to the whitelist. (#53)
5 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/CHANGELOG-2025-02-16.md:
--------------------------------------------------------------------------------
1 | ### [Version 1.0.1] - YYYY-MM-DD
2 |
3 | - **Adding**: Added functionality to recognize and import worlds that were not created by MultiWorld at runtime
4 |
5 | - **Fixing**: Resolved an issue where pistons were activated despite being disabled in WorldGuard (Thanks to https://github.com/Emptiness0x)
6 |
7 | - **Updating**: Improved the API module for better performance and flexibility
8 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/CHANGELOG-2025-04-09.md:
--------------------------------------------------------------------------------
1 | ### [Version 1.7.4]
2 |
3 | - **Adding** Italian translation (Thanks to https://github.com/calexe)
4 | - **Adding** Flag that only sets the gamemode for a new world under certain conditions (Thanks to https://github.com/calaritooo)
5 |
6 | - **Fixing** Missing prefix in the update log message
7 | - **Fixing** Missing entry in the usage for the create command in all languages
8 |
9 | - **Updating**: General code improvements
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/changelogs/CHANGELOG_CONVENTION.md:
--------------------------------------------------------------------------------
1 | # Changelog Convention
2 |
3 | Each change in the changelog should begin with one of the following keywords and should be listed in alphabetical order:
4 |
5 | - **Adding**: For new features or functionalities introduced to the project.
6 | - **Fixing**: For bug fixes or error corrections.
7 | - **Removing**: For features, code, or dependencies that have been removed.
8 | - **Updating**: For improvements, modifications, or updates to existing features, dependencies, or documentation.
9 |
10 | ## Example Format
11 |
12 | ```text
13 | ### [Version 1.0.1] - YYYY-MM-DD
14 | - **Adding**: Introduced a new logging feature for tracking user actions. (Color Green)
15 | - **Fixing**: Resolved an issue where users were unable to log in. (Color Orange)
16 | - **Removing**: Deprecated the legacy authentication method. (Color Red)
17 | - **Updating**: Improved the performance of the search functionality. (Color Blue)
18 |
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-Commands-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-Commands-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-Links-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-Links-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-MultiWorld-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-MultiWorld-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-README-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-README-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-Setup-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-Setup-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-Tutorial-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-Tutorial-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/-bStats-.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/-bStats-.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/icon.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/preview-world-command.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/preview-world-command.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/preview-world-info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/preview-world-info.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/title-default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/title-default.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/title-description.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/title-description.png
--------------------------------------------------------------------------------
/multiworld-resources/src/main/resources/images/title-github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Dev7ex/MultiWorld/a6c66db92cb6690f4cbd6a0b22398c02b977fda7/multiworld-resources/src/main/resources/images/title-github.png
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | com.dev7ex
8 | multiworld
9 | pom
10 | 1.7.4-SNAPSHOT
11 |
12 | MultiWorld
13 | World Management for Minecraft
14 | https://github.com/Dev7ex/MultiWorld
15 |
16 |
17 |
18 | github
19 | GitHub Dev7ex Apache Maven Packages
20 | https://maven.pkg.github.com/Dev7ex/MultiWorld
21 |
22 |
23 |
24 |
25 | multiworld-bukkit
26 | multiworld-api
27 | multiworld-resources
28 |
29 |
30 |
31 | ${project.source.version}
32 | ${project.source.version}
33 |
34 | 17
35 | UTF-8
36 |
37 | 3.13.0
38 | 3.6.0
39 | 3.8.0
40 |
41 | 1.1.2-SNAPSHOT
42 | 4.3.3
43 | 4.17.0
44 | 24.1.0
45 | 1.0.7-SNAPSHOT
46 | 2.16.1
47 | 1.18.34
48 | 1.17.1-R0.1-SNAPSHOT
49 | 2.11.6
50 |
51 |
52 |
--------------------------------------------------------------------------------