Format code

This commit is contained in:
2026-05-17 10:08:06 +02:00
parent d110df924e
commit 5125453406
152 changed files with 752 additions and 814 deletions
@@ -183,8 +183,7 @@ public class Loadtimer implements Listener {
long ignTime = ignite - activate; long ignTime = ignite - activate;
long explTime = explode - ignTime - activate; long explTime = explode - ignTime - activate;
if (explTime < 0) if (explTime < 0) explTime = loadTime;
explTime = loadTime;
int finalAllTnt = allTnt; int finalAllTnt = allTnt;
long finalExplTime = explTime; long finalExplTime = explTime;
@@ -150,8 +150,9 @@ public class TraceManager implements Listener {
.map(Map.Entry::getKey) .map(Map.Entry::getKey)
.findFirst() .findFirst()
.orElse(null); .orElse(null);
if (traceId == null) if (traceId == null) {
throw new RuntimeException("Trace not found while trying to remove see (c978eb98-b0b2-4009-91d8-acfa34e2831a)"); throw new RuntimeException("Trace not found while trying to remove see (c978eb98-b0b2-4009-91d8-acfa34e2831a)");
}
traces.remove(traceId); traces.remove(traceId);
trace.hide(); trace.hide();
trace.getRecordsSaveFile().delete(); trace.getRecordsSaveFile().delete();
@@ -57,8 +57,9 @@ public class AFKStopperListener implements Listener {
if (to == null) return; if (to == null) return;
Location from = event.getFrom(); Location from = event.getFrom();
if (from.getPitch() != to.getPitch() || from.getYaw() != to.getYaw()) if (from.getPitch() != to.getPitch() || from.getYaw() != to.getYaw()) {
lastMovementTime = System.currentTimeMillis(); lastMovementTime = System.currentTimeMillis();
}
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
@@ -995,8 +995,7 @@ public final class GameModeConfig<M, W> {
public String convertToRealMapName(String map) { public String convertToRealMapName(String map) {
for (String m : Server.Maps) { for (String m : Server.Maps) {
if (m.equalsIgnoreCase(map)) if (m.equalsIgnoreCase(map)) return m;
return m;
} }
return null; return null;
} }
@@ -133,18 +133,19 @@ public abstract class AI {
public Vector getPosition() { public Vector getPosition() {
Location location = entity.getLocation(); Location location = entity.getLocation();
Region extend = team.getExtendRegion(); Region extend = team.getExtendRegion();
if (Fight.getUnrotated() == team) if (Fight.getUnrotated() == team) {
return new Vector( return new Vector(
location.getX() - extend.getMinX(), location.getX() - extend.getMinX(),
location.getY() - team.getSchemRegion().getMinY(), location.getY() - team.getSchemRegion().getMinY(),
location.getZ() - extend.getMinZ() location.getZ() - extend.getMinZ()
); );
else } else {
return new Vector( return new Vector(
extend.getMaxX() - location.getX(), extend.getMaxX() - location.getX(),
location.getY() - team.getSchemRegion().getMinY(), location.getY() - team.getSchemRegion().getMinY(),
extend.getMaxZ() - location.getZ() extend.getMaxZ() - location.getZ()
); );
}
} }
public Material getBlock(Vector pos) { public Material getBlock(Vector pos) {
@@ -170,8 +171,7 @@ public abstract class AI {
} }
Block block = location.getBlock(); Block block = location.getBlock();
if (block.getType() == Material.AIR) if (block.getType() == Material.AIR) block.setType(Material.TNT);
block.setType(Material.TNT);
} }
}); });
} }
@@ -308,8 +308,7 @@ public abstract class AI {
} }
} }
if (!queue.isEmpty() && --queue.peek().delay == 0) if (!queue.isEmpty() && --queue.peek().delay == 0) queue.poll().run();
queue.poll().run();
} }
public Location translate(Vector pos) { public Location translate(Vector pos) {
@@ -102,8 +102,7 @@ public class Commands {
} }
static void leaveTeam(Player p) { static void leaveTeam(Player p) {
if (checkSetup(p)) if (checkSetup(p)) return;
return;
FightTeam fightTeam = checkGetTeam(p); FightTeam fightTeam = checkGetTeam(p);
if (fightTeam == null) return; if (fightTeam == null) return;
@@ -112,8 +111,7 @@ public class Commands {
} }
static void kick(Player p, String kicked) { static void kick(Player p, String kicked) {
if (checkSetup(p)) if (checkSetup(p)) return;
return;
FightTeam fightTeam = checkGetTeam(p); FightTeam fightTeam = checkGetTeam(p);
if (fightTeam == null) return; if (fightTeam == null) return;
@@ -128,8 +128,7 @@ public class GUI {
public static void managePlayers(Player p) { public static void managePlayers(Player p) {
List<SWListInv.SWListEntry<UUID>> players = SWListInv.createPlayerList(p.getUniqueId()); List<SWListInv.SWListEntry<UUID>> players = SWListInv.createPlayerList(p.getUniqueId());
FightTeam team = Fight.getPlayerTeam(p); FightTeam team = Fight.getPlayerTeam(p);
if (team == null) if (team == null) return;
return;
players.removeIf(listEntry -> !team.equals(Fight.getPlayerTeam(Bukkit.getPlayer(listEntry.getObject())))); players.removeIf(listEntry -> !team.equals(Fight.getPlayerTeam(Bukkit.getPlayer(listEntry.getObject()))));
players.forEach(listEntry -> listEntry.getItem().setLore(msg.parse("MANAGE_LORE1", p), msg.parse("MANAGE_LORE2", p))); players.forEach(listEntry -> listEntry.getItem().setLore(msg.parse("MANAGE_LORE1", p), msg.parse("MANAGE_LORE2", p)));
SWListInv<UUID> inv = new SWListInv<>(p, msg.parse("MANAGE_TITLE", p), players, (ClickType click, UUID player) -> { SWListInv<UUID> inv = new SWListInv<>(p, msg.parse("MANAGE_TITLE", p), players, (ClickType click, UUID player) -> {
@@ -49,8 +49,9 @@ public class InfoCommand implements CommandExecutor {
if (!SteamwarUser.get(player.getUniqueId()).hasPerm(UserPerm.CHECK)) return false; if (!SteamwarUser.get(player.getUniqueId()).hasPerm(UserPerm.CHECK)) return false;
for (FightTeam team : Fight.teams()) { for (FightTeam team : Fight.teams()) {
if (!team.isLeaderless()) if (!team.isLeaderless()) {
FightSystem.getMessage().send("INFO_LEADER", player, team.getColoredName(), team.getLeader().getEntity().getName()); FightSystem.getMessage().send("INFO_LEADER", player, team.getColoredName(), team.getLeader().getEntity().getName());
}
if (team.getSchematic() != 0) { if (team.getSchematic() != 0) {
SchematicNode schematic = SchematicNode.getSchematicNode(team.getSchematic()); SchematicNode schematic = SchematicNode.getSchematicNode(team.getSchematic());
@@ -136,10 +136,11 @@ public class FightSchematic extends StateDependent {
changeRotation = new Random().nextBoolean(); changeRotation = new Random().nextBoolean();
usedRotate = rotate ^ changeRotation; usedRotate = rotate ^ changeRotation;
} }
if (team.isBlue()) if (team.isBlue()) {
GlobalRecorder.getInstance().blueSchem(schematic, changeRotation); GlobalRecorder.getInstance().blueSchem(schematic, changeRotation);
else } else {
GlobalRecorder.getInstance().redSchem(schematic, changeRotation); GlobalRecorder.getInstance().redSchem(schematic, changeRotation);
}
} }
Bukkit.getScheduler().runTask(FightSystem.getPlugin(), this::paste); Bukkit.getScheduler().runTask(FightSystem.getPlugin(), this::paste);
@@ -71,8 +71,7 @@ public class Recording implements Listener {
private static final Random random = new Random(); private static final Random random = new Random();
public static ItemStack disarmNull(ItemStack stack) { public static ItemStack disarmNull(ItemStack stack) {
if (stack == null) if (stack == null) return new ItemStack(Material.AIR);
return new ItemStack(Material.AIR);
return stack; return stack;
} }
@@ -121,8 +120,7 @@ public class Recording implements Listener {
new StateDependentTask(ArenaMode.AntiReplay, FightState.All, () -> { new StateDependentTask(ArenaMode.AntiReplay, FightState.All, () -> {
GlobalRecorder.getInstance().tick(); GlobalRecorder.getInstance().tick();
if (FightState.getFightState() == FightState.SPECTATE || !GlobalRecorder.getInstance().recording()) if (FightState.getFightState() == FightState.SPECTATE || !GlobalRecorder.getInstance().recording()) return;
return;
iterateOverEntities(primedTnt::isInstance, this::trackEntity); iterateOverEntities(primedTnt::isInstance, this::trackEntity);
}, 1, 1); }, 1, 1);
@@ -139,8 +137,9 @@ public class Recording implements Listener {
private static final Object releaseUseItem = playerDigType.getEnumConstants()[5]; private static final Object releaseUseItem = playerDigType.getEnumConstants()[5];
private Object blockDig(Player p, Object packet) { private Object blockDig(Player p, Object packet) {
if (!isNotSent(p) && blockDigType.get(packet) == releaseUseItem) if (!isNotSent(p) && blockDigType.get(packet) == releaseUseItem) {
GlobalRecorder.getInstance().bowSpan(p, false, false); GlobalRecorder.getInstance().bowSpan(p, false, false);
}
return packet; return packet;
} }
@@ -148,8 +147,9 @@ public class Recording implements Listener {
private Object blockPlace(Player p, Object packet) { private Object blockPlace(Player p, Object packet) {
boolean mainHand = BountifulWrapper.impl.mainHand(packet); boolean mainHand = BountifulWrapper.impl.mainHand(packet);
if (!isNotSent(p) && BountifulWrapper.impl.bowInHand(mainHand, p)) if (!isNotSent(p) && BountifulWrapper.impl.bowInHand(mainHand, p)) {
GlobalRecorder.getInstance().bowSpan(p, true, !mainHand); GlobalRecorder.getInstance().bowSpan(p, true, !mainHand);
}
return packet; return packet;
} }
@@ -160,8 +160,7 @@ public class Recording implements Listener {
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onPlayerMove(PlayerMoveEvent e) { public void onPlayerMove(PlayerMoveEvent e) {
if (isNotSent(e.getPlayer())) if (isNotSent(e.getPlayer())) return;
return;
GlobalRecorder.getInstance().entityMoves(e.getPlayer()); GlobalRecorder.getInstance().entityMoves(e.getPlayer());
} }
@@ -178,66 +177,61 @@ public class Recording implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onBlockPhysics(BlockPhysicsEvent e) { public void onBlockPhysics(BlockPhysicsEvent e) {
if (FlatteningWrapper.impl.doRecord(e)) if (FlatteningWrapper.impl.doRecord(e)) {
GlobalRecorder.getInstance().blockChange(e.getBlock()); GlobalRecorder.getInstance().blockChange(e.getBlock());
}
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onSneak(PlayerToggleSneakEvent e) { public void onSneak(PlayerToggleSneakEvent e) {
if (isNotSent(e.getPlayer())) if (isNotSent(e.getPlayer())) return;
return;
GlobalRecorder.getInstance().playerSneak(e.getPlayer(), e.isSneaking()); GlobalRecorder.getInstance().playerSneak(e.getPlayer(), e.isSneaking());
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onAnimation(PlayerAnimationEvent e) { public void onAnimation(PlayerAnimationEvent e) {
if (isNotSent(e.getPlayer())) if (isNotSent(e.getPlayer())) return;
return;
if (e.getAnimationType() == PlayerAnimationType.ARM_SWING) if (e.getAnimationType() == PlayerAnimationType.ARM_SWING) {
GlobalRecorder.getInstance().entityAnimation(e.getPlayer(), AIR); GlobalRecorder.getInstance().entityAnimation(e.getPlayer(), AIR);
}
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent e) { public void onEntityDamage(EntityDamageEvent e) {
if (!e.getEntityType().isAlive()) if (!e.getEntityType().isAlive()) return;
return;
LivingEntity p = (LivingEntity) e.getEntity(); LivingEntity p = (LivingEntity) e.getEntity();
if (isNotSent(p)) if (isNotSent(p)) return;
return;
GlobalRecorder.getInstance().damageAnimation(p); GlobalRecorder.getInstance().damageAnimation(p);
if (e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK || e.getCause() == EntityDamageEvent.DamageCause.FIRE) if (e.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK || e.getCause() == EntityDamageEvent.DamageCause.FIRE) {
GlobalRecorder.getInstance().setOnFire(p, false); GlobalRecorder.getInstance().setOnFire(p, false);
}
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onEntityCombust(EntityCombustEvent e) { public void onEntityCombust(EntityCombustEvent e) {
if (!e.getEntityType().isAlive()) if (!e.getEntityType().isAlive()) return;
return;
LivingEntity p = (LivingEntity) e.getEntity(); LivingEntity p = (LivingEntity) e.getEntity();
if (isNotSent(p)) if (isNotSent(p)) return;
return;
GlobalRecorder.getInstance().setOnFire(p, false); GlobalRecorder.getInstance().setOnFire(p, false);
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onTNTSpawn(EntitySpawnEvent e) { public void onTNTSpawn(EntitySpawnEvent e) {
if (e.getEntityType() != EntityType.TNT) if (e.getEntityType() != EntityType.TNT) return;
return;
GlobalRecorder.getInstance().tntSpawn(e.getEntity()); GlobalRecorder.getInstance().tntSpawn(e.getEntity());
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onExplosion(EntityExplodeEvent e) { public void onExplosion(EntityExplodeEvent e) {
if (e.getEntityType() != EntityType.TNT) if (e.getEntityType() != EntityType.TNT) return;
return;
Location loc = e.getLocation(); Location loc = e.getLocation();
GlobalRecorder.getInstance().entityDespawns(e.getEntity()); GlobalRecorder.getInstance().entityDespawns(e.getEntity());
@@ -247,28 +241,26 @@ public class Recording implements Listener {
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onItem(PlayerItemHeldEvent e) { public void onItem(PlayerItemHeldEvent e) {
if (isNotSent(e.getPlayer())) if (isNotSent(e.getPlayer())) return;
return;
GlobalRecorder.getInstance().item(e.getPlayer(), disarmNull(e.getPlayer().getInventory().getItem(e.getNewSlot())), "MAINHAND"); GlobalRecorder.getInstance().item(e.getPlayer(), disarmNull(e.getPlayer().getInventory().getItem(e.getNewSlot())), "MAINHAND");
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onProjectileSpawn(ProjectileLaunchEvent e) { public void onProjectileSpawn(ProjectileLaunchEvent e) {
if (e.getEntityType() == EntityType.FIREBALL) if (e.getEntityType() == EntityType.FIREBALL) {
GlobalRecorder.getInstance().fireballSpawn(e.getEntity()); GlobalRecorder.getInstance().fireballSpawn(e.getEntity());
else if (e.getEntityType() == EntityType.ARROW) } else if (e.getEntityType() == EntityType.ARROW) {
GlobalRecorder.getInstance().arrowSpawn(e.getEntity()); GlobalRecorder.getInstance().arrowSpawn(e.getEntity());
}
} }
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onInventoryClick(InventoryClickEvent e) { public void onInventoryClick(InventoryClickEvent e) {
Player player = (Player) e.getWhoClicked(); Player player = (Player) e.getWhoClicked();
if (isNotSent(player)) if (isNotSent(player)) return;
return;
if (e.getSlotType() != InventoryType.SlotType.ARMOR) if (e.getSlotType() != InventoryType.SlotType.ARMOR) return;
return;
switch (e.getSlot()) { switch (e.getSlot()) {
case 103: case 103:
@@ -287,12 +279,10 @@ public class Recording implements Listener {
} }
private void setKitItems(FightTeam team) { private void setKitItems(FightTeam team) {
if (FightState.getFightState() != FightState.PRE_RUNNING) if (FightState.getFightState() != FightState.PRE_RUNNING) return;
return;
for (FightPlayer fp : team.getPlayers()) { for (FightPlayer fp : team.getPlayers()) {
if (!fp.isLiving()) if (!fp.isLiving()) continue;
continue;
fp.ifPlayer(player -> { fp.ifPlayer(player -> {
BountifulWrapper.impl.recordHandItems(player); BountifulWrapper.impl.recordHandItems(player);
@@ -306,8 +296,9 @@ public class Recording implements Listener {
private void despawnTeam(FightTeam team) { private void despawnTeam(FightTeam team) {
for (FightPlayer player : team.getPlayers()) { for (FightPlayer player : team.getPlayers()) {
if (player.isLiving()) if (player.isLiving()) {
GlobalRecorder.getInstance().entityDespawns(player.getEntity()); GlobalRecorder.getInstance().entityDespawns(player.getEntity());
}
} }
} }
@@ -41,8 +41,7 @@ public class SetupQuit implements Listener {
public void handlePlayerQuit(PlayerQuitEvent event) { public void handlePlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
FightTeam team = Fight.getPlayerTeam(player); FightTeam team = Fight.getPlayerTeam(player);
if (team == null) if (team == null) return;
return;
team.removePlayer(player); team.removePlayer(player);
} }
@@ -38,11 +38,11 @@ public class Shutdown implements Listener {
@EventHandler @EventHandler
public void handlePlayerQuit(PlayerQuitEvent event) { public void handlePlayerQuit(PlayerQuitEvent event) {
if (Config.replayserver() || Config.GameModeConfig.Arena.Leaveable) if (Config.replayserver() || Config.GameModeConfig.Arena.Leaveable) return;
return;
//Shutdown server if nobody online //Shutdown server if nobody online
if (Bukkit.getOnlinePlayers().isEmpty() || (Bukkit.getOnlinePlayers().size() == 1 && Bukkit.getOnlinePlayers().contains(event.getPlayer()))) if (Bukkit.getOnlinePlayers().isEmpty() || (Bukkit.getOnlinePlayers().size() == 1 && Bukkit.getOnlinePlayers().contains(event.getPlayer()))) {
Bukkit.shutdown(); Bukkit.shutdown();
}
} }
} }
@@ -57,8 +57,9 @@ public class Spectator implements Listener {
public void handlePlayerJoin(PlayerJoinEvent e) { public void handlePlayerJoin(PlayerJoinEvent e) {
Player player = e.getPlayer(); Player player = e.getPlayer();
if (player.getGameMode() == GameMode.SPECTATOR) if (player.getGameMode() == GameMode.SPECTATOR) {
gameModeChange(player, GameMode.SPECTATOR); gameModeChange(player, GameMode.SPECTATOR);
}
} }
@EventHandler @EventHandler
@@ -70,13 +71,15 @@ public class Spectator implements Listener {
private void gameModeChange(Player player, GameMode gameMode) { private void gameModeChange(Player player, GameMode gameMode) {
if (gameMode == GameMode.SPECTATOR) { if (gameMode == GameMode.SPECTATOR) {
for (Player p : Bukkit.getServer().getOnlinePlayers()) { for (Player p : Bukkit.getServer().getOnlinePlayers()) {
if (p.getUniqueId() != player.getUniqueId()) if (p.getUniqueId() != player.getUniqueId()) {
p.hidePlayer(player); p.hidePlayer(player);
}
} }
} else { } else {
for (Player p : Bukkit.getServer().getOnlinePlayers()) { for (Player p : Bukkit.getServer().getOnlinePlayers()) {
if (p.getUniqueId() != player.getUniqueId()) if (p.getUniqueId() != player.getUniqueId()) {
p.showPlayer(player); p.showPlayer(player);
}
} }
} }
} }
@@ -93,16 +96,17 @@ public class Spectator implements Listener {
continue; continue;
} }
if (Config.isReferee(player)) if (Config.isReferee(player)) continue;
continue;
FightPlayer fightPlayer = Fight.getFightPlayer(player); FightPlayer fightPlayer = Fight.getFightPlayer(player);
if (fightPlayer == null || !fightPlayer.getTeam().getExtendRegion().playerInRegion(player.getLocation())) { if (fightPlayer == null || !fightPlayer.getTeam().getExtendRegion().playerInRegion(player.getLocation())) {
if (pseudoSpectator.add(player)) if (pseudoSpectator.add(player)) {
pseudoSpectator(player, true); pseudoSpectator(player, true);
}
} else { } else {
if (pseudoSpectator.remove(player)) if (pseudoSpectator.remove(player)) {
pseudoSpectator(player, false); pseudoSpectator(player, false);
}
} }
} }
} }
@@ -55,8 +55,9 @@ public class TeamArea implements Listener {
@EventHandler @EventHandler
public void playerJoin(PlayerJoinEvent e) { public void playerJoin(PlayerJoinEvent e) {
Player player = e.getPlayer(); Player player = e.getPlayer();
if (Fight.getPlayerTeam(player) != team && !Config.isReferee(player)) if (Fight.getPlayerTeam(player) != team && !Config.isReferee(player)) {
spectatorBorder.addPlayer(player); spectatorBorder.addPlayer(player);
}
} }
@EventHandler @EventHandler
@@ -74,8 +75,9 @@ public class TeamArea implements Listener {
public void teamLeave(TeamLeaveEvent e) { public void teamLeave(TeamLeaveEvent e) {
FightPlayer fightPlayer = e.getFightPlayer(); FightPlayer fightPlayer = e.getFightPlayer();
fightPlayer.ifPlayer(spectatorBorder::addPlayer); fightPlayer.ifPlayer(spectatorBorder::addPlayer);
if (fightPlayer.getTeam() == team) if (fightPlayer.getTeam() == team) {
fightPlayer.ifPlayer(bordingBorder::removePlayer); fightPlayer.ifPlayer(bordingBorder::removePlayer);
}
} }
@EventHandler @EventHandler
@@ -58,13 +58,13 @@ public class WaterRemover implements Listener {
@EventHandler @EventHandler
public void handleEntitySpawn(EntitySpawnEvent event) { public void handleEntitySpawn(EntitySpawnEvent event) {
if (event.getEntityType() != EntityType.TNT) if (event.getEntityType() != EntityType.TNT) return;
return;
Location location = event.getLocation(); Location location = event.getLocation();
Fight.teams().forEach(team -> { Fight.teams().forEach(team -> {
if (team.getExtendRegion().inRegion(location)) if (team.getExtendRegion().inRegion(location)) {
tnt.put(event.getEntity().getEntityId(), team); tnt.put(event.getEntity().getEntityId(), team);
}
}); });
} }
@@ -98,15 +98,12 @@ public class WaterRemover implements Listener {
private void checkBlock(Block b) { private void checkBlock(Block b) {
//do not remove outside teamareas //do not remove outside teamareas
if (!Config.BlueExtendRegion.inRegion(b) && !Config.RedExtendRegion.inRegion(b)) if (!Config.BlueExtendRegion.inRegion(b) && !Config.RedExtendRegion.inRegion(b)) return;
return;
//checks for water and removes it, if present //checks for water and removes it, if present
if (!FlatteningWrapper.impl.removeWater(b)) if (!FlatteningWrapper.impl.removeWater(b)) return;
return;
if (b.getY() < MIN_Y) if (b.getY() < MIN_Y) return;
return;
checkNeighbours(b); checkNeighbours(b);
} }
@@ -190,10 +190,11 @@ public class PacketProcessor implements Listener {
execSync(() -> { execSync(() -> {
FightTeam winner = null; FightTeam winner = null;
if (team == 0x01) if (team == 0x01) {
winner = Fight.getBlueTeam(); winner = Fight.getBlueTeam();
else if (team == 0x02) } else if (team == 0x02) {
winner = Fight.getRedTeam(); winner = Fight.getRedTeam();
}
FightSystem.setSpectateState(winner, "Replay ends", message.getMsg(), message.getParams()); FightSystem.setSpectateState(winner, "Replay ends", message.getMsg(), message.getParams());
}); });
@@ -248,8 +249,9 @@ public class PacketProcessor implements Listener {
addREntity(entityId, new RPlayer(entityServer, user.getUUID(), user.getUserName(), Config.SpecSpawn)); addREntity(entityId, new RPlayer(entityServer, user.getUUID(), user.getUserName(), Config.SpecSpawn));
team.addEntry(user.getUserName()); team.addEntry(user.getUserName());
if (ArenaMode.Test.contains(Config.mode)) if (ArenaMode.Test.contains(Config.mode)) {
entities.get(entityId).setGlowing(true); entities.get(entityId).setGlowing(true);
}
}); });
} }
@@ -318,8 +320,9 @@ public class PacketProcessor implements Listener {
execSync(() -> { execSync(() -> {
REntity entity = entities.get(entityId); REntity entity = entities.get(entityId);
if (entity != null) if (entity != null) {
entity.setVelocity(dX, dY, dZ); entity.setVelocity(dX, dY, dZ);
}
}); });
} }
@@ -330,8 +333,9 @@ public class PacketProcessor implements Listener {
String slotName = source.readUTF(); String slotName = source.readUTF();
ItemStack stack = new ItemStack(Material.valueOf(item.replace("minecraft:", "").toUpperCase()), 1); ItemStack stack = new ItemStack(Material.valueOf(item.replace("minecraft:", "").toUpperCase()), 1);
if (enchanted) if (enchanted) {
stack.addUnsafeEnchantment(Enchantment.UNBREAKING, 1); stack.addUnsafeEnchantment(Enchantment.UNBREAKING, 1);
}
EquipmentSlot slot; EquipmentSlot slot;
switch (slotName) { switch (slotName) {
@@ -452,8 +456,7 @@ public class PacketProcessor implements Listener {
} }
private void setBlock(int x, int y, int z, int blockState) { private void setBlock(int x, int y, int z, int blockState) {
if (!Config.ArenaRegion.in2dRegion(x, z)) if (!Config.ArenaRegion.in2dRegion(x, z)) return; //Outside of the arena
return; //Outside of the arena
execSync(() -> { execSync(() -> {
BlockIdWrapper.impl.setBlock(Config.world, x, y, z, TechHiderWrapper.ENABLED && hiddenBlockIds.contains(blockState) ? obfuscateWith : blockState); BlockIdWrapper.impl.setBlock(Config.world, x, y, z, TechHiderWrapper.ENABLED && hiddenBlockIds.contains(blockState) ? obfuscateWith : blockState);
@@ -514,8 +517,7 @@ public class PacketProcessor implements Listener {
private void pasteSchem(FightTeam team) throws IOException { private void pasteSchem(FightTeam team) throws IOException {
int schemId = source.readInt(); int schemId = source.readInt();
if (schemId == 0) if (schemId == 0) return;
return;
execSync(() -> team.pasteSchem(SchematicNode.getSchematicNode(schemId))); execSync(() -> team.pasteSchem(SchematicNode.getSchematicNode(schemId)));
} }
@@ -652,8 +654,9 @@ public class PacketProcessor implements Listener {
private void tick() { private void tick() {
execSync(entityServer::tick); execSync(entityServer::tick);
if (!source.async() && !skipToSubtitle) if (!source.async() && !skipToSubtitle) {
tickFinished = true; tickFinished = true;
}
} }
private void process() { private void process() {
@@ -663,8 +666,7 @@ public class PacketProcessor implements Listener {
int packetType = Byte.toUnsignedInt(source.readByte()); int packetType = Byte.toUnsignedInt(source.readByte());
lastPackets.add(packetType); lastPackets.add(packetType);
if (lastPackets.size() > 10) if (lastPackets.size() > 10) lastPackets.remove(0);
lastPackets.remove(0);
PacketParser parser = packetDecoder[packetType]; PacketParser parser = packetDecoder[packetType];
if (parser != null) { if (parser != null) {
@@ -60,10 +60,11 @@ public interface Recorder {
default void enableTeam(FightTeam team) { default void enableTeam(FightTeam team) {
if (FightState.Schem.contains(FightState.getFightState())) { if (FightState.Schem.contains(FightState.getFightState())) {
if (team.isBlue()) if (team.isBlue()) {
blueSchem(team.getSchematic(), false); blueSchem(team.getSchematic(), false);
else } else {
redSchem(team.getSchematic(), false); redSchem(team.getSchematic(), false);
}
} }
if (FightState.AntiSpectate.contains(FightState.getFightState())) { if (FightState.AntiSpectate.contains(FightState.getFightState())) {
@@ -192,8 +193,7 @@ public interface Recorder {
write(0x08, e.getEntityId()); write(0x08, e.getEntityId());
entityMoves(e); entityMoves(e);
entitySpeed(e); entitySpeed(e);
if (e.getFireTicks() > 0) if (e.getFireTicks() > 0) setOnFire(e, true);
setOnFire(e, true);
} }
default void fireballSpawn(Entity e) { default void fireballSpawn(Entity e) {
@@ -339,51 +339,53 @@ public interface Recorder {
} }
default void writeObject(DataOutputStream stream, Object o) throws IOException { default void writeObject(DataOutputStream stream, Object o) throws IOException {
if (o instanceof Boolean) if (o instanceof Boolean) {
stream.writeBoolean((Boolean) o); stream.writeBoolean((Boolean) o);
else if (o instanceof Byte) } else if (o instanceof Byte) {
stream.writeByte((Byte) o); stream.writeByte((Byte) o);
else if (o instanceof Short) } else if (o instanceof Short) {
stream.writeShort((Short) o); stream.writeShort((Short) o);
else if (o instanceof Integer) } else if (o instanceof Integer) {
stream.writeInt((Integer) o); stream.writeInt((Integer) o);
else if (o instanceof Long) } else if (o instanceof Long) {
stream.writeLong((Long) o); stream.writeLong((Long) o);
else if (o instanceof Float) } else if (o instanceof Float) {
stream.writeFloat((Float) o); stream.writeFloat((Float) o);
else if (o instanceof Double) } else if (o instanceof Double) {
stream.writeDouble((Double) o); stream.writeDouble((Double) o);
else if (o instanceof String) } else if (o instanceof String) {
stream.writeUTF((String) o); stream.writeUTF((String) o);
else if (o instanceof byte[]) } else if (o instanceof byte[]) {
stream.write((byte[]) o); stream.write((byte[]) o);
else if (o instanceof Message) } else if (o instanceof Message) {
writeMessage(stream, (Message) o); writeMessage(stream, (Message) o);
else } else {
throw new SecurityException("Undefined write for: " + o.getClass().getName()); throw new SecurityException("Undefined write for: " + o.getClass().getName());
}
} }
default void writeMessage(DataOutputStream stream, Message message) throws IOException { default void writeMessage(DataOutputStream stream, Message message) throws IOException {
stream.writeUTF(message.getMsg()); stream.writeUTF(message.getMsg());
for (Object o : message.getParams()) { for (Object o : message.getParams()) {
if (o instanceof Boolean) if (o instanceof Boolean) {
stream.writeByte(0x01); stream.writeByte(0x01);
else if (o instanceof Byte) } else if (o instanceof Byte) {
stream.writeByte(0x02); stream.writeByte(0x02);
else if (o instanceof Short) } else if (o instanceof Short) {
stream.writeByte(0x03); stream.writeByte(0x03);
else if (o instanceof Integer) } else if (o instanceof Integer) {
stream.writeByte(0x04); stream.writeByte(0x04);
else if (o instanceof Float) } else if (o instanceof Float) {
stream.writeByte(0x05); stream.writeByte(0x05);
else if (o instanceof Double) } else if (o instanceof Double) {
stream.writeByte(0x06); stream.writeByte(0x06);
else if (o instanceof String) } else if (o instanceof String) {
stream.writeByte(0x07); stream.writeByte(0x07);
else if (o instanceof Message) } else if (o instanceof Message) {
stream.writeByte(0x08); stream.writeByte(0x08);
else } else {
throw new SecurityException("Undefined message serialization for: " + o.getClass().getName()); throw new SecurityException("Undefined message serialization for: " + o.getClass().getName());
}
writeObject(stream, o); writeObject(stream, o);
} }
stream.writeByte(0x00); stream.writeByte(0x00);
@@ -55,12 +55,10 @@ public enum FightState {
private static FightState fightState = PRE_LEADER_SETUP; private static FightState fightState = PRE_LEADER_SETUP;
public static void registerStateDependent(IStateDependent stateDependent) { public static void registerStateDependent(IStateDependent stateDependent) {
if (stateDependent.enabled().isEmpty()) if (stateDependent.enabled().isEmpty()) return;
return;
boolean enabled = stateDependent.enabled().contains(fightState); boolean enabled = stateDependent.enabled().contains(fightState);
stateDependentFeatures.put(stateDependent, enabled); stateDependentFeatures.put(stateDependent, enabled);
if (enabled) if (enabled) stateDependent.enable();
stateDependent.enable();
} }
public static void setFightState(FightState state) { public static void setFightState(FightState state) {
@@ -44,8 +44,7 @@ public abstract class StateDependent implements IStateDependent {
} }
public void register() { public void register() {
if (register) if (register) FightState.registerStateDependent(this);
FightState.registerStateDependent(this);
} }
@Override @Override
@@ -65,7 +65,6 @@ public class StateDependentCountdown extends StateDependent {
@Override @Override
public void disable() { public void disable() {
countdown.disable(); countdown.disable();
if (mainCountdown == countdown) if (mainCountdown == countdown) mainCountdown = null;
mainCountdown = null;
} }
} }
@@ -58,8 +58,9 @@ public class BlockIdWrapper {
} }
public void trackEntity(Player player, Entity entity) { public void trackEntity(Player player, Entity entity) {
if (entity instanceof Player) if (entity instanceof Player) {
TinyProtocol.instance.sendPacket(player, ProtocolWrapper.playerInfoPacketConstructor(ProtocolWrapper.PlayerInfoAction.REMOVE, new GameProfile(entity.getUniqueId(), entity.getName()), GameMode.CREATIVE)); TinyProtocol.instance.sendPacket(player, ProtocolWrapper.playerInfoPacketConstructor(ProtocolWrapper.PlayerInfoAction.REMOVE, new GameProfile(entity.getUniqueId(), entity.getName()), GameMode.CREATIVE));
}
player.showEntity(FightSystem.getPlugin(), entity); player.showEntity(FightSystem.getPlugin(), entity);
} }
@@ -67,7 +68,8 @@ public class BlockIdWrapper {
public void untrackEntity(Player player, Entity entity) { public void untrackEntity(Player player, Entity entity) {
player.hideEntity(FightSystem.getPlugin(), entity); player.hideEntity(FightSystem.getPlugin(), entity);
if (entity instanceof Player) if (entity instanceof Player) {
TinyProtocol.instance.sendPacket(player, ProtocolWrapper.playerInfoPacketConstructor(ProtocolWrapper.PlayerInfoAction.ADD, new GameProfile(entity.getUniqueId(), entity.getName()), GameMode.CREATIVE)); TinyProtocol.instance.sendPacket(player, ProtocolWrapper.playerInfoPacketConstructor(ProtocolWrapper.PlayerInfoAction.ADD, new GameProfile(entity.getUniqueId(), entity.getName()), GameMode.CREATIVE));
}
} }
} }
@@ -70,8 +70,7 @@ public class BountifulWrapper {
return new Listener() { return new Listener() {
@EventHandler @EventHandler
public void onArrowPickup(PlayerPickupArrowEvent e) { public void onArrowPickup(PlayerPickupArrowEvent e) {
if (Fight.fighting(e.getPlayer())) if (Fight.fighting(e.getPlayer())) e.setCancelled(true);
e.setCancelled(true);
} }
}; };
} }
@@ -80,8 +79,7 @@ public class BountifulWrapper {
return new Listener() { return new Listener() {
@EventHandler @EventHandler
public void onSwapItems(PlayerSwapHandItemsEvent event) { public void onSwapItems(PlayerSwapHandItemsEvent event) {
if (Fight.fighting(event.getPlayer())) if (Fight.fighting(event.getPlayer())) event.setCancelled(true);
event.setCancelled(true);
} }
}; };
} }
@@ -122,14 +120,11 @@ public class BountifulWrapper {
BossBar bar = barMap.get(player); BossBar bar = barMap.get(player);
BarColor color = chat2bar(team.getColor()); BarColor color = chat2bar(team.getColor());
if (bar.getColor() != color) if (bar.getColor() != color) bar.setColor(color);
bar.setColor(color);
if (bar.getProgress() != progress) if (bar.getProgress() != progress) bar.setProgress(progress);
bar.setProgress(progress);
if (!bar.getTitle().equals(text)) if (!bar.getTitle().equals(text)) bar.setTitle(text);
bar.setTitle(text);
} }
private BarColor chat2bar(ChatColor color) { private BarColor chat2bar(ChatColor color) {
@@ -136,10 +136,11 @@ public class FightStatistics {
} }
private int getLeader(FightTeam team) { private int getLeader(FightTeam team) {
if (team.getLeader() != null) if (team.getLeader() != null) {
return team.getLeader().getUser().getId(); return team.getLeader().getUser().getId();
else if (team.getDesignatedLeader() != null) } else if (team.getDesignatedLeader() != null) {
return SteamwarUser.get(team.getDesignatedLeader()).getId(); return SteamwarUser.get(team.getDesignatedLeader()).getId();
}
return 0; return 0;
} }
@@ -110,10 +110,11 @@ public class FightUI {
case SPECTATE: case SPECTATE:
default: default:
generator = (l, r, lP, rP, lW, rW) -> { generator = (l, r, lP, rP, lW, rW) -> {
if (FightSystem.getLastWinner() == null) if (FightSystem.getLastWinner() == null) {
return new Message("BAR_TIE", time, l.getColoredName(), r.getColoredName()); return new Message("BAR_TIE", time, l.getColoredName(), r.getColoredName());
else } else {
return new Message("BAR_WIN", time, l.getColoredName(), r.getColoredName(), FightSystem.getLastWinner().getColoredName()); return new Message("BAR_WIN", time, l.getColoredName(), r.getColoredName(), FightSystem.getLastWinner().getColoredName());
}
}; };
break; break;
} }
@@ -159,8 +160,7 @@ public class FightUI {
private void tpsWatcher() { private void tpsWatcher() {
double tps = TPSWatcher.getTPS(); double tps = TPSWatcher.getTPS();
if (tps < 15.0) if (tps < 15.0) FightSystem.getMessage().broadcastActionbar("TPS_WARNING", tps);
FightSystem.getMessage().broadcastActionbar("TPS_WARNING", tps);
} }
public enum BossBarType { public enum BossBarType {
@@ -183,13 +183,13 @@ public class FightUI {
} }
private static BossBarType byAngle(double angle) { private static BossBarType byAngle(double angle) {
if (BLUE_NEG_Z) if (BLUE_NEG_Z) angle += 180;
angle += 180;
angle = ((angle % 360) + 360) % 360; angle = ((angle % 360) + 360) % 360;
for (BossBarType type : values()) { for (BossBarType type : values()) {
if (type.minAngle < type.maxAngle ? type.minAngle <= angle && angle < type.maxAngle : type.minAngle <= angle || angle < type.maxAngle) if (type.minAngle < type.maxAngle ? type.minAngle <= angle && angle < type.maxAngle : type.minAngle <= angle || angle < type.maxAngle) {
return type; return type;
}
} }
throw new SecurityException("No boss bar for angle " + angle + " found"); throw new SecurityException("No boss bar for angle " + angle + " found");
@@ -207,23 +207,22 @@ public class FightUI {
GlobalRecorder.getInstance().winMessage(winner, subtitle, params); GlobalRecorder.getInstance().winMessage(winner, subtitle, params);
Bukkit.getOnlinePlayers().forEach(Player::resetTitle); Bukkit.getOnlinePlayers().forEach(Player::resetTitle);
if (winner != null) if (winner != null) {
Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, FightSystem.getMessage().parse("UI_WIN", p, winner.getColor(), winner.getName()), FightSystem.getMessage().parse(subtitle, p, params), 5, 40, 5)); Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, FightSystem.getMessage().parse("UI_WIN", p, winner.getColor(), winner.getName()), FightSystem.getMessage().parse(subtitle, p, params), 5, 40, 5));
else } else {
Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, FightSystem.getMessage().parse("UI_DRAW", p), FightSystem.getMessage().parse(subtitle, p, params), 5, 40, 5)); Bukkit.getOnlinePlayers().forEach(p -> WorldOfColorWrapper.impl.sendTitle(p, FightSystem.getMessage().parse("UI_DRAW", p), FightSystem.getMessage().parse(subtitle, p, params), 5, 40, 5));
}
} }
public static void addSubtitle(String msg, Object... params) { public static void addSubtitle(String msg, Object... params) {
if (FightState.Spectate.contains(FightState.getFightState())) if (FightState.Spectate.contains(FightState.getFightState())) return;
return;
Message message = new Message(msg, params); Message message = new Message(msg, params);
queue.add(message); queue.add(message);
GlobalRecorder.getInstance().subtitle(message); GlobalRecorder.getInstance().subtitle(message);
FightSystem.getPlugin().getLogger().log(Level.INFO, FightSystem.getMessage().parse(msg, null, params)); FightSystem.getPlugin().getLogger().log(Level.INFO, FightSystem.getMessage().parse(msg, null, params));
if (!subtitleScheduled) if (!subtitleScheduled) printSubtitle();
printSubtitle();
} }
private static void printSubtitle() { private static void printSubtitle() {
@@ -36,12 +36,10 @@ public class FlatteningWrapper {
public static final FlatteningWrapper impl = new FlatteningWrapper(); public static final FlatteningWrapper impl = new FlatteningWrapper();
public boolean isWater(Block block) { public boolean isWater(Block block) {
if (block.getType() == Material.WATER) if (block.getType() == Material.WATER) return true;
return true;
BlockData data = block.getBlockData(); BlockData data = block.getBlockData();
if (!(data instanceof Waterlogged)) if (!(data instanceof Waterlogged)) return false;
return false;
return ((Waterlogged) data).isWaterlogged(); return ((Waterlogged) data).isWaterlogged();
} }
@@ -54,8 +52,7 @@ public class FlatteningWrapper {
} }
BlockData data = block.getBlockData(); BlockData data = block.getBlockData();
if (!(data instanceof Waterlogged)) if (!(data instanceof Waterlogged)) return false;
return false;
Waterlogged waterlogged = (Waterlogged) data; Waterlogged waterlogged = (Waterlogged) data;
if (waterlogged.isWaterlogged()) { if (waterlogged.isWaterlogged()) {
@@ -124,11 +124,9 @@ public class Hull {
public void checkREntity(REntity entity) { public void checkREntity(REntity entity) {
Location location = new Location(Config.world, entity.getX(), entity.getY(), entity.getZ()); Location location = new Location(Config.world, entity.getX(), entity.getY(), entity.getZ());
if (region.inRegion(location) && !visibility.get(new IntVector(location).toId(region))) { if (region.inRegion(location) && !visibility.get(new IntVector(location).toId(region))) {
if (rentities.add(entity)) if (rentities.add(entity)) entity.hide(true);
entity.hide(true);
} else { } else {
if (rentities.remove(entity)) if (rentities.remove(entity)) entity.hide(false);
entity.hide(false);
} }
} }
@@ -146,8 +144,9 @@ public class Hull {
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
region.forEach((x, y, z) -> { region.forEach((x, y, z) -> {
IntVector block = new IntVector(x, y, z); IntVector block = new IntVector(x, y, z);
if (isOccluding(Config.world.getBlockAt(x, y, z).getType())) if (isOccluding(Config.world.getBlockAt(x, y, z).getType())) {
occluding.set(block.toId(region)); occluding.set(block.toId(region));
}
}); });
forEachBorder((root, direction) -> uncoverBlocks(new NullList<>(), root, direction)); forEachBorder((root, direction) -> uncoverBlocks(new NullList<>(), root, direction));
FightSystem.getPlugin().getLogger().log(Level.INFO, () -> "[HullHider] initialisation finished: " + (System.currentTimeMillis() - start) + " ms, visible blocks: " + visibility.cardinality()); FightSystem.getPlugin().getLogger().log(Level.INFO, () -> "[HullHider] initialisation finished: " + (System.currentTimeMillis() - start) + " ms, visible blocks: " + visibility.cardinality());
@@ -155,16 +154,13 @@ public class Hull {
public void updateBlockVisibility(Block b, Material changedType) { public void updateBlockVisibility(Block b, Material changedType) {
IntVector root = new IntVector(b.getX(), b.getY(), b.getZ()); IntVector root = new IntVector(b.getX(), b.getY(), b.getZ());
if (root.notInRegion(region)) if (root.notInRegion(region)) return;
return;
int id = root.toId(region); int id = root.toId(region);
if (!occluding.get(id) || isOccluding(changedType)) if (!occluding.get(id) || isOccluding(changedType)) return;
return;
occluding.clear(id); occluding.clear(id);
if (!visibility.get(id)) if (!visibility.get(id)) return;
return;
List<IntVector> uncovered = new ArrayList<>(); List<IntVector> uncovered = new ArrayList<>();
for (Map.Entry<IntVector, BitSet> directionalVisibility : visibilityDirections.entrySet()) { for (Map.Entry<IntVector, BitSet> directionalVisibility : visibilityDirections.entrySet()) {
@@ -195,8 +191,9 @@ public class Hull {
private void forEachBorder(BiConsumer<IntVector, IntVector> f) { private void forEachBorder(BiConsumer<IntVector, IntVector> f) {
for (int x = region.getMinX(); x < region.getMaxX(); x++) { for (int x = region.getMinX(); x < region.getMaxX(); x++) {
for (int z = region.getMinZ(); z < region.getMaxZ(); z++) { for (int z = region.getMinZ(); z < region.getMaxZ(); z++) {
if (groundVisible) if (groundVisible) {
f.accept(new IntVector(x, region.getMinY(), z), new IntVector(0, 1, 0)); f.accept(new IntVector(x, region.getMinY(), z), new IntVector(0, 1, 0));
}
f.accept(new IntVector(x, region.getMaxY() - 1, z), new IntVector(0, -1, 0)); f.accept(new IntVector(x, region.getMaxY() - 1, z), new IntVector(0, -1, 0));
} }
} }
@@ -228,12 +225,10 @@ public class Hull {
} }
private void uncoverBlocks(List<IntVector> uncovered, IntVector block, IntVector direction, BitSet directionalVisibility, IntVector[] branchDirections) { private void uncoverBlocks(List<IntVector> uncovered, IntVector block, IntVector direction, BitSet directionalVisibility, IntVector[] branchDirections) {
if (block.notInRegion(region)) if (block.notInRegion(region)) return;
return;
int id = block.toId(region); int id = block.toId(region);
if (directionalVisibility.get(id)) if (directionalVisibility.get(id)) return;
return;
directionalVisibility.set(id); directionalVisibility.set(id);
if (!visibility.get(id)) { if (!visibility.get(id)) {
@@ -241,8 +236,7 @@ public class Hull {
uncovered.add(block); uncovered.add(block);
} }
if (occluding.get(id)) if (occluding.get(id)) return;
return;
uncoverBlocks(uncovered, block.add(direction), direction, directionalVisibility, branchDirections); uncoverBlocks(uncovered, block.add(direction), direction, directionalVisibility, branchDirections);
for (IntVector branchDirection : branchDirections) for (IntVector branchDirection : branchDirections)
@@ -290,8 +284,9 @@ public class Hull {
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (o == null || this.getClass() != o.getClass()) if (o == null || this.getClass() != o.getClass()) {
return false; return false;
}
IntVector v = (IntVector) o; IntVector v = (IntVector) o;
return x == v.x && y == v.y && z == v.z; return x == v.x && y == v.y && z == v.z;
@@ -99,8 +99,7 @@ public class HullHider implements Listener {
} }
public void initialize(FightTeam team) { public void initialize(FightTeam team) {
if (!TechHiderWrapper.ENABLED) if (!TechHiderWrapper.ENABLED) return;
return;
hullMap.get(team).initialize(); hullMap.get(team).initialize();
} }
@@ -117,8 +116,7 @@ public class HullHider implements Listener {
} }
public void updatePlayer(Player player) { public void updatePlayer(Player player) {
if (!TechHiderWrapper.ENABLED) if (!TechHiderWrapper.ENABLED) return;
return;
FightTeam team = Fight.getPlayerTeam(player); FightTeam team = Fight.getPlayerTeam(player);
FightPlayer fp = Fight.getFightPlayer(player); FightPlayer fp = Fight.getFightPlayer(player);
@@ -139,33 +137,37 @@ public class HullHider implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockPhysic(BlockPhysicsEvent e) { public void onBlockPhysic(BlockPhysicsEvent e) {
if (FlatteningWrapper.impl.doRecord(e)) if (FlatteningWrapper.impl.doRecord(e)) {
blockUpdate(e.getBlock(), e.getChangedType()); blockUpdate(e.getBlock(), e.getChangedType());
}
} }
public void blockUpdate(Block block, Material changedType) { public void blockUpdate(Block block, Material changedType) {
for (Hull hull : hulls) for (Hull hull : hulls) {
hull.updateBlockVisibility(block, changedType); hull.updateBlockVisibility(block, changedType);
}
} }
public boolean isBlockHidden(Player player, int x, int y, int z) { public boolean isBlockHidden(Player player, int x, int y, int z) {
if (!TechHiderWrapper.ENABLED) if (!TechHiderWrapper.ENABLED) return false;
return false;
for (Hull hull : hulls) for (Hull hull : hulls) {
if (hull.isBlockHidden(player, x, y, z)) if (hull.isBlockHidden(player, x, y, z)) {
return true; return true;
}
}
return false; return false;
} }
public boolean blockPrecise(Player player, int chunkX, int chunkY, int chunkZ) { public boolean blockPrecise(Player player, int chunkX, int chunkY, int chunkZ) {
if (!TechHiderWrapper.ENABLED) if (!TechHiderWrapper.ENABLED) return false;
return false;
for (Hull hull : hulls) for (Hull hull : hulls) {
if (hull.blockPrecise(player, chunkX, chunkY, chunkZ)) if (hull.blockPrecise(player, chunkX, chunkY, chunkZ)) {
return true; return true;
}
}
return false; return false;
} }
@@ -231,8 +233,7 @@ public class HullHider implements Listener {
private Object packetHider(Player player, Object packet, Location location) { private Object packetHider(Player player, Object packet, Location location) {
for (Hull hull : hulls) { for (Hull hull : hulls) {
if (hull.isLocationHidden(player, location)) if (hull.isLocationHidden(player, location)) return null;
return null;
} }
return packet; return packet;
@@ -96,8 +96,9 @@ public class TechHiderWrapper extends StateDependent implements TechHider.Locati
@EventHandler @EventHandler
public void teamLeave(TeamLeaveEvent e) { public void teamLeave(TeamLeaveEvent e) {
e.getFightPlayer().ifPlayer(player -> { e.getFightPlayer().ifPlayer(player -> {
if (player.isOnline()) if (player.isOnline()) {
hiddenRegion.put(player, getHiddenRegion(player)); hiddenRegion.put(player, getHiddenRegion(player));
}
}); });
} }
@@ -108,8 +109,7 @@ public class TechHiderWrapper extends StateDependent implements TechHider.Locati
} }
public void reloadChunks(Player player, Region region, Region exclusion) { public void reloadChunks(Player player, Region region, Region exclusion) {
if (!ENABLED || !FightState.Schem.contains(FightState.getFightState()) || !player.isOnline()) if (!ENABLED || !FightState.Schem.contains(FightState.getFightState()) || !player.isOnline()) return;
return;
region.forEachChunk((chunkX, chunkZ) -> { region.forEachChunk((chunkX, chunkZ) -> {
if (exclusion.chunkOutside(chunkX, chunkZ)) { if (exclusion.chunkOutside(chunkX, chunkZ)) {
@@ -185,15 +185,12 @@ public class TechHiderWrapper extends StateDependent implements TechHider.Locati
} }
private Region getHiddenRegion(Player player) { private Region getHiddenRegion(Player player) {
if (Config.isReferee(player)) if (Config.isReferee(player)) return Region.EMPTY;
return Region.EMPTY;
FightTeam team = Fight.getPlayerTeam(player); FightTeam team = Fight.getPlayerTeam(player);
if (team == null) if (team == null) return Config.ArenaRegion;
return Config.ArenaRegion;
if (team.canPlayerEntern(player)) if (team.canPlayerEntern(player)) return Region.EMPTY;
return Region.EMPTY;
return Fight.getOpposite(team).getExtendRegion(); return Fight.getOpposite(team).getExtendRegion();
} }
@@ -36,8 +36,7 @@ public class WorldOfColorWrapper {
} }
public boolean isInBlock(Projectile e) { public boolean isInBlock(Projectile e) {
if (e instanceof Arrow) if (e instanceof Arrow arrow) return arrow.isInBlock();
return ((Arrow) e).isInBlock();
return false; return false;
} }
@@ -82,8 +82,7 @@ public class WorldeditWrapper {
for (int z = 0; z < clipboard.getDimensions().z(); z++) { for (int z = 0; z < clipboard.getDimensions().z(); z++) {
BlockVector3 pos = minimum.add(x, y, z); BlockVector3 pos = minimum.add(x, y, z);
BaseBlock replacement = replaceMap.get(clipboard.getFullBlock(pos)); BaseBlock replacement = replaceMap.get(clipboard.getFullBlock(pos));
if (replacement != null) if (replacement != null) clipboard.setBlock(pos, replacement);
clipboard.setBlock(pos, replacement);
} }
} }
} }
@@ -48,8 +48,7 @@ public abstract class Wincondition {
} }
public static Countdown getTimeOverCountdown() { public static Countdown getTimeOverCountdown() {
if (timeOverCountdown == null) if (timeOverCountdown == null) return null;
return null;
return timeOverCountdown.getCountdown(); return timeOverCountdown.getCountdown();
} }
@@ -58,8 +57,7 @@ public abstract class Wincondition {
} }
protected FightTeam isTarget(Entity player) { protected FightTeam isTarget(Entity player) {
if (!(player instanceof LivingEntity)) if (!(player instanceof LivingEntity)) return null;
return null;
return Fight.getPlayerTeam((LivingEntity) player); return Fight.getPlayerTeam((LivingEntity) player);
} }
@@ -67,9 +65,10 @@ public abstract class Wincondition {
protected void comparisonWin(ToDoubleFunction<FightTeam> evaluate, String winMessage, String tieMessage) { protected void comparisonWin(ToDoubleFunction<FightTeam> evaluate, String winMessage, String tieMessage) {
double max = Fight.teams().stream().mapToDouble(evaluate).max().orElseThrow(() -> new SecurityException("No teams present")); double max = Fight.teams().stream().mapToDouble(evaluate).max().orElseThrow(() -> new SecurityException("No teams present"));
List<FightTeam> teams = Fight.teams().stream().filter(team -> evaluate.applyAsDouble(team) == max).collect(Collectors.toList()); List<FightTeam> teams = Fight.teams().stream().filter(team -> evaluate.applyAsDouble(team) == max).collect(Collectors.toList());
if (teams.size() > 1) if (teams.size() > 1) {
win(null, tieMessage); win(null, tieMessage);
else } else {
win(teams.get(0), winMessage, teams.get(0).getColoredName()); win(teams.get(0), winMessage, teams.get(0).getColoredName());
}
} }
} }
@@ -40,8 +40,7 @@ public class WinconditionAllDead extends Wincondition implements Listener {
public void handlePlayerDeath(TeamDeathEvent event) { public void handlePlayerDeath(TeamDeathEvent event) {
FightTeam team = event.getFightPlayer().getTeam(); FightTeam team = event.getFightPlayer().getTeam();
if (team.getAlivePlayers() > 0) if (team.getAlivePlayers() > 0) return;
return;
win(Fight.getOpposite(team), "WIN_ALL_DEAD", team.getPrefix()); win(Fight.getOpposite(team), "WIN_ALL_DEAD", team.getPrefix());
} }
@@ -76,8 +76,7 @@ public class WinconditionAmongUs extends Wincondition implements Listener {
private void handleDeath(Player player) { private void handleDeath(Player player) {
FightTeam team = isTarget(player); FightTeam team = isTarget(player);
if (team == null) if (team == null) return;
return;
FightPlayer current = team.getFightPlayer(player); FightPlayer current = team.getFightPlayer(player);
if (current == imposter.get(team)) { if (current == imposter.get(team)) {
@@ -112,8 +112,9 @@ public abstract class WinconditionBasePercent extends Wincondition implements Pr
totalBlocks = 0; totalBlocks = 0;
countAnyBlock = false; countAnyBlock = false;
team.getSchemRegion().forEach((x, y, z) -> { team.getSchemRegion().forEach((x, y, z) -> {
if (Config.GameModeConfig.WinConditionParams.Blocks.contains(Config.world.getBlockAt(x, y, z).getType()) == Config.GameModeConfig.WinConditionParams.BlocksWhitelist) if (Config.GameModeConfig.WinConditionParams.Blocks.contains(Config.world.getBlockAt(x, y, z).getType()) == Config.GameModeConfig.WinConditionParams.BlocksWhitelist) {
totalBlocks++; totalBlocks++;
}
}); });
// Edge Case for DirtBlock // Edge Case for DirtBlock
if (totalBlocks == 0) { if (totalBlocks == 0) {
@@ -56,8 +56,9 @@ public abstract class WinconditionBlocks extends Wincondition implements Printab
} }
}; };
if (Config.GameModeConfig.WinConditions.contains(wincondition)) if (Config.GameModeConfig.WinConditions.contains(wincondition)) {
printableWinconditions.add(this); printableWinconditions.add(this);
}
} }
@Override @Override
@@ -77,8 +78,9 @@ public abstract class WinconditionBlocks extends Wincondition implements Printab
blocks.clear(); blocks.clear();
team.getExtendRegion().forEach((x, y, z) -> { team.getExtendRegion().forEach((x, y, z) -> {
Block block = Config.world.getBlockAt(x, y, z); Block block = Config.world.getBlockAt(x, y, z);
if (isOfType.test(block)) if (isOfType.test(block)) {
blocks.add(block); blocks.add(block);
}
}); });
} }
@@ -87,8 +89,9 @@ public abstract class WinconditionBlocks extends Wincondition implements Printab
if (blocks.isEmpty()) return; if (blocks.isEmpty()) return;
blocks.removeIf(block -> !isOfType.test(block)); blocks.removeIf(block -> !isOfType.test(block));
if (blocks.isEmpty()) if (blocks.isEmpty()) {
win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName()); win(Fight.getOpposite(team), "WIN_TECHKO", team.getColoredName());
}
} }
} }
} }
@@ -40,8 +40,7 @@ public class WinconditionCaptainDead extends Wincondition implements Listener {
@EventHandler @EventHandler
public void handlePlayerDeath(TeamDeathEvent event) { public void handlePlayerDeath(TeamDeathEvent event) {
FightPlayer leader = event.getFightPlayer(); FightPlayer leader = event.getFightPlayer();
if (!leader.isLeader()) if (!leader.isLeader()) return;
return;
FightTeam team = leader.getTeam(); FightTeam team = leader.getTeam();
win(Fight.getOpposite(team), "WIN_LEADER_DEAD", team.getPrefix() + leader.getEntity().getName()); win(Fight.getOpposite(team), "WIN_LEADER_DEAD", team.getPrefix() + leader.getEntity().getName());
@@ -74,24 +74,22 @@ public class WinconditionPoints extends WinconditionBasePercent implements Liste
private void handleDeath(Player player) { private void handleDeath(Player player) {
FightTeam team = isTarget(player); FightTeam team = isTarget(player);
if (team == null) if (team == null) return;
return;
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;
timeOver(); timeOver();
} else if (team.getPlayers().size() <= 5) } else if (team.getPlayers().size() <= 5) {
enemy.points += 300; enemy.points += 300;
else } else {
enemy.points += 200; enemy.points += 200;
}
} }
private void pointInit(FightTeam team) { private void pointInit(FightTeam team) {
TeamPoints opponent = teamMap.get(Fight.getOpposite(team)); TeamPoints opponent = teamMap.get(Fight.getOpposite(team));
if (getTotalBlocks(team) == 0) if (getTotalBlocks(team) == 0) return;
return;
teamMap.get(team).setup(getTotalBlocks(Fight.getOpposite(team))); teamMap.get(team).setup(getTotalBlocks(Fight.getOpposite(team)));
opponent.setup(getTotalBlocks(team)); opponent.setup(getTotalBlocks(team));
@@ -120,10 +118,11 @@ public class WinconditionPoints extends WinconditionBasePercent implements Liste
} else { } else {
double f = 100.0 * getTotalBlocks(team) / enemyBlocks; double f = 100.0 * getTotalBlocks(team) / enemyBlocks;
if (f > 100) if (f > 100) {
f = 100; f = 100;
else if (f < 40) } else if (f < 40) {
f = 40; f = 40;
}
this.factor = f; this.factor = f;
} }
@@ -131,8 +130,7 @@ public class WinconditionPoints extends WinconditionBasePercent implements Liste
public int getPoints() { public int getPoints() {
int damagePoints = (int) (getPercent(Fight.getOpposite(team)) * factor); int damagePoints = (int) (getPercent(Fight.getOpposite(team)) * factor);
if (damagePoints > MAX_POINTS) if (damagePoints > MAX_POINTS) damagePoints = MAX_POINTS;
damagePoints = MAX_POINTS;
return points + damagePoints; return points + damagePoints;
} }
} }
@@ -84,8 +84,7 @@ public class WinconditionPointsAirShip extends WinconditionBasePercent implement
teamMap.get(team).points += 1; teamMap.get(team).points += 1;
possibleEnd.compareAndSet(false, teamMap.get(team).getPoints() >= TeamPoints.WIN_POINTS); possibleEnd.compareAndSet(false, teamMap.get(team).getPoints() >= TeamPoints.WIN_POINTS);
}); });
if (possibleEnd.get()) if (possibleEnd.get()) end();
end();
} }
@EventHandler @EventHandler
@@ -100,20 +99,17 @@ public class WinconditionPointsAirShip extends WinconditionBasePercent implement
private void handleDeath(Player player) { private void handleDeath(Player player) {
FightTeam team = isTarget(player); FightTeam team = isTarget(player);
if (team == null) if (team == null) return;
return;
TeamPoints enemy = teamMap.get(Fight.getOpposite(team)); TeamPoints enemy = teamMap.get(Fight.getOpposite(team));
enemy.points += 200.0 / team.getPlayerCount(); enemy.points += 200.0 / team.getPlayerCount();
if (enemy.getPoints() >= TeamPoints.WIN_POINTS) if (enemy.getPoints() >= TeamPoints.WIN_POINTS) end();
end();
} }
private void pointInit(FightTeam team) { private void pointInit(FightTeam team) {
TeamPoints opponent = teamMap.get(Fight.getOpposite(team)); TeamPoints opponent = teamMap.get(Fight.getOpposite(team));
if (getTotalBlocks(team) == 0) if (getTotalBlocks(team) == 0) return;
return;
teamMap.get(team).setup(getTotalBlocks(Fight.getOpposite(team))); teamMap.get(team).setup(getTotalBlocks(Fight.getOpposite(team)));
opponent.setup(getTotalBlocks(team)); opponent.setup(getTotalBlocks(team));
@@ -72,8 +72,7 @@ public class WinconditionTimeTechKO extends Wincondition implements Listener {
@EventHandler @EventHandler
public void onSpawn(EntitySpawnEvent e) { public void onSpawn(EntitySpawnEvent e) {
if (e.getEntityType() != EntityType.TNT) if (e.getEntityType() != EntityType.TNT) return;
return;
Location location = e.getLocation(); Location location = e.getLocation();
for (FightTeam team : Fight.teams()) { for (FightTeam team : Fight.teams()) {
@@ -86,20 +85,17 @@ public class WinconditionTimeTechKO extends Wincondition implements Listener {
@EventHandler @EventHandler
public void onExplode(EntityExplodeEvent e) { public void onExplode(EntityExplodeEvent e) {
if (e.getEntityType() != EntityType.TNT) if (e.getEntityType() != EntityType.TNT) return;
return;
FightTeam spawn = spawnLocations.remove(e.getEntity().getEntityId()); FightTeam spawn = spawnLocations.remove(e.getEntity().getEntityId());
if (spawn == null) if (spawn == null) return;
return;
Location location = e.getLocation(); Location location = e.getLocation();
for (FightTeam team : Fight.teams()) { for (FightTeam team : Fight.teams()) {
if (team != spawn && team.getExtendRegion().inRegion(location)) { if (team != spawn && team.getExtendRegion().inRegion(location)) {
currentTime.put(spawn, TECH_KO_HALF_TIME); currentTime.put(spawn, TECH_KO_HALF_TIME);
TechKOCountdown countdown = countdowns.remove(spawn); TechKOCountdown countdown = countdowns.remove(spawn);
if (countdown != null) if (countdown != null) countdown.disable();
countdown.disable();
} }
} }
} }
@@ -107,8 +103,9 @@ public class WinconditionTimeTechKO extends Wincondition implements Listener {
private void run() { private void run() {
currentTime.entrySet().forEach(entry -> { currentTime.entrySet().forEach(entry -> {
entry.setValue(entry.getValue() - 1); entry.setValue(entry.getValue() - 1);
if (entry.getValue() == 0) if (entry.getValue() == 0) {
countdowns.put(entry.getKey(), new TechKOCountdown(entry.getKey(), TECH_KO_HALF_TIME)); countdowns.put(entry.getKey(), new TechKOCountdown(entry.getKey(), TECH_KO_HALF_TIME));
}
}); });
} }
@@ -72,8 +72,7 @@ public class WinconditionTimedDamageTechKO extends Wincondition implements Print
@EventHandler @EventHandler
public void onExplode(EntityExplodeEvent e) { public void onExplode(EntityExplodeEvent e) {
if (e.getEntityType() != EntityType.TNT) if (e.getEntityType() != EntityType.TNT) return;
return;
Location location = e.getLocation(); Location location = e.getLocation();
TechKOCountdown countdown = null; TechKOCountdown countdown = null;
@@ -76,8 +76,7 @@ public class Fightserver {
private void setupPortal(String gameMode) { private void setupPortal(String gameMode) {
FightserverPortal portal = FightserverPortal.findFree(gameMode); FightserverPortal portal = FightserverPortal.findFree(gameMode);
if (portal == null) if (portal == null) return;
return;
portals.add(portal); portals.add(portal);
portal.setServer(this); portal.setServer(this);
@@ -107,8 +106,7 @@ public class Fightserver {
} }
private <T> void update(T old, T current, Consumer<FightserverPortal> observer) { private <T> void update(T old, T current, Consumer<FightserverPortal> observer) {
if (!old.equals(current)) if (!old.equals(current)) portals.forEach(observer);
portals.forEach(observer);
} }
private void remove() { private void remove() {
@@ -60,8 +60,7 @@ public class HologramCommand extends SWCommand {
if (PortalCommand.noPermissions(player)) return; if (PortalCommand.noPermissions(player)) return;
Hologram hologram = Hologram.getHologram(id); Hologram hologram = Hologram.getHologram(id);
if (hologram == null) if (hologram == null) return;
return;
hologram.delete(); hologram.delete();
LobbySystem.config().save(); LobbySystem.config().save();
@@ -82,8 +82,7 @@ public class ModifyCommand extends SWCommand implements Listener {
@Register("waitinghallspawn") @Register("waitinghallspawn")
public void setWaitingHallSpawn(Player player) { public void setWaitingHallSpawn(Player player) {
SteamwarUser user = SteamwarUser.get(player.getUniqueId()); SteamwarUser user = SteamwarUser.get(player.getUniqueId());
if (!user.hasPerm(UserPerm.ADMINISTRATION)) if (!user.hasPerm(UserPerm.ADMINISTRATION)) return;
return;
LobbySystem.config().setWaitingHallSpawn(player.getLocation()); LobbySystem.config().setWaitingHallSpawn(player.getLocation());
} }
@@ -57,8 +57,7 @@ public class Hologram implements ConfigurationSerializable {
entity.setInvisible(true); entity.setInvisible(true);
entity.setDisplayName(text); entity.setDisplayName(text);
if (id != null) if (id != null) holograms.put(id, this);
holograms.put(id, this);
} }
public void updateText(String text) { public void updateText(String text) {
@@ -76,8 +75,7 @@ public class Hologram implements ConfigurationSerializable {
public void delete() { public void delete() {
entity.die(); entity.die();
if (id != null) if (id != null) holograms.remove(id);
holograms.remove(id);
} }
@Override @Override
@@ -48,8 +48,7 @@ public class AlphaWall implements Listener {
@EventHandler @EventHandler
public void onMove(PlayerMoveEvent event) { public void onMove(PlayerMoveEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
if (ModifyCommand.modifying(player) || allowed.apply(event.getTo())) if (ModifyCommand.modifying(player) || allowed.apply(event.getTo())) return;
return;
Location to = event.getFrom().clone(); Location to = event.getFrom().clone();
to.setYaw(reflect - to.getYaw()); to.setYaw(reflect - to.getYaw());
@@ -42,8 +42,7 @@ public class InventoryInteraction implements Listener {
@EventHandler @EventHandler
public void handlePlayerInteract(PlayerInteractEvent event) { public void handlePlayerInteract(PlayerInteractEvent event) {
ItemStack item = event.getItem(); ItemStack item = event.getItem();
if (item == null) if (item == null) return;
return;
if (item.getType() == Material.FIREWORK_ROCKET && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) { if (item.getType() == Material.FIREWORK_ROCKET && (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK)) {
int offset; int offset;
@@ -59,8 +58,7 @@ public class InventoryInteraction implements Listener {
return; return;
} }
if (!ModifyCommand.modifying(event.getPlayer())) if (!ModifyCommand.modifying(event.getPlayer())) event.setCancelled(true);
event.setCancelled(true);
} }
@EventHandler @EventHandler
@@ -75,14 +73,12 @@ public class InventoryInteraction implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void handleInventoryClick(InventoryClickEvent event) { public void handleInventoryClick(InventoryClickEvent event) {
if (!ModifyCommand.modifying(event.getWhoClicked())) if (!ModifyCommand.modifying(event.getWhoClicked())) event.setCancelled(true);
event.setCancelled(true);
} }
@EventHandler @EventHandler
public void handlePlayerSwapHandItemsEvent(PlayerSwapHandItemsEvent event) { public void handlePlayerSwapHandItemsEvent(PlayerSwapHandItemsEvent event) {
if (!ModifyCommand.modifying(event.getPlayer())) if (!ModifyCommand.modifying(event.getPlayer())) event.setCancelled(true);
event.setCancelled(true);
} }
} }
@@ -59,34 +59,29 @@ public class PlayerSeatListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getPlayer().isGliding()) if (event.getPlayer().isGliding()) return;
return;
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return;
return;
if (!event.getClickedBlock().getType().name().toLowerCase().contains("stairs")) if (!event.getClickedBlock().getType().name().toLowerCase().contains("stairs")) return;
return;
if (event.getPlayer().getGameMode() != GameMode.ADVENTURE && event.getPlayer().getGameMode() != GameMode.SURVIVAL) if (event.getPlayer().getGameMode() != GameMode.ADVENTURE && event.getPlayer().getGameMode() != GameMode.SURVIVAL) {
return; return;
}
if (((Stairs) event.getClickedBlock().getBlockData()).getHalf() != Bisected.Half.BOTTOM) if (((Stairs) event.getClickedBlock().getBlockData()).getHalf() != Bisected.Half.BOTTOM) return;
return;
if (((Stairs) event.getClickedBlock().getBlockData()).getShape() != Stairs.Shape.STRAIGHT) if (((Stairs) event.getClickedBlock().getBlockData()).getShape() != Stairs.Shape.STRAIGHT) return;
return;
if (event.getPlayer().isInsideVehicle() && isArrow(event.getPlayer().getVehicle())) if (event.getPlayer().isInsideVehicle() && isArrow(event.getPlayer().getVehicle())) {
event.getPlayer().getVehicle().remove(); event.getPlayer().getVehicle().remove();
}
if (event.getClickedBlock().getRelative(0, 1, 0).getType() != Material.AIR) if (event.getClickedBlock().getRelative(0, 1, 0).getType() != Material.AIR) return;
return;
Location location = event.getClickedBlock().getLocation(); Location location = event.getClickedBlock().getLocation();
Location seatLocation = getSeatLocation(location); Location seatLocation = getSeatLocation(location);
if (seats.contains(seatLocation)) if (seats.contains(seatLocation)) return;
return;
seats.add(seatLocation); seats.add(seatLocation);
Arrow arrow = (Arrow) event.getPlayer().getWorld().spawnEntity(location.add(0.5, 0, 0.5), EntityType.ARROW); Arrow arrow = (Arrow) event.getPlayer().getWorld().spawnEntity(location.add(0.5, 0, 0.5), EntityType.ARROW);
@@ -100,16 +95,16 @@ public class PlayerSeatListener implements Listener {
public void onEntityDismount(EntityDismountEvent event) { public void onEntityDismount(EntityDismountEvent event) {
seats.remove(getSeatLocation(event.getDismounted().getLocation())); seats.remove(getSeatLocation(event.getDismounted().getLocation()));
if (event.getEntityType() != EntityType.PLAYER && !isArrow(event.getDismounted())) if (event.getEntityType() != EntityType.PLAYER && !isArrow(event.getDismounted())) return;
return;
event.getDismounted().remove(); event.getDismounted().remove();
} }
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
if (event.getPlayer().isInsideVehicle() && isArrow(event.getPlayer().getVehicle())) if (event.getPlayer().isInsideVehicle() && isArrow(event.getPlayer().getVehicle())) {
event.getPlayer().getVehicle().remove(); event.getPlayer().getVehicle().remove();
}
} }
public Location getSeatLocation(Location location) { public Location getSeatLocation(Location location) {
@@ -55,13 +55,11 @@ public class Portals implements Listener {
assert to != null; assert to != null;
Portal portal = Portal.getPortal(from, to); Portal portal = Portal.getPortal(from, to);
if (portal == null) if (portal == null) return;
return;
Player player = e.getPlayer(); Player player = e.getPlayer();
Deque<Portal> lastPortals = portalStack.get(player); Deque<Portal> lastPortals = portalStack.get(player);
if (!lastPortals.isEmpty() && lastPortals.peek() == portal) if (!lastPortals.isEmpty() && lastPortals.peek() == portal) return;
return;
portal.handle(player, from, to); portal.handle(player, from, to);
} }
@@ -71,29 +71,28 @@ public class WorldInteraction implements Listener {
@EventHandler @EventHandler
public void handleBlockBreak(BlockBreakEvent event) { public void handleBlockBreak(BlockBreakEvent event) {
if (!ModifyCommand.modifying(event.getPlayer())) if (!ModifyCommand.modifying(event.getPlayer())) event.setCancelled(true);
event.setCancelled(true);
} }
@EventHandler @EventHandler
public void handleBlockPlace(BlockPlaceEvent event) { public void handleBlockPlace(BlockPlaceEvent event) {
if (!ModifyCommand.modifying(event.getPlayer())) if (!ModifyCommand.modifying(event.getPlayer())) event.setCancelled(true);
event.setCancelled(true);
} }
@EventHandler @EventHandler
public void handleHangingBreak(HangingBreakByEntityEvent event) { public void handleHangingBreak(HangingBreakByEntityEvent event) {
if (!ModifyCommand.modifying((HumanEntity) event.getRemover())) if (!ModifyCommand.modifying((HumanEntity) event.getRemover())) event.setCancelled(true);
event.setCancelled(true);
} }
@EventHandler @EventHandler
public void handleGoldenPressurePlate(PlayerInteractEvent event) { public void handleGoldenPressurePlate(PlayerInteractEvent event) {
if (!ModifyCommand.modifying(event.getPlayer()) && (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK)) if (!ModifyCommand.modifying(event.getPlayer()) && (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK)) {
event.setCancelled(true); event.setCancelled(true);
}
if (!event.hasBlock() || event.getAction() != Action.PHYSICAL || event.getClickedBlock().getType() != Material.LIGHT_WEIGHTED_PRESSURE_PLATE) if (!event.hasBlock() || event.getAction() != Action.PHYSICAL || event.getClickedBlock().getType() != Material.LIGHT_WEIGHTED_PRESSURE_PLATE) {
return; return;
}
Player player = event.getPlayer(); Player player = event.getPlayer();
player.setVelocity(player.getLocation().getDirection().multiply(5).add(new Vector(0, 1, 0))); player.setVelocity(player.getLocation().getDirection().multiply(5).add(new Vector(0, 1, 0)));
@@ -106,8 +105,7 @@ public class WorldInteraction implements Listener {
@EventHandler @EventHandler
public void onPlayerArmorStandManipulate(PlayerArmorStandManipulateEvent event) { public void onPlayerArmorStandManipulate(PlayerArmorStandManipulateEvent event) {
if (!ModifyCommand.modifying(event.getPlayer())) if (!ModifyCommand.modifying(event.getPlayer())) event.setCancelled(true);
event.setCancelled(true);
} }
} }
@@ -52,8 +52,7 @@ public class CommandPortal implements PortalHandler {
int maxId = 0; int maxId = 0;
for (int i = 1; i < parts.length; i++) { for (int i = 1; i < parts.length; i++) {
stackIds[i - 1] = Integer.parseInt(parts[i].substring(0, 1)); stackIds[i - 1] = Integer.parseInt(parts[i].substring(0, 1));
if (stackIds[i - 1] > maxId) if (stackIds[i - 1] > maxId) maxId = stackIds[i - 1];
maxId = stackIds[i - 1];
} }
Iterator<Portal> stack = Portals.getStack(player).iterator(); Iterator<Portal> stack = Portals.getStack(player).iterator();
@@ -82,8 +81,9 @@ public class CommandPortal implements PortalHandler {
cmd.append(pieces[i]).append(parts[i + 1].substring(1)); cmd.append(pieces[i]).append(parts[i + 1].substring(1));
} }
if (ModifyCommand.modifying(player)) if (ModifyCommand.modifying(player)) {
player.sendMessage("/" + cmd); player.sendMessage("/" + cmd);
}
NetworkSender.send(new ExecuteCommandPacket(SteamwarUser.get(player.getUniqueId()).getId(), cmd.toString())); NetworkSender.send(new ExecuteCommandPacket(SteamwarUser.get(player.getUniqueId()).getId(), cmd.toString()));
} }
@@ -40,8 +40,7 @@ public class FightserverPortal implements PortalHandler, Comparable<FightserverP
public static FightserverPortal findFree(String gamemode) { public static FightserverPortal findFree(String gamemode) {
List<FightserverPortal> list = portals.getOrDefault(gamemode, Collections.emptyList()); List<FightserverPortal> list = portals.getOrDefault(gamemode, Collections.emptyList());
for (FightserverPortal portal : list) { for (FightserverPortal portal : list) {
if (portal.server == null) if (portal.server == null) return portal;
return portal;
} }
return null; return null;
} }
@@ -107,10 +106,11 @@ public class FightserverPortal implements PortalHandler, Comparable<FightserverP
FightInfoPacket info = server.current(); FightInfoPacket info = server.current();
if (fightStateCountdown(info.getFightState())) if (fightStateCountdown(info.getFightState())) {
hologram.updateText(String.format("§7%s §e%s §7%d§8:§7%02d", server.getServerName(), fightStateMapper(info.getFightState()), info.getCountdown() / 60, info.getCountdown() % 60)); hologram.updateText(String.format("§7%s §e%s §7%d§8:§7%02d", server.getServerName(), fightStateMapper(info.getFightState()), info.getCountdown() / 60, info.getCountdown() % 60));
else } else {
hologram.updateText(String.format("§7%s §e%s", server.getServerName(), fightStateMapper(info.getFightState()))); hologram.updateText(String.format("§7%s §e%s", server.getServerName(), fightStateMapper(info.getFightState())));
}
} }
public void updateBluePlayers() { public void updateBluePlayers() {
@@ -137,8 +137,7 @@ public class FightserverPortal implements PortalHandler, Comparable<FightserverP
}); });
for (SteamwarUser user : remainingPlayers) { for (SteamwarUser user : remainingPlayers) {
if (remainingLocations.isEmpty()) if (remainingLocations.isEmpty()) break;
break;
npcs.add(new NPC(remainingLocations.remove(0), user.getUUID(), user.getUserName())); npcs.add(new NPC(remainingLocations.remove(0), user.getUUID(), user.getUserName()));
} }
@@ -263,8 +263,7 @@ public class Portal implements PortalHandler, ConfigurationSerializable {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (!(obj instanceof ChunkCoords)) if (!(obj instanceof ChunkCoords)) return false;
return false;
ChunkCoords coords = (ChunkCoords) obj; ChunkCoords coords = (ChunkCoords) obj;
return x == coords.x && z == coords.z; return x == coords.x && z == coords.z;
@@ -74,8 +74,9 @@ public class TeleportPortal implements PortalHandler {
player.sendMessage("§cAus unbekannten Gründen führt dieses Portal zurzeit in den Limbus"); player.sendMessage("§cAus unbekannten Gründen führt dieses Portal zurzeit in den Limbus");
return; return;
} }
if (ModifyCommand.modifying(player)) if (ModifyCommand.modifying(player)) {
player.sendMessage("teleport " + portal.getId() + " -> " + target.getId()); player.sendMessage("teleport " + portal.getId() + " -> " + target.getId());
}
Vector normalized = portal.normalize(to); Vector normalized = portal.normalize(to);
if (target.getDepth() != 0.0) { if (target.getDepth() != 0.0) {
@@ -42,8 +42,7 @@ public class AdventListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void handlePlayerInteract(PlayerInteractEvent event) { public void handlePlayerInteract(PlayerInteractEvent event) {
ItemStack item = event.getItem(); ItemStack item = event.getItem();
if (item == null) if (item == null) return;
return;
if (item.getType() == Material.PLAYER_HEAD && item.getItemMeta() != null && item.getItemMeta().getDisplayName().equals("§fAdvent")) { if (item.getType() == Material.PLAYER_HEAD && item.getItemMeta() != null && item.getItemMeta().getDisplayName().equals("§fAdvent")) {
event.getPlayer().performCommand("advent"); event.getPlayer().performCommand("advent");
@@ -44,8 +44,9 @@ public class PresentClickListener implements Listener {
} }
AdventsCalendar.getPresentList().forEach(present -> { AdventsCalendar.getPresentList().forEach(present -> {
if (present.getDay() != day) return; if (present.getDay() != day) return;
if (NodeMember.getNodeMember(present.getSchematicId(), SteamwarUser.get(event.getPlayer().getUniqueId()).getId()) != null) if (NodeMember.getNodeMember(present.getSchematicId(), SteamwarUser.get(event.getPlayer().getUniqueId()).getId()) != null) {
return; return;
}
LobbySystem.getMessage().send("ADVENT_CALENDAR_MESSAGE", event.getPlayer()); LobbySystem.getMessage().send("ADVENT_CALENDAR_MESSAGE", event.getPlayer());
}); });
} }
@@ -42,8 +42,7 @@ public class EggHuntListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void handlePlayerInteract(PlayerInteractEvent event) { public void handlePlayerInteract(PlayerInteractEvent event) {
ItemStack item = event.getItem(); ItemStack item = event.getItem();
if (item == null) if (item == null) return;
return;
if (item.getType() == Material.DRAGON_EGG && item.getItemMeta() != null && item.getItemMeta().getDisplayName().equals("§fEaster Hunt")) { if (item.getType() == Material.DRAGON_EGG && item.getItemMeta() != null && item.getItemMeta().getDisplayName().equals("§fEaster Hunt")) {
event.getPlayer().performCommand("egg"); event.getPlayer().performCommand("egg");
@@ -179,8 +179,9 @@ public class MWTeam {
p.getInventory().setItem(0, bow); p.getInventory().setItem(0, bow);
sbteam.addPlayer(p); sbteam.addPlayer(p);
p.setDisplayName(color + p.getName()); p.setDisplayName(color + p.getName());
if (MissileWars.getFightState() == FightState.WAITING && !enemy().players.isEmpty()) if (MissileWars.getFightState() == FightState.WAITING && !enemy().players.isEmpty()) {
MissileWars.startRound(); MissileWars.startRound();
}
} }
public void leave(Player p) { public void leave(Player p) {
@@ -56,8 +56,7 @@ public class SpawnPlatformCreator {
if (currentBlock == null || !currentBlock.getLocation().equals(playerLoc)) { if (currentBlock == null || !currentBlock.getLocation().equals(playerLoc)) {
if (currentBlock != null) { if (currentBlock != null) {
if (currentBlock.getType() == Material.OBSIDIAN) if (currentBlock.getType() == Material.OBSIDIAN) currentBlock.setType(Material.AIR);
currentBlock.setType(Material.AIR);
currentBlock = null; currentBlock = null;
} }
@@ -105,8 +105,7 @@ public class AutoChecker {
} }
List<CompoundTag> items = nbt.getList("Items", CompoundTag.class); List<CompoundTag> items = nbt.getList("Items", CompoundTag.class);
if (items.isEmpty()) if (items.isEmpty()) return; // Leeres Inventar
return; // Leeres Inventar
int counter = 0; int counter = 0;
int windChargeCount = 0; int windChargeCount = 0;
@@ -117,12 +117,15 @@ public class AutoCheckerResult {
public void sendErrorMessage(Player p, String schemName) { public void sendErrorMessage(Player p, String schemName) {
SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_HEADER", p, schemName); SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_HEADER", p, schemName);
if (isTooWide()) if (isTooWide()) {
SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_WIDTH", p, width, type.Schematic.Size.x); SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_WIDTH", p, width, type.Schematic.Size.x);
if (isTooHigh()) }
if (isTooHigh()) {
SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_HEIGHT", p, height, type.Schematic.Size.y); SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_HEIGHT", p, height, type.Schematic.Size.y);
if (isTooDeep()) }
if (isTooDeep()) {
SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_LENGTH", p, depth, type.Schematic.Size.z); SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_LENGTH", p, depth, type.Schematic.Size.z);
}
if (type.Schematic.MaxBlocks != 0 && !isBlockCountOk()) { if (type.Schematic.MaxBlocks != 0 && !isBlockCountOk()) {
SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_BLOCKS", p, blockScanResult.getBlockCounts().values().stream().reduce(Integer::sum).orElse(0), type.Schematic.MaxBlocks); SchematicSystem.MESSAGE.sendPrefixless("AUTO_CHECKER_RESULT_BLOCKS", p, blockScanResult.getBlockCounts().values().stream().reduce(Integer::sum).orElse(0), type.Schematic.MaxBlocks);
} }
@@ -297,8 +297,7 @@ public class GUI {
SWInventory inv = new SWInventory(p, 9, SchematicSystem.MESSAGE.parse("GUI_DELETE_MEMBER_TITLE", p, schem.generateBreadcrumbs(user))); SWInventory inv = new SWInventory(p, 9, SchematicSystem.MESSAGE.parse("GUI_DELETE_MEMBER_TITLE", p, schem.generateBreadcrumbs(user)));
inv.setItem(0, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("CONFIRM", p), click -> { inv.setItem(0, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("CONFIRM", p), click -> {
NodeMember member = NodeMember.getNodeMember(schem.getId(), user.getId()); NodeMember member = NodeMember.getNodeMember(schem.getId(), user.getId());
if (member != null) if (member != null) member.delete();
member.delete();
SchematicSystem.MESSAGE.send("GUI_DELETE_MEMBER_DONE", p, schem.generateBreadcrumbs(user)); SchematicSystem.MESSAGE.send("GUI_DELETE_MEMBER_DONE", p, schem.generateBreadcrumbs(user));
if (back != null) { if (back != null) {
if (schem.isDir()) { if (schem.isDir()) {
@@ -314,10 +313,11 @@ public class GUI {
} }
static void delete(Player p, SchematicNode schem, SchematicSelector back) { static void delete(Player p, SchematicNode schem, SchematicSelector back) {
if (SteamwarUser.get(p.getUniqueId()).getId() == schem.getOwner()) if (SteamwarUser.get(p.getUniqueId()).getId() == schem.getOwner()) {
deleteOwn(p, schem, back); deleteOwn(p, schem, back);
else } else {
deleteMembership(p, schem, back); deleteMembership(p, schem, back);
}
} }
static void delmembers(Player p, SchematicNode schem) { static void delmembers(Player p, SchematicNode schem) {
@@ -100,14 +100,12 @@ public class SavePart extends SWCommand {
SchematicData.saveFromPlayer(player, node); SchematicData.saveFromPlayer(player, node);
} catch (NoClipboardException e) { } catch (NoClipboardException e) {
SchematicSystem.MESSAGE.send("COMMAND_SAVE_CLIPBOARD_EMPTY", player); SchematicSystem.MESSAGE.send("COMMAND_SAVE_CLIPBOARD_EMPTY", player);
if (newSchem) if (newSchem) node.delete();
node.delete();
return; return;
} catch (Exception ex) { } catch (Exception ex) {
Bukkit.getLogger().log(Level.SEVERE, "Could not save schematic", ex); Bukkit.getLogger().log(Level.SEVERE, "Could not save schematic", ex);
SchematicSystem.MESSAGE.send("COMMAND_SAVE_ERROR", player); SchematicSystem.MESSAGE.send("COMMAND_SAVE_ERROR", player);
if (newSchem) if (newSchem) node.delete();
node.delete();
return; return;
} }
@@ -165,8 +165,7 @@ public class TinyProtocol {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public final void onPlayerLogin(PlayerLoginEvent e) { public final void onPlayerLogin(PlayerLoginEvent e) {
if (closed) if (closed) return;
return;
Channel channel = getChannel(e.getPlayer()); Channel channel = getChannel(e.getPlayer());
@@ -201,8 +200,7 @@ public class TinyProtocol {
List<Object> list = Reflection.getField(serverConnection.getClass(), List.class, i).get(serverConnection); List<Object> list = Reflection.getField(serverConnection.getClass(), List.class, i).get(serverConnection);
for (Object item : list) { for (Object item : list) {
if (!(item instanceof ChannelFuture)) if (!(item instanceof ChannelFuture)) break;
break;
// Channel future that contains the server connection // Channel future that contains the server connection
Channel serverChannel = ((ChannelFuture) item).channel(); Channel serverChannel = ((ChannelFuture) item).channel();
@@ -215,8 +213,7 @@ public class TinyProtocol {
} }
private void unregisterChannelHandler() { private void unregisterChannelHandler() {
if (serverChannelHandler == null) if (serverChannelHandler == null) return;
return;
for (Channel serverChannel : serverChannels) { for (Channel serverChannel : serverChannels) {
final ChannelPipeline pipeline = serverChannel.pipeline(); final ChannelPipeline pipeline = serverChannel.pipeline();
@@ -226,25 +226,25 @@ public final class Reflection {
} }
// Search in parent classes // Search in parent classes
if (target.getSuperclass() != null) if (target.getSuperclass() != null) {
return getField(target.getSuperclass(), name, fieldType, index); return getField(target.getSuperclass(), name, fieldType, index);
}
throw new IllegalArgumentException("Cannot find field with type " + fieldType); throw new IllegalArgumentException("Cannot find field with type " + fieldType);
} }
private static <T> boolean matching(java.lang.reflect.Field field, String name, Class<T> fieldType, Class<?>... parameters) { private static <T> boolean matching(java.lang.reflect.Field field, String name, Class<T> fieldType, Class<?>... parameters) {
if (name != null && !field.getName().equals(name)) if (name != null && !field.getName().equals(name)) return false;
return false;
if (!fieldType.isAssignableFrom(field.getType())) if (!fieldType.isAssignableFrom(field.getType())) return false;
return false;
if (parameters.length > 0) { if (parameters.length > 0) {
Type[] arguments = ((ParameterizedType) field.getGenericType()).getActualTypeArguments(); Type[] arguments = ((ParameterizedType) field.getGenericType()).getActualTypeArguments();
for (int i = 0; i < parameters.length; i++) { for (int i = 0; i < parameters.length; i++) {
if (arguments[i] instanceof ParameterizedType ? ((ParameterizedType) arguments[i]).getRawType() != parameters[i] : arguments[i] != parameters[i]) if (arguments[i] instanceof ParameterizedType ? ((ParameterizedType) arguments[i]).getRawType() != parameters[i] : arguments[i] != parameters[i]) {
return false; return false;
}
} }
} }
return true; return true;
@@ -274,8 +274,9 @@ public final class Reflection {
} }
// Search in every superclass // Search in every superclass
if (clazz.getSuperclass() != null) if (clazz.getSuperclass() != null) {
return getTypedMethod(clazz.getSuperclass(), methodName, returnType, params); return getTypedMethod(clazz.getSuperclass(), methodName, returnType, params);
}
throw new IllegalArgumentException(String.format("Cannot find method %s (%s).", methodName, Arrays.asList(params))); throw new IllegalArgumentException(String.format("Cannot find method %s (%s).", methodName, Arrays.asList(params)));
} }
@@ -131,7 +131,6 @@ public class Core extends JavaPlugin {
public void onDisable() { public void onDisable() {
TinyProtocol.instance.close(); TinyProtocol.instance.close();
errorHandler.unregister(); errorHandler.unregister();
if (crashDetector.onMainThread()) if (crashDetector.onMainThread()) Statement.closeAll();
Statement.closeAll();
} }
} }
@@ -51,29 +51,30 @@ public class ErrorHandler extends Handler {
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void publish(LogRecord logRecord) { public void publish(LogRecord logRecord) {
if (logRecord.getLevel().intValue() < Level.WARNING.intValue()) if (logRecord.getLevel().intValue() < Level.WARNING.intValue()) return;
return;
if (watchdogThreadId == logRecord.getThreadID()) if (watchdogThreadId == logRecord.getThreadID()) return;
return;
String message = logRecord.getMessage() != null ? logRecord.getMessage() : ""; String message = logRecord.getMessage() != null ? logRecord.getMessage() : "";
for (String reason : ignoreStartsWith) for (String reason : ignoreStartsWith) {
if (message.startsWith(reason)) if (message.startsWith(reason)) return;
return; }
for (String reason : ignoreContains) for (String reason : ignoreContains) {
if (message.contains(reason)) if (message.contains(reason)) return;
return; }
ByteArrayOutputStream stacktraceOutput = new ByteArrayOutputStream(); ByteArrayOutputStream stacktraceOutput = new ByteArrayOutputStream();
if (logRecord.getThrown() != null) if (logRecord.getThrown() != null) {
logRecord.getThrown().printStackTrace(new PrintStream(stacktraceOutput)); logRecord.getThrown().printStackTrace(new PrintStream(stacktraceOutput));
}
String stacktrace = stacktraceOutput.toString(); String stacktrace = stacktraceOutput.toString();
if (stacktrace.contains("POI data mismatch") || stacktrace.contains("Newer version! Server downgrades are not supported!")) if (stacktrace.contains("POI data mismatch") || stacktrace.contains("Newer version! Server downgrades are not supported!")) {
return; return;
}
if (message.isEmpty() && stacktrace.isEmpty()) if (message.isEmpty() && stacktrace.isEmpty()) {
return; return;
}
try { try {
SWException.log(message, stacktrace); SWException.log(message, stacktrace);
@@ -153,8 +153,9 @@ public class SWPlayer {
private Message getMessage() { private Message getMessage() {
Message message = this.messageThreadLocal.get(); Message message = this.messageThreadLocal.get();
if (message == null) if (message == null) {
throw new IllegalStateException("Use #using(Message) before sending or parsing a message!"); throw new IllegalStateException("Use #using(Message) before sending or parsing a message!");
}
return message; return message;
} }
@@ -36,8 +36,9 @@ public class TPSWatcher {
Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> { Bukkit.getScheduler().runTaskTimer(Core.getInstance(), () -> {
long currentTime = System.currentTimeMillis(); long currentTime = System.currentTimeMillis();
if (currentTime > lastTime) if (currentTime > lastTime) {
tps = (timeInterval / (double) (currentTime - lastTime)) * TICK_DEFAULT; tps = (timeInterval / (double) (currentTime - lastTime)) * TICK_DEFAULT;
}
lastTime = currentTime; lastTime = currentTime;
}, timeInterval / 50, timeInterval / 50); }, timeInterval / 50, timeInterval / 50);
@@ -187,8 +187,7 @@ public class WorldEditWrapper {
} }
Clipboard clipboard = clipboardHolder.getClipboard(); Clipboard clipboard = clipboardHolder.getClipboard();
if (clipboard == null) if (clipboard == null) throw new NoClipboardException();
throw new NoClipboardException();
PipedOutputStream outputStream = new PipedOutputStream(); PipedOutputStream outputStream = new PipedOutputStream();
PipedInputStream inputStream; PipedInputStream inputStream;
@@ -78,13 +78,16 @@ public class AntiNocom implements Listener {
} }
private boolean isValid(Player player, String type, int x, int z) { private boolean isValid(Player player, String type, int x, int z) {
if ((x == 0 && z == 0) || player.getWorld().isChunkLoaded(ProtocolUtils.posToChunk(x), ProtocolUtils.posToChunk(z))) if ((x == 0 && z == 0) || player.getWorld().isChunkLoaded(ProtocolUtils.posToChunk(x), ProtocolUtils.posToChunk(z))) {
return true; return true;
}
int amount = flags.compute(player, (p, a) -> a == null ? 1 : a + 1); int amount = flags.compute(player, (p, a) -> a == null ? 1 : a + 1);
if (amount % 8 == 0) { // Only after 8 and every 8 to reduce false flags and spam if (amount % 8 == 0) { // Only after 8 and every 8 to reduce false flags and spam
if (amount == 8) // Schedule player kick only once if (amount == 8) {
// Schedule player kick only once
Bukkit.getScheduler().runTask(Core.getInstance(), () -> player.kickPlayer(null)); Bukkit.getScheduler().runTask(Core.getInstance(), () -> player.kickPlayer(null));
}
SWException.log(player.getName() + " kicked for potential NoCom-DOS attack", x + " " + z + " " + type + " " + amount); SWException.log(player.getName() + " kicked for potential NoCom-DOS attack", x + " " + z + " " + type + " " + amount);
} }
@@ -44,8 +44,9 @@ public class RArmorStand extends REntity {
void spawn(Consumer<Object> packetSink) { void spawn(Consumer<Object> packetSink) {
super.spawn(packetSink); super.spawn(packetSink);
if (size != null && size != Size.NORMAL) if (size != null && size != Size.NORMAL) {
packetSink.accept(getDataWatcherPacket(sizeWatcher, size.value)); packetSink.accept(getDataWatcherPacket(sizeWatcher, size.value));
}
} }
public enum Size { public enum Size {
@@ -123,8 +123,7 @@ public class REntity {
} }
public void hide(boolean hide) { public void hide(boolean hide) {
if (hidden == hide) if (hidden == hide) return;
return;
if (hide) { if (hide) {
despawn(packet -> server.updateEntity(this, packet)); despawn(packet -> server.updateEntity(this, packet));
@@ -160,8 +159,9 @@ public class REntity {
if (Math.abs(diffX) < MAX_REL_MOVE && Math.abs(diffY) < MAX_REL_MOVE && Math.abs(diffZ) < MAX_REL_MOVE) { if (Math.abs(diffX) < MAX_REL_MOVE && Math.abs(diffY) < MAX_REL_MOVE && Math.abs(diffZ) < MAX_REL_MOVE) {
Object packet = getMoveLookPacket(diffX, diffY, diffZ, rotEq); Object packet = getMoveLookPacket(diffX, diffY, diffZ, rotEq);
if (packet != null) if (packet != null) {
server.updateEntity(this, packet); server.updateEntity(this, packet);
}
} else { } else {
server.updateEntity(this, getTeleportPacket()); server.updateEntity(this, getTeleportPacket());
} }
@@ -321,15 +321,10 @@ public class REntity {
private byte getEntityStatus() { private byte getEntityStatus() {
byte status = 0; byte status = 0;
if (fireTick != 0) if (fireTick != 0) status |= 1;
status |= 1; if (pose == Pose.CROUCHING) status |= 2;
if (pose == Pose.CROUCHING) if (invisible) status |= 0x20;
status |= 2; if (isGlowing) status |= 0x40;
if (invisible)
status |= 0x20;
if (isGlowing)
status |= 0x40;
return status; return status;
} }
@@ -56,11 +56,9 @@ public class REntityServer implements Listener {
private final BiFunction<Player, ServerboundInteractPacket, Object> filter = (player, packet) -> { private final BiFunction<Player, ServerboundInteractPacket, Object> filter = (player, packet) -> {
REntity entity = entityMap.get(packet.getEntityId()); REntity entity = entityMap.get(packet.getEntityId());
if (entity == null) if (entity == null) return packet;
return packet;
if (playersThatClicked.contains(player)) if (playersThatClicked.contains(player)) return null;
return null;
playersThatClicked.add(player); playersThatClicked.add(player);
EntityAction action = packet.isAttack() ? EntityAction.ATTACK : EntityAction.INTERACT; EntityAction action = packet.isAttack() ? EntityAction.ATTACK : EntityAction.INTERACT;
@@ -79,8 +77,9 @@ public class REntityServer implements Listener {
boolean uninitialized = this.callback == null; boolean uninitialized = this.callback == null;
this.callback = callback; this.callback = callback;
if (uninitialized) if (uninitialized) {
TinyProtocol.instance.addTypedFilter(ServerboundInteractPacket.class, filter); TinyProtocol.instance.addTypedFilter(ServerboundInteractPacket.class, filter);
}
} }
public void addPlayer(Player player) { public void addPlayer(Player player) {
@@ -120,11 +119,11 @@ public class REntityServer implements Listener {
void preEntityMove(REntity entity, double toX, double toZ) { void preEntityMove(REntity entity, double toX, double toZ) {
long fromId = entityToId(entity); long fromId = entityToId(entity);
long toId = posToId(toX, toZ); long toId = posToId(toX, toZ);
if (fromId == toId) if (fromId == toId) return;
return;
if (!entity.isHidden()) if (!entity.isHidden()) {
onMissing(players.get(fromId), players.get(toId), entity::despawn); onMissing(players.get(fromId), players.get(toId), entity::despawn);
}
onMissing(players.get(fromId), players.get(toId), entity::delist); onMissing(players.get(fromId), players.get(toId), entity::delist);
removeEntityFromChunk(entity); removeEntityFromChunk(entity);
} }
@@ -132,18 +131,17 @@ public class REntityServer implements Listener {
void postEntityMove(REntity entity, double fromX, double fromZ) { void postEntityMove(REntity entity, double fromX, double fromZ) {
long fromId = posToId(fromX, fromZ); long fromId = posToId(fromX, fromZ);
long toId = entityToId(entity); long toId = entityToId(entity);
if (fromId == toId) if (fromId == toId) return;
return;
addEntityToChunk(entity); addEntityToChunk(entity);
onMissing(players.get(toId), players.get(fromId), entity::list); onMissing(players.get(toId), players.get(fromId), entity::list);
if (!entity.isHidden()) if (!entity.isHidden()) {
onMissing(players.get(toId), players.get(fromId), entity::spawn); onMissing(players.get(toId), players.get(fromId), entity::spawn);
}
} }
void updateEntity(REntity entity, Object packet) { void updateEntity(REntity entity, Object packet) {
if (entity.isHidden()) if (entity.isHidden()) return;
return;
for (Player player : players.getOrDefault(entityToId(entity), emptyPlayers)) { for (Player player : players.getOrDefault(entityToId(entity), emptyPlayers)) {
TinyProtocol.instance.sendPacket(player, packet); TinyProtocol.instance.sendPacket(player, packet);
@@ -174,8 +172,7 @@ public class REntityServer implements Listener {
HashSet<REntity> entitiesInChunk = entities.get(id); HashSet<REntity> entitiesInChunk = entities.get(id);
if (entitiesInChunk == null) return; if (entitiesInChunk == null) return;
entitiesInChunk.remove(entity); entitiesInChunk.remove(entity);
if (entitiesInChunk.isEmpty()) if (entitiesInChunk.isEmpty()) entities.remove(id);
entities.remove(id);
} }
@EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR)
@@ -183,15 +180,13 @@ public class REntityServer implements Listener {
Player player = e.getPlayer(); Player player = e.getPlayer();
Location from = lastLocation.get(player); Location from = lastLocation.get(player);
Location to = e.getTo(); Location to = e.getTo();
if (from == null || to == null) if (from == null || to == null) return;
return;
int fromX = posToChunk(from.getX()); int fromX = posToChunk(from.getX());
int fromZ = posToChunk(from.getZ()); int fromZ = posToChunk(from.getZ());
int toX = posToChunk(to.getX()); int toX = posToChunk(to.getX());
int toZ = posToChunk(to.getZ()); int toZ = posToChunk(to.getZ());
if (fromX == toX && fromZ == toZ) if (fromX == toX && fromZ == toZ) return;
return;
lastLocation.put(player, to); lastLocation.put(player, to);
@@ -214,22 +209,19 @@ public class REntityServer implements Listener {
public void onQuit(PlayerQuitEvent e) { public void onQuit(PlayerQuitEvent e) {
Player player = e.getPlayer(); Player player = e.getPlayer();
Location location = lastLocation.remove(player); Location location = lastLocation.remove(player);
if (location == null) if (location == null) return;
return;
forChunkInView(player, location, (x, z) -> { forChunkInView(player, location, (x, z) -> {
long id = chunkToId(x, z); long id = chunkToId(x, z);
Set<Player> playersInChunk = players.get(id); Set<Player> playersInChunk = players.get(id);
playersInChunk.remove(player); playersInChunk.remove(player);
if (playersInChunk.isEmpty()) if (playersInChunk.isEmpty()) players.remove(id);
players.remove(id);
}); });
viewDistance.remove(player); viewDistance.remove(player);
} }
private void onMissing(Set<Player> of, Set<Player> in, Consumer<Consumer<Object>> packetProvider) { private void onMissing(Set<Player> of, Set<Player> in, Consumer<Consumer<Object>> packetProvider) {
if (of == null) if (of == null) return;
return;
for (Player player : of) { for (Player player : of) {
if (in == null || !in.contains(player)) { if (in == null || !in.contains(player)) {
@@ -255,8 +247,9 @@ public class REntityServer implements Listener {
players.computeIfAbsent(id, i -> new HashSet<>()).add(player); players.computeIfAbsent(id, i -> new HashSet<>()).add(player);
for (REntity entity : entities.getOrDefault(id, emptyEntities)) { for (REntity entity : entities.getOrDefault(id, emptyEntities)) {
entity.list(packet -> TinyProtocol.instance.sendPacket(player, packet)); entity.list(packet -> TinyProtocol.instance.sendPacket(player, packet));
if (!entity.isHidden()) if (!entity.isHidden()) {
entity.spawn(packet -> TinyProtocol.instance.sendPacket(player, packet)); entity.spawn(packet -> TinyProtocol.instance.sendPacket(player, packet));
}
} }
} }
@@ -265,12 +258,12 @@ public class REntityServer implements Listener {
Set<Player> playersInChunk = players.get(id); Set<Player> playersInChunk = players.get(id);
playersInChunk.remove(player); playersInChunk.remove(player);
if (playersInChunk.isEmpty()) if (playersInChunk.isEmpty()) players.remove(id);
players.remove(id);
for (REntity entity : entities.getOrDefault(id, emptyEntities)) { for (REntity entity : entities.getOrDefault(id, emptyEntities)) {
if (!entity.isHidden()) if (!entity.isHidden()) {
entity.despawn(packet -> TinyProtocol.instance.sendPacket(player, packet)); entity.despawn(packet -> TinyProtocol.instance.sendPacket(player, packet));
}
entity.delist(packet -> TinyProtocol.instance.sendPacket(player, packet)); entity.delist(packet -> TinyProtocol.instance.sendPacket(player, packet));
} }
} }
@@ -83,15 +83,13 @@ public class SWAnvilInv {
private List<AnvilGUI.ResponseAction> onResult(Integer slot, AnvilGUI.StateSnapshot state) { private List<AnvilGUI.ResponseAction> onResult(Integer slot, AnvilGUI.StateSnapshot state) {
if (slot != AnvilGUI.Slot.OUTPUT) { if (slot != AnvilGUI.Slot.OUTPUT) {
if (slot == AnvilGUI.Slot.INPUT_LEFT && leftCallback != null) if (slot == AnvilGUI.Slot.INPUT_LEFT && leftCallback != null) leftCallback.run();
leftCallback.run();
return Collections.emptyList(); return Collections.emptyList();
} }
String s = state.getText(); String s = state.getText();
if (s.startsWith("»")) if (s.startsWith("»")) s = s.substring(1);
s = s.substring(1);
callback.accept(s); callback.accept(s);
player.setLevel(0); player.setLevel(0);
return Collections.singletonList(AnvilGUI.ResponseAction.close()); return Collections.singletonList(AnvilGUI.ResponseAction.close());
@@ -156,8 +156,7 @@ public class SWInventory implements Listener {
@EventHandler @EventHandler
public void onInventoryClick(InventoryClickEvent e) { public void onInventoryClick(InventoryClickEvent e) {
if (!player.equals(e.getWhoClicked())) if (!player.equals(e.getWhoClicked())) return;
return;
if (callbacks.containsKey(e.getRawSlot()) && callbacks.get(e.getRawSlot()) != null) { if (callbacks.containsKey(e.getRawSlot()) && callbacks.get(e.getRawSlot()) != null) {
e.setCancelled(true); e.setCancelled(true);
@@ -169,8 +168,7 @@ public class SWInventory implements Listener {
@EventHandler @EventHandler
public void onInventoryClose(InventoryCloseEvent e) { public void onInventoryClose(InventoryCloseEvent e) {
if (!player.equals(e.getPlayer())) if (!player.equals(e.getPlayer())) return;
return;
InventoryClickEvent.getHandlerList().unregister(this); InventoryClickEvent.getHandlerList().unregister(this);
InventoryCloseEvent.getHandlerList().unregister(this); InventoryCloseEvent.getHandlerList().unregister(this);
@@ -132,8 +132,9 @@ public class SWItem {
item.setName(itemJson.get("title").getAsString()); item.setName(itemJson.get("title").getAsString());
} }
if (itemJson.has("enchanted")) if (itemJson.has("enchanted")) {
item.setEnchanted(true); item.setEnchanted(true);
}
if (itemJson.has("lore")) { if (itemJson.has("lore")) {
List<String> lore = new ArrayList<>(); List<String> lore = new ArrayList<>();
JsonArray loreArray = itemJson.getAsJsonArray("lore"); JsonArray loreArray = itemJson.getAsJsonArray("lore");
@@ -141,8 +142,9 @@ public class SWItem {
item.setLore(lore); item.setLore(lore);
} }
if (itemJson.has("customModelData")) if (itemJson.has("customModelData")) {
item.setCustomModelData(itemJson.get("customModelData").getAsInt()); item.setCustomModelData(itemJson.get("customModelData").getAsInt());
}
return item; return item;
} }
@@ -111,8 +111,7 @@ public class SWListInv<T> extends SWInventory {
@Override @Override
public void setItem(int pos, SWItem item) { public void setItem(int pos, SWItem item) {
super.setItem(pos, item); super.setItem(pos, item);
if (!opened) if (!opened) customItems.put(pos, item);
customItems.put(pos, item);
} }
public void setCallback(ListCallback<T> c) { public void setCallback(ListCallback<T> c) {
@@ -122,8 +121,7 @@ public class SWListInv<T> extends SWInventory {
public static List<SWListEntry<UUID>> createPlayerList(UUID without) { public static List<SWListEntry<UUID>> createPlayerList(UUID without) {
List<SWListEntry<UUID>> onlinePlayers = new ArrayList<>(); List<SWListEntry<UUID>> onlinePlayers = new ArrayList<>();
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
if (without != null && player.getUniqueId().equals(without)) if (without != null && player.getUniqueId().equals(without)) continue;
continue;
onlinePlayers.add(new SWListEntry<>(SWItem.getPlayerSkull(player), player.getUniqueId())); onlinePlayers.add(new SWListEntry<>(SWItem.getPlayerSkull(player), player.getUniqueId()));
} }
@@ -134,17 +132,19 @@ public class SWListInv<T> extends SWInventory {
List<SWListEntry<SchematicNode>> schemList = new ArrayList<>(); List<SWListEntry<SchematicNode>> schemList = new ArrayList<>();
List<SchematicNode> schems; List<SchematicNode> schems;
if (type == null) if (type == null) {
schems = SchematicNode.getAllSchematicsAccessibleByUser(steamwarUserId); schems = SchematicNode.getAllSchematicsAccessibleByUser(steamwarUserId);
else } else {
schems = SchematicNode.getAllAccessibleSchematicsOfType(steamwarUserId, type.toDB()); schems = SchematicNode.getAllAccessibleSchematicsOfType(steamwarUserId, type.toDB());
}
for (SchematicNode s : schems) { for (SchematicNode s : schems) {
Material m; Material m;
if (s.getItem().isEmpty()) if (s.getItem().isEmpty()) {
m = Material.CAULDRON; m = Material.CAULDRON;
else } else {
m = SWItem.getMaterial(s.getItem()); m = SWItem.getMaterial(s.getItem());
}
SWItem item = new SWItem(m, "§e" + s.getName()); SWItem item = new SWItem(m, "§e" + s.getName());
item.setEnchanted(s.isDir()); item.setEnchanted(s.isDir());
schemList.add(new SWListEntry<>(item, s)); schemList.add(new SWListEntry<>(item, s));
@@ -38,8 +38,7 @@ public class UtilGui {
public static void openMaterialSelector(Player player, String title, Consumer<Material> callback) { public static void openMaterialSelector(Player player, String title, Consumer<Material> callback) {
List<SWListInv.SWListEntry<Material>> materials = new LinkedList<>(); List<SWListInv.SWListEntry<Material>> materials = new LinkedList<>();
for (Material material : Material.values()) { for (Material material : Material.values()) {
if (material.name().startsWith(Material.LEGACY_PREFIX) || !material.isItem()) if (material.name().startsWith(Material.LEGACY_PREFIX) || !material.isItem()) continue;
continue;
SWItem item = new SWItem(material, "§7" + material.name()); SWItem item = new SWItem(material, "§7" + material.name());
if (item.getItemMeta() != null && material.isItem()) { if (item.getItemMeta() != null && material.isItem()) {
materials.add(new SWListInv.SWListEntry<>(item, material)); materials.add(new SWListInv.SWListEntry<>(item, material));
@@ -58,15 +58,15 @@ public class Message {
private String parse(String message, boolean prefixed, CommandSender sender, Object... params) { private String parse(String message, boolean prefixed, CommandSender sender, Object... params) {
Locale locale; Locale locale;
if (sender instanceof Player) if (sender instanceof Player) {
locale = getLocale((Player) sender); locale = getLocale((Player) sender);
else } else {
locale = Locale.getDefault(); locale = Locale.getDefault();
}
ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundleName, locale, classLoader); ResourceBundle resourceBundle = ResourceBundle.getBundle(resourceBundleName, locale, classLoader);
String pattern = ""; String pattern = "";
if (prefixed) if (prefixed) pattern = fromRB(resourceBundle, "PREFIX") + " ";
pattern = fromRB(resourceBundle, "PREFIX") + " ";
pattern += fromRB(resourceBundle, message); pattern += fromRB(resourceBundle, message);
for (int i = 0; i < params.length; i++) { for (int i = 0; i < params.length; i++) {
@@ -115,15 +115,18 @@ public class Message {
public void send(String message, boolean prefixed, CommandSender sender, ChatMessageType type, String onHover, ClickEvent onClick, Object... params) { public void send(String message, boolean prefixed, CommandSender sender, ChatMessageType type, String onHover, ClickEvent onClick, Object... params) {
TextComponent msg = parseToComponent(message, prefixed, sender, params); TextComponent msg = parseToComponent(message, prefixed, sender, params);
if (onHover != null) if (onHover != null) {
msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(onHover))); msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(onHover)));
if (onClick != null) }
if (onClick != null) {
msg.setClickEvent(onClick); msg.setClickEvent(onClick);
}
if (sender instanceof Player) if (sender instanceof Player) {
BountifulWrapper.impl.sendMessage((Player) sender, type, msg); BountifulWrapper.impl.sendMessage((Player) sender, type, msg);
else } else {
sender.sendMessage(msg.toPlainText()); sender.sendMessage(msg.toPlainText());
}
} }
/* Send message to all players */ /* Send message to all players */
@@ -51,8 +51,9 @@ public class InventoryHandler extends PacketHandler {
SWInventory inventory = new SWInventory(player, packet.getSize(), packet.getTitle(), items); SWInventory inventory = new SWInventory(player, packet.getSize(), packet.getTitle(), items);
inventory.addCloseCallback(click -> { inventory.addCloseCallback(click -> {
if (player.getOpenInventory().getType() != InventoryType.CHEST) if (player.getOpenInventory().getType() != InventoryType.CHEST) {
NetworkSender.send(InventoryCallbackPacket.builder().owner(packet.getPlayer()).type(InventoryCallbackPacket.CallbackType.CLOSE).build(), player); NetworkSender.send(InventoryCallbackPacket.builder().owner(packet.getPlayer()).type(InventoryCallbackPacket.CallbackType.CLOSE).build(), player);
}
}); });
inventory.open(); inventory.open();
} }
@@ -85,8 +85,7 @@ public class PersonalKit {
public static PersonalKit get(int userID, String gamemode, String name) { public static PersonalKit get(int userID, String gamemode, String name) {
InternalKit kit = InternalKit.get(userID, gamemode, name); InternalKit kit = InternalKit.get(userID, gamemode, name);
if (kit == null) if (kit == null) return null;
return null;
return new PersonalKit(kit); return new PersonalKit(kit);
} }
@@ -97,8 +96,7 @@ public class PersonalKit {
public static PersonalKit getKitInUse(int userID, String gamemode) { public static PersonalKit getKitInUse(int userID, String gamemode) {
InternalKit kit = InternalKit.getKitInUse(userID, gamemode); InternalKit kit = InternalKit.getKitInUse(userID, gamemode);
if (kit == null) if (kit == null) return null;
return null;
return new PersonalKit(kit); return new PersonalKit(kit);
} }
@@ -32,13 +32,11 @@ public class SchematicData {
public SchematicData(SchematicNode node) { public SchematicData(SchematicNode node) {
this.data = NodeData.getLatest(node); this.data = NodeData.getLatest(node);
if (node.isDir()) if (node.isDir()) throw new SecurityException("Node is Directory");
throw new SecurityException("Node is Directory");
} }
public SchematicData(SchematicNode node, int revision) { public SchematicData(SchematicNode node, int revision) {
if (node.isDir()) if (node.isDir()) throw new SecurityException("Node is Directory");
throw new SecurityException("Node is Directory");
if (revision < 1) { if (revision < 1) {
this.data = NodeData.getLatest(node); this.data = NodeData.getLatest(node);
@@ -60,8 +60,9 @@ public class ChunkHider {
return (p, packet) -> { return (p, packet) -> {
int chunkX = chunkXField.get(packet); int chunkX = chunkXField.get(packet);
int chunkZ = chunkZField.get(packet); int chunkZ = chunkZField.get(packet);
if (techHider.getLocationEvaluator().skipChunk(p, chunkX, chunkZ)) if (techHider.getLocationEvaluator().skipChunk(p, chunkX, chunkZ)) {
return packet; return packet;
}
packet = chunkPacketCloner.apply(packet); packet = chunkPacketCloner.apply(packet);
Object dataWrapper = chunkDataCloner.apply(chunkData.get(packet)); Object dataWrapper = chunkDataCloner.apply(chunkData.get(packet));
@@ -134,8 +135,9 @@ public class ChunkHider {
case SKIP: case SKIP:
break; break;
case CHECK: case CHECK:
if (!section.getObfuscate().contains(values.get(pos))) if (!section.getObfuscate().contains(values.get(pos))) {
break; break;
}
case HIDE: case HIDE:
values.set(pos, section.getTarget()); values.set(pos, section.getTarget());
break; break;
@@ -243,8 +245,7 @@ public class ChunkHider {
} }
int paletteLength = copyVarInt(); int paletteLength = copyVarInt();
if (paletteLength == 0) if (paletteLength == 0) return;
return;
paletted = true; paletted = true;
air = 0; air = 0;
@@ -252,13 +253,15 @@ public class ChunkHider {
for (int i = 0; i < paletteLength; i++) { for (int i = 0; i < paletteLength; i++) {
int entry = ProtocolUtils.readVarInt(in); int entry = ProtocolUtils.readVarInt(in);
if (obfuscate.contains(entry)) if (obfuscate.contains(entry)) {
entry = techHider.getObfuscationTargetId(); entry = techHider.getObfuscationTargetId();
}
if (entry == TechHider.AIR_ID) if (entry == TechHider.AIR_ID) {
air = i; air = i;
else if (entry == techHider.getObfuscationTargetId()) } else if (entry == techHider.getObfuscationTargetId()) {
target = i; target = i;
}
ProtocolUtils.writeVarInt(out, entry); ProtocolUtils.writeVarInt(out, entry);
} }
@@ -70,17 +70,17 @@ public class ProtocolUtils {
} }
private static BiConsumer<Object, Object> shallowFill(Class<?> clazz) { private static BiConsumer<Object, Object> shallowFill(Class<?> clazz) {
if (clazz == null) if (clazz == null) {
return (source, clone) -> { return (source, clone) -> {
}; };
}
BiConsumer<Object, Object> superFiller = shallowFill(clazz.getSuperclass()); BiConsumer<Object, Object> superFiller = shallowFill(clazz.getSuperclass());
Field[] fds = clazz.getDeclaredFields(); Field[] fds = clazz.getDeclaredFields();
List<Field> fields = new ArrayList<>(); List<Field> fields = new ArrayList<>();
for (Field field : fds) { for (Field field : fds) {
if (Modifier.isStatic(field.getModifiers())) if (Modifier.isStatic(field.getModifiers())) continue;
continue;
field.setAccessible(true); field.setAccessible(true);
fields.add(field); fields.add(field);
@@ -101,8 +101,7 @@ public class ProtocolUtils {
public static int posToChunk(int c) { public static int posToChunk(int c) {
int chunk = c / 16; int chunk = c / 16;
if (c < 0) if (c < 0) chunk--;
chunk--;
return chunk; return chunk;
} }
@@ -134,8 +133,7 @@ public class ProtocolUtils {
int value = (read & 0b01111111); int value = (read & 0b01111111);
result |= (value << (7 * numRead)); result |= (value << (7 * numRead));
if (++numRead > 5) if (++numRead > 5) throw new SecurityException("VarInt too long");
throw new SecurityException("VarInt too long");
} while ((read & 0b10000000) != 0); } while ((read & 0b10000000) != 0);
return result; return result;
@@ -43,8 +43,9 @@ public class ProtocolWrapper {
int chunkX = TechHider.blockPositionX.get(chunkCoords); int chunkX = TechHider.blockPositionX.get(chunkCoords);
int chunkY = TechHider.blockPositionY.get(chunkCoords); int chunkY = TechHider.blockPositionY.get(chunkCoords);
int chunkZ = TechHider.blockPositionZ.get(chunkCoords); int chunkZ = TechHider.blockPositionZ.get(chunkCoords);
if (locationEvaluator.skipChunkSection(p, chunkX, chunkY, chunkZ)) if (locationEvaluator.skipChunkSection(p, chunkX, chunkY, chunkZ)) {
return packet; return packet;
}
packet = TechHider.multiBlockChangeCloner.apply(packet); packet = TechHider.multiBlockChangeCloner.apply(packet);
final short[] oldPos = multiBlockChangePos.get(packet); final short[] oldPos = multiBlockChangePos.get(packet);
@@ -68,8 +69,7 @@ public class ProtocolWrapper {
} }
} }
if (blocks.isEmpty()) if (blocks.isEmpty()) return null;
return null;
short[] newPos = new short[poss.size()]; short[] newPos = new short[poss.size()];
for (int i = 0; i < newPos.length; i++) for (int i = 0; i < newPos.length; i++)
@@ -107,8 +107,9 @@ public class TechHider {
case SKIP: case SKIP:
return packet; return packet;
case CHECK: case CHECK:
if (!iBlockDataHidden((BlockState) blockChangeBlockData.get(packet))) if (!iBlockDataHidden((BlockState) blockChangeBlockData.get(packet))) {
return packet; return packet;
}
case HIDE: case HIDE:
packet = blockChangeCloner.apply(packet); packet = blockChangeCloner.apply(packet);
blockChangeBlockData.set(packet, obfuscationTarget); blockChangeBlockData.set(packet, obfuscationTarget);
@@ -125,8 +126,9 @@ public class TechHider {
private static final Reflection.Field<?> blockActionPosition = Reflection.getField(blockActionPacket, blockPosition, 0); private static final Reflection.Field<?> blockActionPosition = Reflection.getField(blockActionPacket, blockPosition, 0);
private Object blockActionHider(Player p, Object packet) { private Object blockActionHider(Player p, Object packet) {
if (locationEvaluator.checkBlockPos(p, blockActionPosition.get(packet)) == State.SKIP) if (locationEvaluator.checkBlockPos(p, blockActionPosition.get(packet)) == State.SKIP) {
return packet; return packet;
}
return null; return null;
} }
@@ -138,8 +140,9 @@ public class TechHider {
case SKIP: case SKIP:
return packet; return packet;
case CHECK: case CHECK:
if (ProtocolWrapper.impl.unfilteredTileEntityDataAction(packet)) if (ProtocolWrapper.impl.unfilteredTileEntityDataAction(packet)) {
return packet; return packet;
}
default: default:
return null; return null;
} }
@@ -195,26 +195,28 @@ public class Persistent {
CommandManager commandManager = proxy.getCommandManager(); CommandManager commandManager = proxy.getCommandManager();
for (String alias : commandManager.getAliases()) { for (String alias : commandManager.getAliases()) {
CommandMeta meta = commandManager.getCommandMeta(alias); CommandMeta meta = commandManager.getCommandMeta(alias);
if (meta != null && meta.getPlugin() == plugin) if (meta != null && meta.getPlugin() == plugin) {
commandManager.unregister(meta); commandManager.unregister(meta);
}
} }
proxy.getEventManager().unregisterListeners(plugin); proxy.getEventManager().unregisterListeners(plugin);
proxy.getScheduler().tasksByPlugin(plugin).forEach(ScheduledTask::cancel); proxy.getScheduler().tasksByPlugin(plugin).forEach(ScheduledTask::cancel);
container.getExecutorService().shutdown(); container.getExecutorService().shutdown();
if (!container.getExecutorService().awaitTermination(100, TimeUnit.MILLISECONDS)) if (!container.getExecutorService().awaitTermination(100, TimeUnit.MILLISECONDS)) {
logger.log(Level.WARNING, "ExecutorService termination took longer than 100ms, continuing."); logger.log(Level.WARNING, "ExecutorService termination took longer than 100ms, continuing.");
}
for (Thread thread : Thread.getAllStackTraces().keySet()) { for (Thread thread : Thread.getAllStackTraces().keySet()) {
if (thread.getClass().getClassLoader() != classLoader) if (thread.getClass().getClassLoader() != classLoader) continue;
continue;
thread.interrupt(); thread.interrupt();
thread.join(100); thread.join(100);
if (thread.isAlive()) if (thread.isAlive()) {
logger.log(Level.WARNING, "Could not stop thread %s of plugin %s. Still running".formatted(thread.getName(), container.getDescription().getId())); logger.log(Level.WARNING, "Could not stop thread %s of plugin %s. Still running".formatted(thread.getName(), container.getDescription().getId()));
}
} }
//TODO close all log handlers //TODO close all log handlers
@@ -65,8 +65,7 @@ public class Subserver {
public static Subserver getSubserver(Player p) { public static Subserver getSubserver(Player p) {
synchronized (serverList) { synchronized (serverList) {
for (int i = serverList.size() - 1; i >= 0; i--) { for (int i = serverList.size() - 1; i >= 0; i--) {
if (serverList.get(i).onServer(p)) if (serverList.get(i).onServer(p)) return serverList.get(i);
return serverList.get(i);
} }
} }
return null; return null;
@@ -142,8 +141,9 @@ public class Subserver {
public void stop() { public void stop() {
try { try {
long pid = process.pid(); long pid = process.pid();
if (checkpoint) if (checkpoint) {
pid = process.children().findAny().map(ProcessHandle::pid).orElse(pid); pid = process.children().findAny().map(ProcessHandle::pid).orElse(pid);
}
Runtime.getRuntime().exec(new String[]{"kill", "-SIGUSR1", Long.toString(pid)}); Runtime.getRuntime().exec(new String[]{"kill", "-SIGUSR1", Long.toString(pid)});
} catch (IOException e) { } catch (IOException e) {
@@ -156,8 +156,7 @@ public class Subserver {
process.destroyForcibly(); process.destroyForcibly();
} }
if (thread.isAlive()) if (thread.isAlive()) thread.join();
thread.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
logger.log(Level.SEVERE, "Subserver stop interrupted!", e); logger.log(Level.SEVERE, "Subserver stop interrupted!", e);
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
@@ -186,8 +185,9 @@ public class Subserver {
started = test.test(line); started = test.test(line);
} }
if (line == null) if (line == null) {
throw new IOException(serverName + " did not start correctly!"); throw new IOException(serverName + " did not start correctly!");
}
} }
} }
@@ -225,18 +225,18 @@ public class Subserver {
} else { } else {
sendProgress(0); sendProgress(0);
start(process.getInputStream(), line -> { start(process.getInputStream(), line -> {
if (line.contains("Loading libraries, please wait")) if (line.contains("Loading libraries, please wait")) {
sendProgress(2); sendProgress(2);
else if (line.contains("Starting Minecraft server on")) } else if (line.contains("Starting Minecraft server on")) {
sendProgress(5); sendProgress(5);
else if (line.contains("Preparing start region")) } else if (line.contains("Preparing start region")) {
sendProgress(8); sendProgress(8);
}
return line.contains("Done ("); return line.contains("Done (");
}); });
} }
if (!started) if (!started) return;
return;
sendProgress(10); sendProgress(10);
for (Player cachedPlayer : cachedPlayers) { for (Player cachedPlayer : cachedPlayers) {
@@ -253,8 +253,7 @@ public class Subserver {
} finally { } finally {
unregister(); unregister();
shutdownCallback.run(); shutdownCallback.run();
if (ex != null) if (ex != null) failureCallback.accept(ex);
failureCallback.accept(ex);
} }
} }
@@ -84,8 +84,7 @@ public class SWCommand extends AbstractSWCommand<Chatter> {
@Override @Override
public List<String> suggest(Invocation invocation) { public List<String> suggest(Invocation invocation) {
String[] args = invocation.arguments(); String[] args = invocation.arguments();
if (args.length == 0) if (args.length == 0) args = new String[]{""};
args = new String[]{""};
return SWCommand.this.tabComplete(Chatter.of(invocation.source()), invocation.alias(), args); return SWCommand.this.tabComplete(Chatter.of(invocation.source()), invocation.alias(), args);
} }
@@ -99,8 +98,7 @@ public class SWCommand extends AbstractSWCommand<Chatter> {
@Override @Override
public void unregister() { public void unregister() {
if (command == null) if (command == null) return;
return;
VelocityCore.getProxy().getCommandManager().unregister(name); VelocityCore.getProxy().getCommandManager().unregister(name);
DiscordBot.getCommands().remove(name); DiscordBot.getCommands().remove(name);
@@ -108,8 +106,7 @@ public class SWCommand extends AbstractSWCommand<Chatter> {
@Override @Override
public void register() { public void register() {
if (command == null) if (command == null) return;
return;
VelocityCore.getProxy().getCommandManager().register(VelocityCore.getProxy().getCommandManager().metaBuilder(name).aliases(aliases).plugin(VelocityCore.get()).build(), command); VelocityCore.getProxy().getCommandManager().register(VelocityCore.getProxy().getCommandManager().metaBuilder(name).aliases(aliases).plugin(VelocityCore.get()).build(), command);
DiscordBot.getCommands().put(name, this); DiscordBot.getCommands().put(name, this);
@@ -86,10 +86,11 @@ public interface Chatter {
default <T> T withPlayerOrOffline(Function<Player, T> withPlayer, Supplier<T> withOffline) { default <T> T withPlayerOrOffline(Function<Player, T> withPlayer, Supplier<T> withOffline) {
Player player = getPlayer(); Player player = getPlayer();
if (player == null) if (player == null) {
return withOffline.get(); return withOffline.get();
else } else {
return withPlayer.apply(player); return withPlayer.apply(player);
}
} }
default void withPlayerOrOffline(Consumer<Player> withPlayer, Runnable withOffline) { default void withPlayerOrOffline(Consumer<Player> withPlayer, Runnable withOffline) {
@@ -128,10 +129,12 @@ public interface Chatter {
default void send(boolean prefixed, Message onHover, ClickEvent onClick, Message message) { default void send(boolean prefixed, Message onHover, ClickEvent onClick, Message message) {
Component msg = parse(prefixed, message); Component msg = parse(prefixed, message);
if (onHover != null) if (onHover != null) {
msg = msg.hoverEvent(HoverEvent.showText(parse(false, onHover))); msg = msg.hoverEvent(HoverEvent.showText(parse(false, onHover)));
if (onClick != null) }
if (onClick != null) {
msg = msg.clickEvent(onClick); msg = msg.clickEvent(onClick);
}
sendMessage(msg); sendMessage(msg);
} }
@@ -167,8 +170,9 @@ public interface Chatter {
Locale locale = getLocale(); Locale locale = getLocale();
ResourceBundle resourceBundle = SteamwarResourceBundle.getResourceBundle(locale); ResourceBundle resourceBundle = SteamwarResourceBundle.getResourceBundle(locale);
String pattern = ""; String pattern = "";
if (prefixed) if (prefixed) {
pattern = resourceBundle.getObject("PREFIX") + " "; pattern = resourceBundle.getObject("PREFIX") + " ";
}
pattern += (String) resourceBundle.getObject(message.format()); pattern += (String) resourceBundle.getObject(message.format());
MessageFormat format = new MessageFormat(pattern, locale); MessageFormat format = new MessageFormat(pattern, locale);
@@ -200,8 +204,7 @@ public interface Chatter {
} }
static Chatter of(CommandSource sender) { static Chatter of(CommandSource sender) {
if (sender instanceof Player player) if (sender instanceof Player player) return of(player);
return of(player);
//Console //Console
return new PlayerlessChatter() { return new PlayerlessChatter() {
@@ -232,8 +235,7 @@ public interface Chatter {
static Chatter of(UUID uuid, boolean playerlessChatShown) { static Chatter of(UUID uuid, boolean playerlessChatShown) {
Player player = VelocityCore.getProxy().getPlayer(uuid).orElse(null); Player player = VelocityCore.getProxy().getPlayer(uuid).orElse(null);
if (player != null) if (player != null) return Chatter.of(player);
return Chatter.of(player);
return new PlayerlessChatter() { return new PlayerlessChatter() {
@Override @Override
@@ -46,8 +46,7 @@ public class PlayerChatter implements Chatter {
@Override @Override
public boolean chatShown() { public boolean chatShown() {
if (!player.hasSentPlayerSettings()) if (!player.hasSentPlayerSettings()) return false;
return false;
return player.getPlayerSettings().getChatMode() == PlayerSettings.ChatMode.SHOWN; return player.getPlayerSettings().getChatMode() == PlayerSettings.ChatMode.SHOWN;
} }
@@ -36,8 +36,7 @@ public class SteamwarResourceBundle extends PropertyResourceBundle {
private static synchronized ResourceBundle getResourceBundle(String locale, ResourceBundle parent) { private static synchronized ResourceBundle getResourceBundle(String locale, ResourceBundle parent) {
return bundles.computeIfAbsent(locale, locale1 -> { return bundles.computeIfAbsent(locale, locale1 -> {
InputStream inputStream = Message.class.getResourceAsStream(BASE_PATH + ("".equals(locale) ? "" : "_" + locale) + ".properties"); InputStream inputStream = Message.class.getResourceAsStream(BASE_PATH + ("".equals(locale) ? "" : "_" + locale) + ".properties");
if (inputStream == null) if (inputStream == null) return parent;
return parent;
try { try {
return new SteamwarResourceBundle(inputStream, parent); return new SteamwarResourceBundle(inputStream, parent);
} catch (IOException e) { } catch (IOException e) {
@@ -50,8 +50,7 @@ public class ArenaMode {
allModes.clear(); allModes.clear();
File folder = new File(VelocityCore.get().getDataDirectory().getParent().toFile(), "FightSystem"); File folder = new File(VelocityCore.get().getDataDirectory().getParent().toFile(), "FightSystem");
if (!folder.exists()) if (!folder.exists()) return;
return;
GameModeConfig.init(); GameModeConfig.init();
SchematicType.init(); SchematicType.init();
@@ -82,8 +81,9 @@ public class ArenaMode {
public static List<String> getAllChatNames(boolean historic) { public static List<String> getAllChatNames(boolean historic) {
List<String> chatNames = new LinkedList<>(); List<String> chatNames = new LinkedList<>();
for (GameModeConfig<String, String> mode : byInternal.values()) { for (GameModeConfig<String, String> mode : byInternal.values()) {
if (mode.isActive() && historic == mode.Server.Historic) if (mode.isActive() && historic == mode.Server.Historic) {
chatNames.addAll(mode.Server.ChatNames); chatNames.addAll(mode.Server.ChatNames);
}
} }
return chatNames; return chatNames;
} }
@@ -34,15 +34,16 @@ public class Broadcaster {
private int lastBroadCast = 0; private int lastBroadCast = 0;
public Broadcaster() { public Broadcaster() {
if (!broadcasts.isEmpty()) if (!broadcasts.isEmpty()) {
VelocityCore.schedule(this::broadcast).repeat(10, TimeUnit.MINUTES).schedule(); VelocityCore.schedule(this::broadcast).repeat(10, TimeUnit.MINUTES).schedule();
}
} }
private void broadcast() { private void broadcast() {
if (!VelocityCore.getProxy().getAllPlayers().isEmpty()) if (!VelocityCore.getProxy().getAllPlayers().isEmpty()) {
Chatter.broadcast().system("PLAIN_STRING", broadcasts.get(lastBroadCast++)); Chatter.broadcast().system("PLAIN_STRING", broadcasts.get(lastBroadCast++));
}
if (lastBroadCast == broadcasts.size()) if (lastBroadCast == broadcasts.size()) lastBroadCast = 0;
lastBroadCast = 0;
} }
} }
@@ -53,21 +53,20 @@ public class ErrorLogger extends AbstractAppender {
@Override @Override
public void append(LogEvent event) { public void append(LogEvent event) {
if (event.getLevel().intLevel() > Level.WARN.intLevel()) if (event.getLevel().intLevel() > Level.WARN.intLevel()) return;
return;
String message = event.getMessage().getFormattedMessage(); String message = event.getMessage().getFormattedMessage();
for (String reason : filteredMessages) for (String reason : filteredMessages) {
if (message.contains(reason)) if (message.contains(reason)) return;
return; }
ByteArrayOutputStream stacktraceOutput = new ByteArrayOutputStream(); ByteArrayOutputStream stacktraceOutput = new ByteArrayOutputStream();
if (event.getThrown() != null) if (event.getThrown() != null)
event.getThrown().printStackTrace(new PrintStream(stacktraceOutput)); event.getThrown().printStackTrace(new PrintStream(stacktraceOutput));
String stacktrace = stacktraceOutput.toString(); String stacktrace = stacktraceOutput.toString();
for (String reason : filteredStacktraces) for (String reason : filteredStacktraces) {
if (stacktrace.contains(reason)) if (stacktrace.contains(reason)) return;
return; }
SWException.log(message, stacktrace); SWException.log(message, stacktrace);
} }
@@ -97,11 +97,9 @@ public class EventStarter {
private EventFight nextFight(Queue<EventFight> fights) { private EventFight nextFight(Queue<EventFight> fights) {
EventFight next = fights.peek(); EventFight next = fights.peek();
if (next == null) if (next == null) return null;
return null;
if (!next.getStartTime().before(new Timestamp(System.currentTimeMillis()))) if (!next.getStartTime().before(new Timestamp(System.currentTimeMillis()))) return null;
return null;
return fights.poll(); return fights.poll();
} }
@@ -54,8 +54,7 @@ public abstract class Node {
public static Node getNode() { public static Node getNode() {
for (Node node : nodes) { for (Node node : nodes) {
if (node.belowLoadLimit) if (node.belowLoadLimit) return node;
return node;
} }
return null; return null;
} }
@@ -99,10 +98,11 @@ public abstract class Node {
} }
protected void constructServerstart(File directory, List<String> cmd, String serverJar, String worldDir, String levelName, int port, String... dParams) { protected void constructServerstart(File directory, List<String> cmd, String serverJar, String worldDir, String levelName, int port, String... dParams) {
if (JAVA_8.contains(serverJar)) if (JAVA_8.contains(serverJar)) {
cmd.add("/usr/lib/jvm/openj9-8/bin/java"); cmd.add("/usr/lib/jvm/openj9-8/bin/java");
else } else {
cmd.add("/usr/lib/jvm/openj9-21/bin/java"); cmd.add("/usr/lib/jvm/openj9-21/bin/java");
}
for (String param : dParams) { for (String param : dParams) {
cmd.add("-D" + param); cmd.add("-D" + param);
@@ -203,14 +203,16 @@ public abstract class Node {
protected void calcLoadLimit() { protected void calcLoadLimit() {
try { try {
Process process = prepareExecution("cat /proc/meminfo").start(); Process process = prepareExecution("cat /proc/meminfo").start();
if (!process.waitFor(1, TimeUnit.SECONDS)) if (!process.waitFor(1, TimeUnit.SECONDS)) {
throw new IOException(hostname + " timeout"); throw new IOException(hostname + " timeout");
}
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
calcLoadLimit(reader); calcLoadLimit(reader);
} }
} catch (IOException e) { } catch (IOException e) {
if (belowLoadLimit) if (belowLoadLimit) {
VelocityCore.getLogger().log(Level.SEVERE, "Could read remote load", e); VelocityCore.getLogger().log(Level.SEVERE, "Could read remote load", e);
}
belowLoadLimit = false; belowLoadLimit = false;
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
@@ -166,10 +166,11 @@ public class ServerStarter {
if (!world.exists()) { if (!world.exists()) {
File storage = new File(version.getWorldFolder(WORLDS_STORAGE_BASE_PATH), worldName); File storage = new File(version.getWorldFolder(WORLDS_STORAGE_BASE_PATH), worldName);
if (storage.exists()) if (storage.exists()) {
node.execute("mv", storage.getPath(), world.getPath()); node.execute("mv", storage.getPath(), world.getPath());
else } else {
copyWorld(node, new File(directory, "Bauwelt").getPath(), world.getPath()); copyWorld(node, new File(directory, "Bauwelt").getPath(), world.getPath());
}
} }
}; };
@@ -208,12 +209,10 @@ public class ServerStarter {
// Stop existing build server // Stop existing build server
startCondition = () -> { startCondition = () -> {
if (startingBau(owner)) if (startingBau(owner)) return false;
return false;
Bauserver subserver = Bauserver.get(owner.getUniqueId()); Bauserver subserver = Bauserver.get(owner.getUniqueId());
if (subserver != null && subserver.isStarted()) if (subserver != null && subserver.isStarted()) subserver.stop();
subserver.stop();
return !startingBau(owner); return !startingBau(owner);
}; };
@@ -261,8 +260,9 @@ public class ServerStarter {
public ServerStarter send(Player player) { public ServerStarter send(Player player) {
playersToSend.add(player); playersToSend.add(player);
if (!(responsible instanceof Player)) if (!(responsible instanceof Player)) {
responsible = player; responsible = player;
}
return this; return this;
} }
@@ -275,8 +275,7 @@ public class ServerStarter {
public void start() { public void start() {
VelocityCore.schedule(() -> { VelocityCore.schedule(() -> {
synchronized (responsible) { synchronized (responsible) {
if (!startCondition.getAsBoolean()) if (!startCondition.getAsBoolean()) return;
return;
int port = portrange.freePort(); int port = portrange.freePort();
String serverName = serverNameProvider.apply(port); String serverName = serverNameProvider.apply(port);
@@ -285,21 +284,24 @@ public class ServerStarter {
if (node == null) { if (node == null) {
node = Node.getNode(); node = Node.getNode();
if (node == null) { if (node == null) {
for (Player p : playersToSend) for (Player p : playersToSend) {
Chatter.of(p).system("SERVER_START_OVERLOAD"); Chatter.of(p).system("SERVER_START_OVERLOAD");
}
return; return;
} }
} }
if (worldName == null) if (worldName == null) {
worldName = serverToWorldName(serverName); worldName = serverToWorldName(serverName);
}
worldSetup.run(); worldSetup.run();
arguments.put("logPath", worldName); arguments.put("logPath", worldName);
File checkpointDir = new File("/tmp/" + System.getProperty("user.name") + ".checkpoints/" + directory.getName() + "/" + worldName); File checkpointDir = new File("/tmp/" + System.getProperty("user.name") + ".checkpoints/" + directory.getName() + "/" + worldName);
if (checkpoint) if (checkpoint) {
arguments.put("checkpoint", checkpointDir.getPath()); arguments.put("checkpoint", checkpointDir.getPath());
}
((VelocityViaConfig) Via.getConfig()).getVelocityServerProtocols().put(serverName, version.getProtocolVersion().getProtocol()); ((VelocityViaConfig) Via.getConfig()).getVelocityServerProtocols().put(serverName, version.getProtocolVersion().getProtocol());
if (checkpoint && checkpointDir.exists()) { if (checkpoint && checkpointDir.exists()) {
@@ -371,9 +373,7 @@ public class ServerStarter {
private void increment() { private void increment() {
current++; current++;
if (current == end) current = start;
if (current == end)
current = start;
} }
private synchronized int freePort() { private synchronized int freePort() {
@@ -53,7 +53,8 @@ public class SubserverSystem {
public static void sendPlayer(Subserver subserver, Player player) { public static void sendPlayer(Subserver subserver, Player player) {
subserver.sendPlayer(player); subserver.sendPlayer(player);
if (!subserver.isStarted() && FightInfoHandler.onLobby(player)) if (!subserver.isStarted() && FightInfoHandler.onLobby(player)) {
NetworkSender.send(player, new StartingServerPacket(SteamwarUser.get(player.getUniqueId()).getId())); NetworkSender.send(player, new StartingServerPacket(SteamwarUser.get(player.getUniqueId()).getId()));
}
} }
} }
@@ -206,8 +206,9 @@ public class VelocityCore implements ReloadablePlugin {
bot.getJda().getHttpClient().connectionPool().evictAll(); bot.getJda().getHttpClient().connectionPool().evictAll();
bot.getJda().getHttpClient().dispatcher().executorService().shutdown(); bot.getJda().getHttpClient().dispatcher().executorService().shutdown();
try { try {
if (!bot.getJda().awaitShutdown(1, TimeUnit.SECONDS)) if (!bot.getJda().awaitShutdown(1, TimeUnit.SECONDS)) {
logger.log(Level.SEVERE, "Could not await discord bot shutdown"); logger.log(Level.SEVERE, "Could not await discord bot shutdown");
}
} catch (InterruptedException e) { } catch (InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
@@ -233,8 +234,9 @@ public class VelocityCore implements ReloadablePlugin {
List<String> cmds = server.getCommands(); List<String> cmds = server.getCommands();
String cmd = cmds.remove(0); String cmd = cmds.remove(0);
if (server.getSpectatePort() != 0) if (server.getSpectatePort() != 0) {
EventStarter.addSpectateServer(server.getSpectatePort(), cmd); EventStarter.addSpectateServer(server.getSpectatePort(), cmd);
}
new ServerSwitchCommand(cmd, entry.getKey(), server.getSpectatePort() != 0, cmds.toArray(new String[0])); new ServerSwitchCommand(cmd, entry.getKey(), server.getSpectatePort() != 0, cmds.toArray(new String[0]));
} }

Some files were not shown because too many files have changed in this diff Show More