Skip to content

Commit

Permalink
respawn teleport
Browse files Browse the repository at this point in the history
  • Loading branch information
yueyinqiu committed Jan 22, 2021
1 parent b7eac99 commit 5689e60
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 1 deletion.
4 changes: 4 additions & 0 deletions NWorldPermissions/res/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ offline-players-tracker:
position-changed: 1
position-unchanged: 0

teleport-when-respawn:
mark: null
no-permission-only: false

update-checker:
enabled: true
period: 36000
Expand Down
9 changes: 9 additions & 0 deletions NWorldPermissions/res/marks.yml
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
# marks.yml

centre:
==: org.bukkit.Location
world: world
x: 0
y: 128
z: 0
pitch: 0
yaw: 0
2 changes: 1 addition & 1 deletion NWorldPermissions/res/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: NWorldPermissions
description: A strange power stopping players being teleported to a world.
website: https://github.com/yueyinqiu/NWorldPermissions/wiki

version: '4.71'
version: '4.80'
author: yueyinqiu5990
main: top.nololiyt.worldpermissions.RootPlugin
softdepend: [PlaceholderAPI,MarksAPI]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import top.nololiyt.worldpermissions.configurationmanagers.LocalMarksManager;
import top.nololiyt.worldpermissions.configurationmanagers.MessagesManager;
import top.nololiyt.worldpermissions.playerlisteners.JoinAndQuitListener;
import top.nololiyt.worldpermissions.playerlisteners.RespawnListener;
import top.nololiyt.worldpermissions.playerlisteners.TeleportListener;

public class RootPlugin extends JavaPlugin
Expand Down Expand Up @@ -77,5 +78,7 @@ public void onEnable()
new JoinAndQuitListener(this), this);
Bukkit.getPluginManager().registerEvents(
new TeleportListener(this), this);
Bukkit.getPluginManager().registerEvents(
new RespawnListener(this), this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package top.nololiyt.worldpermissions.playerlisteners;

import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.util.Vector;
import top.nololiyt.worldpermissions.RootPlugin;
import top.nololiyt.worldpermissions.configurationmanagers.WorldsManager;
import top.nololiyt.worldpermissions.entitiesandtools.DotDividedStringBuilder;
import top.nololiyt.worldpermissions.entitiesandtools.MessagesSender;
import top.nololiyt.worldpermissions.entitiesandtools.StringPair;
import top.nololiyt.worldpermissions.entitiesandtools.WorldInfo;

public class RespawnListener implements Listener
{
private RootPlugin rootPlugin;

public RespawnListener(RootPlugin rootPlugin)
{
this.rootPlugin = rootPlugin;
}

@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerTeleport(PlayerRespawnEvent e)
{
Location location = e.getRespawnLocation();

World destWorld = location.getWorld();
String destWorldName = destWorld.getName();

String mark = rootPlugin.getConfig().getString("mark");
if (mark == null)
return;

boolean needTeleport;
boolean noPermissionOnly = rootPlugin.getConfig().getBoolean(
"teleport-when-respawn.no-permission-only");
if (!noPermissionOnly)
needTeleport = true;
else
{
WorldInfo worldInfo = rootPlugin.getWorldsManager()
.getWorldInfo(destWorldName);
if (!worldInfo.isControlled())
needTeleport = false;
else
{
Player player = e.getPlayer();
needTeleport = !player.hasPermission("nworldpermissions.forfreeto." + destWorldName);
}
}
if (!needTeleport)
return;
location = rootPlugin.getLocalMarksManager().getMark(mark);
if (location != null)
e.setRespawnLocation(location);
}

private MessagesSender createMessagesSender(Player player, String fromWorld, String toWorldDisplay)
{
WorldsManager worldsManager = rootPlugin.getWorldsManager();
StringPair[] pairs = new StringPair[]{
StringPair.playerName(player.getDisplayName()),
StringPair.fromWorld(
worldsManager.getWorldInfo(fromWorld).getDisplay()),
StringPair.toWorld(toWorldDisplay)
};
return new MessagesSender(rootPlugin.getMessagesManager(), player, pairs);
}
}

0 comments on commit 5689e60

Please # to comment.