Paper1.21.11Official#spawn#warp#ışınlanma#sunucu

Spawn ve Warp

/spawn, /setspawn, /warp, /setwarp, /delwarp, /warps: ilk girişte ve ölünce spawn'a gönderme, bekleme süresi, yönetici izinleri.

MinborAIminborai 1 0 0 0
Source code (ZIP)
Tüm hakları saklıdırUse on serverModifyCommercial· Attribution
src/main/java/com/minborai/spawnvewarp/SpawnVeWarp.java
1package com.minborai.spawnvewarp;
2
3import net.kyori.adventure.text.Component;
4import net.kyori.adventure.text.minimessage.MiniMessage;
5import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
6import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
7import org.bukkit.Location;
8import org.bukkit.command.Command;
9import org.bukkit.command.CommandSender;
10import org.bukkit.configuration.ConfigurationSection;
11import org.bukkit.configuration.file.YamlConfiguration;
12import org.bukkit.entity.Player;
13import org.bukkit.event.EventHandler;
14import org.bukkit.event.Listener;
15import org.bukkit.event.player.PlayerJoinEvent;
16import org.bukkit.event.player.PlayerRespawnEvent;
17import org.bukkit.plugin.java.JavaPlugin;
18
19import java.io.File;
20import java.io.IOException;
21import java.util.ArrayList;
22import java.util.Collections;
23import java.util.List;
24import java.util.Locale;
25import java.util.Set;
26import java.util.regex.Pattern;
27
28public final class SpawnVeWarp extends JavaPlugin implements Listener {
29
30 private static final MiniMessage MM = MiniMessage.miniMessage();
31 private static final Pattern NAME = Pattern.compile("[a-z0-9_-]{1,24}");
32
33 private File dataFile;
34 private YamlConfiguration data;
35 private Teleporter teleporter;
36
37 @Override
38 public void onEnable() {
39 saveDefaultConfig();
40 dataFile = new File(getDataFolder(), "data.yml");
41 data = YamlConfiguration.loadConfiguration(dataFile);
42 teleporter = new Teleporter(this);
43 getServer().getPluginManager().registerEvents(this, this);
44 }
45
46 private void save() {
47 try {
48 data.save(dataFile);
49 } catch (IOException e) {
50 getLogger().warning("data.yml kaydedilemedi: " + e.getMessage());
51 }
52 }
53
54 private Component text(String key, String... pairs) {
55 List<TagResolver> tags = new ArrayList<>();
56 for (int i = 0; i + 1 < pairs.length; i += 2) tags.add(Placeholder.unparsed(pairs[i], pairs[i + 1]));
57 return MM.deserialize(getConfig().getString("messages.prefix", "") + getConfig().getString("messages." + key, key), TagResolver.resolver(tags));
58 }
59
60 private Location spawn() {
61 Location loc = data.getLocation("spawn");
62 return loc != null && loc.getWorld() != null ? loc : null;
63 }
64
65 private Set<String> warps() {
66 ConfigurationSection sec = data.getConfigurationSection("warps");
67 return sec == null ? Collections.emptySet() : sec.getKeys(false);
68 }
69
70 private int warmup(Player player) {
71 return player.hasPermission("warps.bypass.warmup") ? 0 : getConfig().getInt("warmup-seconds", 3);
72 }
73
74 @EventHandler
75 public void onJoin(PlayerJoinEvent event) {
76 Location loc = spawn();
77 if (loc != null && !event.getPlayer().hasPlayedBefore() && getConfig().getBoolean("spawn-on-first-join", true)) {
78 event.getPlayer().teleportAsync(loc);
79 }
80 }
81
82 @EventHandler
83 public void onRespawn(PlayerRespawnEvent event) {
84 Location loc = spawn();
85 if (loc != null && getConfig().getBoolean("respawn-at-spawn", true) && !event.isBedSpawn() && !event.isAnchorSpawn()) {
86 event.setRespawnLocation(loc);
87 }
88 }
89
90 @Override
91 public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
92 if (!(sender instanceof Player player)) {
93 sender.sendMessage(text("players-only"));
94 return true;
95 }
96 switch (command.getName()) {
97 case "setspawn" -> {
98 data.set("spawn", player.getLocation());
99 save();
100 player.sendMessage(text("spawn-set"));
101 }
102 case "spawn" -> {
103 Location loc = spawn();
104 if (loc == null) {
105 player.sendMessage(text("no-spawn"));
106 return true;
107 }
108 int s = warmup(player);
109 if (s > 0) player.sendMessage(text("warmup", "seconds", String.valueOf(s)));
110 teleporter.teleport(player, loc, s, () -> text("spawn-teleported"), () -> text("cancelled"));
111 }
112 case "setwarp", "delwarp", "warp" -> {
113 if (args.length == 0) return false;
114 String name = args[0].toLowerCase(Locale.ROOT);
115 if (!NAME.matcher(name).matches()) {
116 player.sendMessage(text("invalid-name"));
117 return true;
118 }
119 String path = "warps." + name;
120 if (command.getName().equals("setwarp")) {
121 data.set(path, player.getLocation());
122 save();
123 player.sendMessage(text("warp-set", "warp", name));
124 } else if (command.getName().equals("delwarp")) {
125 if (!data.contains(path)) {
126 player.sendMessage(text("warp-not-found", "warp", name));
127 return true;
128 }
129 data.set(path, null);
130 save();
131 player.sendMessage(text("warp-deleted", "warp", name));
132 } else {
133 Location loc = data.getLocation(path);
134 if (loc == null || loc.getWorld() == null) {
135 player.sendMessage(text("warp-not-found", "warp", name));
136 return true;
137 }
138 if (getConfig().getBoolean("per-warp-permission", false) && !player.hasPermission("warps.warp." + name)) {
139 player.sendMessage(text("no-permission"));
140 return true;
141 }
142 int s = warmup(player);
143 if (s > 0) player.sendMessage(text("warmup", "seconds", String.valueOf(s)));
144 teleporter.teleport(player, loc, s, () -> text("warp-teleported", "warp", name), () -> text("cancelled"));
145 }
146 }
147 case "warps" -> {
148 Set<String> all = warps();
149 player.sendMessage(all.isEmpty() ? text("no-warps") : text("warp-list", "warps", String.join(", ", all)));
150 }
151 default -> {
152 return false;
153 }
154 }
155 return true;
156 }
157
158 @Override
159 public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
160 if (args.length != 1 || !(command.getName().equals("warp") || command.getName().equals("delwarp"))) return Collections.emptyList();
161 String prefix = args[0].toLowerCase(Locale.ROOT);
162 List<String> out = new ArrayList<>();
163 for (String w : warps()) if (w.startsWith(prefix)) out.add(w);
164 return out;
165 }
166}
167