use of com.ebicep.warlords.game.Game in project Warlords by ebicep.
the class FlagSpawnPointOption method register.
@Override
public void register(Game game) {
this.game = game;
// We register a gamemarker to prevent any captures for our own team if we lost our flag
game.registerGameMarker(FlagCaptureInhibitMarker.class, pFlag -> {
return !(info.getFlag() instanceof SpawnFlagLocation) && info.getTeam() == pFlag.getPlayer().getTeam();
});
game.registerGameMarker(DebugLocationMarker.class, DebugLocationMarker.create(Material.BANNER, 0, this.getClass(), "Flag spawn: " + info.getTeam(), this.info.getSpawnLocation()));
game.registerGameMarker(DebugLocationMarker.class, DebugLocationMarker.create(Material.BANNER, 15, this.getClass(), "Flag: " + info.getTeam(), () -> info.getFlag().getLocation(), () -> info.getFlag().getDebugInformation()));
FlagHolder holder = FlagHolder.create(() -> info);
game.registerGameMarker(FlagHolder.class, holder);
if (this.registerCompassMarker) {
game.registerGameMarker(CompassTargetMarker.class, holder);
}
game.registerGameMarker(ScoreboardHandler.class, scoreboard = new SimpleScoreboardHandler(info.getTeam() == Team.RED ? 20 : 21, "flag") {
@Override
public List<String> computeLines(@Nullable WarlordsPlayer player) {
String flagName = info.getTeam().coloredPrefix();
FlagLocation flag = info.getFlag();
if (flag instanceof SpawnFlagLocation) {
return singletonList(flagName + " Flag: " + ChatColor.GREEN + "Safe");
} else if (flag instanceof PlayerFlagLocation) {
PlayerFlagLocation pFlag = (PlayerFlagLocation) flag;
String extra = pFlag.getPickUpTicks() == 0 ? "" : ChatColor.YELLOW + " +" + pFlag.getComputedHumanMultiplier() + "§e%";
return singletonList(flagName + " Flag: " + ChatColor.RED + "Stolen!" + extra);
} else if (flag instanceof GroundFlagLocation) {
GroundFlagLocation gFlag = (GroundFlagLocation) flag;
return singletonList(flagName + " Flag: " + ChatColor.YELLOW + "Dropped! " + ChatColor.GRAY + gFlag.getDespawnTimerSeconds());
} else {
return singletonList(flagName + " Flag: " + ChatColor.GRAY + "Respawning...");
}
}
});
game.registerEvents(new Listener() {
@EventHandler(priority = EventPriority.LOW)
public void onArmorStandBreak(EntityDamageByEntityEvent event) {
boolean isOurArmorStand = renderer.getRenderedArmorStands().contains(event.getEntity());
WarlordsPlayer wp = Warlords.getPlayer(event.getDamager());
if (wp != null && wp.getGame() == game && isOurArmorStand) {
onFlagInteract(wp);
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOW)
public void onPotentialFlagInteract(PlayerInteractEntityEvent event) {
onPotentialFlagInteract((PlayerEvent) event);
}
@EventHandler(priority = EventPriority.LOW)
public void onPotentialFlagInteract(PlayerInteractEvent event) {
onPotentialFlagInteract((PlayerEvent) event);
}
private void onPotentialFlagInteract(PlayerEvent event) {
WarlordsPlayer wp = Warlords.getPlayer(event.getPlayer());
if (wp != null && wp.getGame() == game) {
Location playerLocation = wp.getEntity().getEyeLocation();
Vector direction = wp.getEntity().getLocation().getDirection().multiply(3);
Vec3D from = new Vec3D(playerLocation.getX(), playerLocation.getY(), playerLocation.getZ());
Vec3D to = new Vec3D(playerLocation.getX() + direction.getX(), playerLocation.getY() + direction.getY(), playerLocation.getZ() + direction.getZ());
checkFlagInteract(playerLocation, wp, from, to, renderer);
}
}
private void checkFlagInteract(Location playerLocation, WarlordsPlayer wp, Vec3D from, Vec3D to, FlagRenderer render) {
Location entityLoc = new Location(playerLocation.getWorld(), 0, 0, 0);
for (Entity stand : render.getRenderedArmorStands()) {
stand.getLocation(entityLoc);
if (entityLoc.getWorld() == playerLocation.getWorld() && entityLoc.distanceSquared(playerLocation) < 5 * 5) {
AxisAlignedBB aabb = new AxisAlignedBB(entityLoc.getX() - 0.5, entityLoc.getY(), entityLoc.getZ() - 0.5, entityLoc.getX() + 0.5, entityLoc.getY() + 2, entityLoc.getZ() + 0.5);
MovingObjectPosition mop = aabb.a(from, to);
if (mop != null) {
onFlagInteract(wp);
break;
}
}
}
}
private void onFlagInteract(WarlordsPlayer wp) {
Team team = wp.getTeam();
if (wp.isDeath()) {
return;
}
if (renderer.getLastFlagState() != info.getFlag()) {
// Prevent the player from interacting when the render state is outdated
return;
}
wp.setFlagCooldown(2);
if (info.getFlag() instanceof GroundFlagLocation) {
GroundFlagLocation groundFlagLocation = (GroundFlagLocation) info.getFlag();
if (team == info.getTeam()) {
// Return flag
info.setFlag(new SpawnFlagLocation(info.getSpawnLocation(), wp));
} else {
// Steal flag
info.setFlag(new PlayerFlagLocation(wp, groundFlagLocation.getDamageTimer()));
if (wp.getEntity().getVehicle() != null) {
wp.getEntity().getVehicle().remove();
}
}
} else if (info.getFlag() instanceof SpawnFlagLocation) {
if (team == info.getTeam()) {
// Nothing
wp.sendMessage("§cYou can't steal your own team's flag!");
} else {
// Steal flag
info.setFlag(new PlayerFlagLocation(wp, 0));
wp.getCooldownManager().addCooldown(new RegularCooldown<FlagSpawnPointOption>("Flag Damage Resistance", "RES", FlagSpawnPointOption.class, null, wp, CooldownTypes.BUFF, cooldownManager -> {
}, 15 * 20) {
@Override
public float modifyDamageAfterInterveneFromSelf(WarlordsDamageHealingEvent event, float currentDamageValue) {
return currentDamageValue * .9f;
}
});
}
}
}
});
}
use of com.ebicep.warlords.game.Game in project Warlords by ebicep.
the class ImposterModeOption method register.
@Override
public void register(@Nonnull Game game) {
this.game = game;
for (Team team : TeamMarker.getTeams(game)) {
imposters.put(team, new ArrayList<>());
}
game.registerGameMarker(ScoreboardHandler.class, new SimpleScoreboardHandler(30, "imposter") {
@Override
public List<String> computeLines(@Nullable WarlordsPlayer warlordsPlayer) {
if (warlordsPlayer == null) {
return Collections.emptyList();
}
if (imposters.get(warlordsPlayer.getTeam()).isEmpty()) {
return Collections.emptyList();
}
if (imposters.entrySet().stream().anyMatch(teamListEntry -> teamListEntry.getValue().contains(warlordsPlayer))) {
return Collections.singletonList(ChatColor.WHITE + "Role: " + ChatColor.RED + "Imposter");
}
return Collections.singletonList(ChatColor.WHITE + "Role: " + ChatColor.GREEN + "Innocent");
}
});
}
use of com.ebicep.warlords.game.Game in project Warlords by ebicep.
the class InterchangeModeOption method swapTeamMembers.
// the player BEFORE becomes the player AFTER
// the last player BECOMES the first player
private void swapTeamMembers(Game game, Team team) {
List<WarlordsPlayer> teamPlayers = game.warlordsPlayers().filter(warlordsPlayer -> warlordsPlayer.getTeam() == team).collect(Collectors.toList());
if (teamPlayers.size() <= 1)
return;
// Storing all player information as swapping jumbles it up
HashMap<UUID, Location> playerLocations = new HashMap<>();
HashMap<UUID, Classes> playerClasses = new HashMap<>();
HashMap<UUID, HashMap<Classes, ClassesSkillBoosts>> playerBoosts = new HashMap<>();
HashMap<UUID, HashMap<Classes, Weapons>> playerWeaponSkins = new HashMap<>();
HashMap<UUID, List<ArmorManager.Helmets>> playerHelmets = new HashMap<>();
HashMap<UUID, List<ArmorManager.ArmorSets>> playerArmorSets = new HashMap<>();
HashMap<UUID, Boolean> playerOnHorse = new HashMap<>();
for (WarlordsPlayer teamPlayer : teamPlayers) {
UUID uuid = teamPlayer.getUuid();
playerLocations.put(uuid, teamPlayer.getLocation());
PlayerSettings playerSettings = Warlords.getPlayerSettings(uuid);
playerClasses.put(uuid, playerSettings.getSelectedClass());
playerBoosts.put(uuid, playerSettings.getClassesSkillBoosts());
playerWeaponSkins.put(uuid, playerSettings.getWeaponSkins());
playerHelmets.put(uuid, playerSettings.getHelmets());
playerArmorSets.put(uuid, playerSettings.getArmorSets());
playerOnHorse.put(uuid, teamPlayer.getEntity().getVehicle() != null);
}
// take beginning player to swap with end
WarlordsPlayer secondPlayer = teamPlayers.get(0);
String secondPlayerName = secondPlayer.getName();
UUID secondPlayerUuid = secondPlayer.getUuid();
LivingEntity secondPlayerEntity = secondPlayer.getEntity();
PlayerSettings playerSettings = Warlords.getPlayerSettings(secondPlayer.getUuid());
for (int i = 0; i < teamPlayers.size() - 1; i++) {
transferPlayerStats(teamPlayers.get(i), teamPlayers.get(i + 1), playerLocations, playerClasses, playerBoosts, playerWeaponSkins, playerHelmets, playerArmorSets, playerOnHorse);
}
// give last player first players old stats
WarlordsPlayer firstPlayer = teamPlayers.get(teamPlayers.size() - 1);
System.out.println("LAST SWAP - " + firstPlayer.getName() + " <<< " + secondPlayerName);
UUID firstPlayerUuid = firstPlayer.getUuid();
firstPlayer.setName(secondPlayerName);
firstPlayer.setUuid(secondPlayerUuid);
secondPlayerEntity.teleport(playerLocations.get(firstPlayerUuid));
firstPlayer.setEntity(secondPlayerEntity);
if (playerOnHorse.get(firstPlayerUuid)) {
firstPlayer.getHorse().spawn();
}
if (firstPlayer.getEntity() instanceof Player) {
PacketUtils.sendTitle((Player) firstPlayer.getEntity(), ChatColor.YELLOW + "Swapped to", ChatColor.GREEN.toString() + ChatColor.MAGIC + "00" + ChatColor.GREEN + " " + firstPlayer.getSpecClass().name + "! " + ChatColor.MAGIC + "00", 10, 40, 10);
}
// copying over playersettings
playerSettings.setSelectedClass(playerClasses.get(firstPlayerUuid));
playerSettings.setWeaponSkins(playerWeaponSkins.get(firstPlayerUuid));
playerSettings.setClassesSkillBoosts(playerBoosts.get(firstPlayerUuid));
playerSettings.setHelmets(playerHelmets.get(firstPlayerUuid));
playerSettings.setArmorSets(playerArmorSets.get(firstPlayerUuid));
if (firstPlayer.getEntity() instanceof Player) {
firstPlayer.updatePlayer((Player) firstPlayer.getEntity());
}
Warlords.getPlayers().put(secondPlayerUuid, firstPlayer);
Warlords.newChain().delay(100, TimeUnit.MILLISECONDS).sync(() -> {
ArmorManager.resetArmor(firstPlayer.getUuid(), firstPlayer.getEntity(), firstPlayer.getSpecClass(), firstPlayer.getTeam());
}).execute();
}
use of com.ebicep.warlords.game.Game in project Warlords by ebicep.
the class PowerupOption method start.
@Override
public void start(Game game) {
hasStarted = true;
if (cooldown == 0) {
spawn();
}
new GameRunnable(game) {
@Override
public void run() {
if (cooldown == 0) {
PlayerFilter.entitiesAround(location, 1.4, 1.4, 1.4).isAlive().first((nearPlayer) -> {
type.onPickUp(PowerupOption.this, nearPlayer);
remove();
cooldown = maxCooldown * 4;
});
} else {
cooldown--;
if (cooldown == 0) {
spawn();
}
}
}
}.runTaskTimer(0, 5);
}
use of com.ebicep.warlords.game.Game in project Warlords by ebicep.
the class FlagSpawnPointOption method start.
@Override
public void start(Game game) {
new GameRunnable(game) {
@Override
public void run() {
if (!(info.getFlag() instanceof PlayerFlagLocation)) {
return;
}
PlayerFlagLocation playerFlagLocation = (PlayerFlagLocation) info.getFlag();
if (flagIsInCaptureZone(playerFlagLocation) && !flagCaptureIsNotBlocked(playerFlagLocation)) {
FlagHolder.update(game, info -> new WaitingFlagLocation(info.getSpawnLocation(), info.getFlag() == playerFlagLocation ? playerFlagLocation.getPlayer() : null));
}
}
}.runTaskTimer(0, 4);
new GameRunnable(game) {
@Override
public void run() {
FlagLocation newFlag = info.getFlag().update(info);
if (newFlag != null) {
info.setFlag(newFlag);
}
renderer.checkRender();
}
}.runTaskTimer(0, 1);
}
Aggregations