AmongUS #367
@ -118,6 +118,7 @@ public class FightSystem extends JavaPlugin {
|
|||||||
|
|
||||||
new HellsBells();
|
new HellsBells();
|
||||||
new Meteor();
|
new Meteor();
|
||||||
|
new WinconditionAmongUs();
|
||||||
|
|
||||||
new NoPlayersOnlineCountdown();
|
new NoPlayersOnlineCountdown();
|
||||||
new PreSchemCountdown();
|
new PreSchemCountdown();
|
||||||
|
@ -238,3 +238,8 @@ WIN_LESS_DAMAGE={0} §7less damaged
|
|||||||
WIN_POINTS={0} has more points
|
WIN_POINTS={0} has more points
|
||||||
WIN_POINTS_EQUAL=§7Equal points
|
WIN_POINTS_EQUAL=§7Equal points
|
||||||
WIN_TECHKO={0} §7is tech K.O.
|
WIN_TECHKO={0} §7is tech K.O.
|
||||||
|
WIN_IMPOSTER_DEAD={0} §7killed the imposter
|
||||||
|
WIN_CREWMATE_DEAD={0} §7killed all team mates
|
||||||
|
|
||||||
|
AMONG_US_IMPOSTER_MESSAGE = §4You are the Imposter§8! §7Kill all your team mates to win the game!
|
||||||
|
AMONG_US_IMPOSTER_AMONG_MESSAGE = §4There is an Imposter among us§8! §7Kill him to win the game!
|
||||||
|
@ -223,3 +223,8 @@ WIN_LESS_DAMAGE={0} §7weniger beschädigt
|
|||||||
WIN_POINTS={0} hat mehr Punkte
|
WIN_POINTS={0} hat mehr Punkte
|
||||||
WIN_POINTS_EQUAL=§7Gleicher Punktestand
|
WIN_POINTS_EQUAL=§7Gleicher Punktestand
|
||||||
WIN_TECHKO={0} §7ist Tech K.O.
|
WIN_TECHKO={0} §7ist Tech K.O.
|
||||||
|
WIN_IMPOSTER_DEAD={0} §7 hat den Imposter getötet
|
||||||
|
WIN_CREWMATE_DEAD={0} §7 hat alle Kameraden getötet
|
||||||
|
|
||||||
|
AMONG_US_IMPOSTER_MESSAGE = §4Du bist ein Imposter§8! §7Du musst alle Kameraden töten, um zu gewinnen.
|
||||||
|
AMONG_US_IMPOSTER_AMONG_MESSAGE = §4Es ist ein Imposter unter uns§8! §7Tötet ihn, um das Spiel zu gewinnen!
|
@ -20,10 +20,12 @@
|
|||||||
package de.steamwar.fightsystem.listener;
|
package de.steamwar.fightsystem.listener;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependentListener;
|
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||||
|
import de.steamwar.fightsystem.winconditions.Winconditions;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -36,7 +38,7 @@ import java.util.Objects;
|
|||||||
public class InFightDamage implements Listener {
|
public class InFightDamage implements Listener {
|
||||||
|
|
||||||
public InFightDamage() {
|
public InFightDamage() {
|
||||||
new StateDependentListener(ArenaMode.AntiReplay, FightState.Running, this);
|
new StateDependentListener(!Config.ActiveWinconditions.contains(Winconditions.AMONG_US), FightState.Running, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -0,0 +1,87 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
|
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||||
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
|
import de.steamwar.fightsystem.states.OneShotStateDependent;
|
||||||
|
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WinconditionAmongUs extends Wincondition implements Listener {
|
||||||
|
|
||||||
|
private Map<FightTeam, FightPlayer> imposter = new HashMap<>();
|
||||||
|
|
||||||
|
private final Random random = new Random();
|
||||||
|
|
||||||
|
public WinconditionAmongUs() {
|
||||||
|
super("AmongUs");
|
||||||
|
new OneShotStateDependent(Winconditions.AMONG_US, FightState.Ingame, () -> {
|
||||||
|
imposter.put(Fight.getRedTeam(), sendMessageAndReturnImposter(Fight.getRedTeam().getPlayers()));
|
||||||
|
imposter.put(Fight.getBlueTeam(), sendMessageAndReturnImposter(Fight.getBlueTeam().getPlayers()));
|
||||||
|
});
|
||||||
|
new StateDependentListener(Winconditions.AMONG_US, FightState.Ingame, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FightPlayer sendMessageAndReturnImposter(Collection<FightPlayer> fightPlayers) {
|
||||||
|
List<FightPlayer> fightPlayerList = new ArrayList<>(fightPlayers);
|
||||||
|
FightPlayer imposter = fightPlayerList.get(random.nextInt(fightPlayerList.size()));
|
||||||
|
for (FightPlayer fightPlayer : fightPlayerList) {
|
||||||
|
if (fightPlayer == imposter) {
|
||||||
|
FightSystem.getMessage().send("AMONG_US_IMPOSTER_MESSAGE", fightPlayer.getPlayer());
|
||||||
|
} else {
|
||||||
|
FightSystem.getMessage().send("AMONG_US_IMPOSTER_AMONG_MESSAGE", fightPlayer.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imposter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||||
|
handleDeath(event.getEntity().getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||||
|
handleDeath(event.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleDeath(Player player){
|
||||||
|
FightTeam team = isTarget(player);
|
||||||
|
if(team == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
FightPlayer current = team.getFightPlayer(player);
|
||||||
|
if (current == imposter.get(team)) {
|
||||||
|
win(team, "WIN_IMPOSTER_DEAD", team.getPrefix());
|
||||||
|
} else if (team.getAlivePlayers() <= 2 && imposter.get(team).isLiving()) {
|
||||||
|
win(Fight.getOpposite(team), "WIN_CREWMATE_DEAD", Fight.getOpposite(team).getPrefix());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -38,5 +38,6 @@ public enum Winconditions {
|
|||||||
PUMPKIN_TECH_KO,
|
PUMPKIN_TECH_KO,
|
||||||
|
|
||||||
HELLS_BELLS,
|
HELLS_BELLS,
|
||||||
METEOR
|
METEOR,
|
||||||
|
AMONG_US
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren