-
-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] Make the plugin folia-compatible #844
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -2,6 +2,7 @@ | |||||||||||||||
|
||||||||||||||||
import com.eternalcode.annotations.scan.command.DescriptionDocs; | ||||||||||||||||
import com.eternalcode.annotations.scan.feature.FeatureDocs; | ||||||||||||||||
import com.eternalcode.commons.scheduler.Scheduler; | ||||||||||||||||
import com.eternalcode.core.injector.annotations.Inject; | ||||||||||||||||
import com.eternalcode.core.notice.NoticeService; | ||||||||||||||||
import com.eternalcode.core.viewer.Viewer; | ||||||||||||||||
|
@@ -20,26 +21,28 @@ public class SudoCommand { | |||||||||||||||
|
||||||||||||||||
private final Server server; | ||||||||||||||||
private final NoticeService noticeService; | ||||||||||||||||
private final Scheduler scheduler; | ||||||||||||||||
|
||||||||||||||||
@Inject | ||||||||||||||||
public SudoCommand(Server server, NoticeService noticeService) { | ||||||||||||||||
public SudoCommand(Server server, NoticeService noticeService, Scheduler scheduler) { | ||||||||||||||||
this.server = server; | ||||||||||||||||
this.noticeService = noticeService; | ||||||||||||||||
this.scheduler = scheduler; | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
@Execute(name = "-console") | ||||||||||||||||
@Permission("eternalcore.sudo.console") | ||||||||||||||||
@DescriptionDocs(description = "Execute command as console", arguments = "<command>") | ||||||||||||||||
void console(@Context Viewer viewer, @Join String command) { | ||||||||||||||||
this.server.dispatchCommand(this.server.getConsoleSender(), command); | ||||||||||||||||
this.scheduler.sync(() -> this.server.dispatchCommand(this.server.getConsoleSender(), command)); | ||||||||||||||||
this.sendSudoSpy(viewer, command); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
@Execute | ||||||||||||||||
@Permission("eternalcore.sudo.player") | ||||||||||||||||
@DescriptionDocs(description = "Execute command as player", arguments = "<player> <command>") | ||||||||||||||||
void player(@Context Viewer viewer, @Arg Player target, @Join String command) { | ||||||||||||||||
this.server.dispatchCommand(target, command); | ||||||||||||||||
this.scheduler.sync(() -> this.server.dispatchCommand(target, command)); | ||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider handling command execution result Similarly, consider checking the result of Apply this diff to handle the command execution result: -this.scheduler.sync(() -> this.server.dispatchCommand(target, command));
+this.scheduler.sync(() -> {
+ boolean success = this.server.dispatchCommand(target, command);
+ if (!success) {
+ viewer.sendMessage("Command execution failed.");
+ }
+}); 📝 Committable suggestion
Suggested change
|
||||||||||||||||
this.sendSudoSpy(viewer, command); | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
|
@@ -53,6 +56,7 @@ private void sendSudoSpy(Viewer viewer, String command) { | |||||||||||||||
|
||||||||||||||||
this.server.getOnlinePlayers().stream() | ||||||||||||||||
.filter(player -> player.hasPermission("eternalcore.sudo.spy")) | ||||||||||||||||
.filter(player -> !player.getUniqueId().equals(viewer.getUniqueId())) | ||||||||||||||||
.forEach(player -> this.noticeService.create() | ||||||||||||||||
.notice(translation -> translation.sudo().sudoMessage()) | ||||||||||||||||
.placeholder("{COMMAND}", command) | ||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,25 +1,28 @@ | ||||||||||||||||||||||||||||||
package com.eternalcode.core.feature.essentials.time; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
import com.eternalcode.annotations.scan.command.DescriptionDocs; | ||||||||||||||||||||||||||||||
import com.eternalcode.commons.scheduler.Scheduler; | ||||||||||||||||||||||||||||||
import com.eternalcode.core.injector.annotations.Inject; | ||||||||||||||||||||||||||||||
import com.eternalcode.core.notice.NoticeService; | ||||||||||||||||||||||||||||||
import com.eternalcode.core.viewer.Viewer; | ||||||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.argument.Arg; | ||||||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.command.Command; | ||||||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.context.Context; | ||||||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.execute.Execute; | ||||||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.permission.Permission; | ||||||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.command.Command; | ||||||||||||||||||||||||||||||
import org.bukkit.World; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Command(name = "night") | ||||||||||||||||||||||||||||||
@Permission("eternalcore.night") | ||||||||||||||||||||||||||||||
class NightCommand { | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
private final NoticeService noticeService; | ||||||||||||||||||||||||||||||
private final Scheduler scheduler; | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Inject | ||||||||||||||||||||||||||||||
NightCommand(NoticeService noticeService) { | ||||||||||||||||||||||||||||||
NightCommand(NoticeService noticeService, Scheduler scheduler) { | ||||||||||||||||||||||||||||||
this.noticeService = noticeService; | ||||||||||||||||||||||||||||||
this.scheduler = scheduler; | ||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
@Execute | ||||||||||||||||||||||||||||||
|
@@ -35,7 +38,9 @@ void nightWorld(@Context Viewer viewer, @Arg World world) { | |||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
private void setNight(Viewer viewer, World world) { | ||||||||||||||||||||||||||||||
world.setTime(13700); | ||||||||||||||||||||||||||||||
this.scheduler.sync(() -> { | ||||||||||||||||||||||||||||||
world.setTime(13700); | ||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||
Comment on lines
+41
to
+43
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure notice is sent after time is set Currently, the notice is sent immediately after scheduling the time change, which might result in the notice being delivered before the world time is actually set due to asynchronous execution. To guarantee that the viewer receives the notice after the time has been updated, consider moving the notice-sending code inside the Apply this diff to adjust the code: private void setNight(Viewer viewer, World world) {
this.scheduler.sync(() -> {
world.setTime(13700);
+ this.noticeService.create()
+ .viewer(viewer)
+ .placeholder("{WORLD}", world.getName())
+ .notice(translation -> translation.timeAndWeather().timeSetNight())
+ .send();
});
-
- this.noticeService.create()
- .viewer(viewer)
- .placeholder("{WORLD}", world.getName())
- .notice(translation -> translation.timeAndWeather().timeSetNight())
- .send();
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||
this.noticeService.create() | ||||||||||||||||||||||||||||||
.viewer(viewer) | ||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,25 +1,28 @@ | ||||||||||||||||||||||||||
package com.eternalcode.core.feature.essentials.weather; | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
import com.eternalcode.annotations.scan.command.DescriptionDocs; | ||||||||||||||||||||||||||
import com.eternalcode.commons.scheduler.Scheduler; | ||||||||||||||||||||||||||
import com.eternalcode.core.injector.annotations.Inject; | ||||||||||||||||||||||||||
import com.eternalcode.core.notice.NoticeService; | ||||||||||||||||||||||||||
import com.eternalcode.core.viewer.Viewer; | ||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.argument.Arg; | ||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.command.Command; | ||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.context.Context; | ||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.execute.Execute; | ||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.permission.Permission; | ||||||||||||||||||||||||||
import dev.rollczi.litecommands.annotations.command.Command; | ||||||||||||||||||||||||||
import org.bukkit.World; | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@Command(name = "rain") | ||||||||||||||||||||||||||
@Permission("eternalcore.rain") | ||||||||||||||||||||||||||
class RainCommand { | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
private final NoticeService noticeService; | ||||||||||||||||||||||||||
private final Scheduler scheduler; | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@Inject | ||||||||||||||||||||||||||
RainCommand(NoticeService noticeService) { | ||||||||||||||||||||||||||
RainCommand(NoticeService noticeService, Scheduler scheduler) { | ||||||||||||||||||||||||||
this.noticeService = noticeService; | ||||||||||||||||||||||||||
this.scheduler = scheduler; | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
@Execute | ||||||||||||||||||||||||||
|
@@ -35,8 +38,10 @@ void rainWorld(@Context Viewer viewer, @Arg World world) { | |||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
private void setRain(Viewer viewer, World world) { | ||||||||||||||||||||||||||
world.setStorm(true); | ||||||||||||||||||||||||||
world.setThundering(false); | ||||||||||||||||||||||||||
this.scheduler.sync(() -> { | ||||||||||||||||||||||||||
world.setStorm(true); | ||||||||||||||||||||||||||
world.setThundering(false); | ||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||
Comment on lines
+41
to
+44
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider handling exceptions within the scheduled task To enhance robustness, consider adding exception handling within the Apply this diff to add exception handling: private void setRain(Viewer viewer, World world) {
this.scheduler.sync(() -> {
+ try {
world.setStorm(true);
world.setThundering(false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
});
this.noticeService.create()
.viewer(viewer)
.placeholder("{WORLD}", world.getName())
.notice(translation -> translation.timeAndWeather().weatherSetRain())
.send();
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
this.noticeService.create() | ||||||||||||||||||||||||||
.viewer(viewer) | ||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Consider handling command execution result
The
dispatchCommand
method returns a boolean indicating whether the command was successful. Consider checking this return value to handle unsuccessful command executions and provide feedback to the user.Apply this diff to handle the command execution result:
📝 Committable suggestion