diff --git a/FightSystem_Core/src/config.yml b/FightSystem_Core/src/config.yml index e2fffe4..49f992a 100644 --- a/FightSystem_Core/src/config.yml +++ b/FightSystem_Core/src/config.yml @@ -121,6 +121,8 @@ WinConditions: # defaults to none if missing # - HELLS_BELLS # - METEOR + # - PERSISTENT_DAMAGE + # - TNT_DISTRIBUTION WinConditionParams: # The time of any of the timeout win conditions in seconds diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java index 5de02c4..e6ae767 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -26,6 +26,8 @@ import de.steamwar.fightsystem.commands.*; import de.steamwar.fightsystem.countdown.*; import de.steamwar.fightsystem.event.HellsBells; import de.steamwar.fightsystem.event.Meteor; +import de.steamwar.fightsystem.event.PersistentDamage; +import de.steamwar.fightsystem.event.TNTDistributor; import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FightWorld; @@ -129,6 +131,8 @@ public class FightSystem extends JavaPlugin { new HellsBells(); new Meteor(); + new PersistentDamage(); + new TNTDistributor(); new WinconditionAmongUs(); new NoPlayersOnlineCountdown(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/event/PersistentDamage.java b/FightSystem_Core/src/de/steamwar/fightsystem/event/PersistentDamage.java new file mode 100644 index 0000000..606894f --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/event/PersistentDamage.java @@ -0,0 +1,44 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.fightsystem.event; + +import com.sk89q.worldedit.WorldEditException; +import de.steamwar.fightsystem.FightSystem; +import de.steamwar.fightsystem.fight.Fight; +import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.OneShotStateDependent; +import de.steamwar.fightsystem.utils.WorldeditWrapper; +import de.steamwar.fightsystem.winconditions.Winconditions; +import de.steamwar.sql.SchematicNode; + +import java.util.logging.Level; + +public class PersistentDamage { + + public PersistentDamage() { + new OneShotStateDependent(Winconditions.PERSISTENT_DAMAGE, FightState.Spectate, () -> Fight.teams().forEach(team -> { + try{ + WorldeditWrapper.impl.saveSchem(SchematicNode.getSchematicNode(team.getSchematic()), team.getExtendRegion(), team.getSchemRegion().getMinY()); + }catch(WorldEditException e){ + FightSystem.getPlugin().getLogger().log(Level.SEVERE, "Could not persist schematic state", e); + } + })); + } +} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/event/TNTDistributor.java b/FightSystem_Core/src/de/steamwar/fightsystem/event/TNTDistributor.java new file mode 100644 index 0000000..dc630a3 --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/event/TNTDistributor.java @@ -0,0 +1,39 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2023 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.fightsystem.event; + +import de.steamwar.fightsystem.ArenaMode; +import de.steamwar.fightsystem.fight.Fight; +import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.StateDependentTask; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; + +public class TNTDistributor { + + public TNTDistributor() { + new StateDependentTask(ArenaMode.AntiReplay, FightState.Running, () -> Fight.teams().forEach(team -> team.getPlayers().forEach(fp -> { + if(!fp.isLiving()) + return; + + fp.ifPlayer(player -> player.getInventory().addItem(new ItemStack(Material.TNT, 20))); + })), 0, 300); + } +} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java index 620a247..fa91d9c 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java @@ -39,5 +39,7 @@ public enum Winconditions { HELLS_BELLS, METEOR, - AMONG_US + AMONG_US, + PERSISTENT_DAMAGE, + TNT_DISTRIBUTION }