diff --git a/build.gradle b/build.gradle index dc74ed2..d54777c 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ dependencies { compileOnly 'com.destroystokyo.paper:paper-api:1.12.2-R0.1-SNAPSHOT' compileOnly 'org.bukkit:craftbukkit:1.12.2-R0.1-20190527.155144-32' compileOnly "com.github.MilkBowl:VaultAPI:1.7" + compileOnly 'com.sk89q.worldguard:worldguard-legacy:6.2' } def targetJavaVersion = 8 diff --git a/src/main/java/ru/redguy/extendedpistons/ExtendedPistons.java b/src/main/java/ru/redguy/extendedpistons/ExtendedPistons.java index 4e5c30a..e7c284d 100644 --- a/src/main/java/ru/redguy/extendedpistons/ExtendedPistons.java +++ b/src/main/java/ru/redguy/extendedpistons/ExtendedPistons.java @@ -1,10 +1,14 @@ package ru.redguy.extendedpistons; +import com.sk89q.worldguard.bukkit.WGBukkit; import net.milkbowl.vault.permission.Permission; +import org.apache.commons.lang3.event.EventUtils; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import org.bukkit.plugin.Plugin; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -20,6 +24,7 @@ public final class ExtendedPistons extends JavaPlugin { public SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); public SimpleDateFormat dayOfWeek = new SimpleDateFormat("EEE",Locale.ENGLISH); public HashMap> weekPeriods; + public WorldGuardPlugin wg; @Override public void onEnable() { @@ -62,6 +67,7 @@ public final class ExtendedPistons extends JavaPlugin { RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Permission.class); permsService = rsp.getProvider(); + wg = WGBukkit.getPlugin(); Bukkit.getPluginManager().registerEvents(new WorldListener(), this); } diff --git a/src/main/java/ru/redguy/extendedpistons/WorldListener.java b/src/main/java/ru/redguy/extendedpistons/WorldListener.java index 9eb1ee2..b67b637 100644 --- a/src/main/java/ru/redguy/extendedpistons/WorldListener.java +++ b/src/main/java/ru/redguy/extendedpistons/WorldListener.java @@ -1,5 +1,10 @@ package ru.redguy.extendedpistons; +import com.google.common.collect.Sets; +import com.sk89q.worldguard.bukkit.RegionContainer; +import com.sk89q.worldguard.bukkit.RegionQuery; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.flags.DefaultFlag; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -77,9 +82,7 @@ public class WorldListener implements Listener { List toBreak = checker.getBrokenBlocksObjects(); if (isMovable) { - BlockPistonRetractEvent ev = new BlockPistonRetractEvent(block, blocks, piston.getFacing()); - Bukkit.getPluginManager().callEvent(ev); - if (ev.isCancelled()) continue; + if(!isBlocksAllowedToInteract(copyWithAdd(blocks,toBreak))) continue; for (Block block1 : toBreak) { block1.breakNaturally(); } @@ -190,9 +193,7 @@ public class WorldListener implements Listener { } if (isMovable) { - BlockPistonExtendedExtendEvent event = new BlockPistonExtendedExtendEvent(block, blocks, piston.getFacing()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) return; + if(!isBlocksAllowedToInteract(copyWithAdd(blocks,toBreak))) return; Collections.reverse(blocks); for (Block block1 : toBreak) { block1.breakNaturally(); @@ -263,9 +264,7 @@ public class WorldListener implements Listener { List toBreak = checker.getBrokenBlocksObjects(); if (isMovable) { - BlockPistonRetractEvent ev = new BlockPistonRetractEvent(block, blocks, piston.getFacing()); - Bukkit.getPluginManager().callEvent(ev); - if (ev.isCancelled()) continue; + if(!isBlocksAllowedToInteract(copyWithAdd(blocks,toBreak))) continue; for (Block block1 : toBreak) { block1.breakNaturally(); } @@ -363,9 +362,7 @@ public class WorldListener implements Listener { } if (isMovable) { - BlockPistonExtendedExtendEvent event = new BlockPistonExtendedExtendEvent(block, blocks, piston.getFacing()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) return; + if(!isBlocksAllowedToInteract(copyWithAdd(blocks,toBreak))) return; Collections.reverse(blocks); for (Block block1 : toBreak) { block1.breakNaturally(); @@ -405,4 +402,22 @@ public class WorldListener implements Listener { } return 12; } + + public boolean isBlocksAllowedToInteract(List blocks) { + WorldGuardPlugin wg = ExtendedPistons.INSTANCE.wg; + RegionContainer container = wg.getRegionContainer(); + RegionQuery query = container.createQuery(); + for (Block block : blocks) { + boolean state = query.testState(block.getLocation(),(Player)null, DefaultFlag.PISTONS); + if(!state) + return false; + } + return true; + } + + public List copyWithAdd(List original, List add) { + List copy = new ArrayList<>(original); + copy.addAll(add); + return copy; + } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 33b3292..c2b4d4c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,4 +6,5 @@ authors: [ Redguy ] description: Plugin for very cool pistions website: https://redguy.ru depend: - - Vault \ No newline at end of file + - Vault + - WorldGuard \ No newline at end of file