Skip to content

Commit

Permalink
Initial support for WorldGuard
Browse files Browse the repository at this point in the history
Completely untested!
  • Loading branch information
srnyx committed Sep 22, 2023
1 parent a150c78 commit 26de1ea
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 7 deletions.
9 changes: 7 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ plugins {
id("com.github.johnrengelman.shadow") version "8.1.1"
}

setupAnnoyingAPI("4.1.0", "xyz.srnyx", "3.0.1", "Each player has a limited number of lives. If you die, you are punished")
setupAnnoyingAPI("092bc8bd6e", "xyz.srnyx", "3.0.1", "Each player has a limited number of lives. If you die, you are punished")
spigotAPI("1.8.8")
repository(Repository.PLACEHOLDER_API)
dependencies.compileOnly("me.clip", "placeholderapi", "2.11.3")
repository("https://maven.enginehub.org/repo/")

dependencies {
compileOnly("me.clip", "placeholderapi", "2.11.3")
compileOnly("com.sk89q.worldguard", "worldguard-bukkit", "7.0.0")
}
29 changes: 25 additions & 4 deletions src/main/java/xyz/srnyx/limitedlives/LimitedLives.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package xyz.srnyx.limitedlives;

import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.configuration.ConfigurationSection;
Expand All @@ -14,6 +19,8 @@
import xyz.srnyx.annoyingapi.file.AnnoyingData;
import xyz.srnyx.annoyingapi.file.AnnoyingFile;

import xyz.srnyx.limitedlives.listeners.PlayerListener;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -27,6 +34,9 @@ public class LimitedLives extends AnnoyingPlugin {
@NotNull public static final String ITEM_KEY = "ll_item";

@NotNull public LimitedConfig config = new LimitedConfig(this);
@Nullable public WorldGuardObjects worldGuard = null;

// OLD DATA
@Nullable public AnnoyingData oldData = new AnnoyingData(this, "data.yml", new AnnoyingFile.Options<>().canBeEmpty(false));
/**
* player, lives
Expand All @@ -45,10 +55,21 @@ public LimitedLives() {
PluginPlatform.spigot("109078"))))
.bStatsOptions(bStatsOptions -> bStatsOptions.id(18304))
.registrationOptions
.automaticRegistration(automaticRegistration -> automaticRegistration.packages(
"xyz.srnyx.limitedlives.commands",
"xyz.srnyx.limitedlives.listeners"))
.papiExpansionToRegister(() -> new LimitedPlaceholders(this));
.listenersToRegister(new PlayerListener(this))
.papiExpansionToRegister(() -> new LimitedPlaceholders(this))
.automaticRegistration.packages("xyz.srnyx.limitedlives.commands");

// Register WorldGuard flag
try {
final WorldGuard instance = WorldGuard.getInstance();
final StateFlag flag = new StateFlag("limited-lives", true);
instance.getFlagRegistry().register(flag);
worldGuard = new WorldGuardObjects(WorldGuardPlugin.inst(), instance.getPlatform().getRegionContainer(), flag);
} catch (final FlagConflictException e) {
log(Level.WARNING, "&cFailed to register WorldGuard flag!");
} catch (final NoClassDefFoundError ignored) {
// Ignored
}

// oldLives
final ConfigurationSection livesSection = oldData.getConfigurationSection("lives");
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/xyz/srnyx/limitedlives/WorldGuardObjects.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package xyz.srnyx.limitedlives;

import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.regions.RegionContainer;

import org.bukkit.entity.Player;

import org.jetbrains.annotations.NotNull;


public class WorldGuardObjects {
@NotNull private final Object instance;
@NotNull private final Object regionContainer;
@NotNull private final Object flag;

public WorldGuardObjects(@NotNull Object instance, @NotNull Object regionContainer, @NotNull Object flag) {
this.instance = instance;
this.regionContainer = regionContainer;
this.flag = flag;
}

public boolean test(@NotNull Player player) {
return ((RegionContainer) regionContainer).createQuery().testState(BukkitAdapter.adapt(player.getLocation()), ((WorldGuardPlugin) instance).wrapPlayer(player), (StateFlag) flag);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package xyz.srnyx.limitedlives.listeners;

import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.regions.RegionContainer;

import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -37,9 +42,10 @@ public LimitedLives getAnnoyingPlugin() {

@EventHandler
public void onPlayerDeath(@NotNull PlayerDeathEvent event) {
// Check death cause and WorldGuard regions
final Player player = event.getEntity();
final EntityDamageEvent damageEvent = player.getLastDamageCause();
if (damageEvent != null && !plugin.config.deathCauses.isEmpty() && !plugin.config.deathCauses.contains(damageEvent.getCause())) return;
if ((damageEvent != null && !plugin.config.deathCauses.isEmpty() && !plugin.config.deathCauses.contains(damageEvent.getCause())) || (plugin.worldGuard != null && !plugin.worldGuard.test(player))) return;
final Player killer = player.getKiller();
final boolean isPvp = killer != null && killer != player;

Expand Down
1 change: 1 addition & 0 deletions src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ api-version: 1.13

softdepend:
- PlaceholderAPI
- WorldGuard

commands:
lives:
Expand Down

0 comments on commit 26de1ea

Please sign in to comment.