Skip to content

Commit

Permalink
* Minor adjustment/fix for nether/end portals being cancelled.
Browse files Browse the repository at this point in the history
  • Loading branch information
BuildTools committed Jan 23, 2022
1 parent b0ff968 commit 8ce3800
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 89 deletions.
19 changes: 8 additions & 11 deletions src/main/java/xzot1k/plugins/sp/api/Manager.java
Original file line number Diff line number Diff line change
Expand Up @@ -772,14 +772,11 @@ public String getPortalName(Portal portal, boolean withCoordinates) {
final int x = (int) ((portal.getRegion().getPoint1().getX() + portal.getRegion().getPoint2().getX()) / 2),
y = (int) ((portal.getRegion().getPoint1().getY() + portal.getRegion().getPoint2().getY()) / 2),
z = (int) ((portal.getRegion().getPoint1().getZ() + portal.getRegion().getPoint2().getZ()) / 2);
if (!withCoordinates) {
return portal.getPortalId().toLowerCase();
} else {

return ((portal.isDisabled() ? ChatColor.RED : ChatColor.GREEN) + portal.getPortalId().toLowerCase() + ChatColor.GRAY + " (World: "
+ ChatColor.DARK_GRAY + portal.getRegion().getPoint1().getWorldName() + ChatColor.GRAY + " X: " + ChatColor.DARK_GRAY + x + ChatColor.GRAY + " Y: " + ChatColor.DARK_GRAY + y + ChatColor.GRAY + " Z: " + ChatColor.DARK_GRAY + z + ChatColor.GRAY + ")");
}

if (!withCoordinates) return portal.getPortalId().toLowerCase();
else return ((portal.isDisabled() ? ChatColor.RED : ChatColor.GREEN) + portal.getPortalId().toLowerCase()
+ ChatColor.GRAY + " (World: " + ChatColor.DARK_GRAY + portal.getRegion().getPoint1().getWorldName()
+ ChatColor.GRAY + " X: " + ChatColor.DARK_GRAY + x + ChatColor.GRAY + " Y: " + ChatColor.DARK_GRAY
+ y + ChatColor.GRAY + " Z: " + ChatColor.DARK_GRAY + z + ChatColor.GRAY + ")");
}

/**
Expand Down Expand Up @@ -818,18 +815,18 @@ public boolean handleVanillaPortalReplacements(Player player, World world, Porta
*/
public Location getVanillaPortalReplacement(World world, PortalType portalType) {
for (String line : getPluginInstance().getConfig().getStringList((portalType == PortalType.NETHER ? "nether" : "end") + "-portal-locations")) {
if (line == null || line.isEmpty() || !line.contains(":") || !line.contains(",")) continue;
if (line == null || !line.contains(":") || !line.contains(",")) continue;

String[] mainSplit = line.split(":");
if (!mainSplit[0].equalsIgnoreCase(world.getName())) continue;
String[] subSplit = mainSplit[1].split(",");

String[] subSplit = mainSplit[1].split(",");
World newWorld = getPluginInstance().getServer().getWorld(subSplit[0]);
if (newWorld == null) continue;

return new Location(newWorld, Double.parseDouble(subSplit[1]), Double.parseDouble(subSplit[2]), Double.parseDouble(subSplit[3]),
Float.parseFloat(subSplit[4]), Float.parseFloat(subSplit[5]));
}

return null;
}

Expand Down
150 changes: 72 additions & 78 deletions src/main/java/xzot1k/plugins/sp/core/Listeners.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ public Listeners(SimplePortals pluginInstance) {
this.pluginInstance = pluginInstance;
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockFromTo(BlockFromToEvent e) {
Portal portal = pluginInstance.getManager().getPortalAtLocation(e.getBlock().getLocation());
if (portal != null && !portal.isDisabled()) e.setCancelled(true);
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onClick(PlayerInteractEvent e) {
if (e.getAction() == Action.LEFT_CLICK_BLOCK && e.getClickedBlock() != null
&& pluginInstance.getManager().isInSelectionMode(e.getPlayer())) {
Expand Down Expand Up @@ -72,17 +72,13 @@ public void onClick(PlayerInteractEvent e) {
}
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onMove(PlayerMoveEvent e) {
if (e.getTo() == null) return;

if (e.getFrom().getBlockX() != e.getTo().getBlockX() || e.getFrom().getBlockY() != e.getTo().getBlockY() || e.getFrom().getBlockZ() != e.getTo().getBlockZ()) {
initiatePortalStuff(e.getTo(), e.getFrom(), e.getPlayer());
}

if (e.getTo() != null && e.getFrom().getBlockX() != e.getTo().getBlockX() || e.getFrom().getBlockY() != e.getTo().getBlockY()
|| e.getFrom().getBlockZ() != e.getTo().getBlockZ()) initiatePortalStuff(e.getTo(), e.getFrom(), e.getPlayer());
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onJoin(PlayerJoinEvent e) {
if (pluginInstance.getConfig().getBoolean("join-protection") && pluginInstance.getConfig().getBoolean("use-portal-cooldown")
&& !e.getPlayer().hasPermission("simpleportals.cdbypass")) {
Expand All @@ -92,49 +88,24 @@ public void onJoin(PlayerJoinEvent e) {

pluginInstance.getManager().updatePlayerPortalCooldown(e.getPlayer(), "join-protection");
double tv = pluginInstance.getConfig().getDouble("throw-velocity");
if (!(tv <= -1))
e.getPlayer().setVelocity(e.getPlayer().getLocation().getDirection().setY(e.getPlayer().getLocation().getDirection().getY() / 2).multiply(-tv));
if (!(tv <= -1)) e.getPlayer().setVelocity(e.getPlayer().getLocation().getDirection()
.setY(e.getPlayer().getLocation().getDirection().getY() / 2).multiply(-tv));
}
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onQuit(PlayerQuitEvent e) {
pluginInstance.getManager().getSmartTransferMap().remove(e.getPlayer().getUniqueId());
}

@EventHandler(priority = EventPriority.LOWEST)
public void onTeleport(PlayerTeleportEvent e) {
vanillaPortalHelper(e);
}

private void vanillaPortalHelper(PlayerTeleportEvent e) {
if (!e.getCause().name().toUpperCase().contains("PORTAL") && !e.getCause().name().toUpperCase().contains("GATEWAY")) return;

PortalType portalType = PortalType.NETHER;
switch (e.getCause()) {
case NETHER_PORTAL:
portalType = PortalType.NETHER;
break;
case END_PORTAL:
// case END_GATEWAY:
portalType = PortalType.ENDER;
break;
default:
break;
}

e.setCancelled(true);
pluginInstance.getManager().handleVanillaPortalReplacements(e.getPlayer(), e.getFrom().getWorld(), portalType);
}

@EventHandler(priority = EventPriority.MONITOR)
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPortal(EntityPortalEnterEvent e) {
if (!(e.getEntity() instanceof Player) || e.getLocation().getWorld().getEnvironment() != World.Environment.THE_END) return;
pluginInstance.getServer().getScheduler().runTaskLater(pluginInstance, () ->
pluginInstance.getManager().handleVanillaPortalReplacements((Player) e.getEntity(), e.getEntity().getWorld(), PortalType.ENDER), 5);
}

@EventHandler(priority = EventPriority.MONITOR)
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPortal(PlayerRespawnEvent e) {
if (e.getPlayer().getWorld().getEnvironment() != World.Environment.THE_END) return;

Expand All @@ -147,56 +118,57 @@ public void onPortal(PlayerRespawnEvent e) {
if (respawnLocation != null) e.setRespawnLocation(respawnLocation);
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onMove(VehicleMoveEvent e) {
if (e.getTo() == null) return;
if (e.getFrom().getBlockX() != e.getTo().getBlockX() || e.getFrom().getBlockY() != e.getTo().getBlockY() || e.getFrom().getBlockZ() != e.getTo().getBlockZ())
initiatePortalStuff(e.getTo(), e.getFrom(), e.getVehicle());
}

@EventHandler(priority = EventPriority.LOWEST)
public void onPortalEntryFirst(PlayerPortalEvent e) {
if (pluginInstance.getConfig().getBoolean("block-creative-portal-entrance") && e.getPlayer().getGameMode() == GameMode.CREATIVE) {
e.setCancelled(true);
try {
Method method = e.getClass().getMethod("setCanCreatePortal", Boolean.class);
if (method != null) method.invoke(e, false);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {}
return;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onTeleport(PlayerTeleportEvent e) {vanillaPortalHelper(e);}

if (e.getPlayer().getGameMode() == GameMode.CREATIVE) {
@EventHandler(ignoreCancelled = true)
public void onPortalEntry(PlayerPortalEvent e) {
if (pluginInstance.getConfig().getBoolean("block-creative-portal-entrance") && e.getPlayer().getGameMode() == GameMode.CREATIVE) {
for (Portal portal : pluginInstance.getManager().getPortalMap().values()) {
SerializableLocation centerPortal = new SerializableLocation(pluginInstance, portal.getRegion().getPoint1().getWorldName(),
((portal.getRegion().getPoint1().getX() + portal.getRegion().getPoint2().getX()) / 2),
((portal.getRegion().getPoint1().getY() + portal.getRegion().getPoint2().getY()) / 2),
((portal.getRegion().getPoint1().getZ() + portal.getRegion().getPoint2().getZ()) / 2), 0, 0);
if (centerPortal.distance(e.getFrom(), true) <= 2) e.setCancelled(true);
if (centerPortal.distance(e.getFrom(), true) <= 2) {
e.setCancelled(true);
try {
Method method = e.getClass().getMethod("setCanCreatePortal", Boolean.class);
if (method != null) method.invoke(e, false);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {}
}
}
return;
}

Portal portal = pluginInstance.getManager().getPortalAtLocation(e.getFrom());
if (portal != null && !portal.isDisabled()) {
e.setCancelled(true);
try {
Method method = e.getClass().getMethod("setCanCreatePortal", Boolean.class);
if (method != null) method.invoke(e, false);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {}
}
if (portal == null || portal.isDisabled()) return;

e.setCancelled(true);
try {
Method method = e.getClass().getMethod("setCanCreatePortal", Boolean.class);
if (method != null) method.invoke(e, false);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) {}

vanillaPortalHelper(e);
}

@EventHandler

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onItemSpawn(ItemSpawnEvent e) {
if (pluginInstance.getConfig().getBoolean("item-transfer"))
pluginInstance.getServer().getScheduler().runTaskLater(pluginInstance,
() -> initiatePortalStuff(e.getEntity().getLocation(), e.getLocation(), e.getEntity()),
20L * pluginInstance.getConfig().getInt("item-teleport-delay"));
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onItemSpawn(PlayerDropItemEvent e) {
if (pluginInstance.getConfig().getBoolean("item-transfer")) {
final Location startLocation = e.getItemDrop().getLocation().clone();
Expand All @@ -206,7 +178,7 @@ public void onItemSpawn(PlayerDropItemEvent e) {
}
}

@EventHandler
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onSpawn(CreatureSpawnEvent e) {
List<String> blockedMobs = pluginInstance.getConfig().getStringList("creature-spawning-blacklist");
for (int i = -1; ++i < blockedMobs.size(); ) {
Expand All @@ -229,11 +201,8 @@ private void initiatePortalStuff(Location toLocation, Location fromLocation, Ent
if (isPlayer) {
pluginInstance.getManager().getTitleHandler().sendTitle(((Player) entity), "&cTeleportation cancelled",
"&7You stepped out of the portal", 0, 40, 0);

}

}

}

if (portal != null && !portal.isDisabled()) {
Expand All @@ -252,10 +221,12 @@ private void initiatePortalStuff(Location toLocation, Location fromLocation, Ent
if (isPlayer) {
final Player player = (Player) entity;
final boolean canBypassCooldown = player.hasPermission("simpleportals.cdbypass");
final boolean cooldownFail = (pluginInstance.getConfig().getBoolean("use-portal-cooldown") && (pluginInstance.getManager().isPlayerOnCooldown(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration"))
|| pluginInstance.getManager().isPlayerOnCooldown(player, "join-protection", pluginInstance.getConfig().getInt("join-protection-cooldown"))) && !canBypassCooldown),
permissionFail = !pluginInstance.getConfig().getBoolean("bypass-portal-permissions") && (!player.hasPermission("simpleportals.portal." + portal.getPortalId())
&& !player.hasPermission("simpleportals.portals." + portal.getPortalId()) && !player.hasPermission("simpleportals.portal.*") && !player.hasPermission("simpleportals.portals.*"));
final boolean cooldownFail = (pluginInstance.getConfig().getBoolean("use-portal-cooldown")
&& (pluginInstance.getManager().isPlayerOnCooldown(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration"))
|| pluginInstance.getManager().isPlayerOnCooldown(player, "join-protection", pluginInstance.getConfig().getInt("join-protection-cooldown")))
&& !canBypassCooldown), permissionFail = !pluginInstance.getConfig().getBoolean("bypass-portal-permissions")
&& (!player.hasPermission("simpleportals.portal." + portal.getPortalId()) && !player.hasPermission("simpleportals.portals." + portal.getPortalId())
&& !player.hasPermission("simpleportals.portal.*") && !player.hasPermission("simpleportals.portals.*"));

if (cooldownFail || permissionFail) {
double tv = pluginInstance.getConfig().getDouble("throw-velocity");
Expand Down Expand Up @@ -302,30 +273,34 @@ private void initiatePortalStuff(Location toLocation, Location fromLocation, Ent
final Player player = (Player) entity;
if (portal.getMessage() != null && !portal.getMessage().isEmpty())
player.sendMessage(pluginInstance.getManager().colorText(portal.getMessage().replace("{name}", portal.getPortalId())
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration"))))));
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal",
pluginInstance.getConfig().getInt("portal-cooldown-duration"))))));

if (portal.getBarMessage() != null && !portal.getBarMessage().isEmpty())
pluginInstance.getManager().sendBarMessage(player, portal.getBarMessage().replace("{name}", portal.getPortalId())
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))));
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal",
pluginInstance.getConfig().getInt("portal-cooldown-duration")))));

if ((portal.getTitle() != null && !portal.getTitle().isEmpty()) && (portal.getSubTitle() != null && !portal.getSubTitle().isEmpty()))
pluginInstance.getManager().sendTitle(player, portal.getTitle().replace("{name}", portal.getPortalId())
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))),
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player,
"normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))),
portal.getSubTitle().replace("{name}", portal.getPortalId())
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))));
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player,
"normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))));
else if (portal.getTitle() != null && !portal.getTitle().isEmpty())
pluginInstance.getManager().sendTitle(player, portal.getTitle().replace("{name}", portal.getPortalId())
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))), null);
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player,
"normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))), null);
else if (portal.getSubTitle() != null && !portal.getSubTitle().isEmpty())
pluginInstance.getManager().sendTitle(player, null, portal.getSubTitle().replace("{name}", portal.getPortalId())
.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player, "normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))));

.replace("{time}", String.valueOf(pluginInstance.getManager().getCooldownTimeLeft(player,
"normal", pluginInstance.getConfig().getInt("portal-cooldown-duration")))));
}

portal.performAction(entity);
}
} else {

if (!isPlayer) return;
final Player player = (Player) entity;

Expand All @@ -350,4 +325,23 @@ else if (portal.getSubTitle() != null && !portal.getSubTitle().isEmpty())
}
}

private void vanillaPortalHelper(PlayerTeleportEvent e) {
if (!e.getCause().name().toUpperCase().contains("PORTAL") && !e.getCause().name().toUpperCase().contains("GATEWAY")) return;

PortalType portalType = PortalType.NETHER;
switch (e.getCause()) {
case NETHER_PORTAL:
portalType = PortalType.NETHER;
break;
case END_PORTAL:
// case END_GATEWAY:
portalType = PortalType.ENDER;
break;
default:
break;
}

pluginInstance.getManager().handleVanillaPortalReplacements(e.getPlayer(), e.getFrom().getWorld(), portalType);
}

}

0 comments on commit 8ce3800

Please sign in to comment.