mirror of
https://github.com/MassiveCraft/Factions.git
synced 2024-11-23 10:45:51 +01:00
Introducing a power Mixin since Bukkit does not allow permissions for offline players and we want to know for offline players. Servers wanting individual power rules can implement and inject this mixin.
This commit is contained in:
parent
f802307056
commit
29e05fd54d
@ -32,6 +32,8 @@ import com.massivecraft.factions.listeners.FactionsListenerEcon;
|
||||
import com.massivecraft.factions.listeners.FactionsListenerExploit;
|
||||
import com.massivecraft.factions.listeners.FactionsListenerMain;
|
||||
import com.massivecraft.factions.listeners.TodoFactionsPlayerListener;
|
||||
import com.massivecraft.factions.mixin.PowerMixin;
|
||||
import com.massivecraft.factions.mixin.PowerMixinDefault;
|
||||
import com.massivecraft.factions.task.AutoLeaveTask;
|
||||
import com.massivecraft.factions.task.EconRewardTask;
|
||||
import com.massivecraft.factions.task.PowerUpdateTask;
|
||||
@ -74,6 +76,11 @@ public class Factions extends MPlugin
|
||||
private boolean databaseInitialized;
|
||||
public boolean isDatabaseInitialized() { return this.databaseInitialized; }
|
||||
|
||||
// Mixins
|
||||
private PowerMixin powerMixin = null;
|
||||
public PowerMixin getPowerMixin() { return this.powerMixin == null ? PowerMixinDefault.get() : this.powerMixin; }
|
||||
public void setPowerMixin(PowerMixin powerMixin) { this.powerMixin = powerMixin; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE
|
||||
// -------------------------------------------- //
|
||||
|
@ -1,20 +1,14 @@
|
||||
package com.massivecraft.factions.entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.permissions.PermissionDefault;
|
||||
|
||||
import com.massivecraft.factions.listeners.FactionsListenerChat;
|
||||
import com.massivecraft.mcore.store.Entity;
|
||||
import com.massivecraft.mcore.util.MUtil;
|
||||
import com.massivecraft.mcore.util.PermUtil;
|
||||
import com.massivecraft.mcore.util.TimeUnit;
|
||||
|
||||
public class MConf extends Entity<MConf>
|
||||
@ -35,7 +29,6 @@ public class MConf extends Entity<MConf>
|
||||
{
|
||||
super.load(that);
|
||||
|
||||
this.upsertPowerPerms();
|
||||
FactionsListenerChat.get().setup();
|
||||
|
||||
return this;
|
||||
@ -47,55 +40,6 @@ public class MConf extends Entity<MConf>
|
||||
|
||||
public long powerTaskMillis = TimeUnit.MILLIS_PER_MINUTE;
|
||||
|
||||
public Map<String, Double> permToPowerMax = MUtil.map(
|
||||
"factions.power.max.50", 50.0,
|
||||
"factions.power.max.40", 40.0,
|
||||
"factions.power.max.30", 30.0,
|
||||
"factions.power.max.20", 20.0,
|
||||
"factions.power.max.10", 10.0,
|
||||
"factions.power.max.default", 10.0
|
||||
);
|
||||
|
||||
public Map<String, Double> permToPowerMin = MUtil.map(
|
||||
"factions.power.min.50", 50.0,
|
||||
"factions.power.min.40", 40.0,
|
||||
"factions.power.min.30", 30.0,
|
||||
"factions.power.min.20", 20.0,
|
||||
"factions.power.min.10", 10.0,
|
||||
"factions.power.min.default", 10.0
|
||||
);
|
||||
|
||||
public Map<String, Double> permToPowerHour = MUtil.map(
|
||||
"factions.power.hour.50", 50.0,
|
||||
"factions.power.hour.40", 40.0,
|
||||
"factions.power.hour.30", 30.0,
|
||||
"factions.power.hour.20", 20.0,
|
||||
"factions.power.hour.10", 10.0,
|
||||
"factions.power.hour.4", 4.0,
|
||||
"factions.power.hour.2", 2.0,
|
||||
"factions.power.hour.default", 2.0
|
||||
);
|
||||
|
||||
public Map<String, Double> permToPowerDeath = MUtil.map(
|
||||
"factions.power.death.0", 0.0,
|
||||
"factions.power.death.-2", -2.0,
|
||||
"factions.power.death.default", -2.0
|
||||
);
|
||||
|
||||
public void upsertPowerPerms()
|
||||
{
|
||||
List<String> names = new ArrayList<String>();
|
||||
names.addAll(this.permToPowerMax.keySet());
|
||||
names.addAll(this.permToPowerMin.keySet());
|
||||
names.addAll(this.permToPowerHour.keySet());
|
||||
names.addAll(this.permToPowerDeath.keySet());
|
||||
|
||||
for (String name : names)
|
||||
{
|
||||
PermUtil.get(true, true, name, name, PermissionDefault.FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CHAT
|
||||
// -------------------------------------------- //
|
||||
|
@ -51,6 +51,15 @@ public class UConf extends Entity<UConf>
|
||||
public Map<FFlag, Boolean> defaultFactionFlags = FFlag.getDefaultDefaults();
|
||||
public Map<FPerm, Set<Rel>> defaultFactionPerms = FPerm.getDefaultDefaults();
|
||||
|
||||
// -------------------------------------------- //
|
||||
// POWER
|
||||
// -------------------------------------------- //
|
||||
|
||||
public double powerMax = 10.0;
|
||||
public double powerMin = 0.0;
|
||||
public double powerPerHour = 2.0;
|
||||
public double powerPerDeath = -2.0;
|
||||
|
||||
// -------------------------------------------- //
|
||||
// DENY COMMANDS
|
||||
// -------------------------------------------- //
|
||||
|
@ -289,6 +289,42 @@ public class UPlayer extends SenderEntity<UPlayer> implements EconomyParticipato
|
||||
// FIELD: power
|
||||
// -------------------------------------------- //
|
||||
|
||||
// MIXIN: RAW
|
||||
|
||||
public double getPowerMaxUniversal()
|
||||
{
|
||||
return Factions.get().getPowerMixin().getMaxUniversal(this);
|
||||
}
|
||||
|
||||
public double getPowerMax()
|
||||
{
|
||||
return Factions.get().getPowerMixin().getMax(this);
|
||||
}
|
||||
|
||||
public double getPowerMin()
|
||||
{
|
||||
return Factions.get().getPowerMixin().getMin(this);
|
||||
}
|
||||
|
||||
public double getPowerPerHour()
|
||||
{
|
||||
return Factions.get().getPowerMixin().getPerHour(this);
|
||||
}
|
||||
|
||||
public double getPowerPerDeath()
|
||||
{
|
||||
return Factions.get().getPowerMixin().getPerDeath(this);
|
||||
}
|
||||
|
||||
// MIXIN: FINER
|
||||
|
||||
public double getLimitedPower(double power)
|
||||
{
|
||||
power = Math.max(power, this.getPowerMin());
|
||||
power = Math.min(power, this.getPowerMax());
|
||||
return power;
|
||||
}
|
||||
|
||||
// RAW
|
||||
|
||||
public double getDefaultPower()
|
||||
@ -300,12 +336,14 @@ public class UPlayer extends SenderEntity<UPlayer> implements EconomyParticipato
|
||||
{
|
||||
Double ret = this.power;
|
||||
if (ret == null) ret = this.getDefaultPower();
|
||||
ret = this.getLimitedPower(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void setPower(Double power)
|
||||
{
|
||||
if (power == null || MUtil.equals(power, this.getDefaultPower())) power = null;
|
||||
power = this.getLimitedPower(power);
|
||||
this.power = power;
|
||||
this.changed();
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class FactionsEventPowerChange extends FactionsEventAbstractSender
|
||||
super(sender);
|
||||
this.uplayer = uplayer;
|
||||
this.reason = reason;
|
||||
this.newPower = newPower;
|
||||
this.newPower = uplayer.getLimitedPower(newPower);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
|
@ -60,7 +60,6 @@ import com.massivecraft.factions.event.FactionsEventPowerChange.PowerChangeReaso
|
||||
import com.massivecraft.factions.util.VisualizeUtil;
|
||||
import com.massivecraft.mcore.ps.PS;
|
||||
import com.massivecraft.mcore.util.MUtil;
|
||||
import com.massivecraft.mcore.util.PermUtil;
|
||||
import com.massivecraft.mcore.util.Txt;
|
||||
|
||||
public class FactionsListenerMain implements Listener
|
||||
@ -109,14 +108,7 @@ public class FactionsListenerMain implements Listener
|
||||
}
|
||||
|
||||
// ... alter the power ...
|
||||
double maxPower = PermUtil.pickFirstVal(player, MConf.get().permToPowerMax);
|
||||
double minPower = PermUtil.pickFirstVal(player, MConf.get().permToPowerMin);
|
||||
double deathPower = PermUtil.pickFirstVal(player, MConf.get().permToPowerDeath);
|
||||
double oldPower = uplayer.getPower();
|
||||
|
||||
double newPower = oldPower + deathPower;
|
||||
newPower = Math.max(newPower, minPower);
|
||||
newPower = Math.min(newPower, maxPower);
|
||||
double newPower = uplayer.getPower() + uplayer.getPowerPerDeath();
|
||||
|
||||
FactionsEventPowerChange powerChangeEvent = new FactionsEventPowerChange(null, uplayer, PowerChangeReason.DEATH, newPower);
|
||||
powerChangeEvent.run();
|
||||
@ -127,7 +119,7 @@ public class FactionsListenerMain implements Listener
|
||||
|
||||
// ... and inform the player.
|
||||
// TODO: A progress bar here would be epic :)
|
||||
uplayer.msg("<i>Your power is now <h>%.2f / %.2f", newPower, maxPower);
|
||||
uplayer.msg("<i>Your power is now <h>%.2f / %.2f", newPower, uplayer.getPowerMax());
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
|
12
src/com/massivecraft/factions/mixin/PowerMixin.java
Normal file
12
src/com/massivecraft/factions/mixin/PowerMixin.java
Normal file
@ -0,0 +1,12 @@
|
||||
package com.massivecraft.factions.mixin;
|
||||
|
||||
import com.massivecraft.factions.entity.UPlayer;
|
||||
|
||||
public interface PowerMixin
|
||||
{
|
||||
public double getMaxUniversal(UPlayer uplayer);
|
||||
public double getMax(UPlayer uplayer);
|
||||
public double getMin(UPlayer uplayer);
|
||||
public double getPerHour(UPlayer uplayer);
|
||||
public double getPerDeath(UPlayer uplayer);
|
||||
}
|
49
src/com/massivecraft/factions/mixin/PowerMixinDefault.java
Normal file
49
src/com/massivecraft/factions/mixin/PowerMixinDefault.java
Normal file
@ -0,0 +1,49 @@
|
||||
package com.massivecraft.factions.mixin;
|
||||
|
||||
import com.massivecraft.factions.entity.UConf;
|
||||
import com.massivecraft.factions.entity.UPlayer;
|
||||
|
||||
public class PowerMixinDefault implements PowerMixin
|
||||
{
|
||||
// -------------------------------------------- //
|
||||
// INSTANCE & CONSTRUCT
|
||||
// -------------------------------------------- //
|
||||
|
||||
private static PowerMixinDefault i = new PowerMixinDefault();
|
||||
public static PowerMixinDefault get() { return i; }
|
||||
|
||||
// -------------------------------------------- //
|
||||
// OVERRIDE: PowerMixin
|
||||
// -------------------------------------------- //
|
||||
|
||||
@Override
|
||||
public double getMaxUniversal(UPlayer uplayer)
|
||||
{
|
||||
return this.getMax(uplayer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMax(UPlayer uplayer)
|
||||
{
|
||||
return UConf.get(uplayer).powerMax;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getMin(UPlayer uplayer)
|
||||
{
|
||||
return UConf.get(uplayer).powerMin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPerHour(UPlayer uplayer)
|
||||
{
|
||||
return UConf.get(uplayer).powerPerHour;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getPerDeath(UPlayer uplayer)
|
||||
{
|
||||
return UConf.get(uplayer).powerPerDeath;
|
||||
}
|
||||
|
||||
}
|
@ -8,7 +8,6 @@ import com.massivecraft.factions.entity.UPlayer;
|
||||
import com.massivecraft.factions.event.FactionsEventPowerChange;
|
||||
import com.massivecraft.factions.event.FactionsEventPowerChange.PowerChangeReason;
|
||||
import com.massivecraft.mcore.ModuloRepeatTask;
|
||||
import com.massivecraft.mcore.util.PermUtil;
|
||||
import com.massivecraft.mcore.util.TimeUnit;
|
||||
|
||||
public class PowerUpdateTask extends ModuloRepeatTask
|
||||
@ -45,16 +44,8 @@ public class PowerUpdateTask extends ModuloRepeatTask
|
||||
{
|
||||
if (player.isDead()) continue;
|
||||
|
||||
double maxPower = PermUtil.pickFirstVal(player, MConf.get().permToPowerMax);
|
||||
double minPower = PermUtil.pickFirstVal(player, MConf.get().permToPowerMin);
|
||||
double hourPower = PermUtil.pickFirstVal(player, MConf.get().permToPowerHour);
|
||||
|
||||
UPlayer uplayer = UPlayer.get(player);
|
||||
double oldPower = uplayer.getPower();
|
||||
|
||||
double newPower = oldPower + hourPower * millis / TimeUnit.MILLIS_PER_HOUR;
|
||||
newPower = Math.max(newPower, minPower);
|
||||
newPower = Math.min(newPower, maxPower);
|
||||
double newPower = uplayer.getPower() + uplayer.getPowerPerHour() * millis / TimeUnit.MILLIS_PER_HOUR;
|
||||
|
||||
FactionsEventPowerChange event = new FactionsEventPowerChange(null, uplayer, PowerChangeReason.TIME, newPower);
|
||||
event.run();
|
||||
|
Loading…
Reference in New Issue
Block a user