diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java index 2aa5739..5a497af 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/FightSystem.java @@ -23,6 +23,7 @@ import com.comphenix.tinyprotocol.TinyProtocol; import de.steamwar.core.Core; import de.steamwar.fightsystem.ai.LixfelAI; import de.steamwar.fightsystem.ai.navmesh.NavMesh; +import de.steamwar.fightsystem.ai.chaos.ChaosAI; import de.steamwar.fightsystem.commands.*; import de.steamwar.fightsystem.countdown.*; import de.steamwar.fightsystem.event.HellsBells; @@ -171,11 +172,10 @@ public class FightSystem extends JavaPlugin { } FightStatistics.unrank(); - FightWorld.forceLoad(); Bukkit.getScheduler().runTask(getPlugin(), () -> { - new LixfelAI(Fight.getBlueTeam(), "Lixfel.AI"); - new LixfelAI(Fight.getRedTeam(), "YoyoNow.AI"); + new ChaosAI(Fight.getBlueTeam()); + new LixfelAI(Fight.getRedTeam(), SteamwarUser.get(-1)); }); } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/LixfelAI.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/LixfelAI.java index b01104a..688d9cc 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/ai/LixfelAI.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ai/LixfelAI.java @@ -23,7 +23,6 @@ import de.steamwar.entity.REntityServer; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.ai.navmesh.NavMesh; import de.steamwar.fightsystem.fight.FightTeam; -import de.steamwar.fightsystem.states.FightState; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SteamwarUser; import org.bukkit.Material; @@ -31,7 +30,6 @@ import org.bukkit.entity.Player; import org.bukkit.util.Vector; import java.util.*; -import java.util.function.Function; public class LixfelAI extends AI { @@ -40,8 +38,8 @@ public class LixfelAI extends AI { private final FightTeam team; private final NavMesh navMesh; - public LixfelAI(FightTeam team, String user) { - super(team, SteamwarUser.get(user)); + public LixfelAI(FightTeam team, SteamwarUser user) { + super(team, user); this.team = team; navMesh = new NavMesh(team, entityServer); } @@ -69,14 +67,6 @@ public class LixfelAI extends AI { private Vector destination = null; private int index = 0; - LixfelPathplanner getPathplanner() { - return pathplanner; - } - - void setAction(Action action) { - this.action = action; - } - @Override protected void plan() { setReady(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Bridge.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Bridge.java deleted file mode 100644 index 076b93f..0000000 --- a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Bridge.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.ai.chaos; - -import org.bukkit.util.Vector; - -public class Bridge { - private Bridge() { - } - - public static final Vector BRIDGE_POS = new Vector(25, 14, 24); - public static final Vector BRIDGE_SHIELDS = new Vector(25, 15, 25); - public static final Vector BRIDGE_MG = new Vector(21, 15, 24); -} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Cannon.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Cannon.java index af6ff45..e54ebfe 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Cannon.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/Cannon.java @@ -28,7 +28,7 @@ public class Cannon { public final Vector escape; public final String name; - private Cannon(String name, Vector[] tnt, Vector button, Vector load, Vector escape) { + public Cannon(String name, Vector[] tnt, Vector button, Vector load, Vector escape) { this.tnt = tnt; this.button = button; this.load = load; @@ -36,137 +36,23 @@ public class Cannon { this.name = name; } - public static final Vector[] DS_LEFT_TNT = new Vector[] { - new Vector(40, 24, 12), - new Vector(39, 24, 12), - new Vector(38, 23, 12), - new Vector(38, 24, 12), - new Vector(40, 23, 15), - new Vector(40, 23, 14), - new Vector(40, 24, 15), - new Vector(40, 24, 14), - new Vector(38, 23, 15), - new Vector(38, 23, 14), - new Vector(38, 24, 15), - new Vector(38, 24, 14), - new Vector(40, 23, 12), - }; - public static final Vector DS_LEFT_BUTTON = new Vector(39, 25, 11); - public static final Vector DS_LEFT_LOAD = new Vector(39, 25, 13); - public static final Vector DS_LEFT_ESCAPE = new Vector(31, 26, 13); - public static final Cannon DS_LEFT = new Cannon("Downstäb Links", DS_LEFT_TNT, DS_LEFT_BUTTON, DS_LEFT_LOAD, DS_LEFT_ESCAPE); + public Vector[] getTnt() { + return tnt; + } - public static final Vector[] DS_RIGHT_TNT = new Vector[] { - new Vector(12, 24, 12), - new Vector(11, 24, 12), - new Vector(10, 23, 12), - new Vector(10, 24, 12), - new Vector(10, 23, 15), - new Vector(10, 23, 14), - new Vector(10, 24, 15), - new Vector(10, 24, 14), - new Vector(12, 23, 14), - new Vector(12, 24, 14), - new Vector(12, 23, 15), - new Vector(12, 24, 15), - new Vector(12, 23, 12), - }; - public static final Vector DS_RIGHT_BUTTON = new Vector(11, 25, 11); - public static final Vector DS_RIGHT_LOAD = new Vector(11, 25, 13); - public static final Vector DS_RIGHT_ESCAPE = new Vector(19, 26, 13); - public static final Cannon DS_RIGHT = new Cannon("Downstäb Rechts", DS_RIGHT_TNT, DS_RIGHT_BUTTON, DS_RIGHT_LOAD, DS_RIGHT_ESCAPE); + public Vector getButton() { + return button; + } - public static final Vector[] STATIC_LEFT_TNT = new Vector[] { - new Vector(37, 17, 15), - new Vector(37, 17, 14), - new Vector(37, 18, 16), - new Vector(37, 18, 15), - new Vector(37, 18, 14), - new Vector(36, 17, 16), - new Vector(36, 17, 15), - new Vector(36, 17, 14), - new Vector(36, 18, 16), - new Vector(36, 18, 15), - new Vector(36, 18, 14), - new Vector(37, 17, 16), - }; - public static final Vector STATIC_LEFT_BUTTON = new Vector(38, 18, 11); - public static final Vector STATIC_LEFT_LOAD = new Vector(37, 17, 12); - public static final Vector STATIC_LEFT_ESCAPE = new Vector(30, 13, 9); - public static final Cannon STATIC_LEFT = new Cannon("Lupf Links", STATIC_LEFT_TNT, STATIC_LEFT_BUTTON, STATIC_LEFT_LOAD, STATIC_LEFT_ESCAPE); + public Vector getLoad() { + return load; + } - public static final Vector[] STATIC_RIGHT_TNT = new Vector[] { - new Vector(14, 17, 15), - new Vector(14, 18, 16), - new Vector(14, 18, 15), - new Vector(14, 17, 14), - new Vector(14, 18, 14), - new Vector(13, 17, 16), - new Vector(13, 17, 15), - new Vector(13, 17, 14), - new Vector(13, 18, 16), - new Vector(13, 18, 15), - new Vector(13, 18, 14), - new Vector(14, 17, 16), - }; - public static final Vector STATIC_RIGHT_BUTTON = new Vector(12, 18, 11); - public static final Vector STATIC_RIGHT_LOAD = new Vector(13, 17, 12); - public static final Vector STATIC_RIGHT_ESCAPE = new Vector(20, 13, 9); - public static final Cannon STATIC_RIGHT = new Cannon("Lupf Rechts", STATIC_RIGHT_TNT, STATIC_RIGHT_BUTTON, STATIC_RIGHT_LOAD, STATIC_RIGHT_ESCAPE); + public Vector getEscape() { + return escape; + } - public static final Vector[] AK_TNT = new Vector[] { - new Vector(10, 7, 17), - new Vector(10, 11, 17), - new Vector(10, 10, 17), - new Vector(10, 8, 17), - new Vector(10, 9, 17), - new Vector(10, 7, 15), - new Vector(11, 7, 15), - new Vector(12, 7, 15), - new Vector(10, 10, 15), - new Vector(11, 10, 15), - new Vector(12, 10, 15), - new Vector(12, 8, 15), - new Vector(12, 9, 15), - new Vector(11, 8, 15), - new Vector(11, 9, 15), - new Vector(10, 8, 15), - new Vector(10, 9, 15), - new Vector(10, 7, 19), - new Vector(11, 7, 19), - new Vector(12, 7, 19), - new Vector(12, 8, 19), - new Vector(11, 8, 19), - new Vector(10, 8, 19), - new Vector(10, 10, 19), - new Vector(11, 10, 19), - new Vector(12, 10, 19), - new Vector(12, 9, 19), - new Vector(11, 9, 19), - new Vector(10, 9, 19), - new Vector(10, 6, 17), - }; - public static final Vector AK_BUTTON = new Vector(9, 9, 16); - public static final Vector AK_LOAD = new Vector(11, 8, 17); - public static final Cannon AK = new Cannon("Arschkratzer", AK_TNT, AK_BUTTON, AK_LOAD, null); - - public static final Vector[] HA_RIGHT_TNT = new Vector[] { - new Vector(23, 5, 9), - new Vector(23, 6, 9), - new Vector(23, 7, 9), - new Vector(23, 8, 9), - }; - - public static final Vector[] HA_LEFT_TNT = new Vector[] { - new Vector(27, 5, 9), - new Vector(27, 6, 9), - new Vector(27, 7, 9), - new Vector(27, 8, 9), - }; - - public static final Vector HA_RIGHT_LOAD = new Vector(23, 8, 8); - public static final Vector HA_LEFT_LOAD = new Vector(27, 8, 8); - - public static final Cannon HA_LEFT = new Cannon("Halbautomatik Links", HA_LEFT_TNT, null, HA_LEFT_LOAD, null); - public static final Cannon HA_RIGHT = new Cannon("Halbautomatik Rechts", HA_RIGHT_TNT, null, HA_RIGHT_LOAD, null); + public String getName() { + return name; + } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/ChaosAI.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/ChaosAI.java index 4e665fd..34f1ca7 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/ChaosAI.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/ChaosAI.java @@ -19,39 +19,44 @@ package de.steamwar.fightsystem.ai.chaos; +import de.steamwar.entity.REntityServer; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.ai.AI; -import de.steamwar.fightsystem.ai.LixfelPathplanner; +import de.steamwar.fightsystem.ai.chaos.gears.Gear; +import de.steamwar.fightsystem.ai.chaos.gears.TheUnderground; +import de.steamwar.fightsystem.ai.navmesh.NavMesh; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.states.FightState; import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SteamwarUser; import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.util.Vector; import java.util.*; public class ChaosAI extends AI { - private final LixfelPathplanner pathplanner = new LixfelPathplanner(chooseSchematic()); private State state = State.PRE_PREPARE; - private static final Cannon[] cannons = new Cannon[] { - Cannon.DS_LEFT, - Cannon.DS_RIGHT, - Cannon.STATIC_LEFT, - Cannon.STATIC_RIGHT, - Cannon.HA_LEFT, - Cannon.HA_RIGHT, - //Cannon.AK, - }; + private static final Gear gear = TheUnderground.THE_UNDERGROUND; + private Cannon currentCannon; private boolean igniteMg = false; private static final Random random = new Random(); public static Map onePrepares = new HashMap<>(); private boolean prepares = false; private static final Map> cannonsShot = new HashMap<>(); + private final NavMesh navMesh; + private final REntityServer entityServer = new REntityServer(); + private Vector source = null; + private Vector destination = null; + private int index = 0; + private State nextState = null; + public ChaosAI(FightTeam team) { this(team, SteamwarUser.get(14533)); } @@ -59,6 +64,7 @@ public class ChaosAI extends AI { public ChaosAI(FightTeam team, SteamwarUser user) { super(team, user); + this.navMesh = new NavMesh(team, entityServer); if (Boolean.FALSE.equals(onePrepares.getOrDefault(team, false))) { prepares = true; onePrepares.put(team, true); @@ -67,7 +73,7 @@ public class ChaosAI extends AI { @Override public SchematicNode chooseSchematic() { - return SchematicNode.getSchematicNode(111476); + return SchematicNode.getSchematicNode(gear.getSchematicId()); } @Override @@ -77,16 +83,17 @@ public class ChaosAI extends AI { Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> { state = State.PREPARE; }, 20 * 15); - state = State.PREPARING_PREPARE; - break; - case WAIT_TILL_IGNITE: - case PREPARING_PREPARE: + state = State.WAIT; break; case PREPARE: prepare(); - state = State.PREPARE_READY; break; case PREPARE_READY: + if (prepares) { + for (Vector prepareButton : gear.getPrepareButtons()) { + interact(prepareButton); + } + } setReady(); state = State.WAIT_TILL_START; break; @@ -99,10 +106,10 @@ public class ChaosAI extends AI { case IGNITE_MG: if(igniteMg) { if (prepares) { - interact(Bridge.BRIDGE_MG); + interact(gear.getMgButton()); chat("Die MG ist angezündet!"); } - state = State.WAIT_TILL_IGNITE; + state = State.WAIT; currentCannon = randomCannon(); Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> state = State.FIGHT, 20 * 9); } @@ -110,20 +117,69 @@ public class ChaosAI extends AI { case FIGHT: fireCannon(currentCannon); break; + case LOAD_CANNON: + loadCannon(currentCannon); + break; case ESCAPE: - chat("Ich flüchte!"); - if (currentCannon.escape != null) { - pathplanner.planToAnywhere(getPosition(), currentCannon.escape.add(new Vector(0.5, 0, 0.5))).forEach(this::move); - } - cannonsShot.computeIfAbsent(team, fightTeam -> new HashSet<>()).remove(currentCannon); currentCannon = randomCannon(); - state = State.FIGHT; + state = State.WAIT; + Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> state = State.FIGHT, 20 * 4); + break; + case WAIT: + break; + case WALK: + if (!getEntity().isOnGround() && getEntity().getLocation().getBlock().getType() != Material.LADDER) return; + + List oldRoute = navMesh.path(source, destination); + navMesh.update(getEntity().getLocation().toVector()); + List path = navMesh.path(source, destination); + + if (path.isEmpty()) { + source = null; + destination = null; + state = nextState; + chat("no route"); + return; + } + if (!oldRoute.equals(path)) { + source = getEntity().getLocation().toVector(); + index = 0; + chat("new route"); + return; + } + if (index == 0) { + chat(source + " -> " + destination + " = " + path.size()); + } + + Vector loc = path.get(index++); + move(toAIPosition(loc)); + + if (index == path.size()) { + source = null; + destination = null; + state = nextState; + } break; } } + private void moveTo(Vector vec, State nextState) { + source = getEntity().getLocation().toVector(); + Vector currentBest = null; + for (Vector vector : navMesh.getWalkableBlocks(source)) { + if (currentBest == null || vector.distanceSquared(vec) < currentBest.distanceSquared(vec)) { + currentBest = vector; + } + } + + destination = currentBest; + index = 0; + state = State.WALK; + this.nextState = nextState; + } + @Override public void stop() { chat("gege wp eZ win 4nus"); @@ -135,19 +191,25 @@ public class ChaosAI extends AI { @Override public boolean acceptJoinRequest(Player player, FightTeam team) { + if (team == this.team) { + entityServer.addPlayer(player); + } return team == this.team; } public void fireCannon(Cannon cannon) { chat("Ich feuere " + cannon.name + " an!"); - pathplanner.planToAnywhere(getPosition(), cannon.load.add(new Vector(0.5, 0, 0.5))).forEach(this::move); + moveTo(cannon.load.clone().add(new Vector(0.5, 0, 0.5)), State.LOAD_CANNON); + } + + private void loadCannon(Cannon cannon) { if (cannon.button == null) { for (int i = 0; i < 20; i++) { for (Vector vector : cannon.tnt) { setTNT(vector); } for (int j = 0; j < 30; j++) { - getBlock(Bridge.BRIDGE_MG); + getBlock(gear.getMgButton()); } } } else { @@ -157,13 +219,15 @@ public class ChaosAI extends AI { interact(cannon.button); } - state = State.ESCAPE; + if (currentCannon.escape != null) { + moveTo(cannon.getEscape().clone().add(new Vector(0.5, 0, 0.5)), State.ESCAPE); + } } private Cannon randomCannon() { - Cannon nextCannon = cannons[random.nextInt(cannons.length)]; + Cannon nextCannon = gear.getCannons()[random.nextInt(gear.getCannons().length)]; while (cannonsShot.computeIfAbsent(team, fightTeam -> new HashSet<>()).contains(nextCannon)) { - nextCannon = cannons[random.nextInt(cannons.length)]; + nextCannon = gear.getCannons()[random.nextInt(gear.getCannons().length)]; } cannonsShot.computeIfAbsent(team, fightTeam -> new HashSet<>()).add(nextCannon); @@ -178,28 +242,26 @@ public class ChaosAI extends AI { } Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> { igniteMg = true; - }, 20 * 21); + }, 20L * gear.getMgTime()); } public void prepare() { chat("Prepare your fkin 4nus"); if (prepares) { - pathplanner.planToAnywhere(getPosition(), Bridge.BRIDGE_POS.add(new Vector(0.5, 0, 0.5))).forEach(this::move); - interact(Bridge.BRIDGE_SHIELDS); - pathplanner.planToAnywhere(getPosition(), Bridge.BRIDGE_POS.add(new Vector(0.5, 0, 0.5)).subtract(new Vector(2, 0, 0))).forEach(this::move); + moveTo(gear.getBridge().clone().add(new Vector(0.5, 0, 0.5)), State.PREPARE_READY); } } private enum State { PRE_PREPARE, - PREPARING_PREPARE, PREPARE, PREPARE_READY, WAIT_TILL_START, IGNITE_MG, - WAIT_TILL_IGNITE, FIGHT, + LOAD_CANNON, ESCAPE, - + WAIT, + WALK, } } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/gears/Gear.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/gears/Gear.java new file mode 100644 index 0000000..f02a023 --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/gears/Gear.java @@ -0,0 +1,66 @@ +/* + * 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.ai.chaos.gears; + +import de.steamwar.fightsystem.ai.chaos.Cannon; +import org.bukkit.util.Vector; + +public class Gear { + + private final Cannon[] cannons; + private final Vector bridge; + private final Vector[] prepareButtons; + private final Vector mgButton; + private final int mgTime; + private final int schematicId; + + protected Gear(Cannon[] cannons, Vector bridge, Vector[] prepareButtons, Vector mgButton, int mgTime, int schematicId) { + this.cannons = cannons; + this.bridge = bridge; + this.prepareButtons = prepareButtons; + this.mgButton = mgButton; + this.mgTime = mgTime; + this.schematicId = schematicId; + } + + public Cannon[] getCannons() { + return cannons; + } + + public Vector getBridge() { + return bridge; + } + + public Vector[] getPrepareButtons() { + return prepareButtons; + } + + public Vector getMgButton() { + return mgButton; + } + + public int getMgTime() { + return mgTime; + } + + public int getSchematicId() { + return schematicId; + } +} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/gears/TheUnderground.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/gears/TheUnderground.java new file mode 100644 index 0000000..f30ec3a --- /dev/null +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ai/chaos/gears/TheUnderground.java @@ -0,0 +1,184 @@ +/* + * 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.ai.chaos.gears; + +import de.steamwar.fightsystem.ai.chaos.Cannon; +import org.bukkit.util.Vector; + +public class TheUnderground { + + public static final Vector[] DS_LEFT_TNT = new Vector[] { + new Vector(40, 24, 12), + new Vector(39, 24, 12), + new Vector(38, 23, 12), + new Vector(38, 24, 12), + new Vector(40, 23, 15), + new Vector(40, 23, 14), + new Vector(40, 24, 15), + new Vector(40, 24, 14), + new Vector(38, 23, 15), + new Vector(38, 23, 14), + new Vector(38, 24, 15), + new Vector(38, 24, 14), + new Vector(40, 23, 12), + }; + public static final Vector DS_LEFT_BUTTON = new Vector(39, 25, 11); + public static final Vector DS_LEFT_LOAD = new Vector(39, 25, 13); + public static final Vector DS_LEFT_ESCAPE = new Vector(31, 26, 13); + public static final Cannon DS_LEFT = new Cannon("Downstäb Links", DS_LEFT_TNT, DS_LEFT_BUTTON, DS_LEFT_LOAD, DS_LEFT_ESCAPE); + + public static final Vector[] DS_RIGHT_TNT = new Vector[] { + new Vector(12, 24, 12), + new Vector(11, 24, 12), + new Vector(10, 23, 12), + new Vector(10, 24, 12), + new Vector(10, 23, 15), + new Vector(10, 23, 14), + new Vector(10, 24, 15), + new Vector(10, 24, 14), + new Vector(12, 23, 14), + new Vector(12, 24, 14), + new Vector(12, 23, 15), + new Vector(12, 24, 15), + new Vector(12, 23, 12), + }; + public static final Vector DS_RIGHT_BUTTON = new Vector(11, 25, 11); + public static final Vector DS_RIGHT_LOAD = new Vector(11, 25, 13); + public static final Vector DS_RIGHT_ESCAPE = new Vector(19, 26, 13); + public static final Cannon DS_RIGHT = new Cannon("Downstäb Rechts", DS_RIGHT_TNT, DS_RIGHT_BUTTON, DS_RIGHT_LOAD, DS_RIGHT_ESCAPE); + + public static final Vector[] STATIC_LEFT_TNT = new Vector[] { + new Vector(37, 17, 15), + new Vector(37, 17, 14), + new Vector(37, 18, 16), + new Vector(37, 18, 15), + new Vector(37, 18, 14), + new Vector(36, 17, 16), + new Vector(36, 17, 15), + new Vector(36, 17, 14), + new Vector(36, 18, 16), + new Vector(36, 18, 15), + new Vector(36, 18, 14), + new Vector(37, 17, 16), + }; + public static final Vector STATIC_LEFT_BUTTON = new Vector(38, 18, 11); + public static final Vector STATIC_LEFT_LOAD = new Vector(37, 17, 12); + public static final Vector STATIC_LEFT_ESCAPE = new Vector(30, 13, 9); + public static final Cannon STATIC_LEFT = new Cannon("Lupf Links", STATIC_LEFT_TNT, STATIC_LEFT_BUTTON, STATIC_LEFT_LOAD, STATIC_LEFT_ESCAPE); + + public static final Vector[] STATIC_RIGHT_TNT = new Vector[] { + new Vector(14, 17, 15), + new Vector(14, 18, 16), + new Vector(14, 18, 15), + new Vector(14, 17, 14), + new Vector(14, 18, 14), + new Vector(13, 17, 16), + new Vector(13, 17, 15), + new Vector(13, 17, 14), + new Vector(13, 18, 16), + new Vector(13, 18, 15), + new Vector(13, 18, 14), + new Vector(14, 17, 16), + }; + public static final Vector STATIC_RIGHT_BUTTON = new Vector(12, 18, 11); + public static final Vector STATIC_RIGHT_LOAD = new Vector(13, 17, 12); + public static final Vector STATIC_RIGHT_ESCAPE = new Vector(20, 13, 9); + public static final Cannon STATIC_RIGHT = new Cannon("Lupf Rechts", STATIC_RIGHT_TNT, STATIC_RIGHT_BUTTON, STATIC_RIGHT_LOAD, STATIC_RIGHT_ESCAPE); + + public static final Vector[] AK_TNT = new Vector[] { + new Vector(10, 7, 17), + new Vector(10, 11, 17), + new Vector(10, 10, 17), + new Vector(10, 8, 17), + new Vector(10, 9, 17), + new Vector(10, 7, 15), + new Vector(11, 7, 15), + new Vector(12, 7, 15), + new Vector(10, 10, 15), + new Vector(11, 10, 15), + new Vector(12, 10, 15), + new Vector(12, 8, 15), + new Vector(12, 9, 15), + new Vector(11, 8, 15), + new Vector(11, 9, 15), + new Vector(10, 8, 15), + new Vector(10, 9, 15), + new Vector(10, 7, 19), + new Vector(11, 7, 19), + new Vector(12, 7, 19), + new Vector(12, 8, 19), + new Vector(11, 8, 19), + new Vector(10, 8, 19), + new Vector(10, 10, 19), + new Vector(11, 10, 19), + new Vector(12, 10, 19), + new Vector(12, 9, 19), + new Vector(11, 9, 19), + new Vector(10, 9, 19), + new Vector(10, 6, 17), + }; + public static final Vector AK_BUTTON = new Vector(9, 9, 16); + public static final Vector AK_LOAD = new Vector(11, 8, 17); + public static final Cannon AK = new Cannon("Arschkratzer", AK_TNT, AK_BUTTON, AK_LOAD, null); + + public static final Vector[] HA_RIGHT_TNT = new Vector[] { + new Vector(23, 5, 9), + new Vector(23, 6, 9), + new Vector(23, 7, 9), + new Vector(23, 8, 9), + }; + + public static final Vector[] HA_LEFT_TNT = new Vector[] { + new Vector(27, 5, 9), + new Vector(27, 6, 9), + new Vector(27, 7, 9), + new Vector(27, 8, 9), + }; + + public static final Vector HA_RIGHT_LOAD = new Vector(23, 8, 8); + public static final Vector HA_LEFT_LOAD = new Vector(27, 8, 8); + + public static final Cannon HA_LEFT = new Cannon("Halbautomatik Links", HA_LEFT_TNT, null, HA_LEFT_LOAD, null); + public static final Cannon HA_RIGHT = new Cannon("Halbautomatik Rechts", HA_RIGHT_TNT, null, HA_RIGHT_LOAD, null); + + public static final Vector BRIDGE_POS = new Vector(25, 14, 24); + public static final Vector BRIDGE_SHIELDS = new Vector(25, 15, 25); + public static final Vector BRIDGE_MG = new Vector(21, 15, 24); + + public static final Gear THE_UNDERGROUND = new Gear( + new Cannon[] { + DS_LEFT, + DS_RIGHT, + STATIC_LEFT, + STATIC_RIGHT, + AK, + HA_LEFT, + HA_RIGHT, + //Cannon.AK, + }, + BRIDGE_POS, + new Vector[] { + BRIDGE_SHIELDS + }, + BRIDGE_MG, + 21, + 124667 + ); +} diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/ai/navmesh/NavMesh.java b/FightSystem_Core/src/de/steamwar/fightsystem/ai/navmesh/NavMesh.java index d746c71..eb57491 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/ai/navmesh/NavMesh.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/ai/navmesh/NavMesh.java @@ -78,14 +78,12 @@ public class NavMesh implements Listener { }); floorBlock.forEach(this::checkNeighbouring); System.out.println(System.currentTimeMillis() - time + " ms"); - /* iterateWalkableBlocks((vector, ceilingOffset) -> { RArmorStand armorStand = new RArmorStand(entityServer, vector.toLocation(WORLD), RArmorStand.Size.MARKER); armorStand.setNoGravity(true); armorStand.setInvisible(true); armorStand.setDisplayName("+" + (ceilingOffset == null ? "∞" : ceilingOffset)); }); - */ }, 20); }); new OneShotStateDependent(ArenaMode.All, FightState.Spectate, () -> { diff --git a/gradlew b/gradlew old mode 100755 new mode 100644