From c0163d813ed131468ee0f4c72fd699c23fd49f48 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Tue, 28 Oct 2025 23:00:53 +0100 Subject: [PATCH] Add WindchargeStopper to handle wind charge entity removal based on fight boundaries Signed-off-by: Chaoscaot --- .../listener/WindchargeStopper21.java | 51 +++++++++++++++++++ .../listener/WindchargeStopper8.java | 27 ++++++++++ .../listener/WindchargeStopper.java | 37 ++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 FightSystem/FightSystem_21/src/de/steamwar/fightsystem/listener/WindchargeStopper21.java create mode 100644 FightSystem/FightSystem_8/src/de/steamwar/fightsystem/listener/WindchargeStopper8.java create mode 100644 FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/WindchargeStopper.java diff --git a/FightSystem/FightSystem_21/src/de/steamwar/fightsystem/listener/WindchargeStopper21.java b/FightSystem/FightSystem_21/src/de/steamwar/fightsystem/listener/WindchargeStopper21.java new file mode 100644 index 00000000..90ae8a54 --- /dev/null +++ b/FightSystem/FightSystem_21/src/de/steamwar/fightsystem/listener/WindchargeStopper21.java @@ -0,0 +1,51 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2025 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.listener; + +import de.steamwar.fightsystem.Config; +import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.states.StateDependentTask; +import net.minecraft.world.entity.projectile.windcharge.WindCharge; +import org.bukkit.Location; + +public class WindchargeStopper21 implements WindchargeStopper.IWindchargeStopper { + @Override + public void init() { + new StateDependentTask(true, FightState.Running, this::run, 1, 1); + } + + private static final int middleLine = Config.SpecSpawn.getBlockZ(); + + private static final Class windChargeClass = WindCharge.class; + + private void run() { + Recording.iterateOverEntities(windChargeClass::isInstance, entity -> { + Location location = entity.getLocation(); + Location prevLocation = location.clone().subtract(entity.getVelocity()); + + boolean passedMiddle = location.getBlockZ() > middleLine && prevLocation.getBlockZ() > middleLine || + location.getBlockZ() < middleLine && prevLocation.getBlockZ() < middleLine; + + if(!passedMiddle) { + entity.remove(); + } + }); + } +} diff --git a/FightSystem/FightSystem_8/src/de/steamwar/fightsystem/listener/WindchargeStopper8.java b/FightSystem/FightSystem_8/src/de/steamwar/fightsystem/listener/WindchargeStopper8.java new file mode 100644 index 00000000..c8863680 --- /dev/null +++ b/FightSystem/FightSystem_8/src/de/steamwar/fightsystem/listener/WindchargeStopper8.java @@ -0,0 +1,27 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2025 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.listener; + +public class WindchargeStopper8 implements WindchargeStopper.IWindchargeStopper { + @Override + public void init() { + + } +} diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/WindchargeStopper.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/WindchargeStopper.java new file mode 100644 index 00000000..d0301006 --- /dev/null +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/WindchargeStopper.java @@ -0,0 +1,37 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2025 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.listener; + +import de.steamwar.core.VersionDependent; +import de.steamwar.fightsystem.FightSystem; +import de.steamwar.linkage.Linked; + +@Linked +public class WindchargeStopper { + private static final IWindchargeStopper impl = VersionDependent.getVersionImpl(FightSystem.getPlugin()); + + public WindchargeStopper() { + impl.init(); + } + + public interface IWindchargeStopper { + void init(); + } +}