This commit is contained in:
Jules 2023-02-02 11:17:09 +01:00
parent 13669d8394
commit 5258c6114a
4 changed files with 34 additions and 33 deletions

View File

@ -161,7 +161,7 @@ public class MMOCore extends JavaPlugin {
if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null) { if (Bukkit.getPluginManager().getPlugin("WorldGuard") != null) {
regionHandler = new WorldGuardRegionHandler(); regionHandler = new WorldGuardRegionHandler();
if (MythicLib.plugin.getConfig().getBoolean("pvp_mode.enabled")) if (getConfig().getBoolean("pvp_mode.enabled"))
Bukkit.getPluginManager().registerEvents(new PvPModeListener(), this); Bukkit.getPluginManager().registerEvents(new PvPModeListener(), this);
getLogger().log(Level.INFO, "Hooked onto WorldGuard"); getLogger().log(Level.INFO, "Hooked onto WorldGuard");
} }

View File

@ -58,45 +58,46 @@ public class PvPModeHandler extends FlagValueChangeHandler<State> {
* In that case, put PvP mode to its default setting that is OFF. * In that case, put PvP mode to its default setting that is OFF.
*/ */
@Override @Override
protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, State lastValue, MoveType moveType) { protected boolean onAbsentValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, StateFlag.State lastValue, MoveType moveType) {
return true; return onSetValue(player, from, to, toSet, DEFAULT_STATE, lastValue, moveType);
} }
public static final StateFlag.State DEFAULT_STATE = StateFlag.State.DENY;
/** /**
* Triggered when a player changes region and finds a new value for that flag. * Triggered when a player changes region and finds a new value for that flag.
* In that case, apply the new setting and display messages if needed. * In that case, apply the new setting and display messages if needed.
*/ */
@Override @Override
protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, State currentValue, State lastValue, MoveType moveType) { protected boolean onSetValue(LocalPlayer player, Location from, Location to, ApplicableRegionSet toSet, StateFlag.State currentValue, StateFlag.State lastValue, MoveType moveType) {
boolean newPvpMode = toBoolean(currentValue);
// Do nothing if pvpmode is disabled. boolean lastPvpMode = toBoolean(lastValue);
if (isInvalid() || !playerData.getCombat().isInPvpMode()) if (isInvalid())
return true; return true;
final boolean newPvpMode = toBoolean(currentValue); if (!newPvpMode && lastPvpMode) {
final boolean lastPvpMode = toBoolean(lastValue);
if (!playerData.getCombat().canQuitPvpMode()) { // Send message
if (canSendMessage()) {
// Leaving a custom Pvp zone final String msgPath = (playerData.getCombat().isInPvpMode() && !playerData.getCombat().canQuitPvpMode()) ? "allowed" : "denied";
if (!newPvpMode && lastPvpMode && canSendMessage()) {
lastMessage = System.currentTimeMillis(); lastMessage = System.currentTimeMillis();
final double remaining = (playerData.getCombat().getLastHit() + MMOCore.plugin.configManager.pvpModeCombatTimeout * 1000 - System.currentTimeMillis()) / 1000; double remaining = (playerData.getCombat().getLastHit() + MMOCore.plugin.configManager.pvpModeCombatTimeout * 1000.0D - System.currentTimeMillis()) / 1000.0D;
MMOCore.plugin.configManager.getSimpleMessage("pvp-mode.leave", "remaining", MythicLib.plugin.getMMOConfig().decimal.format(remaining)).send(playerData.getPlayer()); MMOCore.plugin.configManager.getSimpleMessage("pvp-mode.leave.pvp-" + msgPath, new String[]{"remaining",
(MythicLib.plugin.getMMOConfig()).decimal.format(remaining)}).send(playerData.getPlayer());
} }
} else if (newPvpMode && !lastPvpMode) { } else if (newPvpMode && !lastPvpMode) {
// Apply invulnerability // Apply invulnerability
playerData.getCombat().applyInvulnerability(); if (playerData.getCombat().isInPvpMode())
playerData.getCombat().applyInvulnerability();
// Entering Pvp zone // Send message
if (canSendMessage()) { if (canSendMessage()) {
lastMessage = System.currentTimeMillis(); lastMessage = System.currentTimeMillis();
MMOCore.plugin.configManager.getSimpleMessage("pvp-mode.enter", "time", MythicLib.plugin.getMMOConfig().decimal.format(MMOCore.plugin.configManager.pvpModeInvulnerability)).send(playerData.getPlayer()); MMOCore.plugin.configManager.getSimpleMessage("pvp-mode.enter.pvp-mode-" + (playerData.getCombat().isInPvpMode() ? "on" : "off"), new String[]{"time",
(MythicLib.plugin.getMMOConfig()).decimal.format(MMOCore.plugin.configManager.pvpModeInvulnerability)}).send(playerData.getPlayer());
} }
} }
return true; return true;
} }

View File

@ -4,6 +4,7 @@ import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent; import com.sk89q.worldguard.bukkit.protection.events.DisallowedPVPEvent;
import io.lumine.mythic.lib.MythicLib; import io.lumine.mythic.lib.MythicLib;
import io.lumine.mythic.lib.comp.flags.CustomFlag; import io.lumine.mythic.lib.comp.flags.CustomFlag;
import io.lumine.mythic.lib.comp.interaction.InteractionType;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -16,18 +17,13 @@ public class PvPModeListener implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void unblockPvp(DisallowedPVPEvent event) { public void unblockPvp(DisallowedPVPEvent event) {
final PlayerData defender; PlayerData defender;
// Make sure both have PVP mode on
if (!PlayerData.get(event.getAttacker()).getCombat().isInPvpMode() || !(defender = PlayerData.get(event.getDefender())).getCombat().isInPvpMode()) if (!PlayerData.get(event.getAttacker()).getCombat().isInPvpMode() || !(defender = PlayerData.get(event.getDefender())).getCombat().isInPvpMode())
return; return;
// If there are in a PVP zone if (!defender.getCombat().canQuitPvpMode() ||
if (MythicLib.plugin.getFlags().isFlagAllowed(event.getDefender().getLocation(), CustomFlag.PVP_MODE) && !defender.getCombat().isInvulnerable()) (!defender.getCombat().isInvulnerable() && MythicLib.plugin.getFlags().isFlagAllowed(event.getDefender().getLocation(), CustomFlag.PVP_MODE)))
event.setCancelled(true); if (MythicLib.plugin.getEntities().canInteract(event.getAttacker(), event.getDefender(), InteractionType.OFFENSE_ACTION, true))
event.setCancelled(true);
// If target cannot quit pvp zone yet
else if (!defender.getCombat().canQuitPvpMode())
event.setCancelled(true);
} }
} }

View File

@ -34,8 +34,12 @@ pvp-mode:
cooldown: '&cPlease wait {remaining} seconds to use this command again.' cooldown: '&cPlease wait {remaining} seconds to use this command again.'
toggle-on: '&aPvP Mode on.' toggle-on: '&aPvP Mode on.'
toggle-off: '&cPvP Mode off.' toggle-off: '&cPvP Mode off.'
leave: '&cYou left a PVP zone but are still vulnerable for {remaining} seconds!' leave:
enter: '&aYou entered a PVP zone and gained invulnerability for {time} seconds!' pvp-allowed: '&cYou left a PVP zone but are still vulnerable for {remaining} seconds!'
pvp-denied: '&cYou left the PVP zone.'
enter:
pvp-mode-on: '&aYou entered a PVP zone and gained invulnerability for {time} seconds!'
pvp-mode-off: '&aYou entered a PVP zone. You may use /pvpmode to fight other players.'
# Fishing Profession # Fishing Profession
caught-fish: '&cYou caught a fish!' caught-fish: '&cYou caught a fish!'
@ -69,7 +73,7 @@ casting:
no-longer: '%&cYou cancelled skill casting.' no-longer: '%&cYou cancelled skill casting.'
no-mana: '&cYou do not have enough {mana}, {mana-required} more required!' no-mana: '&cYou do not have enough {mana}, {mana-required} more required!'
no-stamina: '&cYou do not have enough stamina!' no-stamina: '&cYou do not have enough stamina!'
on-cooldown: '&cThis skill is on a {cooldown} cooldown.' on-cooldown: '&cThis skill is on a {cooldown}s cooldown.'
# Combat Log # Combat Log
now-in-combat: '%&cYou are now in combat!' now-in-combat: '%&cYou are now in combat!'