mirror of
https://github.com/taoneill/war.git
synced 2025-02-02 20:51:20 +01:00
Finally got a handle on reliably teleportation at gates. Death sucks though. I'm going to revert back to the old system until player_death event makes it in.
This commit is contained in:
parent
06ba048797
commit
9704598f39
@ -98,10 +98,11 @@ public class War extends JavaPlugin {
|
||||
|
||||
pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Monitor, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Monitor, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Highest, this);
|
||||
pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Priority.Normal, this);
|
||||
|
||||
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_ENTITY, entityListener, Priority.Highest, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DAMAGED, entityListener, Priority.Highest, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_ENTITY, entityListener, Priority.High, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DAMAGED, entityListener, Priority.High, this);
|
||||
pm.registerEvent(Event.Type.ENTITY_DAMAGEDBY_PROJECTILE, entityListener, Priority.High, this);
|
||||
|
||||
pm.registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Normal, this);
|
||||
pm.registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Normal, this);
|
||||
@ -867,7 +868,6 @@ public class War extends JavaPlugin {
|
||||
getZoneMakersImpersonatingPlayers().add(player.getName());
|
||||
}
|
||||
}
|
||||
zoneMakerNames.remove(player.getName());
|
||||
player.sendMessage(str("You are now impersonating a regular player. Type /zonemaker again to toggle back to war maker mode."));
|
||||
}
|
||||
|
||||
@ -1108,11 +1108,17 @@ public class War extends JavaPlugin {
|
||||
}
|
||||
|
||||
public boolean isZoneMaker(Player player) {
|
||||
for(String zoneMaker : zoneMakerNames) {
|
||||
if(zoneMaker.equals(player.getName())) return true;
|
||||
boolean isPlayerImpersonator = false;
|
||||
for(String disguised : zoneMakersImpersonatingPlayers) {
|
||||
if(disguised.equals(player.getName())) isPlayerImpersonator = true;
|
||||
}
|
||||
if(Permissions != null && Permissions.Security.permission(player, "war.*")) {
|
||||
return true;
|
||||
if(!isPlayerImpersonator) {
|
||||
for(String zoneMaker : zoneMakerNames) {
|
||||
if(zoneMaker.equals(player.getName())) return true;
|
||||
}
|
||||
if(Permissions != null && Permissions.Security.permission(player, "war.*")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import java.util.List;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByProjectileEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.EntityListener;
|
||||
@ -64,6 +65,8 @@ public class WarEntityListener extends EntityListener {
|
||||
if(attackerTeam != null && defenderTeam != null
|
||||
&& attackerTeam != defenderTeam
|
||||
&& attackerWarzone == defenderWarzone) {
|
||||
// Make sure one of the players isn't in the spawn
|
||||
if(!defenderTeam.getVolume().contains(d.getLocation())){
|
||||
// A real attack: handle death scenario. ==> now handled in entity damage as well
|
||||
//synchronized(d) {
|
||||
if(d.getHealth() <= 0) {
|
||||
@ -87,6 +90,11 @@ public class WarEntityListener extends EntityListener {
|
||||
handleDeath(d, defenderWarzone, defenderTeam);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
else { // attacking person in spawn
|
||||
a.sendMessage(war.str("Can't attack a player that's inside his team's spawn."));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
//}
|
||||
} else if (attackerTeam != null && defenderTeam != null
|
||||
&& attackerTeam == defenderTeam
|
||||
@ -122,6 +130,9 @@ public class WarEntityListener extends EntityListener {
|
||||
}
|
||||
}
|
||||
|
||||
public void onEntityDamageByProjectile(EntityDamageByProjectileEvent event) {
|
||||
}
|
||||
|
||||
private void handleDeath(Player player, Warzone playerWarzone, Team playerTeam) {
|
||||
// teleport to team spawn upon death
|
||||
player.sendMessage(war.str("You died."));
|
||||
|
@ -59,21 +59,22 @@ public class WarPlayerListener extends PlayerListener {
|
||||
|
||||
public void onPlayerMove(PlayerMoveEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Location from = event.getFrom();
|
||||
Location playerLoc = event.getFrom(); // same as player.getLoc. Don't call again we need same result.
|
||||
//Location from = event.getFrom();
|
||||
Warzone locZone = null;
|
||||
ZoneLobby locLobby = null;
|
||||
if(from != null) {
|
||||
locZone = war.warzone(from);
|
||||
locLobby = war.lobby(from);
|
||||
}
|
||||
//if(from != null) {
|
||||
locZone = war.warzone(playerLoc);
|
||||
locLobby = war.lobby(playerLoc);
|
||||
//}
|
||||
// synchronized(player) {
|
||||
Location to = event.getTo();
|
||||
//Location to = event.getTo();
|
||||
boolean canPlay = war.canPlayWar(player);
|
||||
boolean isMaker = war.isZoneMaker(player);
|
||||
|
||||
// Zone walls
|
||||
if(!isMaker && to != null) { // zone makers don't get bothered with guard walls
|
||||
Warzone nearbyZone = war.zoneOfZoneWallAtProximity(to);
|
||||
if(!isMaker) { // zone makers don't get bothered with guard walls
|
||||
Warzone nearbyZone = war.zoneOfZoneWallAtProximity(playerLoc);
|
||||
if(nearbyZone != null) {
|
||||
nearbyZone.protectZoneWallAgainstPlayer(player);
|
||||
} else {
|
||||
@ -89,7 +90,7 @@ public class WarPlayerListener extends PlayerListener {
|
||||
|
||||
boolean enteredGate = false;
|
||||
// Warzone lobby gates
|
||||
if(locLobby != null && to != null) {
|
||||
if(locLobby != null) {
|
||||
Warzone zone = locLobby.getZone();
|
||||
Team oldTeam = war.getPlayerTeam(player.getName());
|
||||
boolean isAutoAssignGate = false;
|
||||
@ -97,7 +98,7 @@ public class WarPlayerListener extends PlayerListener {
|
||||
boolean isIronGate = false;
|
||||
boolean isGoldGate = false;
|
||||
if(oldTeam == null && canPlay) { // trying to counter spammy player move
|
||||
isAutoAssignGate = zone.getLobby().isAutoAssignGate(to);
|
||||
isAutoAssignGate = zone.getLobby().isAutoAssignGate(playerLoc);
|
||||
if(isAutoAssignGate) {
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
@ -110,15 +111,15 @@ public class WarPlayerListener extends PlayerListener {
|
||||
//zone.autoAssign(player);
|
||||
//event.setCancelled(true);
|
||||
} else {
|
||||
event.setTo(zone.getTeleport());
|
||||
//player.teleportTo(zone.getTeleport());
|
||||
//event.setCancelled(true);
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
player.sendMessage("All teams are full.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
isDiamondGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMDIAMOND, to);
|
||||
isDiamondGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMDIAMOND, playerLoc);
|
||||
if (isDiamondGate){
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
@ -135,15 +136,15 @@ public class WarPlayerListener extends PlayerListener {
|
||||
team.teamcast(war.str("" + player.getName() + " joined team diamond."));
|
||||
}
|
||||
} else {
|
||||
event.setTo(zone.getTeleport());
|
||||
//player.teleportTo(zone.getTeleport());
|
||||
//event.setCancelled(true);
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
player.sendMessage("Team diamond is full.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
isIronGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMIRON, to);
|
||||
isIronGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMIRON, playerLoc);
|
||||
if (isIronGate){
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
@ -160,15 +161,15 @@ public class WarPlayerListener extends PlayerListener {
|
||||
team.teamcast(war.str("" + player.getName() + " joined team iron."));
|
||||
}
|
||||
} else {
|
||||
event.setTo(zone.getTeleport());
|
||||
// player.teleportTo(zone.getTeleport());
|
||||
// event.setCancelled(true);
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
player.sendMessage("Team iron is full.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
isGoldGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMGOLD, to);
|
||||
isGoldGate = zone.getLobby().isInTeamGate(TeamMaterials.TEAMGOLD, playerLoc);
|
||||
if (isGoldGate){
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
@ -185,28 +186,28 @@ public class WarPlayerListener extends PlayerListener {
|
||||
team.teamcast(war.str("" + player.getName() + " joined team gold."));
|
||||
}
|
||||
} else {
|
||||
event.setTo(zone.getTeleport());
|
||||
// player.teleportTo(zone.getTeleport());
|
||||
// event.setCancelled(true);
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
player.sendMessage("Team gold is full.");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (zone.getLobby().isInWarHubLinkGate(to)){
|
||||
if (zone.getLobby().isInWarHubLinkGate(playerLoc)){
|
||||
enteredGate = true;
|
||||
dropFromOldTeamIfAny(player);
|
||||
event.setTo(war.getWarHub().getLocation());
|
||||
// player.teleportTo(war.getWarHub().getLocation());
|
||||
// event.setCancelled(true);
|
||||
event.setFrom(war.getWarHub().getLocation());
|
||||
player.teleportTo(war.getWarHub().getLocation());
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(war.str("Welcome to the War hub."));
|
||||
return;
|
||||
}
|
||||
} else if ((isAutoAssignGate || isDiamondGate || isGoldGate || isIronGate) &&
|
||||
!canPlay) {
|
||||
event.setTo(zone.getTeleport());
|
||||
// player.teleportTo(zone.getTeleport());
|
||||
// event.setCancelled(true);
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(war.str("You don't have permission to play War. Ask a mod, please."));
|
||||
return;
|
||||
}
|
||||
@ -215,32 +216,32 @@ public class WarPlayerListener extends PlayerListener {
|
||||
|
||||
// Warhub zone gates
|
||||
WarHub hub = war.getWarHub();
|
||||
if(hub != null && from != null && to != null && hub.getVolume().contains(from)) {
|
||||
Warzone zone = hub.getDestinationWarzoneForLocation(to);
|
||||
if(hub != null && hub.getVolume().contains(playerLoc)) {
|
||||
Warzone zone = hub.getDestinationWarzoneForLocation(playerLoc);
|
||||
//synchronized(player) {
|
||||
if(zone != null) {
|
||||
enteredGate = true;
|
||||
event.setTo(zone.getTeleport());
|
||||
// player.teleportTo(zone.getTeleport());
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
//
|
||||
// event.setCancelled(true);
|
||||
event.setCancelled(true);
|
||||
player.sendMessage(war.str("Welcome to warzone " + zone.getName() + "."));
|
||||
return;
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
if(locZone != null && to != null && locZone.getLobby() != null
|
||||
&& locZone.getLobby().isLeavingZone(to)) { // already in a team and in warzone, leaving
|
||||
if(locZone != null && locZone.getLobby() != null
|
||||
&& locZone.getLobby().isLeavingZone(playerLoc)) { // already in a team and in warzone, leaving
|
||||
enteredGate = true;
|
||||
// same as leave, except event.setTo
|
||||
// same as leave, except using event.setFrom and cancelling even .. don't ask me, see NetServerHandler code
|
||||
Team playerTeam = war.getPlayerTeam(player.getName());
|
||||
if(playerTeam != null) {
|
||||
playerTeam.removePlayer(player.getName());
|
||||
playerTeam.resetSign();
|
||||
event.setTo(playerWarzone.getTeleport());
|
||||
// player.teleportTo(zone.getTeleport());
|
||||
// event.setCancelled(true);
|
||||
event.setFrom(playerWarzone.getTeleport());
|
||||
player.teleportTo(playerWarzone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
playerWarzone.restorePlayerInventory(player);
|
||||
if(playerWarzone.getLobby() != null) {
|
||||
playerWarzone.getLobby().resetTeamGateSign(playerTeam);
|
||||
@ -259,27 +260,27 @@ public class WarPlayerListener extends PlayerListener {
|
||||
// Player belongs to a warzone team but is outside: he snuck out!.
|
||||
if(locZone == null && team != null) {
|
||||
//player.sendMessage(war.str("Teleporting you back to spawn. Please /leave your team if you want to exit the zone."));
|
||||
event.setTo(team.getTeamSpawn());
|
||||
event.setFrom(team.getTeamSpawn());
|
||||
//playerWarzone.respawnPlayer(team, player);
|
||||
//player.teleportTo(team.getTeamSpawn());
|
||||
//event.setCancelled(true);
|
||||
player.teleportTo(team.getTeamSpawn());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
// Monuments
|
||||
if(to != null && team != null
|
||||
&& playerWarzone.nearAnyOwnedMonument(to, team)
|
||||
if(team != null
|
||||
&& playerWarzone.nearAnyOwnedMonument(playerLoc, team)
|
||||
&& player.getHealth() < 20
|
||||
&& random.nextInt(42) == 3 ) { // one chance out of many of getting healed
|
||||
player.setHealth(20);
|
||||
player.sendMessage(war.str("Your dance pleases the monument's voodoo. You gain full health!"));
|
||||
}
|
||||
} else if (locZone != null && locZone.getLobby() != null
|
||||
&& locZone.getLobby().isLeavingZone(to) && !isMaker) {
|
||||
&& locZone.getLobby().isLeavingZone(playerLoc) && !isMaker) {
|
||||
// player is not in any team, but inside warzone boundaries, get him out
|
||||
Warzone zone = war.warzone(to);
|
||||
event.setTo(zone.getTeleport());
|
||||
// player.teleportTo(zone.getTeleport());
|
||||
// event.setCancelled(true);
|
||||
Warzone zone = war.warzone(playerLoc);
|
||||
event.setFrom(zone.getTeleport());
|
||||
player.teleportTo(zone.getTeleport());
|
||||
event.setCancelled(true);
|
||||
//player.sendMessage(war.str("You can't be inside a warzone without a team."));
|
||||
}
|
||||
|
||||
|
@ -344,7 +344,9 @@ public class Warzone {
|
||||
}
|
||||
|
||||
public void respawnPlayer(PlayerMoveEvent event, Team team, Player player) {
|
||||
event.setTo(team.getTeamSpawn());
|
||||
event.setFrom(team.getTeamSpawn());
|
||||
player.teleportTo(team.getTeamSpawn());
|
||||
event.setCancelled(true);
|
||||
handleRespawn(team, player);
|
||||
}
|
||||
|
||||
|
@ -617,22 +617,23 @@ public class ZoneLobby {
|
||||
Block out = gate.getFace(inside);
|
||||
Block outL = out.getFace(left);
|
||||
Block outR = out.getFace(right);
|
||||
Block out2 = gate.getFace(inside, 2);
|
||||
Block out2L = out2.getFace(left);
|
||||
Block out2R = out2.getFace(right);
|
||||
// Block out2 = gate.getFace(inside, 2);
|
||||
// Block out2L = out2.getFace(left);
|
||||
// Block out2R = out2.getFace(right);
|
||||
if(out.getX() == x && out.getY() == y && out.getZ() == z) {
|
||||
return true;
|
||||
} else if(outL.getX() == x && outL.getY() == y && outL.getZ() == z) {
|
||||
return true;
|
||||
} else if(outR.getX() == x && outR.getY() == y && outR.getZ() == z) {
|
||||
return true;
|
||||
} else if(out2.getX() == x && out2.getY() == y && out2.getZ() == z) {
|
||||
return true;
|
||||
} else if(out2L.getX() == x && out2L.getY() == y && out2L.getZ() == z) {
|
||||
return true;
|
||||
} else if(out2R.getX() == x && out2R.getY() == y && out2R.getZ() == z) {
|
||||
return true;
|
||||
}
|
||||
// } else if(out2.getX() == x && out2.getY() == y && out2.getZ() == z) {
|
||||
// return true;
|
||||
// } else if(out2L.getX() == x && out2L.getY() == y && out2L.getZ() == z) {
|
||||
// return true;
|
||||
// } else if(out2R.getX() == x && out2R.getY() == y && out2R.getZ() == z) {
|
||||
// return true;
|
||||
// }
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user