Add YardWatch plugin with WorldGuard integration

Introduced a new plugin, YardWatch, implemented with WorldGuard for protection. The plugin checks if WorldGuard is enabled and regulates breaking blocks, placing blocks, and interactions based on WorldGuard's build and interact flags. Also included are updated .gitignore and pom.xml files to manage the project setup.
This commit is contained in:
2024-03-21 21:52:44 +01:00
commit e516cf2ec6
5 changed files with 331 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
# User-specific stuff
.idea/
*.iml
*.ipr
*.iws
# IntelliJ
out/
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
.flattened-pom.xml
# Common working directory
run/
+94
View File
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.youhavetrouble</groupId>
<artifactId>YardWatch</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>YardWatch</name>
<description>Implementation of YardWatchAPI for common protection plugins</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<url>https://youhavetrouble.me</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>papermc-repo</id>
<url>https://repo.papermc.io/repository/maven-public/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>sk89q-repo</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.destroystokyo.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.13-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.4-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.YouHaveTrouble</groupId>
<artifactId>YardWatchAPI</artifactId>
<version>2.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,20 @@
package me.youhavetrouble.yardwatch;
import me.youhavetrouble.yardwatch.hooks.WorldGuardProtection;
import org.bukkit.plugin.ServicePriority;
import org.bukkit.plugin.java.JavaPlugin;
public final class YardWatch extends JavaPlugin {
@Override
public void onEnable() {
if (getServer().getPluginManager().isPluginEnabled("WorldGuard")) {
getServer().getServicesManager().register(
Protection.class, new WorldGuardProtection(this), this, ServicePriority.Normal
);
}
}
}
@@ -0,0 +1,92 @@
package me.youhavetrouble.yardwatch.hooks;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import me.youhavetrouble.yardwatch.Protection;
import me.youhavetrouble.yardwatch.YardWatch;
import org.bukkit.Location;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class WorldGuardProtection implements Protection {
private final YardWatch plugin;
public WorldGuardProtection(YardWatch plugin) {
this.plugin = plugin;
}
@Override
public boolean isEnabled() {
return plugin.getServer().getPluginManager().isPluginEnabled("WorldGuard");
}
@Override
public boolean isProtected(Location location) {
if (!isEnabled()) return false;
if (location.getWorld() == null) return false;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testBuild(wgLocation, null);
}
@Override
public boolean canBreakBlock(Player player, BlockState blockState) {
if (!isEnabled()) return true;
Location location = blockState.getLocation();
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.BUILD);
}
@Override
public boolean canPlaceBlock(Player player, Location location) {
if (!isEnabled()) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(location);
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.BUILD);
}
@Override
public boolean canInteract(Player player, BlockState blockState) {
if (!isEnabled()) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(blockState.getLocation());
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.INTERACT);
}
@Override
public boolean canInteract(Player player, Entity entity) {
if (!isEnabled()) return true;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(entity.getLocation());
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.INTERACT);
}
@Override
public boolean canDamage(Entity attacker, Entity target) {
if (!isEnabled()) return true;
if (!(attacker instanceof Player)) return true;
Player player = (Player) attacker;
com.sk89q.worldedit.util.Location wgLocation = BukkitAdapter.adapt(target.getLocation());
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player, true);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testState(wgLocation, localPlayer, Flags.INTERACT);
}
}
+12
View File
@@ -0,0 +1,12 @@
name: YardWatch
version: '${project.version}'
main: me.youhavetrouble.yardwatch.YardWatch
api-version: '1.13'
softdepend:
- "WorldGuard"
- "GriefPrevention"
- "Towny"
authors:
- "YouHaveTrouble"
description: "Implementation of YardWatchAPI for common protection plugins"
website: "https://youhavetrouble.me"