From 4b82ea94262cc86f952fad9dc416270972c19d1f Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sun, 8 Oct 2023 18:08:13 +0200 Subject: [PATCH 1/2] Persistent Damage Event Signed-off-by: Lixfel --- FightSystem_Core/src/config.yml | 1 + .../de/steamwar/fightsystem/FightSystem.java | 2 + .../fightsystem/event/PersistentDamage.java | 44 +++++++++++++++++++ .../winconditions/Winconditions.java | 3 +- 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 FightSystem_Core/src/de/steamwar/fightsystem/event/PersistentDamage.java diff --git a/FightSystem_Core/src/config.yml b/FightSystem_Core/src/config.yml index e2fffe4..89db437 100644 --- a/FightSystem_Core/src/config.yml +++ b/FightSystem_Core/src/config.yml @@ -121,6 +121,7 @@ WinConditions: # defaults to none if missing # - HELLS_BELLS # - METEOR + # - PERSISTENT_DAMAGE 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..c4898d4 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -26,6 +26,7 @@ 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.fight.Fight; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FightWorld; @@ -129,6 +130,7 @@ public class FightSystem extends JavaPlugin { new HellsBells(); new Meteor(); + new PersistentDamage(); 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/winconditions/Winconditions.java b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java index 620a247..afd3943 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java @@ -39,5 +39,6 @@ public enum Winconditions { HELLS_BELLS, METEOR, - AMONG_US + AMONG_US, + PERSISTENT_DAMAGE } From 0c762e56240f1eebc1cbfaacf3239c78d8e43d9c Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sun, 8 Oct 2023 18:21:19 +0200 Subject: [PATCH 2/2] TNT Distribution Signed-off-by: Lixfel --- FightSystem_Core/src/config.yml | 1 + .../de/steamwar/fightsystem/FightSystem.java | 2 + .../fightsystem/event/TNTDistributor.java | 39 +++++++++++++++++++ .../winconditions/Winconditions.java | 3 +- 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 FightSystem_Core/src/de/steamwar/fightsystem/event/TNTDistributor.java diff --git a/FightSystem_Core/src/config.yml b/FightSystem_Core/src/config.yml index 89db437..49f992a 100644 --- a/FightSystem_Core/src/config.yml +++ b/FightSystem_Core/src/config.yml @@ -122,6 +122,7 @@ 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 c4898d4..e6ae767 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -27,6 +27,7 @@ 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; @@ -131,6 +132,7 @@ 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/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 afd3943..fa91d9c 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/winconditions/Winconditions.java @@ -40,5 +40,6 @@ public enum Winconditions { HELLS_BELLS, METEOR, AMONG_US, - PERSISTENT_DAMAGE + PERSISTENT_DAMAGE, + TNT_DISTRIBUTION }