Added WG flag 'mmocore-skills'

This commit is contained in:
Jules 2020-05-22 10:49:50 +02:00
parent ec1500fc28
commit d5a6c66c76
13 changed files with 172 additions and 14 deletions

BIN
lib/Residence.jar Normal file

Binary file not shown.

View File

@ -92,6 +92,13 @@
<scope>system</scope>
<systemPath>${basedir}/lib/spigot.jar</systemPath>
</dependency>
<dependency>
<groupId>com.bekvon.bukkit</groupId>
<artifactId>Residence</artifactId>
<version>4.8.7.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/Residence.jar</systemPath>
</dependency>
<dependency>
<groupId>com.Zrips</groupId>
<artifactId>CMI</artifactId>

View File

@ -34,6 +34,10 @@ import net.Indyuce.mmocore.command.WaypointsCommand;
import net.Indyuce.mmocore.command.WithdrawCommand;
import net.Indyuce.mmocore.comp.citizens.CitizenInteractEventListener;
import net.Indyuce.mmocore.comp.citizens.CitizensMMOLoader;
import net.Indyuce.mmocore.comp.flags.DefaultFlags;
import net.Indyuce.mmocore.comp.flags.FlagPlugin;
import net.Indyuce.mmocore.comp.flags.ResidenceFlags;
import net.Indyuce.mmocore.comp.flags.WorldGuardFlags;
import net.Indyuce.mmocore.comp.holograms.CMIPlugin;
import net.Indyuce.mmocore.comp.holograms.HologramSupport;
import net.Indyuce.mmocore.comp.holograms.HologramsPlugin;
@ -43,12 +47,12 @@ import net.Indyuce.mmocore.comp.mythicmobs.MythicMobsMMOLoader;
import net.Indyuce.mmocore.comp.placeholder.DefaultParser;
import net.Indyuce.mmocore.comp.placeholder.PlaceholderAPIParser;
import net.Indyuce.mmocore.comp.placeholder.PlaceholderParser;
import net.Indyuce.mmocore.comp.region.DefaultRegionHandler;
import net.Indyuce.mmocore.comp.region.RegionHandler;
import net.Indyuce.mmocore.comp.region.WorldGuardMMOLoader;
import net.Indyuce.mmocore.comp.region.WorldGuardRegionHandler;
import net.Indyuce.mmocore.comp.vault.VaultEconomy;
import net.Indyuce.mmocore.comp.vault.VaultMMOLoader;
import net.Indyuce.mmocore.comp.worldguard.DefaultRegionHandler;
import net.Indyuce.mmocore.comp.worldguard.RegionHandler;
import net.Indyuce.mmocore.comp.worldguard.WorldGuardMMOLoader;
import net.Indyuce.mmocore.comp.worldguard.WorldGuardRegionHandler;
import net.Indyuce.mmocore.listener.BlockListener;
import net.Indyuce.mmocore.listener.GoldPouchesListener;
import net.Indyuce.mmocore.listener.GuildListener;
@ -103,11 +107,12 @@ public class MMOCore extends JavaPlugin {
public VaultEconomy economy;
public HologramSupport hologramSupport;
public InventoryManager inventoryManager;
public RegionHandler regionHandler;
public PlayerActionBar actionBarManager;
public final SkillManager skillManager = new SkillManager();
public RegionHandler regionHandler = new DefaultRegionHandler();
public FlagPlugin flagPlugin = new DefaultFlags();
public PlaceholderParser placeholderParser = new DefaultParser();
public DataProvider dataProvider = new YAMLDataProvider();
public final SkillManager skillManager = new SkillManager();
public final ClassManager classManager = new ClassManager();
public final DropTableManager dropTableManager = new DropTableManager();
public final CustomBlockManager mineManager = new CustomBlockManager();
@ -171,9 +176,12 @@ public class MMOCore extends JavaPlugin {
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null) {
regionHandler = new WorldGuardRegionHandler();
flagPlugin = new WorldGuardFlags();
getLogger().log(Level.INFO, "Hooked onto WorldGuard");
} else
regionHandler = new DefaultRegionHandler();
} else if (Bukkit.getPluginManager().getPlugin("Residence") != null) {
flagPlugin = new ResidenceFlags();
getLogger().log(Level.INFO, "Hooked onto Residence");
}
if (Bukkit.getPluginManager().getPlugin("HolographicDisplays") != null) {
hologramSupport = new HolographicDisplaysPlugin();

View File

@ -1,7 +1,9 @@
package net.Indyuce.mmocore.api.skill;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.api.skill.Skill.SkillInfo;
import net.Indyuce.mmocore.comp.flags.FlagPlugin.CustomFlag;
public class SkillResult {
private final SkillInfo skill;
@ -17,7 +19,11 @@ public class SkillResult {
cooldown = (skill.getSkill().hasModifier("cooldown") ? data.getSkillData().getCooldown(skill) : 0);
mana = (skill.getSkill().hasModifier("mana") ? skill.getModifier("mana", level) : 0);
cancelReason = !data.hasSkillUnlocked(skill) ? CancelReason.LOCKED
: cooldown > 0 ? CancelReason.COOLDOWN : mana > data.getMana() ? CancelReason.MANA : null;
: cooldown > 0 ? CancelReason.COOLDOWN
: mana > data.getMana() ? CancelReason.MANA
: !MMOCore.plugin.flagPlugin.isFlagAllowed(data.getPlayer(), CustomFlag.SKILLS)
? CancelReason.FLAG
: null;
}
public SkillResult(PlayerData data, SkillInfo skill, CancelReason reason) {
@ -71,6 +77,9 @@ public class SkillResult {
public enum CancelReason {
// skill flag
FLAG,
// not enough mana
MANA,

View File

@ -0,0 +1,21 @@
package net.Indyuce.mmocore.comp.flags;
import org.bukkit.Location;
import org.bukkit.entity.Player;
public class DefaultFlags implements FlagPlugin {
// @Override
// public boolean isPvpAllowed(Location loc) {
// return true;
// }
@Override
public boolean isFlagAllowed(Player player, CustomFlag flag) {
return true;
}
@Override
public boolean isFlagAllowed(Location loc, CustomFlag flag) {
return true;
}
}

View File

@ -0,0 +1,20 @@
package net.Indyuce.mmocore.comp.flags;
import org.bukkit.Location;
import org.bukkit.entity.Player;
public interface FlagPlugin {
// public boolean isPvpAllowed(Location loc);
public boolean isFlagAllowed(Player player, CustomFlag flag);
public boolean isFlagAllowed(Location loc, CustomFlag flag);
public enum CustomFlag {
SKILLS;
public String getPath() {
return "mmocore-" + name().toLowerCase();
}
}
}

View File

@ -0,0 +1,34 @@
package net.Indyuce.mmocore.comp.flags;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import com.bekvon.bukkit.residence.protection.FlagPermissions;
public class ResidenceFlags implements FlagPlugin {
public ResidenceFlags() {
for (CustomFlag flag : CustomFlag.values())
FlagPermissions.addFlag(flag.getPath());
}
// @Override
// public boolean isPvpAllowed(Location loc) {
// ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc);
// return res == null || res.getPermissions().has(Flags.pvp, true);
// }
@SuppressWarnings("deprecation")
@Override
public boolean isFlagAllowed(Player player, CustomFlag flag) {
ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(player);
return res == null || res.getPermissions().playerHas(player, flag.getPath(), true);
}
@Override
public boolean isFlagAllowed(Location loc, CustomFlag flag) {
ClaimedResidence res = Residence.getInstance().getResidenceManager().getByLoc(loc);
return res == null || res.getPermissions().has(flag.getPath(), true, true);
}
}

View File

@ -0,0 +1,59 @@
package net.Indyuce.mmocore.comp.flags;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
public class WorldGuardFlags implements FlagPlugin {
private final WorldGuard worldguard;
private final WorldGuardPlugin worldguardPlugin;
private final Map<String, StateFlag> flags = new HashMap<>();
public WorldGuardFlags() {
this.worldguard = WorldGuard.getInstance();
this.worldguardPlugin = ((WorldGuardPlugin) Bukkit.getServer().getPluginManager()
.getPlugin("WorldGuard"));
FlagRegistry registry = worldguard.getFlagRegistry();
for (CustomFlag customFlag : CustomFlag.values()) {
StateFlag flag = new StateFlag(customFlag.getPath(), true);
try {
registry.register(flag);
flags.put(customFlag.getPath(), flag);
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
// @Override
// public boolean isPvpAllowed(Location loc) {
// return getApplicableRegion(loc).queryState(null, Flags.PVP) != StateFlag.State.DENY;
// }
@Override
public boolean isFlagAllowed(Location loc, CustomFlag customFlag) {
return getApplicableRegion(loc).queryValue(null, flags.get(customFlag.getPath())) != StateFlag.State.DENY;
}
@Override
public boolean isFlagAllowed(Player player, CustomFlag customFlag) {
return getApplicableRegion(player.getLocation()).queryValue(worldguardPlugin.wrapPlayer(player),
flags.get(customFlag.getPath())) != StateFlag.State.DENY;
}
private ApplicableRegionSet getApplicableRegion(Location loc) {
return worldguard.getPlatform().getRegionContainer().createQuery()
.getApplicableRegions(BukkitAdapter.adapt(loc));
}
}

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmocore.comp.worldguard;
package net.Indyuce.mmocore.comp.region;
import java.util.ArrayList;
import java.util.List;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmocore.comp.worldguard;
package net.Indyuce.mmocore.comp.region;
import java.util.Arrays;
import java.util.List;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmocore.comp.worldguard;
package net.Indyuce.mmocore.comp.region;
import java.util.List;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmocore.comp.worldguard;
package net.Indyuce.mmocore.comp.region;
import net.Indyuce.mmocore.api.droptable.condition.Condition;
import net.Indyuce.mmocore.api.load.MMOLoader;

View File

@ -1,4 +1,4 @@
package net.Indyuce.mmocore.comp.worldguard;
package net.Indyuce.mmocore.comp.region;
import java.util.ArrayList;
import java.util.List;