Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.eternalcode.example.feature.randomteleport.ApiRandomTeleportCommand;
import com.eternalcode.example.feature.randomteleport.ApiRandomTeleportListener;
import com.eternalcode.example.feature.spawn.ApiSpawnCommand;
import com.eternalcode.example.feature.teleportrequest.ApiTeleportRequestListener;
import dev.rollczi.litecommands.LiteCommands;
import dev.rollczi.litecommands.bukkit.LiteBukkitFactory;
import dev.rollczi.litecommands.bukkit.LiteBukkitMessages;
Expand Down Expand Up @@ -48,7 +49,6 @@ public void onEnable() {
new ApiJailCommand(provide.getJailService()),
new ApiRandomTeleportCommand(provide.getRandomTeleportService()),
new ApiSpawnCommand(provide.getSpawnService()),
new ApiRandomTeleportCommand(provide.getRandomTeleportService()),
new ApiHomeCommand(provide.getHomeService())
)

Expand All @@ -59,10 +59,10 @@ public void onEnable() {
new CatBoyListener(provide.getCatboyService()),
new ApiRandomTeleportListener(provide.getRandomTeleportService()),
new ApiPrivateChatListener(server),
new ApiRandomTeleportListener(provide.getRandomTeleportService()),
new ApiHomeListener(server),
new ApiJailListener(server),
new ApiIgnoreListener()
new ApiIgnoreListener(),
new ApiTeleportRequestListener()
).forEach(listener -> server.getPluginManager().registerEvents(listener, this));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.eternalcode.example.feature.teleportrequest;

import com.eternalcode.core.feature.teleportrequest.PreTeleportRequestEvent;
import com.eternalcode.core.feature.teleportrequest.TeleportRequestEvent;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class ApiTeleportRequestListener implements Listener {

@EventHandler
public void onPreTeleportRequest(final PreTeleportRequestEvent event) {
Player sender = event.getSender();
Player target = event.getTarget();

sender.sendMessage(String.format(
"PreTeleportRequestEvent: %s wants to teleport to %s (EternalCore API).",
sender.getName(),
target.getName()
));

/*
if (!countryService.areInSameCountry(sender, target)) {
sender.sendMessage("You are not in the same country!");
event.setCancelled(true);
}
*/
Comment on lines +22 to +27
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

???

Suggested change
/*
if (!countryService.areInSameCountry(sender, target)) {
sender.sendMessage("You are not in the same country!");
event.setCancelled(true);
}
*/

}

@EventHandler
public void onTeleportRequest(final TeleportRequestEvent event) {
Player sender = event.getSender();
Player target = event.getTarget();

sender.sendMessage(String.format(
"TeleportRequestEvent: %s sent a teleport request to %s (EternalCore API).",
sender.getName(),
target.getName()
));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.eternalcode.core.feature.teleportrequest;

import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

/**
* Called before a teleport request is sent (via /tpa or /tpahere).
* If cancelled, the teleport request will not be created.
*/
public class PreTeleportRequestEvent extends Event implements Cancellable {

private static final HandlerList HANDLER_LIST = new HandlerList();

private final Player sender;
private final Player target;
private boolean cancelled;

public PreTeleportRequestEvent(Player sender, Player target) {
super(false);

this.sender = sender;
this.target = target;
}

public static HandlerList getHandlerList() {
return HANDLER_LIST;
}

public Player getSender() {
return this.sender;
}

public Player getTarget() {
return this.target;
}

@Override
public boolean isCancelled() {
return this.cancelled;
}

@Override
public void setCancelled(boolean cancel) {
this.cancelled = cancel;
}

@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.eternalcode.core.feature.teleportrequest;

import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

/**
* Called after a teleport request has been successfully created (via /tpa or
* /tpahere).
* This event is informational and cannot be cancelled.
*/
public class TeleportRequestEvent extends Event {

private static final HandlerList HANDLER_LIST = new HandlerList();

private final Player sender;
private final Player target;

public TeleportRequestEvent(Player sender, Player target) {
super(false);

this.sender = sender;
this.target = target;
}

public static HandlerList getHandlerList() {
return HANDLER_LIST;
}

public Player getSender() {
return this.sender;
}

public Player getTarget() {
return this.target;
}

@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.eternalcode.core.feature.teleportrequest;

import com.eternalcode.annotations.scan.command.DescriptionDocs;
import com.eternalcode.commons.bukkit.scheduler.MinecraftScheduler;
import com.eternalcode.commons.concurrent.FutureHandler;
import com.eternalcode.core.event.EventCaller;
import com.eternalcode.core.feature.ignore.IgnoreService;
import com.eternalcode.core.injector.annotations.Inject;
import com.eternalcode.core.notice.NoticeService;
Expand All @@ -19,12 +22,22 @@ class TpaCommand {
private final TeleportRequestService requestService;
private final IgnoreService ignoreService;
private final NoticeService noticeService;
private final EventCaller eventCaller;
private final MinecraftScheduler scheduler;

@Inject
TpaCommand(TeleportRequestService requestService, IgnoreService ignoreService, NoticeService noticeService) {
TpaCommand(
TeleportRequestService requestService,
IgnoreService ignoreService,
NoticeService noticeService,
EventCaller eventCaller,
MinecraftScheduler scheduler
) {
this.requestService = requestService;
this.ignoreService = ignoreService;
this.noticeService = noticeService;
this.eventCaller = eventCaller;
this.scheduler = scheduler;
}

@Execute
Expand All @@ -42,6 +55,12 @@ void execute(@Sender Player player, @Arg Player target) {
return;
}

PreTeleportRequestEvent preEvent = this.eventCaller.callEvent(new PreTeleportRequestEvent(player, target));

if (preEvent.isCancelled()) {
return;
}

this.noticeService
.create()
.player(player.getUniqueId())
Expand All @@ -67,7 +86,8 @@ void execute(@Sender Player player, @Arg Player target) {
.send();

this.requestService.createRequest(player.getUniqueId(), target.getUniqueId());
});
this.scheduler.run(() -> this.eventCaller.callEvent(new TeleportRequestEvent(player, target)));
}).exceptionally(FutureHandler::handleException);
}

CompletableFuture<Boolean> isIgnoring(Player target, Player sender) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
package com.eternalcode.core.feature.teleportrequest.self;

import com.eternalcode.annotations.scan.command.DescriptionDocs;
import com.eternalcode.commons.bukkit.scheduler.MinecraftScheduler;
import com.eternalcode.commons.concurrent.FutureHandler;
import com.eternalcode.core.event.EventCaller;
import com.eternalcode.core.feature.ignore.IgnoreService;
import com.eternalcode.core.feature.teleportrequest.PreTeleportRequestEvent;
import com.eternalcode.core.feature.teleportrequest.TeleportRequestEvent;
import com.eternalcode.core.injector.annotations.Inject;
import com.eternalcode.core.notice.NoticeService;
import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Sender;
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.permission.Permission;
import org.bukkit.entity.Player;

import java.util.concurrent.CompletableFuture;
import org.bukkit.entity.Player;

@Command(name = "tpahere")
@Permission("eternalcore.tpahere")
Expand All @@ -20,19 +24,29 @@ class TpaHereCommand {
private final TeleportHereRequestService requestService;
private final IgnoreService ignoreService;
private final NoticeService noticeService;
private final EventCaller eventCaller;
private final MinecraftScheduler scheduler;

@Inject
TpaHereCommand(TeleportHereRequestService requestService, IgnoreService ignoreService, NoticeService noticeService) {
TpaHereCommand(
TeleportHereRequestService requestService,
IgnoreService ignoreService,
NoticeService noticeService,
EventCaller eventCaller,
MinecraftScheduler scheduler
) {
this.requestService = requestService;
this.ignoreService = ignoreService;
this.noticeService = noticeService;
this.eventCaller = eventCaller;
this.scheduler = scheduler;
}

@Execute
@DescriptionDocs(description = "Send teleport request to player to teleport to you", arguments = "<player>")
void execute(@Sender Player sender, @Arg Player target) {
if (sender.equals(target)) {
this.noticeService.player(sender.getUniqueId() , translation -> translation.tpa().tpaSelfMessage());
this.noticeService.player(sender.getUniqueId(), translation -> translation.tpa().tpaSelfMessage());

return;
}
Expand All @@ -43,34 +57,41 @@ void execute(@Sender Player sender, @Arg Player target) {
return;
}

PreTeleportRequestEvent preEvent = this.eventCaller.callEvent(new PreTeleportRequestEvent(sender, target));

if (preEvent.isCancelled()) {
return;
}

this.isIgnoring(target, sender).thenAccept(isIgnoring -> {
if (isIgnoring) {
this.noticeService.create()
.player(sender.getUniqueId())
.notice(translation -> translation.tpa().tpaTargetIgnoresYou())
.placeholder("{PLAYER}", target.getName())
.send();
return;
}

this.noticeService
.create()
.player(sender.getUniqueId())
.notice(translation -> translation.tpa().tpaHereSent())
.placeholder("{PLAYER}", target.getName())
.send();

this.noticeService.create()
if (isIgnoring) {
this.noticeService.create()
.player(sender.getUniqueId())
.notice(translation -> translation.tpa().tpaTargetIgnoresYou())
.placeholder("{PLAYER}", target.getName())
.send();
return;
}

this.noticeService
.create()
.player(sender.getUniqueId())
.notice(translation -> translation.tpa().tpaHereSent())
.placeholder("{PLAYER}", target.getName())
.send();

this.noticeService.create()
.player(target.getUniqueId())
.notice(translation -> translation.tpa().tpaHereReceived())
.placeholder("{PLAYER}", sender.getName())
.send();

this.requestService.createRequest(sender.getUniqueId(), target.getUniqueId());
});
this.requestService.createRequest(sender.getUniqueId(), target.getUniqueId());
this.scheduler.run(() -> this.eventCaller.callEvent(new TeleportRequestEvent(sender, target)));
}).exceptionally(FutureHandler::handleException);
}

@Execute(name = "-all", aliases = { "*" })
@Execute(name = "-all", aliases = {"*"})
@Permission("eternalcore.tpahere.all")
@DescriptionDocs(description = "Send teleport request to all online players to teleport to you")
void executeAll(@Sender Player sender) {
Expand All @@ -83,6 +104,12 @@ void executeAll(@Sender Player sender) {
continue;
}

PreTeleportRequestEvent preEvent = this.eventCaller.callEvent(new PreTeleportRequestEvent(sender, target));

if (preEvent.isCancelled()) {
continue;
}

this.isIgnoring(target, sender).thenAccept(isIgnoring -> {
if (isIgnoring) {
return;
Expand All @@ -95,8 +122,8 @@ void executeAll(@Sender Player sender) {
.send();

this.requestService.createRequest(sender.getUniqueId(), target.getUniqueId());

});
this.scheduler.run(() -> this.eventCaller.callEvent(new TeleportRequestEvent(sender, target)));
}).exceptionally(FutureHandler::handleException);
}

this.noticeService.create()
Expand All @@ -105,8 +132,6 @@ void executeAll(@Sender Player sender) {
.send();
}



private CompletableFuture<Boolean> isIgnoring(Player target, Player sender) {
return this.ignoreService.isIgnored(target.getUniqueId(), sender.getUniqueId());
}
Expand Down