Skip to content

Commit 7255d74

Browse files
GH-666 Add Warp System API (WarpEvent and WarpService) (#685)
* Added Warp System API (WarpEvent and WarpService) * Rectified everything regarding suggestions * Fixed gradle style * Update eternalcore-api/src/main/java/com/eternalcode/core/feature/warp/Warp.java * Update eternalcore-api/src/main/java/com/eternalcode/core/feature/warp/Warp.java * Update eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpImpl.java * Update eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpImpl.java * Update eternalcore-api/src/main/java/com/eternalcode/core/feature/warp/event/WarpTeleportEvent.java * Update eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpArgument.java * Update eternalcore-api/src/main/java/com/eternalcode/core/feature/warp/event/WarpTeleportEvent.java * Fully implemented WarpService to EternalCoreApi * Last changes requested by P1otrulla --------- Co-authored-by: Norbert Dejlich <[email protected]>
1 parent fb92d2b commit 7255d74

File tree

11 files changed

+141
-35
lines changed

11 files changed

+141
-35
lines changed

eternalcore-api/src/main/java/com/eternalcode/core/EternalCoreApi.java

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.eternalcode.core.feature.randomteleport.RandomTeleportService;
66
import com.eternalcode.core.feature.spawn.SpawnService;
77
import com.eternalcode.core.feature.teleport.TeleportService;
8+
import com.eternalcode.core.feature.warp.WarpService;
89

910
public interface EternalCoreApi {
1011

@@ -18,4 +19,5 @@ public interface EternalCoreApi {
1819

1920
RandomTeleportService getRandomTeleportService();
2021

22+
WarpService getWarpService();
2123
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.eternalcode.core.feature.warp;
2+
3+
import org.bukkit.Location;
4+
5+
public interface Warp {
6+
7+
Location getLocation();
8+
9+
String getName();
10+
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.eternalcode.core.feature.warp;
2+
3+
import org.bukkit.Location;
4+
5+
import java.util.Collection;
6+
import java.util.Optional;
7+
8+
public interface WarpService {
9+
10+
void createWarp(String name, Location location);
11+
12+
void removeWarp(String warp);
13+
14+
boolean warpExists(String name);
15+
16+
Optional<Warp> findWarp(String name);
17+
18+
Collection<String> getNamesOfWarps();
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.eternalcode.core.feature.warp.event;
2+
3+
import com.eternalcode.core.feature.warp.Warp;
4+
import org.bukkit.entity.Player;
5+
import org.bukkit.event.Cancellable;
6+
import org.bukkit.event.Event;
7+
import org.bukkit.event.HandlerList;
8+
9+
public class WarpTeleportEvent extends Event implements Cancellable {
10+
private static final HandlerList HANDLER_LIST = new HandlerList();
11+
12+
private final Player player;
13+
private boolean cancelled;
14+
private final Warp warp;
15+
16+
public WarpTeleportEvent(Player player, Warp warp) {
17+
super(false);
18+
19+
this.player = player;
20+
this.warp = warp;
21+
}
22+
23+
public Player getPlayer() {
24+
return this.player;
25+
}
26+
27+
public Warp getWarp() {
28+
return this.warp;
29+
}
30+
31+
@Override
32+
public HandlerList getHandlers() {
33+
return HANDLER_LIST;
34+
}
35+
36+
public static HandlerList getHandlerList() {
37+
return HANDLER_LIST;
38+
}
39+
40+
@Override
41+
public boolean isCancelled() {
42+
return this.cancelled;
43+
}
44+
45+
@Override
46+
public void setCancelled(boolean cancel) {
47+
this.cancelled = cancel;
48+
}
49+
}

eternalcore-core/src/main/java/com/eternalcode/core/EternalCoreApiImpl.java

+6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.eternalcode.core.feature.randomteleport.RandomTeleportService;
66
import com.eternalcode.core.feature.spawn.SpawnService;
77
import com.eternalcode.core.feature.teleport.TeleportService;
8+
import com.eternalcode.core.feature.warp.WarpService;
89
import com.eternalcode.core.injector.DependencyProvider;
910

1011
class EternalCoreApiImpl implements EternalCoreApi {
@@ -40,4 +41,9 @@ public RandomTeleportService getRandomTeleportService() {
4041
return this.dependencyProvider.getDependency(RandomTeleportService.class);
4142
}
4243

44+
@Override
45+
public WarpService getWarpService() {
46+
return this.dependencyProvider.getDependency(WarpService.class);
47+
}
48+
4349
}

eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpArgument.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
import dev.rollczi.litecommands.suggestion.SuggestionContext;
1313
import dev.rollczi.litecommands.suggestion.SuggestionResult;
1414
import org.bukkit.command.CommandSender;
15-
import panda.std.Option;
15+
16+
import java.util.Optional;
1617

1718
@LiteArgument(type = Warp.class)
1819
class WarpArgument extends AbstractViewerArgument<Warp> {
@@ -27,13 +28,11 @@ class WarpArgument extends AbstractViewerArgument<Warp> {
2728

2829
@Override
2930
public ParseResult<Warp> parse(Invocation<CommandSender> invocation, String argument, Translation translation) {
30-
Option<Warp> warpOption = this.warpManager.findWarp(argument);
31+
Optional<Warp> warpOption = this.warpManager.findWarp(argument);
3132

32-
if (warpOption.isEmpty()) {
33-
return ParseResult.failure(translation.warp().notExist());
34-
}
33+
return warpOption.map(ParseResult::success)
34+
.orElseGet(() -> ParseResult.failure(translation.warp().notExist()));
3535

36-
return ParseResult.success(warpOption.get());
3736
}
3837

3938
@Override

eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpCommand.java

+13-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.eternalcode.annotations.scan.command.DescriptionDocs;
44
import com.eternalcode.core.configuration.implementation.PluginConfiguration;
5+
import com.eternalcode.core.event.EventCaller;
56
import com.eternalcode.core.feature.teleport.TeleportTaskService;
7+
import com.eternalcode.core.feature.warp.event.WarpTeleportEvent;
68
import com.eternalcode.core.injector.annotations.Inject;
79
import com.eternalcode.core.notice.NoticeService;
810
import com.eternalcode.core.shared.PositionAdapter;
@@ -25,14 +27,16 @@ class WarpCommand {
2527
private final WarpInventory warpInventory;
2628
private final NoticeService noticeService;
2729
private final WarpManager warpManager;
30+
private final EventCaller eventCaller;
2831

2932
@Inject
30-
WarpCommand(NoticeService noticeService, WarpManager warpManager, TeleportTaskService teleportTaskService, PluginConfiguration config, WarpInventory warpInventory) {
33+
WarpCommand(NoticeService noticeService, WarpManager warpManager, TeleportTaskService teleportTaskService, PluginConfiguration config, WarpInventory warpInventory, EventCaller eventCaller) {
3134
this.noticeService = noticeService;
3235
this.warpManager = warpManager;
3336
this.teleportTaskService = teleportTaskService;
3437
this.config = config;
3538
this.warpInventory = warpInventory;
39+
this.eventCaller = eventCaller;
3640
}
3741

3842
@Execute(name = "warp")
@@ -54,12 +58,16 @@ void warp(@Context Player player, @Context User user) {
5458
@Execute(name = "warp")
5559
@DescriptionDocs(description = "Teleport to warp, if player has permission eternalcore.warp.bypass teleport will be instant", arguments = "<warp>")
5660
void warp(@Context Player player, @Arg Warp warp) {
57-
if (player.hasPermission("eternalcore.warp.bypass")) {
58-
this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), warp.getPosition(), Duration.ZERO);
61+
WarpTeleportEvent event = this.eventCaller.callEvent(new WarpTeleportEvent(player, warp));
62+
if (event.isCancelled()) {
5963
return;
6064
}
6165

62-
this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), warp.getPosition(), Duration.ofSeconds(5));
66+
if (player.hasPermission("eternalcore.warp.bypass")) {
67+
this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), PositionAdapter.convert(warp.getLocation()), Duration.ZERO);
68+
return;
69+
}
70+
this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), PositionAdapter.convert(warp.getLocation()), Duration.ofSeconds(5));
6371
}
6472

6573
@Execute(name = "setwarp")
@@ -76,7 +84,7 @@ void add(@Context Player player, @Arg String warp) {
7684
return;
7785
}
7886

79-
this.warpManager.createWarp(warp, PositionAdapter.convert(player.getLocation()));
87+
this.warpManager.createWarp(warp, player.getLocation());
8088

8189
this.noticeService.create()
8290
.player(player.getUniqueId())

eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpConfigRepository.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.eternalcode.core.injector.annotations.Inject;
66
import com.eternalcode.core.injector.annotations.component.Service;
77
import com.eternalcode.core.shared.Position;
8+
import com.eternalcode.core.shared.PositionAdapter;
89
import panda.std.Option;
910

1011
import java.util.HashMap;
@@ -28,7 +29,7 @@ class WarpConfigRepository implements WarpRepository {
2829

2930
@Override
3031
public void addWarp(Warp warp) {
31-
this.edit(warps -> warps.put(warp.getName(), warp.getPosition()));
32+
this.edit(warps -> warps.put(warp.getName(), PositionAdapter.convert(warp.getLocation())));
3233
}
3334

3435
@Override
@@ -48,13 +49,13 @@ private void edit(Consumer<Map<String, Position>> editor) {
4849

4950
@Override
5051
public CompletableFuture<Option<Warp>> getWarp(String name) {
51-
return CompletableFuture.completedFuture(Option.of(this.locationsConfiguration.warps.get(name)).map(location -> new Warp(name, location)));
52+
return CompletableFuture.completedFuture(Option.of(this.locationsConfiguration.warps.get(name)).map(location -> new WarpImpl(name, location)));
5253
}
5354

5455
@Override
5556
public CompletableFuture<List<Warp>> getWarps() {
5657
return CompletableFuture.completedFuture(this.locationsConfiguration.warps.entrySet().stream()
57-
.map(entry -> new Warp(entry.getKey(), entry.getValue()))
58+
.map(entry -> new WarpImpl(entry.getKey(), entry.getValue()))
5859
.collect(Collectors.toList()));
5960
}
6061

Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
package com.eternalcode.core.feature.warp;
22

33
import com.eternalcode.core.shared.Position;
4+
import com.eternalcode.core.shared.PositionAdapter;
5+
import org.bukkit.Location;
46

5-
class Warp {
7+
class WarpImpl implements Warp {
68

79
private final String name;
810
private final Position position;
911

10-
Warp(String name, Position position) {
12+
WarpImpl(String name, Position position) {
1113
this.name = name;
1214
this.position = position;
1315
}
1416

17+
@Override
1518
public String getName() {
1619
return this.name;
1720
}
1821

19-
public Position getPosition() {
20-
return this.position;
22+
@Override
23+
public Location getLocation() {
24+
return PositionAdapter.convert(this.position);
2125
}
22-
2326
}

eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpInventory.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.time.Duration;
2424
import java.util.List;
25+
import java.util.Optional;
2526
import java.util.stream.Collectors;
2627

2728
@Service
@@ -53,13 +54,13 @@ private Gui createInventory(Language language) {
5354
.create();
5455

5556
warpSection.items().values().forEach(item -> {
56-
Option<Warp> warpOption = this.warpManager.findWarp(item.warpName());
57+
Optional<Warp> warpOptional = this.warpManager.findWarp(item.warpName());
5758

58-
if (warpOption.isEmpty()) {
59+
if (warpOptional.isEmpty()) {
5960
return;
6061
}
6162

62-
Warp warp = warpOption.get();
63+
Warp warp = warpOptional.get();
6364
ConfigItem warpItem = item.warpItem();
6465

6566
BaseItemBuilder baseItemBuilder = this.createItem(warpItem);
@@ -71,14 +72,14 @@ private Gui createInventory(Language language) {
7172
player.closeInventory();
7273

7374
if (player.hasPermission("eternalcore.warp.bypass")) {
74-
this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), warp.getPosition(), Duration.ZERO);
75+
this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), PositionAdapter.convert(warp.getLocation()), Duration.ZERO);
7576
return;
7677
}
7778

7879
this.teleportTaskService.createTeleport(
7980
player.getUniqueId(),
8081
PositionAdapter.convert(player.getLocation()),
81-
warp.getPosition(),
82+
PositionAdapter.convert(warp.getLocation()),
8283
Duration.ofSeconds(5)
8384
);
8485
});

eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpManager.java

+18-11
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@
33
import com.eternalcode.annotations.scan.feature.FeatureDocs;
44
import com.eternalcode.core.injector.annotations.Inject;
55
import com.eternalcode.core.injector.annotations.component.Service;
6-
import com.eternalcode.core.shared.Position;
7-
import panda.std.Option;
6+
import com.eternalcode.core.shared.PositionAdapter;
7+
import org.bukkit.Location;
88

9+
import java.util.Map;
10+
import java.util.HashMap;
11+
import java.util.Optional;
912
import java.util.Collection;
1013
import java.util.Collections;
11-
import java.util.HashMap;
12-
import java.util.Map;
1314

1415
@FeatureDocs(
1516
name = "Warp System",
1617
description = "Allows you to create warps, optionally you can enable warp inventory"
1718
)
1819
@Service
19-
class WarpManager {
20+
class WarpManager implements WarpService {
2021

2122
private final Map<String, Warp> warpMap = new HashMap<>();
2223
private final WarpRepository warpRepository;
@@ -32,15 +33,18 @@ private WarpManager(WarpRepository warpRepository) {
3233
});
3334
}
3435

35-
public void createWarp(String name, Position position) {
36-
Warp warp = new Warp(name, position);
36+
@Override
37+
public void createWarp( String name, Location location) {
38+
39+
Warp warp = new WarpImpl(name, PositionAdapter.convert(location));
3740

3841
this.warpMap.put(name, warp);
3942

4043
this.warpRepository.addWarp(warp);
4144
}
4245

43-
public void removeWarp(String warp) {
46+
@Override
47+
public void removeWarp( String warp) {
4448
Warp remove = this.warpMap.remove(warp);
4549

4650
if (remove == null) {
@@ -50,14 +54,17 @@ public void removeWarp(String warp) {
5054
this.warpRepository.removeWarp(remove.getName());
5155
}
5256

53-
public boolean warpExists(String name) {
57+
@Override
58+
public boolean warpExists( String name) {
5459
return this.warpMap.containsKey(name);
5560
}
5661

57-
public Option<Warp> findWarp(String name) {
58-
return Option.of(this.warpMap.get(name));
62+
@Override
63+
public Optional<Warp> findWarp( String name) {
64+
return Optional.ofNullable(this.warpMap.get(name));
5965
}
6066

67+
@Override
6168
public Collection<String> getNamesOfWarps() {
6269
return Collections.unmodifiableCollection(this.warpMap.keySet());
6370
}

0 commit comments

Comments
 (0)