New Fight UI #288
@ -24,6 +24,7 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.SoundCategory;
|
import org.bukkit.SoundCategory;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
public class WorldOfColorWrapper12 implements WorldOfColorWrapper.IWorldOfColorWrapper {
|
public class WorldOfColorWrapper12 implements WorldOfColorWrapper.IWorldOfColorWrapper {
|
||||||
@ -41,4 +42,9 @@ public class WorldOfColorWrapper12 implements WorldOfColorWrapper.IWorldOfColorW
|
|||||||
public void playSound(Location location, Sound sound, String soundCategory, float volume, float pitch) {
|
public void playSound(Location location, Sound sound, String soundCategory, float volume, float pitch) {
|
||||||
location.getWorld().playSound(location, sound, SoundCategory.valueOf(soundCategory), volume, pitch);
|
location.getWorld().playSound(location, sound, SoundCategory.valueOf(soundCategory), volume, pitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendTitle(Player player, String title, String subtitle, int start, int hold, int stop) {
|
||||||
|
player.sendTitle(title, subtitle, start, hold, stop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,28 +20,32 @@
|
|||||||
package de.steamwar.fightsystem.utils;
|
package de.steamwar.fightsystem.utils;
|
||||||
|
|
||||||
import com.comphenix.tinyprotocol.Reflection;
|
import com.comphenix.tinyprotocol.Reflection;
|
||||||
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.listener.Recording;
|
import de.steamwar.fightsystem.listener.Recording;
|
||||||
import de.steamwar.fightsystem.record.GlobalRecorder;
|
import de.steamwar.fightsystem.record.GlobalRecorder;
|
||||||
import de.steamwar.fightsystem.record.REntity;
|
import de.steamwar.fightsystem.record.REntity;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.minecraft.server.v1_8_R3.ChatComponentText;
|
import net.minecraft.server.v1_8_R3.*;
|
||||||
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
|
|
||||||
import net.royawesome.jlibnoise.MathHelper;
|
import net.royawesome.jlibnoise.MathHelper;
|
||||||
import org.bukkit.Effect;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.*;
|
||||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class BountifulWrapper8 implements BountifulWrapper.IBountifulWrapper {
|
public class BountifulWrapper8 implements BountifulWrapper.IBountifulWrapper {
|
||||||
|
|
||||||
|
public BountifulWrapper8() {
|
||||||
|
EntityEnderDragon dragon = new EntityEnderDragon(null);
|
||||||
|
dragon.setLocation(Config.ArenaRegion.centerX(), -100, Config.ArenaRegion.centerZ(), 0, 0);
|
||||||
|
this.spawnDragonId = dragon.getId();
|
||||||
|
this.spawnDragon = new PacketPlayOutSpawnEntityLiving(dragon);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mainHand(Object packet) {
|
public boolean mainHand(Object packet) {
|
||||||
return true;
|
return true;
|
||||||
@ -157,4 +161,50 @@ public class BountifulWrapper8 implements BountifulWrapper.IBountifulWrapper {
|
|||||||
equipmentSlot.set(packet, 0);
|
equipmentSlot.set(packet, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Map<FightUI.BossBarType, PacketPlayOutEntityMetadata> barMap = new HashMap<>();
|
||||||
|
@Override
|
||||||
|
public void setBossbar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText) {
|
||||||
|
barMap.clear();
|
||||||
|
barMap.put(FightUI.BossBarType.BLUE_LEFT, createPacket(leftBlueProgress, leftBlueText));
|
||||||
|
barMap.put(FightUI.BossBarType.RED_LEFT, createPacket(leftRedProgress, leftRedText));
|
||||||
|
}
|
||||||
|
|
||||||
|
private PacketPlayOutEntityMetadata createPacket(double progress, String text) {
|
||||||
|
DataWatcher watcher = new DataWatcher(null);
|
||||||
|
watcher.a(0, (byte) 0x20);
|
||||||
|
watcher.a(2, text);
|
||||||
|
watcher.a(3, (byte) 1);
|
||||||
|
watcher.a(4, (byte) 1);
|
||||||
|
watcher.a(6, (float)(progress * 200));
|
||||||
|
//watcher.a(10, text);
|
||||||
|
//watcher.a(11, (byte) 1);
|
||||||
|
return new PacketPlayOutEntityMetadata(spawnDragonId, watcher, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeFromBar(Player player, FightUI.BossBarType type) {
|
||||||
|
// not used
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addToBar(Player player, FightUI.BossBarType type) {
|
||||||
|
// not used
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Set<Player> seesDragon = new HashSet<>();
|
||||||
|
private final PacketPlayOutSpawnEntityLiving spawnDragon;
|
||||||
|
private final int spawnDragonId;
|
||||||
|
@Override
|
||||||
|
public void broadcastBossbar() {
|
||||||
|
seesDragon.removeIf(player -> !player.isOnline());
|
||||||
|
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||||
|
if(!seesDragon.contains(player)) {
|
||||||
|
((CraftPlayer)player).getHandle().playerConnection.sendPacket(spawnDragon);
|
||||||
|
seesDragon.add(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
((CraftPlayer) player).getHandle().playerConnection.sendPacket(barMap.get(FightUI.getInstance().bossBarType(player)));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
public class WorldOfColorWrapper8 implements WorldOfColorWrapper.IWorldOfColorWrapper {
|
public class WorldOfColorWrapper8 implements WorldOfColorWrapper.IWorldOfColorWrapper {
|
||||||
@ -40,4 +41,10 @@ public class WorldOfColorWrapper8 implements WorldOfColorWrapper.IWorldOfColorWr
|
|||||||
public void playSound(Location location, Sound sound, String soundCategory, float volume, float pitch) {
|
public void playSound(Location location, Sound sound, String soundCategory, float volume, float pitch) {
|
||||||
location.getWorld().playSound(location, sound, volume, pitch);
|
location.getWorld().playSound(location, sound, volume, pitch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
@Override
|
||||||
|
public void sendTitle(Player player, String title, String subtitle, int start, int hold, int stop) {
|
||||||
|
player.sendTitle(title, subtitle);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,16 +20,19 @@
|
|||||||
package de.steamwar.fightsystem.utils;
|
package de.steamwar.fightsystem.utils;
|
||||||
|
|
||||||
import com.comphenix.tinyprotocol.Reflection;
|
import com.comphenix.tinyprotocol.Reflection;
|
||||||
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.listener.Recording;
|
import de.steamwar.fightsystem.listener.Recording;
|
||||||
import de.steamwar.fightsystem.record.GlobalRecorder;
|
import de.steamwar.fightsystem.record.GlobalRecorder;
|
||||||
import de.steamwar.fightsystem.record.REntity;
|
import de.steamwar.fightsystem.record.REntity;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.*;
|
||||||
import org.bukkit.Particle;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.attribute.AttributeInstance;
|
import org.bukkit.attribute.AttributeInstance;
|
||||||
|
import org.bukkit.boss.BarColor;
|
||||||
|
import org.bukkit.boss.BarStyle;
|
||||||
|
import org.bukkit.boss.BossBar;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -40,6 +43,8 @@ import org.bukkit.scoreboard.Team;
|
|||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.ParameterizedType;
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class BountifulWrapper9 implements BountifulWrapper.IBountifulWrapper {
|
public class BountifulWrapper9 implements BountifulWrapper.IBountifulWrapper {
|
||||||
@ -48,6 +53,12 @@ public class BountifulWrapper9 implements BountifulWrapper.IBountifulWrapper {
|
|||||||
private static final Object mainHand = enumHand.getEnumConstants()[0];
|
private static final Object mainHand = enumHand.getEnumConstants()[0];
|
||||||
private static final Reflection.FieldAccessor<?> blockPlaceHand = Reflection.getField(Recording.blockPlacePacket, enumHand, 0);
|
private static final Reflection.FieldAccessor<?> blockPlaceHand = Reflection.getField(Recording.blockPlacePacket, enumHand, 0);
|
||||||
|
|
||||||
|
public BountifulWrapper9() {
|
||||||
|
for(FightUI.BossBarType type : FightUI.BossBarType.values()) {
|
||||||
|
barMap.put(type, Bukkit.createBossBar(type.name(), BarColor.WHITE, BarStyle.SOLID));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mainHand(Object packet) {
|
public boolean mainHand(Object packet) {
|
||||||
return blockPlaceHand.get(packet) == mainHand;
|
return blockPlaceHand.get(packet) == mainHand;
|
||||||
@ -193,4 +204,66 @@ public class BountifulWrapper9 implements BountifulWrapper.IBountifulWrapper {
|
|||||||
equipmentSlot.set(packet, itemSlots[0]);
|
equipmentSlot.set(packet, itemSlots[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Map<FightUI.BossBarType, BossBar> barMap = new HashMap<>();
|
||||||
|
@Override
|
||||||
|
public void setBossbar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText) {
|
||||||
|
setupTeamBar(Fight.getBlueTeam(), barMap.get(FightUI.BossBarType.BLUE_LEFT), leftBlueProgress, leftBlueText);
|
||||||
|
setupTeamBar(Fight.getRedTeam(), barMap.get(FightUI.BossBarType.RED_LEFT), leftRedProgress, leftRedText);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupTeamBar(FightTeam team, BossBar bar, double progress, String title) {
|
||||||
|
BarColor color = chat2bar(team.getColor());
|
||||||
|
if(bar.getColor() != color)
|
||||||
|
bar.setColor(color);
|
||||||
|
|
||||||
|
if(bar.getProgress() != progress)
|
||||||
|
bar.setProgress(progress);
|
||||||
|
|
||||||
|
bar.setTitle(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BarColor chat2bar(ChatColor color) {
|
||||||
|
switch(color) {
|
||||||
|
case DARK_BLUE:
|
||||||
|
case DARK_AQUA:
|
||||||
|
case BLUE:
|
||||||
|
case AQUA:
|
||||||
|
return BarColor.BLUE;
|
||||||
|
case GREEN:
|
||||||
|
case DARK_GREEN:
|
||||||
|
return BarColor.GREEN;
|
||||||
|
case DARK_RED:
|
||||||
|
case RED:
|
||||||
|
return BarColor.RED;
|
||||||
|
case DARK_PURPLE:
|
||||||
|
return BarColor.PURPLE;
|
||||||
|
case GOLD:
|
||||||
|
case YELLOW:
|
||||||
|
return BarColor.YELLOW;
|
||||||
|
case LIGHT_PURPLE:
|
||||||
|
return BarColor.PINK;
|
||||||
|
case BLACK:
|
||||||
Lixfel markierte diese Unterhaltung als gelöst
|
|||||||
|
case WHITE:
|
||||||
|
case GRAY:
|
||||||
|
case DARK_GRAY:
|
||||||
|
default:
|
||||||
|
return BarColor.WHITE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeFromBar(Player player, FightUI.BossBarType type) {
|
||||||
|
barMap.get(type).removePlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addToBar(Player player, FightUI.BossBarType type) {
|
||||||
|
barMap.get(type).addPlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void broadcastBossbar() {
|
||||||
|
// Handled by Spigot BossBarAPI
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ import de.steamwar.fightsystem.states.FightState;
|
|||||||
import de.steamwar.fightsystem.states.OneShotStateDependent;
|
import de.steamwar.fightsystem.states.OneShotStateDependent;
|
||||||
import de.steamwar.fightsystem.utils.EnterHandler;
|
import de.steamwar.fightsystem.utils.EnterHandler;
|
||||||
import de.steamwar.fightsystem.utils.FightStatistics;
|
import de.steamwar.fightsystem.utils.FightStatistics;
|
||||||
|
import de.steamwar.fightsystem.utils.FightUI;
|
||||||
import de.steamwar.fightsystem.utils.TechHider;
|
import de.steamwar.fightsystem.utils.TechHider;
|
||||||
import de.steamwar.fightsystem.winconditions.*;
|
import de.steamwar.fightsystem.winconditions.*;
|
||||||
import de.steamwar.sql.EventFight;
|
import de.steamwar.sql.EventFight;
|
||||||
@ -80,13 +81,13 @@ public class FightSystem extends JavaPlugin {
|
|||||||
new NormalJoin();
|
new NormalJoin();
|
||||||
new RankedJoin();
|
new RankedJoin();
|
||||||
new PersonalKitCreator();
|
new PersonalKitCreator();
|
||||||
new FightScoreboard();
|
|
||||||
new ArrowStopper();
|
new ArrowStopper();
|
||||||
new ArrowPickup();
|
new ArrowPickup();
|
||||||
|
|
||||||
new EnterHandler();
|
new EnterHandler();
|
||||||
new TechHider();
|
new TechHider();
|
||||||
new FightWorld();
|
new FightWorld();
|
||||||
|
new FightUI();
|
||||||
|
|
||||||
new WinconditionAllDead();
|
new WinconditionAllDead();
|
||||||
new WinconditionCaptainDead();
|
new WinconditionCaptainDead();
|
||||||
@ -129,8 +130,8 @@ public class FightSystem extends JavaPlugin {
|
|||||||
new LiveRecorder();
|
new LiveRecorder();
|
||||||
new FileRecorder();
|
new FileRecorder();
|
||||||
|
|
||||||
new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> FightSystem.broadcast("§aDer Kampf beginnt!"));
|
new OneShotStateDependent(ArenaMode.AntiReplay, FightState.PreRunning, () -> FightUI.addSubtitle("§7Kits verteilt"));
|
||||||
new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> FightSystem.broadcast("§aArena freigegeben!"));
|
new OneShotStateDependent(ArenaMode.AntiReplay, FightState.Running, () -> FightUI.addSubtitle("§aArena freigegeben"));
|
||||||
new OneShotStateDependent(ArenaMode.AntiTest, FightState.Running, FightStatistics::start);
|
new OneShotStateDependent(ArenaMode.AntiTest, FightState.Running, FightStatistics::start);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -182,12 +183,12 @@ public class FightSystem extends JavaPlugin {
|
|||||||
FightState.setFightState(FightState.RUNNING);
|
FightState.setFightState(FightState.RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setSpectateState(FightTeam winFightTeam, String windescription) {
|
public static void setSpectateState(FightTeam winFightTeam, String windescription, String subtitle) {
|
||||||
if(!PacketProcessor.isReplaying()){
|
if(!PacketProcessor.isReplaying()){
|
||||||
if(winFightTeam != null) {
|
if(winFightTeam != null) {
|
||||||
FightSystem.broadcast("§aDas Team " + winFightTeam.getColoredName() + " §ahat gewonnen!");
|
FightUI.printWin(winFightTeam.getPrefix() + "Sieg " + winFightTeam.getName(), subtitle);
|
||||||
} else {
|
} else {
|
||||||
FightSystem.broadcast("§aKein Team hat gewonnen!");
|
FightUI.printWin("§7Unentschieden", subtitle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,6 @@ public class Commands {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
p.sendMessage(FightSystem.PREFIX + "§aDu bist Team " + team.getColoredName() + " §abeigetreten!");
|
p.sendMessage(FightSystem.PREFIX + "§aDu bist Team " + team.getColoredName() + " §abeigetreten!");
|
||||||
team.broadcast(FightSystem.PREFIX + "§aDer Spieler §e" + p.getName() + " §aist dem Team beigetreten!");
|
|
||||||
team.addMember(p);
|
team.addMember(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +124,7 @@ public class Commands {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
p.sendMessage(FightSystem.PREFIX + "§aDu hast die Einladung von " + team.getColoredName() + " §aabgelehnt!");
|
p.sendMessage(FightSystem.PREFIX + "§aDu hast die Einladung von " + team.getColoredName() + " §aabgelehnt!");
|
||||||
team.broadcast(FightSystem.PREFIX + "§cDer Spieler §e" + p.getName() + " §chat die Einladung abgelehnt!");
|
team.broadcast("§e" + p.getName() + " §chat die Einladung abgelehnt");
|
||||||
team.getInvited().remove(p);
|
team.getInvited().remove(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,9 +74,9 @@ public class GUI {
|
|||||||
inv.setItem(2, Material.GLASS, "§7POST_SCHEM_SETUP", (ClickType click) -> FightSystem.setPostSchemState());
|
inv.setItem(2, Material.GLASS, "§7POST_SCHEM_SETUP", (ClickType click) -> FightSystem.setPostSchemState());
|
||||||
inv.setItem(3, Material.GLASS, "§ePRE_RUNNING", (ClickType click) -> FightSystem.setPreRunningState());
|
inv.setItem(3, Material.GLASS, "§ePRE_RUNNING", (ClickType click) -> FightSystem.setPreRunningState());
|
||||||
inv.setItem(4, Material.GLASS, "§eRUNNING", (ClickType click) -> FightSystem.setRunningState());
|
inv.setItem(4, Material.GLASS, "§eRUNNING", (ClickType click) -> FightSystem.setRunningState());
|
||||||
inv.setItem(5, Material.GLASS, "§7SPECTATE Blue", (ClickType click) -> FightSystem.setSpectateState(Fight.getBlueTeam(), "operator"));
|
inv.setItem(5, Material.GLASS, "§7SPECTATE Blue", (ClickType click) -> FightSystem.setSpectateState(Fight.getBlueTeam(), "operator", null));
|
||||||
inv.setItem(6, Material.GLASS, "§7SPECTATE Red", (ClickType click) -> FightSystem.setSpectateState(Fight.getRedTeam(), "operator"));
|
inv.setItem(6, Material.GLASS, "§7SPECTATE Red", (ClickType click) -> FightSystem.setSpectateState(Fight.getRedTeam(), "operator", null));
|
||||||
inv.setItem(7, Material.GLASS, "§7SPECTATE Tie", (ClickType click) -> FightSystem.setSpectateState(null, "operator"));
|
inv.setItem(7, Material.GLASS, "§7SPECTATE Tie", (ClickType click) -> FightSystem.setSpectateState(null, "operator", null));
|
||||||
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
||||||
inv.open();
|
inv.open();
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ public class LockschemCommand implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
Schematic.getSchemFromDB(fightTeam.getSchematic()).setSchemType(SchematicType.Normal);
|
Schematic.getSchemFromDB(fightTeam.getSchematic()).setSchemType(SchematicType.Normal);
|
||||||
player.sendMessage(FightSystem.PREFIX + "Schematic von " + fightTeam.getColoredName() + " §cgesperrt!");
|
player.sendMessage(FightSystem.PREFIX + "Schematic von " + fightTeam.getColoredName() + " §cgesperrt!");
|
||||||
fightTeam.broadcast(FightSystem.PREFIX + "§cDie Schematic wurde von " + player.getName() + " gesperrt!");
|
fightTeam.broadcast("§cDie Schematic wurde von " + player.getName() + " gesperrt");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,15 +33,12 @@ public class WinCommand implements CommandExecutor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(args[0].equalsIgnoreCase(Fight.getBlueTeam().getName())){
|
if(args[0].equalsIgnoreCase("tie")){
|
||||||
FightSystem.broadcast("§cDer Kampfleiter hat den Kampf entschieden!");
|
FightSystem.setSpectateState(null, "Referee", "§7Kampfleiterentscheidung");
|
||||||
FightSystem.setSpectateState(Fight.getBlueTeam(), "Referee");
|
}else if(args[0].equalsIgnoreCase(Fight.getBlueTeam().getName())){
|
||||||
|
FightSystem.setSpectateState(Fight.getBlueTeam(), "Referee", "§7Kampfleiterentscheidung");
|
||||||
}else if(args[0].equalsIgnoreCase(Fight.getRedTeam().getName())){
|
}else if(args[0].equalsIgnoreCase(Fight.getRedTeam().getName())){
|
||||||
Lixfel markierte diese Unterhaltung als gelöst
YoyoNow
hat
Was wird passieren, wenn ein team tie heißt? dann kannst du kein tie mehr machen! Was wird passieren, wenn ein team tie heißt? dann kannst du kein tie mehr machen!
|
|||||||
FightSystem.broadcast("§cDer Kampfleiter hat den Kampf entschieden!");
|
FightSystem.setSpectateState(Fight.getRedTeam(), "Referee", "§7Kampfleiterentscheidung");
|
||||||
FightSystem.setSpectateState(Fight.getRedTeam(), "Referee");
|
|
||||||
}else if(args[0].equalsIgnoreCase("tie")){
|
|
||||||
FightSystem.broadcast("§cDer Kampfleiter hat den Kampf entschieden!");
|
|
||||||
FightSystem.setSpectateState(null, "Referee");
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import de.steamwar.fightsystem.FightSystem;
|
|||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.listener.BasicListener;
|
import de.steamwar.fightsystem.listener.BasicListener;
|
||||||
import de.steamwar.fightsystem.record.GlobalRecorder;
|
import de.steamwar.fightsystem.record.GlobalRecorder;
|
||||||
|
import de.steamwar.fightsystem.utils.FightUI;
|
||||||
import de.steamwar.fightsystem.utils.SWSound;
|
import de.steamwar.fightsystem.utils.SWSound;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
@ -86,7 +87,7 @@ public abstract class Countdown {
|
|||||||
countdown.show();
|
countdown.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
FightSystem.broadcast("§aBeide Teams waren damit einverstanden, zum nächsten Event zu beschleunigen!");
|
FightUI.addSubtitle("§7Sprung zum nächsten Ereignis");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void broadcast(String message){
|
private void broadcast(String message){
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.countdown;
|
package de.steamwar.fightsystem.countdown;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.utils.SWSound;
|
import de.steamwar.fightsystem.utils.SWSound;
|
||||||
|
|
||||||
public class TimeOverCountdown extends Countdown {
|
public class TimeOverCountdown extends Countdown {
|
||||||
@ -39,7 +38,6 @@ public class TimeOverCountdown extends Countdown {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void countdownFinished() {
|
public void countdownFinished() {
|
||||||
FightSystem.broadcast("§aZeit abgelaufen!");
|
|
||||||
timeOver.run();
|
timeOver.run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public class FightSchematic extends StateDependent {
|
|||||||
try {
|
try {
|
||||||
clipboard = schem.load();
|
clipboard = schem.load();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
team.broadcast(FightSystem.PREFIX + "§cSchematic konnte nicht geladen werden!");
|
team.broadcast("§cSchematic konnte nicht geladen werden");
|
||||||
Bukkit.getLogger().log(Level.SEVERE, e, () -> "Couldn't load Schematic " + schem.getSchemName());
|
Bukkit.getLogger().log(Level.SEVERE, e, () -> "Couldn't load Schematic " + schem.getSchemName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,8 @@ import de.steamwar.fightsystem.utils.*;
|
|||||||
import de.steamwar.inventory.SWItem;
|
import de.steamwar.inventory.SWItem;
|
||||||
import de.steamwar.sql.Schematic;
|
import de.steamwar.sql.Schematic;
|
||||||
import de.steamwar.sql.SteamwarUser;
|
import de.steamwar.sql.SteamwarUser;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -42,6 +44,7 @@ import org.bukkit.scoreboard.NameTagVisibility;
|
|||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
|
||||||
public class FightTeam {
|
public class FightTeam {
|
||||||
@ -184,7 +187,14 @@ public class FightTeam {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void broadcast(String message) {
|
public void broadcast(String message) {
|
||||||
players.forEach((player, fp) -> player.sendMessage(message));
|
BaseComponent[] msg = TextComponent.fromLegacyText(message);
|
||||||
|
players.forEach((player, fp) -> BountifulWrapper.impl.toActionbar(player, msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void broadcastChat(String message) {
|
||||||
|
FightSystem.getPlugin().getLogger().log(Level.INFO, message);
|
||||||
|
BaseComponent[] msg = TextComponent.fromLegacyText(message);
|
||||||
|
players.forEach((player, fp) -> BountifulWrapper.impl.toChat(player, msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMember(Player player) {
|
public void addMember(Player player) {
|
||||||
@ -210,6 +220,8 @@ public class FightTeam {
|
|||||||
|
|
||||||
if(isLeaderless())
|
if(isLeaderless())
|
||||||
setLeader(fightPlayer);
|
setLeader(fightPlayer);
|
||||||
|
else
|
||||||
|
FightUI.addSubtitle("§a§l» " + prefix + player.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePlayer(Player player) {
|
public void removePlayer(Player player) {
|
||||||
@ -220,8 +232,10 @@ public class FightTeam {
|
|||||||
players.remove(player);
|
players.remove(player);
|
||||||
team.removeEntry(player.getName());
|
team.removeEntry(player.getName());
|
||||||
|
|
||||||
|
FightUI.addSubtitle("§c§l« " + prefix + player.getName());
|
||||||
|
|
||||||
if(fightPlayer.equals(leader))
|
if(fightPlayer.equals(leader))
|
||||||
setLeader(null);
|
removeLeader();
|
||||||
|
|
||||||
GlobalRecorder.getInstance().entityDespawns(player);
|
GlobalRecorder.getInstance().entityDespawns(player);
|
||||||
Fight.setPlayerGamemode(player, GameMode.SPECTATOR);
|
Fight.setPlayerGamemode(player, GameMode.SPECTATOR);
|
||||||
@ -247,17 +261,16 @@ public class FightTeam {
|
|||||||
return leader;
|
return leader;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLeader(FightPlayer leader) {
|
private void removeLeader() {
|
||||||
if (leader == null) {
|
this.leader = null;
|
||||||
this.leader = null;
|
if(!players.isEmpty()) {
|
||||||
if(!players.isEmpty()) {
|
setLeader(players.values().iterator().next());
|
||||||
setLeader(players.values().iterator().next());
|
}else if(FightState.getFightState() != FightState.PRE_LEADER_SETUP && !ArenaMode.RankedEvent.contains(Config.mode)){
|
||||||
FightSystem.broadcast("§aDer Spieler §e" + this.leader.getPlayer().getName() + " §aist nun Leader von Team " + getColoredName() + "§a!");
|
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), FightSystem::setPreLeaderState, 1);
|
||||||
}else if(FightState.getFightState() != FightState.PRE_LEADER_SETUP && !ArenaMode.RankedEvent.contains(Config.mode)){
|
|
||||||
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), FightSystem::setPreLeaderState, 1);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setLeader(FightPlayer leader) {
|
||||||
PersonalKitCreator.closeIfInKitCreator(leader.getPlayer());
|
PersonalKitCreator.closeIfInKitCreator(leader.getPlayer());
|
||||||
|
|
||||||
this.leader = leader;
|
this.leader = leader;
|
||||||
@ -265,6 +278,8 @@ public class FightTeam {
|
|||||||
if(ready)
|
if(ready)
|
||||||
setReady(false);
|
setReady(false);
|
||||||
|
|
||||||
|
FightUI.addSubtitle("§a§l» " + prefix + "Leader " + leader.getPlayer().getName());
|
||||||
|
|
||||||
Optional<Integer> maxRank = Schematic.getSchemsOfType(leader.getPlayer().getUniqueId(), Config.SchematicType).stream().map(Schematic::getRank).max(Integer::compare);
|
Optional<Integer> maxRank = Schematic.getSchemsOfType(leader.getPlayer().getUniqueId(), Config.SchematicType).stream().map(Schematic::getRank).max(Integer::compare);
|
||||||
if(Config.RanksEnabled)
|
if(Config.RanksEnabled)
|
||||||
schemRank = maxRank.orElse(1);
|
schemRank = maxRank.orElse(1);
|
||||||
@ -329,40 +344,40 @@ public class FightTeam {
|
|||||||
|
|
||||||
public void setSchem(Schematic schematic){
|
public void setSchem(Schematic schematic){
|
||||||
this.schematic.setSchematic(schematic);
|
this.schematic.setSchematic(schematic);
|
||||||
broadcast(FightSystem.PREFIX + "§7Das §e" + Config.GameName + " " + schematic.getSchemName() + " §7wird für den Kampf verwendet!");
|
broadcast("§e" + Config.GameName + " " + schematic.getSchemName() + " §7gewählt");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setReady(boolean ready) {
|
public void setReady(boolean ready) {
|
||||||
Player l = leader.getPlayer();
|
Player l = leader.getPlayer();
|
||||||
|
|
||||||
if(!schematic.hasSchematic()){
|
if(!schematic.hasSchematic()){
|
||||||
l.sendMessage(FightSystem.PREFIX + "§cZuerst muss eine Schematic gewählt sein!");
|
BountifulWrapper.impl.toActionbar(l, TextComponent.fromLegacyText("§cZuerst muss eine Schematic gewählt sein!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.ready = ready;
|
this.ready = ready;
|
||||||
if(ready) {
|
if(ready) {
|
||||||
l.getInventory().setItem(4, new ItemBuilder(SWItem.getDye(8), (short) 8).removeAllAttributs().addEnchantment(Enchantment.DURABILITY,1 ).setDisplayName("§aBereit").build());
|
l.getInventory().setItem(4, new ItemBuilder(SWItem.getDye(8), (short) 8).removeAllAttributs().addEnchantment(Enchantment.DURABILITY,1 ).setDisplayName("§aBereit").build());
|
||||||
broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit!");
|
broadcast("§aTeam bereit");
|
||||||
if(Fight.getOpposite(this).isReady() || ArenaMode.SoloLeader.contains(Config.mode))
|
if(Fight.getOpposite(this).isReady() || ArenaMode.SoloLeader.contains(Config.mode))
|
||||||
FightSystem.setPreRunningState();
|
FightSystem.setPreRunningState();
|
||||||
} else {
|
} else {
|
||||||
l.getInventory().setItem(4, new ItemBuilder(SWItem.getDye(10), (short) 10).removeAllAttributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
|
l.getInventory().setItem(4, new ItemBuilder(SWItem.getDye(10), (short) 10).removeAllAttributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
|
||||||
broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit!");
|
broadcast("§c§mTeam bereit");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void skip(){
|
public void skip(){
|
||||||
this.skip = !skip;
|
this.skip = !skip;
|
||||||
if(skip){
|
if(skip){
|
||||||
broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit, zum nächsten Event zu beschleunigen!");
|
broadcast("§aBeschleunigung zum nächsten Event");
|
||||||
if(Fight.getOpposite(this).skip || Config.test()){
|
if(Fight.getOpposite(this).skip || Config.test()){
|
||||||
skip = false;
|
skip = false;
|
||||||
Fight.getOpposite(this).skip = false;
|
Fight.getOpposite(this).skip = false;
|
||||||
Countdown.skip();
|
Countdown.skip();
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit, zum nächsten Event zu beschleunigen!");
|
broadcast("§c§mBeschleunigung zum nächsten Event");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,19 +405,21 @@ public class FightTeam {
|
|||||||
return spawn;
|
return spawn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getCurrentHearts() {
|
||||||
|
return players.values().stream().filter(FightPlayer::isLiving).mapToDouble(fp -> fp.getPlayer().getHealth()).sum();
|
||||||
|
}
|
||||||
|
|
||||||
public double getHeartRatio(){
|
public double getHeartRatio(){
|
||||||
int maximumHearts = 0;
|
int maximumHearts = players.size() * 20;
|
||||||
double currentHearts = 0;
|
return maximumHearts != 0 ? getCurrentHearts() / maximumHearts : 0;
|
||||||
for(FightPlayer fightPlayer : players.values()){
|
}
|
||||||
maximumHearts += 20;
|
|
||||||
if(!fightPlayer.isLiving())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
currentHearts += fightPlayer.getPlayer().getHealth();
|
public int getPlayerCount() {
|
||||||
}
|
return players.size();
|
||||||
|
}
|
||||||
|
|
||||||
assert maximumHearts != 0;
|
public int getAlivePlayers() {
|
||||||
return currentHearts / maximumHearts;
|
return (int) players.values().stream().filter(FightPlayer::isLiving).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChatColor getColor() {
|
public ChatColor getColor() {
|
||||||
|
@ -36,6 +36,8 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class Chat implements Listener {
|
public class Chat implements Listener {
|
||||||
|
|
||||||
public Chat(){
|
public Chat(){
|
||||||
@ -51,7 +53,7 @@ public class Chat implements Listener {
|
|||||||
if(fightTeam != null) {
|
if(fightTeam != null) {
|
||||||
String teamName = fightTeam.getColoredName();
|
String teamName = fightTeam.getColoredName();
|
||||||
if(message.startsWith(Config.TeamChatDetection)) {
|
if(message.startsWith(Config.TeamChatDetection)) {
|
||||||
fightTeam.broadcast(teamName + " " + player.getName() + "» " + message.substring(1));
|
fightTeam.broadcastChat(teamName + " " + player.getName() + "» " + message.substring(1));
|
||||||
} else {
|
} else {
|
||||||
broadcastChat(teamName + " " + player.getName() + "§8» §7" + message);
|
broadcastChat(teamName + " " + player.getName() + "§8» §7" + message);
|
||||||
}
|
}
|
||||||
@ -66,6 +68,7 @@ public class Chat implements Listener {
|
|||||||
|
|
||||||
private void broadcastChat(String message) {
|
private void broadcastChat(String message) {
|
||||||
GlobalRecorder.getInstance().chat(message);
|
GlobalRecorder.getInstance().chat(message);
|
||||||
|
FightSystem.getPlugin().getLogger().log(Level.INFO, message);
|
||||||
BaseComponent[] msg = TextComponent.fromLegacyText(message);
|
BaseComponent[] msg = TextComponent.fromLegacyText(message);
|
||||||
for(Player p : Bukkit.getOnlinePlayers())
|
for(Player p : Bukkit.getOnlinePlayers())
|
||||||
BountifulWrapper.impl.toChat(p, msg);
|
BountifulWrapper.impl.toChat(p, msg);
|
||||||
|
@ -19,18 +19,9 @@
|
|||||||
|
|
||||||
package de.steamwar.fightsystem.listener;
|
package de.steamwar.fightsystem.listener;
|
||||||
|
|
||||||
import de.steamwar.core.TPSWatcher;
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
import de.steamwar.fightsystem.countdown.Countdown;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
|
||||||
import de.steamwar.fightsystem.record.GlobalRecorder;
|
|
||||||
import de.steamwar.fightsystem.record.PacketProcessor;
|
|
||||||
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.states.StateDependentTask;
|
|
||||||
import de.steamwar.fightsystem.winconditions.PrintableWincondition;
|
|
||||||
import de.steamwar.fightsystem.winconditions.Wincondition;
|
|
||||||
import de.steamwar.scoreboard.SWScoreboard;
|
import de.steamwar.scoreboard.SWScoreboard;
|
||||||
import de.steamwar.scoreboard.ScoreboardCallback;
|
import de.steamwar.scoreboard.ScoreboardCallback;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -40,7 +31,8 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
|||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.scoreboard.Scoreboard;
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.HashMap;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class FightScoreboard implements Listener, ScoreboardCallback {
|
public class FightScoreboard implements Listener, ScoreboardCallback {
|
||||||
|
|
||||||
@ -48,23 +40,21 @@ public class FightScoreboard implements Listener, ScoreboardCallback {
|
|||||||
return Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
|
return Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Set<FightState> fullScoreboard = EnumSet.of(FightState.RUNNING, FightState.SPECTATE);
|
|
||||||
private static FightScoreboard scoreboard;
|
private static FightScoreboard scoreboard;
|
||||||
|
|
||||||
public static FightScoreboard getScoreboard(){
|
public static FightScoreboard getScoreboard(){
|
||||||
|
if(scoreboard == null)
|
||||||
|
scoreboard = new FightScoreboard();
|
||||||
return scoreboard;
|
return scoreboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int index = 0;
|
|
||||||
|
|
||||||
private String title = "";
|
private String title = "";
|
||||||
private final HashMap<String, Integer> scores = new HashMap<>();
|
private final HashMap<String, Integer> scores = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
public FightScoreboard(){
|
private FightScoreboard(){
|
||||||
new StateDependentListener(ArenaMode.AntiReplay, FightState.All, this);
|
new StateDependentListener(ArenaMode.Replay, FightState.All, this);
|
||||||
new StateDependentTask(ArenaMode.AntiReplay, FightState.All, this::updateScoreboard, 0, 20);
|
Bukkit.getOnlinePlayers().forEach(player -> SWScoreboard.createScoreboard(player, this));
|
||||||
scoreboard = this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -77,63 +67,13 @@ public class FightScoreboard implements Listener, ScoreboardCallback {
|
|||||||
SWScoreboard.removeScoreboard(event.getPlayer());
|
SWScoreboard.removeScoreboard(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generalScoreboard(){
|
|
||||||
setTitle("§eKampf");
|
|
||||||
List<String> scoreList = new ArrayList<>();
|
|
||||||
|
|
||||||
Countdown timeOverCountdown = Wincondition.getTimeOverCountdown();
|
|
||||||
if(timeOverCountdown != null){
|
|
||||||
int fightTime = timeOverCountdown.getTimeLeft();
|
|
||||||
if (fightTime >= 60)
|
|
||||||
scoreList.add("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s");
|
|
||||||
else
|
|
||||||
scoreList.add("§7Zeit: §a" + fightTime + "s");
|
|
||||||
}
|
|
||||||
|
|
||||||
scoreList.add("§7TPS: §e" + TPSWatcher.getTPS());
|
|
||||||
|
|
||||||
if(fullScoreboard.contains(FightState.getFightState())){
|
|
||||||
for(PrintableWincondition wincondition : Wincondition.getPrintableWinconditions()){
|
|
||||||
scoreList.add(wincondition.getDisplay(Fight.getRedTeam()));
|
|
||||||
scoreList.add(wincondition.getDisplay(Fight.getBlueTeam()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int value = scoreList.size();
|
|
||||||
for(String score : scoreList){
|
|
||||||
addScore(score, value--);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void teamScoreboard(FightTeam fightTeam){
|
|
||||||
fightTeam.getPlayers().forEach(fp -> {
|
|
||||||
if(fp.isLiving())
|
|
||||||
addScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) Math.ceil(fp.getPlayer().getHealth()));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateScoreboard() {
|
|
||||||
if(PacketProcessor.isReplaying())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((index++ / 5) % 2 == 0) {
|
|
||||||
generalScoreboard();
|
|
||||||
} else {
|
|
||||||
setTitle(Fight.getBlueTeam().getColoredName() + " " + Fight.getRedTeam().getColoredName());
|
|
||||||
teamScoreboard(Fight.getBlueTeam());
|
|
||||||
teamScoreboard(Fight.getRedTeam());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTitle(String t) {
|
public void setTitle(String t) {
|
||||||
scores.clear();
|
scores.clear();
|
||||||
title = t;
|
title = t;
|
||||||
GlobalRecorder.getInstance().scoreboardTitle(t);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addScore(String string, int i) {
|
public void addScore(String string, int i) {
|
||||||
scores.put(string, i);
|
scores.put(string, i);
|
||||||
GlobalRecorder.getInstance().scoreboardData(string, i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -24,10 +24,11 @@ import de.steamwar.fightsystem.FightSystem;
|
|||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.record.GlobalRecorder;
|
|
||||||
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.utils.FightUI;
|
||||||
import de.steamwar.fightsystem.utils.SWSound;
|
import de.steamwar.fightsystem.utils.SWSound;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -51,9 +52,9 @@ public class IngameDeath implements Listener {
|
|||||||
if(team == null)
|
if(team == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FightSystem.broadcast("§cDer Spieler " + team.getPrefix() + player.getName() + " §cist gestorben!");
|
FightUI.addSubtitle(team.getPrefix() + player.getName() + " §7ist gestorben");
|
||||||
Fight.playSound(SWSound.ENTITY_WITHER_DEATH.getSound(), 100.0F, 1.0F);
|
Fight.playSound(SWSound.ENTITY_WITHER_DEATH.getSound(), 100.0F, 1.0F);
|
||||||
team.getFightPlayer(player).setOut();
|
Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
@ -66,10 +67,10 @@ public class IngameDeath implements Listener {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
FightPlayer fightPlayer = team.getFightPlayer(player);
|
FightPlayer fightPlayer = team.getFightPlayer(player);
|
||||||
if(fightPlayer.isLiving()) {
|
if(!fightPlayer.isLiving())
|
||||||
FightSystem.broadcast("§cDer Spieler " + team.getPrefix() + player.getName() + " §chat den Kampf verlassen!");
|
return;
|
||||||
team.getFightPlayer(player).setOut();
|
|
||||||
GlobalRecorder.getInstance().entityDespawns(player);
|
FightUI.addSubtitle(team.getPrefix() + player.getName() + " §7hat den Kampf verlassen");
|
||||||
}
|
Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> team.getFightPlayer(player).setOut());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ public class Recording implements Listener {
|
|||||||
GlobalRecorder.getInstance().entityMoves(e.getPlayer());
|
GlobalRecorder.getInstance().entityMoves(e.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onPlayerDeath(PlayerDeathEvent e){
|
public void onPlayerDeath(PlayerDeathEvent e){
|
||||||
if(isNotSent(e.getEntity()))
|
if(isNotSent(e.getEntity()))
|
||||||
return;
|
return;
|
||||||
@ -149,6 +149,14 @@ public class Recording implements Listener {
|
|||||||
GlobalRecorder.getInstance().entityDespawns(e.getEntity());
|
GlobalRecorder.getInstance().entityDespawns(e.getEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onPlayerQuit(PlayerQuitEvent e){
|
||||||
|
if(isNotSent(e.getPlayer()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
GlobalRecorder.getInstance().entityDespawns(e.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onBlockPhysics(BlockPhysicsEvent e){
|
public void onBlockPhysics(BlockPhysicsEvent e){
|
||||||
if(FlatteningWrapper.impl.doRecord(e))
|
if(FlatteningWrapper.impl.doRecord(e))
|
||||||
|
@ -30,10 +30,7 @@ import de.steamwar.fightsystem.fight.FightTeam;
|
|||||||
import de.steamwar.fightsystem.fight.FreezeWorld;
|
import de.steamwar.fightsystem.fight.FreezeWorld;
|
||||||
import de.steamwar.fightsystem.listener.BasicListener;
|
import de.steamwar.fightsystem.listener.BasicListener;
|
||||||
import de.steamwar.fightsystem.listener.FightScoreboard;
|
import de.steamwar.fightsystem.listener.FightScoreboard;
|
||||||
import de.steamwar.fightsystem.utils.BlockIdWrapper;
|
import de.steamwar.fightsystem.utils.*;
|
||||||
import de.steamwar.fightsystem.utils.BountifulWrapper;
|
|
||||||
import de.steamwar.fightsystem.utils.TechHider;
|
|
||||||
import de.steamwar.fightsystem.utils.WorldOfColorWrapper;
|
|
||||||
import de.steamwar.sql.Schematic;
|
import de.steamwar.sql.Schematic;
|
||||||
import de.steamwar.sql.Team;
|
import de.steamwar.sql.Team;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
@ -112,6 +109,9 @@ public class PacketProcessor {
|
|||||||
packetDecoder[0xb4] = () -> pasteEmbeddedSchem(Fight.getRedTeam());
|
packetDecoder[0xb4] = () -> pasteEmbeddedSchem(Fight.getRedTeam());
|
||||||
packetDecoder[0xc0] = this::scoreboardTitle;
|
packetDecoder[0xc0] = this::scoreboardTitle;
|
||||||
packetDecoder[0xc1] = this::scoreboardData;
|
packetDecoder[0xc1] = this::scoreboardData;
|
||||||
|
packetDecoder[0xc2] = this::bossBar;
|
||||||
|
packetDecoder[0xc3] = this::subtitle;
|
||||||
|
packetDecoder[0xc4] = this::printWin;
|
||||||
packetDecoder[0xef] = source::readUTF;
|
packetDecoder[0xef] = source::readUTF;
|
||||||
packetDecoder[0xff] = this::tick;
|
packetDecoder[0xff] = this::tick;
|
||||||
|
|
||||||
@ -373,11 +373,33 @@ public class PacketProcessor {
|
|||||||
FightScoreboard.getScoreboard().addScore(key, value);
|
FightScoreboard.getScoreboard().addScore(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void bossBar() throws IOException {
|
||||||
|
double leftBlueProgress = source.readDouble();
|
||||||
|
double leftRedProgress = source.readDouble();
|
||||||
|
String leftBlueText = source.readUTF();
|
||||||
|
String leftRedText = source.readUTF();
|
||||||
|
|
||||||
|
FightUI.getInstance().setBossbar(leftBlueProgress, leftRedProgress, leftBlueText, leftRedText);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void subtitle() throws IOException {
|
||||||
|
String subtitle = source.readUTF();
|
||||||
|
|
||||||
|
FightUI.addSubtitle(subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void printWin() throws IOException {
|
||||||
|
String title = source.readUTF();
|
||||||
|
String subtitle = source.readUTF();
|
||||||
|
|
||||||
|
FightUI.printWin(title, subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
private void endReplay(){
|
private void endReplay(){
|
||||||
REntity.dieAll();
|
REntity.dieAll();
|
||||||
freezer.disable();
|
freezer.disable();
|
||||||
if(Config.replayserver() || ArenaMode.AntiReplay.contains(Config.mode)) {
|
if(Config.replayserver() || ArenaMode.AntiReplay.contains(Config.mode)) {
|
||||||
FightSystem.setSpectateState(null, "Replay ends");
|
FightSystem.setSpectateState(null, "Replay ends", null);
|
||||||
}else{
|
}else{
|
||||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cReplay beendet");
|
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cReplay beendet");
|
||||||
new EventSpectateCountdown().enable();
|
new EventSpectateCountdown().enable();
|
||||||
|
@ -102,7 +102,7 @@ public interface Recorder {
|
|||||||
* BlockPacket (0x30) + pos int, byte, int + int BlockState
|
* BlockPacket (0x30) + pos int, byte, int + int BlockState
|
||||||
* ParticlePacket (0x31) + double x, y, z + string particleType
|
* ParticlePacket (0x31) + double x, y, z + string particleType
|
||||||
* SoundPacket (0x32) + int x, y, z + string soundType + string soundCategory + float volume, pitch
|
* SoundPacket (0x32) + int x, y, z + string soundType + string soundCategory + float volume, pitch
|
||||||
* ShortBlockPacket (0x33) + pos relative to ArenaMinX,ArenaMinZ byte, byte, byte + short BlockState
|
* DEPRECATED ShortBlockPacket (0x33) + pos relative to ArenaMinX,ArenaMinZ byte, byte, byte + short BlockState
|
||||||
* SoundAtPlayerPacket (0x34) + string (soundType, soundCategory) + float volume, pitch
|
* SoundAtPlayerPacket (0x34) + string (soundType, soundCategory) + float volume, pitch
|
||||||
* ShortBlockPacket (0x35) + pos relative to ArenaMinX,BluePasteY,ArenaMinZ byte, byte, byte + short BlockState
|
* ShortBlockPacket (0x35) + pos relative to ArenaMinX,BluePasteY,ArenaMinZ byte, byte, byte + short BlockState
|
||||||
*
|
*
|
||||||
@ -117,8 +117,11 @@ public interface Recorder {
|
|||||||
* BlueEmbeddedSchemPacket (0xB3) + int blueSchemId + gzipt NBT blob
|
* BlueEmbeddedSchemPacket (0xB3) + int blueSchemId + gzipt NBT blob
|
||||||
* RedEmbeddedSchemPacket (0xB4) + int redSchemId + gzipt NBT blob
|
* RedEmbeddedSchemPacket (0xB4) + int redSchemId + gzipt NBT blob
|
||||||
*
|
*
|
||||||
* ScoreboardTitlePacket (0xC0) + String scoreboardTitle
|
* DEPRECATED ScoreboardTitlePacket (0xC0) + String scoreboardTitle
|
||||||
* ScoreboardDataPacket (0xC1) + String key + int value
|
* DEPRECATED ScoreboardDataPacket (0xC1) + String key + int value
|
||||||
|
* BossBarPacket (0xC2) + double leftBlueProgress, leftRedProgress + String leftBlueText, leftRedText
|
||||||
|
* SubtitlePacket (0xC3) + String subtitle
|
||||||
|
* PrintWinPacket (0xC4) + String title, subtitle
|
||||||
*
|
*
|
||||||
* CommentPacket (0xfe) + String comment
|
* CommentPacket (0xfe) + String comment
|
||||||
* TickPacket (0xff)
|
* TickPacket (0xff)
|
||||||
@ -265,12 +268,16 @@ public interface Recorder {
|
|||||||
write(embedId, schemId, buffer.toByteArray());
|
write(embedId, schemId, buffer.toByteArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
default void scoreboardTitle(String title){
|
default void bossBar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText) {
|
||||||
write(0xc0, title);
|
write(0xc2, leftBlueProgress, leftRedProgress, leftBlueText, leftRedText);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void scoreboardData(String key, int value){
|
default void subtitle(String subtitle) {
|
||||||
write(0xc1, key, value);
|
write(0xc3, subtitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
default void printWin(String title, String subtitle) {
|
||||||
|
write(0xc4, title, subtitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
default void tick(){
|
default void tick(){
|
||||||
|
@ -28,6 +28,12 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class StateDependentCountdown extends StateDependent {
|
public class StateDependentCountdown extends StateDependent {
|
||||||
|
|
||||||
|
private static Countdown mainCountdown = null;
|
||||||
|
|
||||||
|
public static Countdown getMainCountdown() {
|
||||||
|
return mainCountdown;
|
||||||
|
}
|
||||||
|
|
||||||
private final Countdown countdown;
|
private final Countdown countdown;
|
||||||
|
|
||||||
public StateDependentCountdown(Set<ArenaMode> mode, Set<FightState> states, Countdown countdown) {
|
public StateDependentCountdown(Set<ArenaMode> mode, Set<FightState> states, Countdown countdown) {
|
||||||
@ -48,11 +54,14 @@ public class StateDependentCountdown extends StateDependent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
|
mainCountdown = countdown;
|
||||||
countdown.enable();
|
countdown.enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disable() {
|
public void disable() {
|
||||||
countdown.disable();
|
countdown.disable();
|
||||||
|
if(mainCountdown == countdown)
|
||||||
|
mainCountdown = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,5 +57,10 @@ public class BountifulWrapper {
|
|||||||
void setTeleportPacketPosition(Object packet, double x, double y, double z);
|
void setTeleportPacketPosition(Object packet, double x, double y, double z);
|
||||||
void setSpawnPacketUUID(Object packet, UUID uuid);
|
void setSpawnPacketUUID(Object packet, UUID uuid);
|
||||||
void setEquipmentPacketSlot(Object packet, String slot);
|
void setEquipmentPacketSlot(Object packet, String slot);
|
||||||
|
|
||||||
|
void setBossbar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText);
|
||||||
|
void removeFromBar(Player player, FightUI.BossBarType type);
|
||||||
|
void addToBar(Player player, FightUI.BossBarType type);
|
||||||
|
void broadcastBossbar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
213
FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java
Normale Datei
213
FightSystem_Core/src/de/steamwar/fightsystem/utils/FightUI.java
Normale Datei
@ -0,0 +1,213 @@
|
|||||||
|
/*
|
||||||
|
This file is a part of the SteamWar software.
|
||||||
|
|
||||||
|
Copyright (C) 2021 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.utils;
|
||||||
|
|
||||||
|
import de.steamwar.core.TPSWatcher;
|
||||||
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
|
import de.steamwar.fightsystem.Config;
|
||||||
|
import de.steamwar.fightsystem.FightSystem;
|
||||||
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
|
import de.steamwar.fightsystem.record.GlobalRecorder;
|
||||||
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
|
import de.steamwar.fightsystem.states.StateDependentCountdown;
|
||||||
|
import de.steamwar.fightsystem.states.StateDependentTask;
|
||||||
|
import de.steamwar.fightsystem.winconditions.Wincondition;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Queue;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class FightUI {
|
||||||
|
|
||||||
|
private static FightUI instance;
|
||||||
|
public static FightUI getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Map<Player, BossBarType> currentBarType = new HashMap<>();
|
||||||
|
|
||||||
|
public FightUI() {
|
||||||
|
new StateDependentTask(ArenaMode.AntiReplay, FightState.All, this::update, 20, 20);
|
||||||
|
new StateDependentTask(ArenaMode.All, FightState.All, this::sendToPlayers, 5, 5);
|
||||||
|
new StateDependentTask(ArenaMode.All, FightState.All, this::tpsWatcher, 20, 20);
|
||||||
|
instance = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update() {
|
||||||
|
final FightTeam blue = Fight.getBlueTeam();
|
||||||
|
final FightTeam red = Fight.getRedTeam();
|
||||||
|
|
||||||
|
double blueHearts = blue.getCurrentHearts();
|
||||||
|
double redHearts = red.getCurrentHearts();
|
||||||
|
double totalHearts = blueHearts + redHearts;
|
||||||
|
if(redHearts == 0.0 || blueHearts == 0.0) {
|
||||||
|
blueHearts = 0.5;
|
||||||
|
redHearts = 0.5;
|
||||||
|
totalHearts = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int timeLeft = StateDependentCountdown.getMainCountdown() != null ? StateDependentCountdown.getMainCountdown().getTimeLeft() : 0;
|
||||||
|
String time = "§7" + (timeLeft/60) + "§8:§7" + (timeLeft%60<10 ? "0" : "") + (timeLeft%60);
|
||||||
|
String bluePlayers = blue.getPrefix() + blue.getAlivePlayers() + "§8/§7" + blue.getPlayerCount();
|
||||||
|
String redPlayers = red.getPrefix() + red.getAlivePlayers() + "§8/§7" + red.getPlayerCount();
|
||||||
|
String redAdditional = Wincondition.getPrintableWinconditions().stream().map(w -> w.getDisplay(red)).collect(Collectors.joining(" "));
|
||||||
|
String blueAdditional = Wincondition.getPrintableWinconditions().stream().map(w -> w.getDisplay(blue)).collect(Collectors.joining(" "));
|
||||||
|
|
||||||
|
Generator generator;
|
||||||
|
switch(FightState.getFightState()){
|
||||||
|
case PRE_LEADER_SETUP:
|
||||||
|
generator = (l, r, lP, rP, lW, rW) -> "§7Warten auf Teamleader";
|
||||||
|
break;
|
||||||
|
case PRE_SCHEM_SETUP:
|
||||||
|
generator = (l, r, lP, rP, lW, rW) -> l.getColoredName() + " §7Schemauswahl " + time + " " + r.getColoredName();
|
||||||
|
break;
|
||||||
|
case POST_SCHEM_SETUP:
|
||||||
|
generator = (l, r, lP, rP, lW, rW) -> l.getColoredName() + " " + lP + " §7Vorbereitung " + time + " " + rP + " " + r.getColoredName();
|
||||||
|
break;
|
||||||
|
case PRE_RUNNING:
|
||||||
|
generator = (l, r, lP, rP, lW, rW) -> l.getColoredName() + " " + lP + " §7Kampfbeginn in " + time + " " + rP + " " + r.getColoredName();
|
||||||
|
break;
|
||||||
|
case RUNNING:
|
||||||
|
generator = (l, r, lP, rP, lW, rW) -> l.getColoredName() + " " + lP + " " + lW + " " + time + " " + rW + " " + rP + " " + r.getColoredName();
|
||||||
|
break;
|
||||||
|
case SPECTATE:
|
||||||
|
default:
|
||||||
|
generator = (l, r, lP, rP, lW, rW) -> l.getColoredName() + " §7Kampf vorbei " + time + " " + r.getColoredName();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
setBossbar(
|
||||||
|
blueHearts / totalHearts, redHearts / totalHearts,
|
||||||
|
generator.gen(blue, red, bluePlayers, redPlayers, blueAdditional, redAdditional),
|
||||||
|
generator.gen(red, blue, redPlayers, bluePlayers, redAdditional, blueAdditional)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private interface Generator {
|
||||||
|
String gen(FightTeam l, FightTeam r, String lPlayers, String rPlayers, String lWinconditions, String rWinconditions);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBossbar(double leftBlueProgress, double leftRedProgress, String leftBlueText, String leftRedText) {
|
||||||
|
GlobalRecorder.getInstance().bossBar(leftBlueProgress, leftRedProgress, leftBlueText, leftRedText);
|
||||||
|
BountifulWrapper.impl.setBossbar(leftBlueProgress, leftRedProgress, leftBlueText, leftRedText);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BossBarType bossBarType(Player player) {
|
||||||
|
return currentBarType.get(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendToPlayers() {
|
||||||
|
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||||
|
BossBarType type = BossBarType.byAngle(CraftbukkitWrapper.impl.headRotation(player));
|
||||||
|
BossBarType current = currentBarType.get(player);
|
||||||
|
|
||||||
|
if(type != current) {
|
||||||
|
if(current != null)
|
||||||
|
BountifulWrapper.impl.removeFromBar(player, current);
|
||||||
|
BountifulWrapper.impl.addToBar(player, type);
|
||||||
|
currentBarType.put(player, type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
BountifulWrapper.impl.broadcastBossbar();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tpsWatcher() {
|
||||||
|
double tps = TPSWatcher.getTPS();
|
||||||
|
if(tps < 15.0) {
|
||||||
|
BaseComponent[] message = TextComponent.fromLegacyText("§c" + tps + " §7TPS");
|
||||||
|
Bukkit.getOnlinePlayers().forEach(player -> BountifulWrapper.impl.toActionbar(player, message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BossBarType {
|
||||||
|
BLUE_LEFT(345, 165),
|
||||||
|
RED_LEFT(165, 345);
|
||||||
|
|
||||||
|
private static final boolean blueNegZ = Config.blueNegZ();
|
||||||
|
|
||||||
|
private final double minAngle;
|
||||||
|
private final double maxAngle;
|
||||||
|
|
||||||
|
BossBarType(double minAngle, double maxAngle) {
|
||||||
|
this.minAngle = minAngle;
|
||||||
|
this.maxAngle = maxAngle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static BossBarType byAngle(double angle) {
|
||||||
|
if(blueNegZ)
|
||||||
|
angle += 180;
|
||||||
|
angle = ((angle % 360) + 360) % 360;
|
||||||
|
|
||||||
|
for(BossBarType type : values()) {
|
||||||
|
if(type.minAngle < type.maxAngle ? type.minAngle <= angle && angle < type.maxAngle : type.minAngle < angle || angle <= type.maxAngle)
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new SecurityException("No boss bar for angle " + angle + " found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static final Queue<String> queue = new LinkedList<>();
|
||||||
|
private static boolean subtitleScheduled = false;
|
||||||
|
|
||||||
|
public static void printWin(String title, String winreason) {
|
||||||
|
queue.clear();
|
||||||
|
|
||||||
|
FightSystem.getPlugin().getLogger().log(Level.INFO, title + " " + winreason);
|
||||||
|
GlobalRecorder.getInstance().printWin(title, winreason);
|
||||||
|
Bukkit.getOnlinePlayers().forEach(p -> {
|
||||||
|
p.resetTitle();
|
||||||
|
WorldOfColorWrapper.impl.sendTitle(p, title, winreason, 5, 40, 5);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addSubtitle(String message) {
|
||||||
|
if(FightState.Spectate.contains(FightState.getFightState()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
queue.add(message);
|
||||||
|
GlobalRecorder.getInstance().subtitle(message);
|
||||||
|
FightSystem.getPlugin().getLogger().log(Level.INFO, message);
|
||||||
|
|
||||||
|
if(!subtitleScheduled)
|
||||||
|
printSubtitle();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printSubtitle() {
|
||||||
|
if(queue.isEmpty()) {
|
||||||
|
subtitleScheduled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String message = queue.poll();
|
||||||
|
|
||||||
|
Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, "", message, 5, 40, 5));
|
||||||
|
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), FightUI::printSubtitle, 100);
|
||||||
|
subtitleScheduled = true;
|
||||||
|
}
|
||||||
|
}
|
@ -24,6 +24,7 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scoreboard.Team;
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
public class WorldOfColorWrapper {
|
public class WorldOfColorWrapper {
|
||||||
@ -36,5 +37,7 @@ public class WorldOfColorWrapper {
|
|||||||
boolean isInBlock(Arrow e);
|
boolean isInBlock(Arrow e);
|
||||||
|
|
||||||
void playSound(Location location, Sound sound, String soundCategory, float volume, float pitch);
|
void playSound(Location location, Sound sound, String soundCategory, float volume, float pitch);
|
||||||
|
|
||||||
|
void sendTitle(Player player, String title, String subtitle, int start, int hold, int stop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -34,8 +33,7 @@ public class EventTeamOffWincondition extends Wincondition{
|
|||||||
@Override
|
@Override
|
||||||
public void enable() {
|
public void enable() {
|
||||||
if(Fight.getBlueTeam().allPlayersOut() && Fight.getRedTeam().allPlayersOut()){
|
if(Fight.getBlueTeam().allPlayersOut() && Fight.getRedTeam().allPlayersOut()){
|
||||||
FightSystem.broadcast("§cBeide Teams sind offline!");
|
win(null, "§7Beide Teams offline");
|
||||||
win(null);
|
|
||||||
}else{
|
}else{
|
||||||
teamOff(Fight.getBlueTeam());
|
teamOff(Fight.getBlueTeam());
|
||||||
teamOff(Fight.getRedTeam());
|
teamOff(Fight.getRedTeam());
|
||||||
@ -51,8 +49,7 @@ public class EventTeamOffWincondition extends Wincondition{
|
|||||||
|
|
||||||
private void teamOff(FightTeam team){
|
private void teamOff(FightTeam team){
|
||||||
if(team.allPlayersOut()){
|
if(team.allPlayersOut()){
|
||||||
FightSystem.broadcast("§cDas Team " + team.getColoredName() + " §cist offline!");
|
win(Fight.getOpposite(team), team.getColoredName() + " §7offline");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.ArenaMode;
|
import de.steamwar.fightsystem.ArenaMode;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -45,8 +44,7 @@ public class RankedPlayerLeftWincondition extends Wincondition implements Listen
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(team.isPlayerLeader(player)) {
|
if(team.isPlayerLeader(player)) {
|
||||||
FightSystem.broadcast("§cDer Leader von " + team.getColoredName() + " §chat den Kampf verlassen!");
|
win(Fight.getOpposite(team), team.getPrefix() + team.getLeader().getPlayer().getName() + " §7hat den Kampf verlassen");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,17 +47,12 @@ public abstract class Wincondition {
|
|||||||
return timeOverCountdown.getCountdown();
|
return timeOverCountdown.getCountdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void win(FightTeam team){
|
protected void win(FightTeam team, String subtitle){
|
||||||
FightSystem.setSpectateState(team, windescription);
|
FightSystem.setSpectateState(team, windescription, subtitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected FightTeam isTarget(Player player){
|
protected FightTeam isTarget(Player player){
|
||||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
return Fight.getPlayerTeam(player);
|
||||||
if(fightTeam == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
fightTeam.getFightPlayer(player).setOut();
|
|
||||||
return fightTeam;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PrintableWincondition> getPrintableWinconditions(){
|
public static List<PrintableWincondition> getPrintableWinconditions(){
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
|
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependentListener;
|
import de.steamwar.fightsystem.states.StateDependentListener;
|
||||||
@ -39,22 +39,24 @@ public class WinconditionAllDead extends Wincondition implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||||
handleDeath(event.getEntity().getPlayer(), " §cist gestorben!");
|
handleDeath(event.getEntity().getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||||
handleDeath(event.getPlayer(), " §chat den Kampf verlassen!");
|
handleDeath(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDeath(Player player, String message){
|
private void handleDeath(Player player){
|
||||||
FightTeam team = isTarget(player);
|
FightTeam team = isTarget(player);
|
||||||
if(team == null)
|
if(team == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(team.allPlayersOut()) {
|
for(FightPlayer fp : team.getPlayers()) {
|
||||||
FightSystem.broadcast("§cDer letzte Spieler aus " + team.getColoredName() + message);
|
if(fp.isLiving() && fp.getPlayer() != player)
|
||||||
win(Fight.getOpposite(team));
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
win(Fight.getOpposite(team), team.getPrefix() + "Alle Spieler kampfunfähig");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -39,22 +38,21 @@ public class WinconditionCaptainDead extends Wincondition implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||||
handleDeath(event.getEntity().getPlayer(), " §cist gestorben!");
|
handleDeath(event.getEntity().getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||||
handleDeath(event.getPlayer(), " §chat den Kampf verlassen!");
|
handleDeath(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDeath(Player player, String message){
|
private void handleDeath(Player player){
|
||||||
FightTeam team = isTarget(player);
|
FightTeam team = isTarget(player);
|
||||||
if(team == null)
|
if(team == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(team.isPlayerLeader(player)) {
|
if(team.isPlayerLeader(player)) {
|
||||||
FightSystem.broadcast("§cDer Leader von " + team.getColoredName() + message);
|
win(Fight.getOpposite(team), team.getPrefix() + team.getLeader().getPlayer().getName() + " kampfunfähig");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -40,14 +39,11 @@ public class WinconditionHeartRatioTimeout extends Wincondition {
|
|||||||
double redHeartRatio = Fight.getRedTeam().getHeartRatio();
|
double redHeartRatio = Fight.getRedTeam().getHeartRatio();
|
||||||
|
|
||||||
if(blueHeartRatio > redHeartRatio) {
|
if(blueHeartRatio > redHeartRatio) {
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen, und Team " + Fight.getBlueTeam().getColoredName() + " §chatte mehr verbleibende Leben!");
|
win(Fight.getBlueTeam(), Fight.getBlueTeam().getPrefix() + "Mehr verbleibende Leben");
|
||||||
win(Fight.getBlueTeam());
|
|
||||||
}else if(blueHeartRatio < redHeartRatio){
|
}else if(blueHeartRatio < redHeartRatio){
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen, und Team " + Fight.getRedTeam().getColoredName() + " §chatte mehr verbleibende Leben!");
|
win(Fight.getRedTeam(), Fight.getRedTeam().getPrefix() + "Mehr verbleibende Leben");
|
||||||
win(Fight.getRedTeam());
|
|
||||||
}else{
|
}else{
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen, und beide Teams hatten die gleiche Anzahl an verbleibenden Leben!");
|
win(null, "§7Zeit abgelaufen");
|
||||||
win(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -64,7 +63,7 @@ public class WinconditionPercentSystem extends Wincondition implements Listener,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDisplay(FightTeam team) {
|
public String getDisplay(FightTeam team) {
|
||||||
return team.getPrefix() + "Schaden: " + (Math.round(100.0 * getPercent(team)) / 100.0) + "%";
|
return team.getPrefix() + (Math.round(100.0 * getPercent(team)) / 100.0) + "§8%";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -92,8 +91,7 @@ public class WinconditionPercentSystem extends Wincondition implements Listener,
|
|||||||
destroyedBlocks += event.blockList().size();
|
destroyedBlocks += event.blockList().size();
|
||||||
percent = (double)destroyedBlocks * 100 / volume;
|
percent = (double)destroyedBlocks * 100 / volume;
|
||||||
if(percent >= Config.PercentWin) {
|
if(percent >= Config.PercentWin) {
|
||||||
FightSystem.broadcast("§cTeam " + team.getColoredName() + " §chat zu viel Schaden erlitten!");
|
win(Fight.getOpposite(team), team.getColoredName() + " §7zu beschädigt");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -40,14 +39,11 @@ public class WinconditionPercentTimeout extends Wincondition {
|
|||||||
double redPercent = Wincondition.percentWincondition.getPercent(Fight.getRedTeam());
|
double redPercent = Wincondition.percentWincondition.getPercent(Fight.getRedTeam());
|
||||||
|
|
||||||
if(bluePercent > redPercent) {
|
if(bluePercent > redPercent) {
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen, und Team " + Fight.getRedTeam().getColoredName() + " §chat weniger Schaden erlitten!");
|
win(Fight.getRedTeam(), Fight.getRedTeam().getColoredName() + " §7weniger beschädigt");
|
||||||
win(Fight.getRedTeam());
|
|
||||||
}else if(bluePercent < redPercent){
|
}else if(bluePercent < redPercent){
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen, und Team " + Fight.getBlueTeam().getColoredName() + " §chat weniger Schaden erlitten!");
|
win(Fight.getBlueTeam(), Fight.getBlueTeam().getColoredName() + " §7weniger beschädigt");
|
||||||
win(Fight.getBlueTeam());
|
|
||||||
}else{
|
}else{
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen, und beide Teams hatten gleichen Schaden erlitten!");
|
win(null, "§7Zeit abgelaufen");
|
||||||
win(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
@ -70,28 +69,25 @@ public class WinconditionPoints extends Wincondition implements PrintableWincond
|
|||||||
int bluePoints = teamMap.get(Fight.getBlueTeam()).getPoints();
|
int bluePoints = teamMap.get(Fight.getBlueTeam()).getPoints();
|
||||||
|
|
||||||
if(bluePoints < redPoints) {
|
if(bluePoints < redPoints) {
|
||||||
FightSystem.broadcast("§cDas Team " + Fight.getRedTeam().getColoredName() + " §chat mehr Punkte!");
|
win(Fight.getRedTeam(), Fight.getRedTeam().getPrefix() + " hat mehr Punkte");
|
||||||
win(Fight.getRedTeam());
|
|
||||||
}else if(bluePoints > redPoints){
|
}else if(bluePoints > redPoints){
|
||||||
FightSystem.broadcast("§cDas Team " + Fight.getBlueTeam().getColoredName() + " §chat mehr Punkte!");
|
win(Fight.getBlueTeam(), Fight.getBlueTeam().getPrefix() + " hat mehr Punkte");
|
||||||
win(Fight.getBlueTeam());
|
|
||||||
}else{
|
}else{
|
||||||
FightSystem.broadcast("§cBeide Teams haben gleich viele Punkte!");
|
win(null, "§7Gleicher Punktestand");
|
||||||
win(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||||
handleDeath(event.getEntity().getPlayer(), " §cist gestorben!");
|
handleDeath(event.getEntity().getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||||
handleDeath(event.getPlayer(), " §chat den Kampf verlassen!");
|
handleDeath(event.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDeath(Player player, String message){
|
private void handleDeath(Player player){
|
||||||
FightTeam team = isTarget(player);
|
FightTeam team = isTarget(player);
|
||||||
if(team == null)
|
if(team == null)
|
||||||
return;
|
return;
|
||||||
@ -99,7 +95,6 @@ public class WinconditionPoints extends Wincondition implements PrintableWincond
|
|||||||
TeamPoints enemy = teamMap.get(Fight.getOpposite(team));
|
TeamPoints enemy = teamMap.get(Fight.getOpposite(team));
|
||||||
if(team.isPlayerLeader(player)) {
|
if(team.isPlayerLeader(player)) {
|
||||||
enemy.points += 500;
|
enemy.points += 500;
|
||||||
FightSystem.broadcast("§cDer Leader von " + team.getColoredName() + message);
|
|
||||||
timeOver();
|
timeOver();
|
||||||
}else if(team.getPlayers().size() <= 5)
|
}else if(team.getPlayers().size() <= 5)
|
||||||
enemy.points += 300;
|
enemy.points += 300;
|
||||||
@ -110,7 +105,7 @@ public class WinconditionPoints extends Wincondition implements PrintableWincond
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDisplay(FightTeam team) {
|
public String getDisplay(FightTeam team) {
|
||||||
return team.getPrefix() + "Punkte: " + teamMap.get(team).getPoints();
|
return team.getPrefix() + teamMap.get(team).getPoints() + " §8Punkte";
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TeamPoints {
|
private class TeamPoints {
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -57,7 +56,7 @@ public class WinconditionPumpkinTechKO extends Wincondition implements Printable
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDisplay(FightTeam team) {
|
public String getDisplay(FightTeam team) {
|
||||||
return team.getPrefix() + "Kanonen: " + teamMap.get(team).pumpkins;
|
return team.getPrefix() + teamMap.get(team).pumpkins + " §8Kanonen";
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TeamPumpkin {
|
private class TeamPumpkin {
|
||||||
@ -77,8 +76,7 @@ public class WinconditionPumpkinTechKO extends Wincondition implements Printable
|
|||||||
});
|
});
|
||||||
|
|
||||||
if(pumpkins == 0) {
|
if(pumpkins == 0) {
|
||||||
FightSystem.broadcast("§cDas Team " + team.getColoredName() + " §cist Tech K.O.!");
|
win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O.");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ public class WinconditionRelativePercent extends Wincondition implements Printab
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDisplay(FightTeam team) {
|
public String getDisplay(FightTeam team) {
|
||||||
return team.getPrefix() + "Schaden: " + (Math.round(100.0 * getPercent(team)) / 100.0) + "%";
|
return team.getPrefix() + (Math.round(100.0 * getPercent(team)) / 100.0) + "§8%";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TeamPercent extends StateDependent {
|
public static class TeamPercent extends StateDependent {
|
||||||
@ -99,8 +99,7 @@ public class WinconditionRelativePercent extends Wincondition implements Printab
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(getPercent() >= Config.PercentWin){
|
if(getPercent() >= Config.PercentWin){
|
||||||
FightSystem.broadcast("§cTeam " + team.getColoredName() + " §chat zu viel Schaden erlitten!");
|
FightSystem.setSpectateState(Fight.getOpposite(team), "RelativePercent", team.getColoredName() + " §7zu beschädigt");
|
||||||
FightSystem.setSpectateState(Fight.getOpposite(team), "RelativePercent");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,13 +20,12 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.countdown.Countdown;
|
import de.steamwar.fightsystem.countdown.Countdown;
|
||||||
import de.steamwar.fightsystem.utils.SWSound;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependentTask;
|
import de.steamwar.fightsystem.states.StateDependentTask;
|
||||||
|
import de.steamwar.fightsystem.utils.SWSound;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.TNTPrimed;
|
import org.bukkit.entity.TNTPrimed;
|
||||||
@ -121,8 +120,7 @@ public class WinconditionTimeTechKO extends Wincondition {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void countdownFinished() {
|
public void countdownFinished() {
|
||||||
FightSystem.broadcast("§cTeam " + team.getColoredName() + " §chat zu lange nicht geschossen!");
|
win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O.");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
import de.steamwar.fightsystem.states.StateDependentCountdown;
|
import de.steamwar.fightsystem.states.StateDependentCountdown;
|
||||||
@ -35,7 +34,6 @@ public class WinconditionTimeout extends Wincondition {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void timeOver() {
|
protected void timeOver() {
|
||||||
FightSystem.broadcast("§cDie Zeit ist abgelaufen!");
|
win(null, "§7Zeit abgelaufen");
|
||||||
win(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
package de.steamwar.fightsystem.winconditions;
|
package de.steamwar.fightsystem.winconditions;
|
||||||
|
|
||||||
import de.steamwar.fightsystem.Config;
|
import de.steamwar.fightsystem.Config;
|
||||||
import de.steamwar.fightsystem.FightSystem;
|
|
||||||
import de.steamwar.fightsystem.fight.Fight;
|
import de.steamwar.fightsystem.fight.Fight;
|
||||||
import de.steamwar.fightsystem.fight.FightTeam;
|
import de.steamwar.fightsystem.fight.FightTeam;
|
||||||
import de.steamwar.fightsystem.states.FightState;
|
import de.steamwar.fightsystem.states.FightState;
|
||||||
@ -55,7 +54,7 @@ public class WinconditionWaterTechKO extends Wincondition implements PrintableWi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDisplay(FightTeam team) {
|
public String getDisplay(FightTeam team) {
|
||||||
return team.getPrefix() + "Wasser: " + teamMap.get(team).water;
|
return team.getPrefix() + teamMap.get(team).water + " §8Wasser";
|
||||||
}
|
}
|
||||||
|
|
||||||
private class TeamWater {
|
private class TeamWater {
|
||||||
@ -74,8 +73,7 @@ public class WinconditionWaterTechKO extends Wincondition implements PrintableWi
|
|||||||
});
|
});
|
||||||
|
|
||||||
if(water == 0){
|
if(water == 0){
|
||||||
FightSystem.broadcast("§cTeam " + team.getColoredName() + " §cwurde Tech K.O. gesetzt!");
|
win(Fight.getOpposite(team), team.getColoredName() + " ist Tech K.O.");
|
||||||
win(Fight.getOpposite(team));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren
Gibt es keine BarColor.Black?
Nein.