diff --git a/src/main/java/com/massivecraft/factions/Faction.java b/src/main/java/com/massivecraft/factions/Faction.java index 4ed644b5..884de682 100644 --- a/src/main/java/com/massivecraft/factions/Faction.java +++ b/src/main/java/com/massivecraft/factions/Faction.java @@ -4,6 +4,7 @@ import com.massivecraft.factions.event.FactionDisbandEvent.PlayerDisbandReason; import com.massivecraft.factions.iface.EconomyParticipator; import com.massivecraft.factions.iface.RelationParticipator; import com.massivecraft.factions.missions.Mission; +import com.massivecraft.factions.shield.TimeFrame; import com.massivecraft.factions.struct.BanInfo; import com.massivecraft.factions.struct.Relation; import com.massivecraft.factions.struct.Role; @@ -441,4 +442,10 @@ public interface Faction extends EconomyParticipator { void paypalSet(String paypal); + + // shield + + void setTimeFrame(TimeFrame timeFrame); + TimeFrame getTimeFrame(); + } diff --git a/src/main/java/com/massivecraft/factions/FactionsPlugin.java b/src/main/java/com/massivecraft/factions/FactionsPlugin.java index 223ac265..c73ddb63 100755 --- a/src/main/java/com/massivecraft/factions/FactionsPlugin.java +++ b/src/main/java/com/massivecraft/factions/FactionsPlugin.java @@ -18,6 +18,7 @@ import com.massivecraft.factions.integration.Worldguard; import com.massivecraft.factions.integration.dynmap.EngineDynmap; import com.massivecraft.factions.listeners.*; import com.massivecraft.factions.missions.MissionHandler; +import com.massivecraft.factions.shield.TimeFrameTask; import com.massivecraft.factions.shop.ShopConfig; import com.massivecraft.factions.struct.ChatMode; import com.massivecraft.factions.struct.Relation; @@ -267,6 +268,7 @@ public class FactionsPlugin extends MPlugin { this.getServer().getScheduler().runTaskTimerAsynchronously(this, new CheckTask(this, 30), 0L, (long) (minute * 30)); this.getServer().getScheduler().runTaskTimer(this, CheckTask::cleanupTask, 0L, 1200L); this.getServer().getScheduler().runTaskTimerAsynchronously(this, new WeeWooTask(this), 600L, 600L); + this.getServer().getScheduler().runTaskTimerAsynchronously(this, new TimeFrameTask(), 1200, 1200); // every 1 minute... } if(Conf.useDiscordSystem && !Conf.discordBotToken.equals("")) { new FactionChatHandler(this); diff --git a/src/main/java/com/massivecraft/factions/shield/TimeFrame.java b/src/main/java/com/massivecraft/factions/shield/TimeFrame.java new file mode 100644 index 00000000..43464a37 --- /dev/null +++ b/src/main/java/com/massivecraft/factions/shield/TimeFrame.java @@ -0,0 +1,93 @@ +package com.massivecraft.factions.shield; + +import com.massivecraft.factions.Faction; + +public class TimeFrame { + + //each of these objs will be in 1 fac + + private Faction faction; + private Enum startingTime; + private Enum endingTime; + + private int currentMinutes; // this will be the variable for either the currentTime starting, or ending, or current in effect. + + private boolean inEffect; // if the forcefield is in effect + private boolean starting; // pending starting countdown + private boolean ending; // pending ending countdown + + private enum times { + twelveAM, oneAM, twoAM, threeAM, fourAM, fiveAM, sixAM, sevenAM, eightAM, nineAM, tenAM, elevenAM, twelvePM, + onePM, twoPM, threePM, fourPM, fivePM, sixPM, sevenPM, eightPM, ninePM, tenPM, elevenPM; + } + + + public TimeFrame(Faction faction, Enum startingTime, Enum endingTime, boolean starting, boolean ending, boolean inEffect, int currentMinutes){ + this.faction = faction; + this.startingTime = startingTime; + this.endingTime = endingTime; + this.starting = starting; + this.ending = ending; + this.inEffect = inEffect; + this.currentMinutes = currentMinutes; + } + + + + + public boolean isEnding() { + return ending; + } + + public boolean isInEffect() { + return inEffect; + } + + public Enum getEndingTime() { + return endingTime; + } + + public Enum getStartingTime() { + return startingTime; + } + + public boolean isStarting() { + return starting; + } + + public Faction getFaction() { + return faction; + } + + public void setCurrentMinutes(int currentMinutes) { + this.currentMinutes = currentMinutes; + } + + public int getCurrentMinutes() { + return currentMinutes; + } + + public void setEnding(boolean ending) { + this.ending = ending; + } + + public void setEndingTime(Enum endingTime) { + this.endingTime = endingTime; + } + + public void setStartingTime(Enum startingTime) { + this.startingTime = startingTime; + } + + public void setFaction(Faction faction) { + this.faction = faction; + } + + public void setInEffect(boolean inEffect) { + this.inEffect = inEffect; + } + + public void setStarting(boolean starting) { + this.starting = starting; + } +} diff --git a/src/main/java/com/massivecraft/factions/shield/TimeFrameTask.java b/src/main/java/com/massivecraft/factions/shield/TimeFrameTask.java new file mode 100644 index 00000000..d0fc4eae --- /dev/null +++ b/src/main/java/com/massivecraft/factions/shield/TimeFrameTask.java @@ -0,0 +1,45 @@ +package com.massivecraft.factions.shield; + +import com.massivecraft.factions.Faction; +import com.massivecraft.factions.Factions; + +public class TimeFrameTask implements Runnable { + + @Override + public void run() { + //remove tiem from the timeFrame + + for (Faction faction : Factions.getInstance().getAllFactions()) { + + if (faction.getTimeFrame() != null){ + TimeFrame timeFrame = faction.getTimeFrame(); + + if (timeFrame.isStarting() || timeFrame.isEnding() || timeFrame.isInEffect()){ + //either starting, ending, or in effect, so we have to remove 1 minute interval from the currentTime + int newTime = Math.subtractExact(timeFrame.getCurrentMinutes(), 1); + if (newTime == 0){ + //time is done, do functions... + if (timeFrame.isStarting() || timeFrame.isInEffect()){ + if (timeFrame.isStarting()){ + //it was starting, now set to inEffect + timeFrame.setStarting(false); + timeFrame.setInEffect(true); + } + //we don't need to check for inEffect because if it is, it'll just set the time back anyways... + timeFrame.setCurrentMinutes(720); + continue; // continue to the next faction + }else if (timeFrame.isEnding()){ + //it was ending, now set inEffect to false, basically remove from the faction obj + timeFrame.setEnding(false); + timeFrame.setInEffect(false); + //remove from faction object + faction.setTimeFrame(null); + continue; // continue to the next faction + } + } + timeFrame.setCurrentMinutes(newTime); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java index 1a0e23dd..eb7b3f32 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFaction.java @@ -9,6 +9,7 @@ import com.massivecraft.factions.iface.RelationParticipator; import com.massivecraft.factions.integration.Econ; import com.massivecraft.factions.missions.Mission; import com.massivecraft.factions.scoreboards.FTeamWrapper; +import com.massivecraft.factions.shield.TimeFrame; import com.massivecraft.factions.struct.BanInfo; import com.massivecraft.factions.struct.Permission; import com.massivecraft.factions.struct.Relation; @@ -29,6 +30,7 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import java.sql.Time; import java.util.*; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; @@ -93,6 +95,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { private String weeWooFormat; private String guildId; private String memberRoleId; + private TimeFrame timeFrame; // -------------------------------------------- // @@ -128,6 +131,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { this.notifyFormat = "@everyone, check %type%"; this.weeWooFormat = "@everyone, we're being raided! Get online!"; this.memberRoleId = null; + this.timeFrame = null; resetPerms(); // Reset on new Faction so it has default values. } @@ -160,7 +164,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { this.checks = new ConcurrentHashMap<>(); this.playerWallCheckCount = new ConcurrentHashMap<>(); this.playerBufferCheckCount = new ConcurrentHashMap<>(); - + this.timeFrame = null; resetPerms(); // Reset on new Faction so it has default values. } @@ -1505,4 +1509,12 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator { public Set getAllClaims() { return Board.getInstance().getAllClaims(this); } + + public TimeFrame getTimeFrame(){ + return this.timeFrame; + } + + public void setTimeFrame(TimeFrame timeFrame){ + this.timeFrame = timeFrame; + } }