mirror of
				https://e.coding.net/circlecloud/TeleportRandom.git
				synced 2025-11-03 18:16:02 +00:00 
			
		
		
		
	
							
								
								
									
										19
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								pom.xml
									
									
									
									
									
								
							@@ -3,7 +3,7 @@
 | 
				
			|||||||
	<modelVersion>4.0.0</modelVersion>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<groupId>pw.yumc</groupId>
 | 
						<groupId>pw.yumc</groupId>
 | 
				
			||||||
	<artifactId>TeleportRandom</artifactId>
 | 
						<artifactId>TeleportRandom</artifactId>
 | 
				
			||||||
	<version>1.4.2</version>
 | 
						<version>1.4.3</version>
 | 
				
			||||||
	<name>TeleportRandom</name>
 | 
						<name>TeleportRandom</name>
 | 
				
			||||||
	<build>
 | 
						<build>
 | 
				
			||||||
		<finalName>${project.name}</finalName>
 | 
							<finalName>${project.name}</finalName>
 | 
				
			||||||
@@ -31,10 +31,15 @@
 | 
				
			|||||||
					<minimizeJar>true</minimizeJar>
 | 
										<minimizeJar>true</minimizeJar>
 | 
				
			||||||
					<artifactSet>
 | 
										<artifactSet>
 | 
				
			||||||
						<includes>
 | 
											<includes>
 | 
				
			||||||
 | 
												<include>pw.yumc:YumCore</include>
 | 
				
			||||||
							<include>cn.citycraft:PluginHelper</include>
 | 
												<include>cn.citycraft:PluginHelper</include>
 | 
				
			||||||
						</includes>
 | 
											</includes>
 | 
				
			||||||
					</artifactSet>
 | 
										</artifactSet>
 | 
				
			||||||
					<relocations>
 | 
										<relocations>
 | 
				
			||||||
 | 
											<relocation>
 | 
				
			||||||
 | 
												<pattern>pw.yumc.YumCore</pattern>
 | 
				
			||||||
 | 
												<shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern>
 | 
				
			||||||
 | 
											</relocation>
 | 
				
			||||||
						<relocation>
 | 
											<relocation>
 | 
				
			||||||
							<pattern>cn.citycraft.PluginHelper</pattern>
 | 
												<pattern>cn.citycraft.PluginHelper</pattern>
 | 
				
			||||||
							<shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern>
 | 
												<shadedPattern>${project.groupId}.${project.artifactId}</shadedPattern>
 | 
				
			||||||
@@ -59,12 +64,8 @@
 | 
				
			|||||||
	<properties>
 | 
						<properties>
 | 
				
			||||||
		<update.description>&a代码重构版本</update.description>
 | 
							<update.description>&a代码重构版本</update.description>
 | 
				
			||||||
		<update.changes>
 | 
							<update.changes>
 | 
				
			||||||
 | 
								&b1.4.3 - &c修复世界限制无效 添加CD剩余时间...;
 | 
				
			||||||
			&b1.4.2 - &c修复CD只提示无限制的BUG...;
 | 
								&b1.4.2 - &c修复CD只提示无限制的BUG...;
 | 
				
			||||||
			&b1.4.1 - &c修复AIOOBE错误...;
 | 
					 | 
				
			||||||
			&b1.4   - &a添加命令CD...;
 | 
					 | 
				
			||||||
			&b1.3.2 - &c修复上个版本的空指针错误...;
 | 
					 | 
				
			||||||
			&b1.3.1 - &c修复上个版本一个逻辑错误...;
 | 
					 | 
				
			||||||
			&b1.3   - &c修复传送世界限制(区分大小写)...;
 | 
					 | 
				
			||||||
		</update.changes>
 | 
							</update.changes>
 | 
				
			||||||
		<env.GIT_COMMIT>DEBUG</env.GIT_COMMIT>
 | 
							<env.GIT_COMMIT>DEBUG</env.GIT_COMMIT>
 | 
				
			||||||
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
							<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
				
			||||||
@@ -95,5 +96,11 @@
 | 
				
			|||||||
			<type>jar</type>
 | 
								<type>jar</type>
 | 
				
			||||||
			<version>1.0</version>
 | 
								<version>1.0</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
							<dependency>
 | 
				
			||||||
 | 
								<groupId>pw.yumc</groupId>
 | 
				
			||||||
 | 
								<artifactId>YumCore</artifactId>
 | 
				
			||||||
 | 
								<type>jar</type>
 | 
				
			||||||
 | 
								<version>1.0</version>
 | 
				
			||||||
 | 
							</dependency>
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
package pw.yumc.TeleportRandom;
 | 
					package pw.yumc.TeleportRandom;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Random;
 | 
					import java.util.Random;
 | 
				
			||||||
import java.util.Set;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
@@ -16,13 +16,14 @@ import org.bukkit.entity.Player;
 | 
				
			|||||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
					import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import cn.citycraft.PluginHelper.config.FileConfig;
 | 
					import cn.citycraft.PluginHelper.config.FileConfig;
 | 
				
			||||||
import cn.citycraft.PluginHelper.utils.VersionChecker;
 | 
					import pw.yumc.YumCore.statistic.Statistics;
 | 
				
			||||||
 | 
					import pw.yumc.YumCore.update.SubscribeTask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
					public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
				
			||||||
    public final static Random rr = new Random();
 | 
					    public final static Random rr = new Random();
 | 
				
			||||||
    public static FileConfig config;
 | 
					    public static FileConfig config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Set<String> cd = new HashSet<>();
 | 
					    private final Map<String, Long> cd = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean onCommand(final CommandSender sender, final Command cmd, final String string, final String[] args) {
 | 
					    public boolean onCommand(final CommandSender sender, final Command cmd, final String string, final String[] args) {
 | 
				
			||||||
@@ -47,6 +48,8 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
				
			|||||||
            } else if (args.length > 1) {
 | 
					            } else if (args.length > 1) {
 | 
				
			||||||
                final Player p = Bukkit.getPlayer(args[0]);
 | 
					                final Player p = Bukkit.getPlayer(args[0]);
 | 
				
			||||||
                switch (args.length) {
 | 
					                switch (args.length) {
 | 
				
			||||||
 | 
					                case 1:
 | 
				
			||||||
 | 
					                    throw new IllegalArgumentException();
 | 
				
			||||||
                case 2:
 | 
					                case 2:
 | 
				
			||||||
                    randomTP(Integer.parseInt(args[1]), p.getWorld(), p);
 | 
					                    randomTP(Integer.parseInt(args[1]), p.getWorld(), p);
 | 
				
			||||||
                    return true;
 | 
					                    return true;
 | 
				
			||||||
@@ -56,27 +59,28 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } catch (final IllegalArgumentException e) {
 | 
					        } catch (final IllegalArgumentException e) {
 | 
				
			||||||
 | 
					            if (args.length > 0) {
 | 
				
			||||||
 | 
					                if (args[0].equalsIgnoreCase("reload")) {
 | 
				
			||||||
 | 
					                    config.reload();
 | 
				
			||||||
 | 
					                    sender.sendMessage(getPrefix() + config.getMessage("Message.Reload"));
 | 
				
			||||||
 | 
					                    return true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (args[0].equalsIgnoreCase("help")) {
 | 
				
			||||||
 | 
					                    sender.sendMessage("玩家: /tpr [范围] [世界]");
 | 
				
			||||||
 | 
					                    sender.sendMessage("控制台: /tpr <玩家> [范围] [世界]");
 | 
				
			||||||
 | 
					                    return true;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            sender.sendMessage(getPrefix() + "§c非法的参数或不存在的世界!");
 | 
					            sender.sendMessage(getPrefix() + "§c非法的参数或不存在的世界!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (args.length > 0) {
 | 
					 | 
				
			||||||
            if (args[0].equalsIgnoreCase("reload")) {
 | 
					 | 
				
			||||||
                config.reload();
 | 
					 | 
				
			||||||
                sender.sendMessage(getPrefix() + config.getMessage("Message.Reload"));
 | 
					 | 
				
			||||||
                return true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (args[0].equalsIgnoreCase("help")) {
 | 
					 | 
				
			||||||
                sender.sendMessage("玩家: /tpr [范围] [世界]");
 | 
					 | 
				
			||||||
                sender.sendMessage("控制台: /tpr <玩家> [范围] [世界]");
 | 
					 | 
				
			||||||
                return true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onEnable() {
 | 
					    public void onEnable() {
 | 
				
			||||||
        getCommand("tpr").setExecutor(this);
 | 
					        getCommand("tpr").setExecutor(this);
 | 
				
			||||||
        new VersionChecker(this);
 | 
					        new Statistics();
 | 
				
			||||||
 | 
					        new SubscribeTask();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
@@ -88,54 +92,78 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
				
			|||||||
        if (world == null || p == null) {
 | 
					        if (world == null || p == null) {
 | 
				
			||||||
            throw new IllegalArgumentException();
 | 
					            throw new IllegalArgumentException();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!p.hasPermission("tpr.nocd") && cd.contains(p.getName())) {
 | 
					        getServer().getScheduler().runTaskAsynchronously(this, new Runnable() {
 | 
				
			||||||
            p.sendMessage(getPrefix() + config.getMessage("Message.CD"));
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (!config.getStringList("AllowWorld").contains(world.getName())) {
 | 
					 | 
				
			||||||
            p.sendMessage(getPrefix() + config.getMessage("Message.NoPermWorld"));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        int lr = config.getInt("default");
 | 
					 | 
				
			||||||
        if (limit == 0) {
 | 
					 | 
				
			||||||
            p.sendMessage(getPrefix() + config.getMessage("Message.default1"));
 | 
					 | 
				
			||||||
            p.sendMessage(getPrefix() + config.getMessage("Message.default2"));
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            lr = limit;
 | 
					 | 
				
			||||||
            final int lrLimit = config.getInt("Limit");
 | 
					 | 
				
			||||||
            if (lr > lrLimit) {
 | 
					 | 
				
			||||||
                lr = lrLimit;
 | 
					 | 
				
			||||||
                p.sendMessage(String.format(getPrefix() + config.getMessage("Message.Wran"), lrLimit));
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        final Point point = new Point(lr, world);
 | 
					 | 
				
			||||||
        checkBlock(point, p);
 | 
					 | 
				
			||||||
        point.tp(p);
 | 
					 | 
				
			||||||
        cd.add(p.getName());
 | 
					 | 
				
			||||||
        getServer().getScheduler().runTaskLater(this, new Runnable() {
 | 
					 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void run() {
 | 
					            public void run() {
 | 
				
			||||||
                cd.remove(p.getName());
 | 
					                final long t = System.currentTimeMillis();
 | 
				
			||||||
 | 
					                if (!p.hasPermission("tpr.nocd") && cd.keySet().contains(p.getName())) {
 | 
				
			||||||
 | 
					                    final long leftTime = config.getLong("CD") / 20 - (t - cd.get(p.getName())) / 1000;
 | 
				
			||||||
 | 
					                    p.sendMessage(getPrefix() + config.getMessage("Message.CDs").replace("{0}", String.format("%s", leftTime)));
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (!config.getStringList("AllowWorld").contains(world.getName())) {
 | 
				
			||||||
 | 
					                    p.sendMessage(getPrefix() + config.getMessage("Message.NoPermWorld"));
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                int lr = config.getInt("default");
 | 
				
			||||||
 | 
					                if (limit == 0) {
 | 
				
			||||||
 | 
					                    p.sendMessage(getPrefix() + config.getMessage("Message.default1"));
 | 
				
			||||||
 | 
					                    p.sendMessage(getPrefix() + config.getMessage("Message.default2"));
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    lr = limit;
 | 
				
			||||||
 | 
					                    final int lrLimit = config.getInt("Limit");
 | 
				
			||||||
 | 
					                    if (lr > lrLimit) {
 | 
				
			||||||
 | 
					                        lr = lrLimit;
 | 
				
			||||||
 | 
					                        p.sendMessage(String.format(getPrefix() + config.getMessage("Message.Wran"), lrLimit));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                final Point point = new Point(lr, world);
 | 
				
			||||||
 | 
					                getServer().getScheduler().runTask(TeleportRandom.this, new Runnable() {
 | 
				
			||||||
 | 
					                    @Override
 | 
				
			||||||
 | 
					                    public void run() {
 | 
				
			||||||
 | 
					                        checkBlock(point, p);
 | 
				
			||||||
 | 
					                        tp(point, p);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                cd.put(p.getName(), t);
 | 
				
			||||||
 | 
					                getServer().getScheduler().runTaskLater(TeleportRandom.this, new Runnable() {
 | 
				
			||||||
 | 
					                    @Override
 | 
				
			||||||
 | 
					                    public void run() {
 | 
				
			||||||
 | 
					                        cd.remove(p.getName());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }, config.getLong("CD"));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }, config.getLong("CD"));
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void tp(final Point point, final Player p) {
 | 
				
			||||||
 | 
					        final Location loc = getTpLocation(point);
 | 
				
			||||||
 | 
					        p.teleport(loc);
 | 
				
			||||||
 | 
					        p.sendMessage(String.format(getPluginname() + config.getMessage("Message.Tip"), loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void checkBlock(final Point point, final Player p) {
 | 
					    private void checkBlock(final Point point, final Player p) {
 | 
				
			||||||
        final Material rbm = point.getBlock().getType();
 | 
					        final Block bk = getBlock(point);
 | 
				
			||||||
 | 
					        final Material rbm = bk.getType();
 | 
				
			||||||
        final String blockname = rbm.name();
 | 
					        final String blockname = rbm.name();
 | 
				
			||||||
        for (final String protectblock : config.getStringList("ProtectBlock")) {
 | 
					        for (final String protectblock : config.getStringList("ProtectBlock")) {
 | 
				
			||||||
            if (protectblock.equalsIgnoreCase(blockname)) {
 | 
					            if (protectblock.equalsIgnoreCase(blockname)) {
 | 
				
			||||||
                point.getBlock().setType(Material.GLASS);
 | 
					                bk.setType(Material.GLASS);
 | 
				
			||||||
                p.sendMessage(getPrefix() + config.getMessage("Message.Protect"));
 | 
					                p.sendMessage(getPrefix() + config.getMessage("Message.Protect"));
 | 
				
			||||||
                this.getServer().getScheduler().runTaskLater(this, new Runnable() {
 | 
					                this.getServer().getScheduler().runTaskLater(this, new Runnable() {
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
                    public void run() {
 | 
					                    public void run() {
 | 
				
			||||||
                        point.getBlock().setType(rbm);
 | 
					                        bk.setType(rbm);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }, 200);
 | 
					                }, 200);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Block getBlock(final Point point) {
 | 
				
			||||||
 | 
					        return new Location(point.world, point.x, point.world.getHighestBlockYAt(point.x, point.z) - 1, point.z).getBlock();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String getPluginname() {
 | 
					    private String getPluginname() {
 | 
				
			||||||
        return config.getMessage("pluginname");
 | 
					        return config.getMessage("pluginname");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -148,9 +176,12 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
				
			|||||||
        return config.getMessage("servername");
 | 
					        return config.getMessage("servername");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Location getTpLocation(final Point point) {
 | 
				
			||||||
 | 
					        return new Location(point.world, point.x + 0.5, point.world.getHighestBlockYAt(point.x, point.z) + 3, point.z + 0.5);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Point {
 | 
					    class Point {
 | 
				
			||||||
        public int x;
 | 
					        public int x;
 | 
				
			||||||
        public int y;
 | 
					 | 
				
			||||||
        public int z;
 | 
					        public int z;
 | 
				
			||||||
        public int limit;
 | 
					        public int limit;
 | 
				
			||||||
        public World world;
 | 
					        public World world;
 | 
				
			||||||
@@ -168,23 +199,6 @@ public class TeleportRandom extends JavaPlugin implements CommandExecutor {
 | 
				
			|||||||
            if (yf % 2 != 0) {
 | 
					            if (yf % 2 != 0) {
 | 
				
			||||||
                z = -z;
 | 
					                z = -z;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            y = world.getHighestBlockYAt(x, z);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public Block getBlock() {
 | 
					 | 
				
			||||||
            return new Location(world, x, y - 1, z).getBlock();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public Location getTpLocation() {
 | 
					 | 
				
			||||||
            return new Location(world, x, y + 3, z);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void sendMessage(final Player p) {
 | 
					 | 
				
			||||||
            p.sendMessage(String.format(getPluginname() + config.getMessage("Message.Tip"), world.getName(), x, y, z));
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void tp(final Player p) {
 | 
					 | 
				
			||||||
            p.teleport(getTpLocation());
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
#本文件为随机传送插件的主配置文件
 | 
					#本文件为随机传送插件的主配置文件
 | 
				
			||||||
Version: 1.4
 | 
					Version: 1.5
 | 
				
			||||||
#服务器名称
 | 
					#服务器名称
 | 
				
			||||||
servername: ''
 | 
					servername: ''
 | 
				
			||||||
#插件名称
 | 
					#插件名称
 | 
				
			||||||
@@ -25,7 +25,7 @@ Message:
 | 
				
			|||||||
  #当前世界不允许传送
 | 
					  #当前世界不允许传送
 | 
				
			||||||
  NoPermWorld: '&c当前世界不允许使用随机传送!'
 | 
					  NoPermWorld: '&c当前世界不允许使用随机传送!'
 | 
				
			||||||
  #当前世界不允许传送
 | 
					  #当前世界不允许传送
 | 
				
			||||||
  CD: '&c随机传送冷却中!'
 | 
					  CDs: '&c随机传送冷却中 剩余 {0} 秒!'
 | 
				
			||||||
#允许传送的世界(区分大小写)
 | 
					#允许传送的世界(区分大小写)
 | 
				
			||||||
AllowWorld: 
 | 
					AllowWorld: 
 | 
				
			||||||
  - world
 | 
					  - world
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user