summaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main/java')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java44
1 files changed, 34 insertions, 10 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java
index 6d905736..516f5ae2 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/coreprotect/CoreProtectHook.java
@@ -3,7 +3,6 @@ package com.leonardobishop.quests.bukkit.hook.coreprotect;
import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
-import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import java.util.List;
@@ -16,25 +15,50 @@ public class CoreProtectHook implements AbstractCoreProtectHook {
public CoreProtectHook(BukkitQuestsPlugin plugin) {
this.plugin = plugin;
- api = ((CoreProtect) Bukkit.getPluginManager().getPlugin("CoreProtect")).getAPI();
+ this.api = CoreProtect.getInstance().getAPI();
}
@Override
public CompletableFuture<Boolean> checkBlock(Block block, int time) {
CompletableFuture<Boolean> future = new CompletableFuture<>();
plugin.getScheduler().doAsync(() -> {
- List<String[]> lookup = api.blockLookup(block, time);
- if (lookup.isEmpty()) {
- plugin.getScheduler().doSync(() -> future.complete(false));
- } else {
- String[] result = lookup.get(0);
+ List<String[]> queueLookup = api.queueLookup(block);
+ if (queueLookup.size() >= 2) {
+ // first queue element when breaking a block is always
+ // a break action so we just get the second one
+ String[] result = queueLookup.get(1);
CoreProtectAPI.ParseResult parseResult = api.parseResult(result);
- boolean value = !parseResult.getPlayer().isEmpty() && parseResult.getActionId() == 1;
- plugin.getScheduler().doSync(() -> future.complete(value));
+ // queue lookup returns only break and place actions
+ // so we dont need to skip all the interations (action id 2)
+ // https://github.com/PlayPro/CoreProtect/blob/master/src/main/java/net/coreprotect/api/QueueLookup.java#L55
+ if (!parseResult.getPlayer().isEmpty() && parseResult.getActionId() == 1) {
+ plugin.getScheduler().doSync(() -> future.complete(true));
+ return;
+ }
}
+
+ List<String[]> blockLookup = api.blockLookup(block, time);
+ for (String[] result : blockLookup) {
+ CoreProtectAPI.ParseResult parseResult = api.parseResult(result);
+
+ // we need to skip all the interations like door opening (action id 2)
+ if (parseResult.getActionId() == 2) {
+ continue;
+ }
+
+ // due to the order the first element that is not
+ // an interaction is always the one we need to check
+ // (0=removed, 1=placed, 2=interaction)
+ // https://docs.coreprotect.net/api/version/v9/#parseresult-parseresultstring-result
+ boolean placed = parseResult.getActionId() == 1;
+
+ plugin.getScheduler().doSync(() -> future.complete(placed));
+ return;
+ }
+
+ plugin.getScheduler().doSync(() -> future.complete(false));
});
return future;
}
-
}