mirror of
https://github.com/plexusorg/Plex.git
synced 2026-07-14 21:44:55 +00:00
Prism rollback fixes
This commit is contained in:
@@ -1,17 +1,30 @@
|
|||||||
package dev.plex.hook;
|
package dev.plex.hook;
|
||||||
|
|
||||||
import dev.plex.Plex;
|
import dev.plex.Plex;
|
||||||
|
import dev.plex.util.PlexLog;
|
||||||
|
import dev.plex.util.PlexUtils;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.List;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||||
|
import org.prism_mc.prism.api.activities.ActivityQuery;
|
||||||
import org.prism_mc.prism.paper.api.PrismPaperApi;
|
import org.prism_mc.prism.paper.api.PrismPaperApi;
|
||||||
|
import org.prism_mc.prism.paper.api.activities.PaperActivityQuery;
|
||||||
|
|
||||||
public class PrismHook
|
public class PrismHook
|
||||||
{
|
{
|
||||||
|
private static final List<String> ROLLBACK_ACTIONS = List.of("block-place", "block-break", "block-burn", "entity-spawn", "entity-kill", "entity-explode");
|
||||||
|
|
||||||
|
private final Plex plex;
|
||||||
private RegisteredServiceProvider<PrismPaperApi> provider;
|
private RegisteredServiceProvider<PrismPaperApi> provider;
|
||||||
|
|
||||||
public PrismHook(Plex plex)
|
public PrismHook(Plex plex)
|
||||||
{
|
{
|
||||||
|
this.plex = plex;
|
||||||
Plugin plugin = plex.getServer().getPluginManager().getPlugin("Prism");
|
Plugin plugin = plex.getServer().getPluginManager().getPlugin("Prism");
|
||||||
|
|
||||||
// Check that Prism is loaded
|
// Check that Prism is loaded
|
||||||
@@ -32,5 +45,49 @@ public class PrismHook
|
|||||||
{
|
{
|
||||||
return provider.getProvider();
|
return provider.getProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void rollback(CommandSender sender, String playerName, int seconds)
|
||||||
|
{
|
||||||
|
long now = Instant.now().getEpochSecond();
|
||||||
|
ActivityQuery query = PaperActivityQuery.builder()
|
||||||
|
.actionTypeKeys(ROLLBACK_ACTIONS)
|
||||||
|
.causePlayerName(playerName)
|
||||||
|
.before(now)
|
||||||
|
.after(now - seconds)
|
||||||
|
.rollback()
|
||||||
|
.build();
|
||||||
|
|
||||||
|
getPrism().rollback(sender, query).whenComplete((result, error) ->
|
||||||
|
plex.getApi().scheduler().runGlobal(() ->
|
||||||
|
{
|
||||||
|
if (error != null)
|
||||||
|
{
|
||||||
|
sendMessage(sender, PlexUtils.messageComponent("prismRollbackError", error.getMessage()));
|
||||||
|
PlexLog.error("Unable to rollback: {0}", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = result.applied();
|
||||||
|
if (count == 0)
|
||||||
|
{
|
||||||
|
sendMessage(sender, PlexUtils.messageComponent("prismNoResult", count));
|
||||||
|
PlexLog.debug("No activities are available to rollback");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendMessage(sender, PlexUtils.messageComponent("prismRollbackMessage", count));
|
||||||
|
PlexLog.debug("Rolled back {0} activities", count);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendMessage(CommandSender sender, Component message)
|
||||||
|
{
|
||||||
|
if (sender instanceof Player player)
|
||||||
|
{
|
||||||
|
plex.getApi().scheduler().runEntity(player, () -> sender.sendMessage(message));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sender.sendMessage(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,23 +2,13 @@ package dev.plex.hook;
|
|||||||
|
|
||||||
import dev.plex.Plex;
|
import dev.plex.Plex;
|
||||||
import dev.plex.api.rollback.RollbackApi;
|
import dev.plex.api.rollback.RollbackApi;
|
||||||
import dev.plex.util.PlexLog;
|
|
||||||
import dev.plex.util.PlexUtils;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.prism_mc.prism.api.activities.ActivityQuery;
|
|
||||||
import org.prism_mc.prism.paper.api.activities.PaperActivityQuery;
|
|
||||||
|
|
||||||
public class RollbackManager implements RollbackApi
|
public class RollbackManager implements RollbackApi
|
||||||
{
|
{
|
||||||
private static final List<String> ROLLBACK_ACTIONS = List.of("block-place", "block-break", "block-burn", "entity-spawn", "entity-kill", "entity-explode");
|
|
||||||
|
|
||||||
private final Plex plugin;
|
private final Plex plugin;
|
||||||
|
|
||||||
public RollbackManager(Plex plugin)
|
public RollbackManager(Plex plugin)
|
||||||
@@ -38,7 +28,7 @@ public class RollbackManager implements RollbackApi
|
|||||||
{
|
{
|
||||||
if (plugin.getPrismHook() != null && plugin.getPrismHook().hasPrism())
|
if (plugin.getPrismHook() != null && plugin.getPrismHook().hasPrism())
|
||||||
{
|
{
|
||||||
plugin.getApi().scheduler().runGlobal(() -> rollbackWithPrism(sender, playerName, seconds));
|
plugin.getApi().scheduler().runGlobal(() -> plugin.getPrismHook().rollback(sender, playerName, seconds));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,53 +41,9 @@ public class RollbackManager implements RollbackApi
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rollbackWithPrism(CommandSender sender, String playerName, int seconds)
|
|
||||||
{
|
|
||||||
long now = Instant.now().getEpochSecond();
|
|
||||||
ActivityQuery query = PaperActivityQuery.builder()
|
|
||||||
.actionTypeKeys(ROLLBACK_ACTIONS)
|
|
||||||
.causePlayerName(playerName)
|
|
||||||
.before(now)
|
|
||||||
.after(now - seconds)
|
|
||||||
.rollback()
|
|
||||||
.build();
|
|
||||||
|
|
||||||
plugin.getPrismHook().getPrism().rollback(sender, query).whenComplete((result, error) ->
|
|
||||||
plugin.getApi().scheduler().runGlobal(() ->
|
|
||||||
{
|
|
||||||
if (error != null)
|
|
||||||
{
|
|
||||||
sendMessage(sender, PlexUtils.messageComponent("prismRollbackError", error.getMessage()));
|
|
||||||
PlexLog.error("Unable to rollback: {0}", error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int count = result.applied();
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
sendMessage(sender, PlexUtils.messageComponent("prismNoResult", count));
|
|
||||||
PlexLog.debug("No activities are available to rollback");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendMessage(sender, PlexUtils.messageComponent("prismRollbackMessage", count));
|
|
||||||
PlexLog.debug("Rolled back {0} activities", count);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void rollbackWithCoreProtect(String playerName, int seconds)
|
private void rollbackWithCoreProtect(String playerName, int seconds)
|
||||||
{
|
{
|
||||||
plugin.getApi().scheduler().runAsync(() ->
|
plugin.getApi().scheduler().runAsync(() ->
|
||||||
plugin.getCoreProtectHook().coreProtectAPI().performRollback(seconds, Collections.singletonList(playerName), null, null, null, null, 0, null));
|
plugin.getCoreProtectHook().coreProtectAPI().performRollback(seconds, Collections.singletonList(playerName), null, null, null, null, 0, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendMessage(CommandSender sender, Component message)
|
|
||||||
{
|
|
||||||
if (sender instanceof Player player)
|
|
||||||
{
|
|
||||||
plugin.getApi().scheduler().runEntity(player, () -> sender.sendMessage(message));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
sender.sendMessage(message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user