Implementing scoreboard, schematics, items
Signed-off-by: Lixfel <agga-games@gmx.de>
Dieser Commit ist enthalten in:
Ursprung
7e6e4f0312
Commit
6ed7ae0180
@ -6,6 +6,7 @@ import de.steamwar.fightsystem.Config;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.IFightSystem;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.record.RecordSystem;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.utils.*;
|
||||
import de.steamwar.fightsystem.winconditions.RankedPlayerLeftWincondition;
|
||||
@ -236,6 +237,13 @@ public class FightTeam implements IFightTeam{
|
||||
}
|
||||
|
||||
public void pasteSchematic(){
|
||||
if(Config.recording()){
|
||||
if(blue)
|
||||
RecordSystem.blueSchem(schematic.getSchemID());
|
||||
else
|
||||
RecordSystem.redSchem(schematic.getSchemID());
|
||||
}
|
||||
|
||||
FreezeWorld freezer = new FreezeWorld();
|
||||
DyeColor c = ColorConverter.chat2dye(color);
|
||||
EditSession e;
|
||||
|
@ -7,10 +7,7 @@ import de.steamwar.fightsystem.fight.FightPlayer;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.record.RecordSystem;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.SoundCategory;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -19,8 +16,11 @@ import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.player.*;
|
||||
import org.bukkit.event.server.BroadcastMessageEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
@ -103,14 +103,86 @@ public class EventRecordListener extends BasicListener {
|
||||
RecordSystem.sound(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), Sound.ENTITY_GENERIC_EXPLODE.name(), SoundCategory.BLOCKS.name(), 255.0f, 1.0f);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onItem(PlayerItemHeldEvent e){
|
||||
if(isNotSent(e.getPlayer()))
|
||||
return;
|
||||
|
||||
RecordSystem.item(e.getPlayer(), disarmNull(e.getPlayer().getInventory().getItem(e.getNewSlot())), "MAINHAND");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onItemSwap(PlayerSwapHandItemsEvent e){
|
||||
if(isNotSent(e.getPlayer()))
|
||||
return;
|
||||
|
||||
Player player = e.getPlayer();
|
||||
RecordSystem.item(player, disarmNull(e.getMainHandItem()), "MAINHAND");
|
||||
RecordSystem.item(player, disarmNull(e.getOffHandItem()), "OFFHAND");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onInventoryClick(InventoryClickEvent e){
|
||||
Player player = (Player) e.getWhoClicked();
|
||||
if(isNotSent(player))
|
||||
return;
|
||||
|
||||
if(e.getSlotType() != InventoryType.SlotType.ARMOR)
|
||||
return;
|
||||
|
||||
switch(e.getSlot()){
|
||||
case 103:
|
||||
RecordSystem.item(player, disarmNull(e.getCurrentItem()), "HEAD");
|
||||
break;
|
||||
case 102:
|
||||
RecordSystem.item(player, disarmNull(e.getCurrentItem()), "CHEST");
|
||||
break;
|
||||
case 101:
|
||||
RecordSystem.item(player, disarmNull(e.getCurrentItem()), "LEGS");
|
||||
break;
|
||||
case 100:
|
||||
default:
|
||||
RecordSystem.item(player, disarmNull(e.getCurrentItem()), "FEET");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stateChange(FightState state) {
|
||||
if(state == FightState.SPECTATE){
|
||||
if(state == FightState.PRE_RUNNING) {
|
||||
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () -> {
|
||||
setKitItems(Fight.getBlueTeam());
|
||||
setKitItems(Fight.getRedTeam());
|
||||
}, 1);
|
||||
}else if(state == FightState.SPECTATE){
|
||||
despawnTeam(Fight.getRedTeam());
|
||||
despawnTeam(Fight.getBlueTeam());
|
||||
}
|
||||
}
|
||||
|
||||
private void setKitItems(FightTeam team){
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING)
|
||||
return;
|
||||
|
||||
for(FightPlayer fp : team.getPlayers()){
|
||||
if(!fp.isLiving())
|
||||
continue;
|
||||
|
||||
Player player = fp.getPlayer();
|
||||
RecordSystem.item(player, disarmNull(player.getInventory().getItemInMainHand()), "MAINHAND");
|
||||
RecordSystem.item(player, disarmNull(player.getInventory().getItemInOffHand()), "OFFHAND");
|
||||
RecordSystem.item(player, disarmNull(player.getInventory().getHelmet()), "HEAD");
|
||||
RecordSystem.item(player, disarmNull(player.getInventory().getChestplate()), "CHEST");
|
||||
RecordSystem.item(player, disarmNull(player.getInventory().getLeggings()), "LEGS");
|
||||
RecordSystem.item(player, disarmNull(player.getInventory().getBoots()), "FEET");
|
||||
}
|
||||
}
|
||||
|
||||
private ItemStack disarmNull(ItemStack stack){
|
||||
if(stack == null)
|
||||
return new ItemStack(Material.AIR);
|
||||
return stack;
|
||||
}
|
||||
|
||||
private void despawnTeam(FightTeam team){
|
||||
for(FightPlayer player : team.getPlayers()){
|
||||
if(player.isLiving())
|
||||
|
@ -13,6 +13,7 @@ import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
public class RecordSystem {
|
||||
@ -37,9 +38,7 @@ public class RecordSystem {
|
||||
* EntityAnimationPacket (0x04) + int EntityId + byte animation
|
||||
* TNTSpawnPacket (0x05) + int EntityId
|
||||
* EntitySpeedPacket (0x06) + int EntityId + double dx, dy, dz
|
||||
*
|
||||
* TODO (Player-Oriented):
|
||||
* ItemInHandPacket (0x03) + int EntityId
|
||||
* PlayerItemPacket (0x07) + int EntityId + String item + boolean enchanted + String slot
|
||||
* TODO Bow spanning
|
||||
*
|
||||
*
|
||||
@ -49,9 +48,13 @@ public class RecordSystem {
|
||||
* SoundPacket (0x32) + int x, y, z + string soundType + string soundType + float volume, pitch
|
||||
*
|
||||
*
|
||||
* ChatPacket (0xa0) + String message
|
||||
* ActionBarPacket (0xa1) + String message
|
||||
* SystemPacket (0xa2) + String message
|
||||
* ChatPacket (0xA0) + String message
|
||||
* ActionBarPacket (0xA1) + String message
|
||||
* SystemPacket (0xA2) + String message
|
||||
* BlueSchemPacket (0xB0) + int blueSchemId
|
||||
* RedSchemPacket (0xB1) + int redSchemId
|
||||
* ScoreboardTitlePacket (0xC0) + String scoreboardTitle
|
||||
* ScoreboardDataPacket (0xC1) + String key + int value
|
||||
*
|
||||
* TickPacket (0xff)
|
||||
* */
|
||||
@ -116,6 +119,14 @@ public class RecordSystem {
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void item(Player p, ItemStack item, String slot){
|
||||
Recorder.rByte(p.getEntityId());
|
||||
Recorder.rString(item.getType().getKey().toString());
|
||||
Recorder.rBoolean(!item.getEnchantments().isEmpty());
|
||||
Recorder.rString(slot);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void blockChange(BlockPosition pos, int blockState){
|
||||
Recorder.rByte(0x30);
|
||||
Recorder.rInt(pos.getX());
|
||||
@ -147,23 +158,48 @@ public class RecordSystem {
|
||||
}
|
||||
|
||||
public static synchronized void chat(String s) {
|
||||
Recorder.rByte(0xa0);
|
||||
Recorder.rByte(0xA0);
|
||||
Recorder.rString(s);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void actionBar(String s) {
|
||||
Recorder.rByte(0xa1);
|
||||
Recorder.rByte(0xA1);
|
||||
Recorder.rString(s);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void systemChat(String s) {
|
||||
Recorder.rByte(0xa2);
|
||||
Recorder.rByte(0xA2);
|
||||
Recorder.rString(s);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void blueSchem(int schemId) {
|
||||
Recorder.rByte(0xB0);
|
||||
Recorder.rInt(schemId);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void redSchem(int schemId) {
|
||||
Recorder.rByte(0xB1);
|
||||
Recorder.rInt(schemId);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void scoreboardTitle(String title){
|
||||
Recorder.rByte(0xC0);
|
||||
Recorder.rString(title);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void scoreboardData(String key, int value){
|
||||
Recorder.rByte(0xC1);
|
||||
Recorder.rString(key);
|
||||
Recorder.rInt(value);
|
||||
Recorder.flush();
|
||||
}
|
||||
|
||||
public static synchronized void tick(){
|
||||
Recorder.rByte(0xff);
|
||||
Recorder.flush();
|
||||
|
@ -4,6 +4,7 @@ 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.RecordSystem;
|
||||
import de.steamwar.fightsystem.states.FightState;
|
||||
import de.steamwar.fightsystem.winconditions.*;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -55,42 +56,52 @@ public class FightScoreboard {
|
||||
|
||||
private static void teamScoreboard(FightTeam fightTeam){
|
||||
objective.setDisplayName(fightTeam.getColoredName());
|
||||
if(Config.recording())
|
||||
RecordSystem.scoreboardTitle(fightTeam.getColoredName());
|
||||
fightTeam.getPlayers().forEach(fp -> {
|
||||
if(fp.isLiving())
|
||||
objective.getScore(fightTeam.getPrefix() + fp.getPlayer().getName()).setScore((int) fp.getPlayer().getHealth());
|
||||
setScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) fp.getPlayer().getHealth());
|
||||
});
|
||||
}
|
||||
|
||||
private static void generalScoreboard(){
|
||||
objective.setDisplayName("§6Kampf");
|
||||
objective.setDisplayName("§eKampf");
|
||||
if(Config.recording())
|
||||
RecordSystem.scoreboardTitle("§eKampf");
|
||||
if (Config.Timeout || Config.Points || Config.HeartRatioTimeout) {
|
||||
int fightTime = FightSystem.getFightTime();
|
||||
if (fightTime >= 60)
|
||||
objective.getScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s").setScore(3);
|
||||
setScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s", 3);
|
||||
else
|
||||
objective.getScore("§7Zeit: §a" + fightTime + "s").setScore(3);
|
||||
setScore("§7Zeit: §a" + fightTime + "s", 3);
|
||||
}
|
||||
|
||||
if(fullScoreboard.contains(FightSystem.getFightState())){
|
||||
if (Config.PercentSystem){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%").setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%").setScore(0);
|
||||
setScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%", 1);
|
||||
setScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%", 0);
|
||||
}else if(Config.WaterTechKO){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater()).setScore(0);
|
||||
setScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater(),1);
|
||||
setScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater(), 0);
|
||||
}else if(Config.RelativePercent){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%").setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%").setScore(0);
|
||||
setScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%", 1);
|
||||
setScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%", 0);
|
||||
}else if(Config.Points){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints()).setScore(0);
|
||||
setScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints(), 1);
|
||||
setScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints(), 0);
|
||||
}else if(Config.PumpkinTechKO){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins()).setScore(0);
|
||||
setScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins(), 1);
|
||||
setScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins(), 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void setScore(String key, int value){
|
||||
objective.getScore(key).setScore(value);
|
||||
if(Config.recording())
|
||||
RecordSystem.scoreboardData(key, value);
|
||||
}
|
||||
|
||||
private static FightTeam getIndexDisplay() {
|
||||
index++;
|
||||
if(index == 1)
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren