/[projects]/miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/Jail.java
ViewVC logotype

Contents of /miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/Jail.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2438 - (show annotations) (download)
Mon Mar 9 14:36:19 2015 UTC (9 years, 2 months ago) by torben
File size: 8813 byte(s)
More warnings
1 package dk.thoerup.bukkit.hoeruputils;
2
3 import org.bukkit.ChatColor;
4 import org.bukkit.Location;
5 import org.bukkit.Server;
6 import org.bukkit.World;
7 import org.bukkit.command.Command;
8 import org.bukkit.command.CommandExecutor;
9 import org.bukkit.command.CommandSender;
10 import org.bukkit.entity.Player;
11 import org.bukkit.OfflinePlayer;
12 import org.bukkit.plugin.Plugin;
13 import org.bukkit.event.Listener;
14 import org.bukkit.event.EventHandler;
15 import org.bukkit.event.player.PlayerTeleportEvent;
16 import org.bukkit.event.player.PlayerPortalEvent;
17 import org.bukkit.event.player.PlayerMoveEvent;
18 import org.bukkit.event.player.PlayerJoinEvent;
19 import org.bukkit.event.player.PlayerRespawnEvent;
20 import org.bukkit.event.block.BlockBreakEvent;
21 import org.bukkit.event.block.BlockPlaceEvent;
22 import org.bukkit.configuration.file.YamlConfiguration;
23
24 import java.io.*;
25 import java.util.ArrayList;
26 import java.util.Set;
27 import java.util.TreeSet;
28
29 public class Jail implements CommandExecutor, Listener {
30
31 HoerupUtilsPlugin plugin;
32
33 TreeSet<String> jailed = new TreeSet<String>();
34
35 Location jailLocation;
36 Location releaseLocation;
37
38 final double maxDist = 25.0;
39
40 public Jail(HoerupUtilsPlugin plugin) {
41 this.plugin = plugin;
42
43
44 load();
45 }
46
47 public void load() {
48 File configFile = new File(plugin.getDataFolder(), "jail.yml");
49
50 if (!configFile.exists() ) {
51 System.out.println("[HoerupJail] jail.yml not found");
52 }
53 YamlConfiguration config = new YamlConfiguration();
54 try {
55 config.load(configFile);
56 } catch (Exception e) {
57 System.out.println("[HoerupJail] exception loading jails : " + e.getMessage() );
58 return;
59 }
60
61 jailLocation = loadLocation(config, plugin.getServer(), "jailloc");
62 releaseLocation = loadLocation(config, plugin.getServer(), "releaseloc");
63
64 @SuppressWarnings("unchecked")
65 Set<String> tmpSet = (Set<String>) config.get("jails");
66 jailed.addAll(tmpSet);
67 }
68
69 public void save() {
70 File configFile = new File(plugin.getDataFolder(), "jail.yml");
71
72 YamlConfiguration config = new YamlConfiguration();
73 saveLocation(config, jailLocation, "jailloc");
74 saveLocation(config, jailLocation, "releaseloc");
75 config.set("jails", jailed);
76
77 try {
78 config.save(configFile);
79 } catch (java.io.IOException e) {
80 System.out.println("[HoerupJial] exception saving jails : " + e.getMessage() );
81 }
82
83 }
84
85 private static Location loadLocation(YamlConfiguration config, Server server, String prefix) {
86 String world = config.getString( prefix + ".world");
87 double x = config.getDouble( prefix + ".x");
88 double y = config.getDouble( prefix + ".y");
89 double z = config.getDouble( prefix + ".z");
90 float pitch = (float) config.getDouble( prefix + ".pitch");
91 float yaw = (float) config.getDouble( prefix + ".yaw");
92
93 World w = server.getWorld(world);
94
95 return new Location(w,x,y,z,yaw,pitch);
96 }
97
98 private static void saveLocation(YamlConfiguration config, Location location, String prefix) {
99 if (location == null)
100 return;
101
102 config.set( prefix + ".world", location.getWorld().getName() );
103 config.set( prefix + ".x", location.getX() );
104 config.set( prefix + ".y", location.getY() );
105 config.set( prefix + ".z", location.getZ() );
106 config.set( prefix + ".pitch", location.getPitch() );
107 config.set( prefix + ".yaw", location.getYaw() );
108 }
109
110 @Override
111 public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
112 if (args.length == 0) {
113 sender.sendMessage("Usage: /jail <imprison|release|list|tpjail|tprelease|setjail|setrelease>");
114 return true;
115 }
116
117 if (sender instanceof Player ) {
118 Player p = (Player) sender;
119 if ( p.isOp() || p.hasPermission("hoeruputils.jail") ) {
120 //do nothing
121 } else {
122 p.sendMessage("Only server operators or players with hoeruputils.jail priv may use this command");
123 return true;
124 }
125 } else {
126 if ( args[0].equals("imprison") || args[0].equals("release") || args[0].equals("list") ) {
127 //do nothing
128 } else {
129 sender.sendMessage("only imprison, release and list may be used from console");
130 return true;
131 }
132 }
133
134
135 if (args[0].equals("imprison")) {
136 if (args.length != 2) {
137 sender.sendMessage("You must specify the player");
138 return true;
139 }
140
141 OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] );
142 if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) {
143 sender.sendMessage("Player not found");
144 return true;
145 }
146
147 if (inmate instanceof Player) {
148 Player p = (Player) inmate;
149 p.sendMessage("You have been imprisoned");
150 p.teleport( jailLocation );
151 }
152 jailed.add( inmate.getName() );
153 save();
154 sender.sendMessage("player " + inmate.getName() + " is imprisoned");
155 return true;
156 }
157
158 if (args[0].equals("release")) {
159 if (args.length != 2) {
160 sender.sendMessage("You must specify the player");
161 return true;
162 }
163
164 OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] );
165 if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) {
166 sender.sendMessage("Player not found");
167 return true;
168 }
169
170 jailed.remove( inmate.getName() );
171 if (inmate instanceof Player) {
172 Player p = (Player) inmate;
173 p.sendMessage("You have been released from jail");
174 p.teleport( releaseLocation );
175 } else {
176 plugin.getMessageWrapper().sendMessage("Jail System", inmate, "You have been release from jail - you are free to go home");
177 }
178 save();
179 sender.sendMessage("player " + inmate.getName() + " is released");
180 return true;
181 }
182
183 if (args[0].equals("list") ) {
184 if (jailed.size() > 0) {
185 StringBuffer sb = new StringBuffer();
186 for (String j : jailed ) {
187 sb.append(", ");
188 sb.append(j);
189 }
190 sender.sendMessage("Current inmates: " + sb.substring(2) );
191 } else {
192 sender.sendMessage("There are currently no inmates");
193 }
194 return true;
195 }
196
197 if (args[0].equals("setjail")) {
198 Player p = (Player) sender;
199 jailLocation = p.getLocation().clone();
200 p.sendMessage("New jail location has been set");
201 save();
202 return true;
203 }
204 if (args[0].equals("setrelease")) {
205 Player p = (Player) sender;
206 releaseLocation = p.getLocation().clone();
207 p.sendMessage("New release location has been set");
208 save();
209 return true;
210 }
211
212 if (args[0].equals("tpjail")) {
213 Player p = (Player) sender;
214 p.teleport(jailLocation);
215 return true;
216 }
217 if (args[0].equals("tprelease")) {
218 Player p = (Player) sender;
219 p.teleport(releaseLocation);
220 return true;
221 }
222
223 sender.sendMessage( "Unknown command: " + args[0] );
224
225 return true;
226 }
227
228 @EventHandler
229 public void onPlayerMove(PlayerMoveEvent event) {
230 Player p = event.getPlayer();
231 if (jailed.contains(p.getName() )) {
232 Location to = event.getTo();
233 double xDist = Math.abs( to.getX() - jailLocation.getX() );
234 double zDist = Math.abs( to.getZ() - jailLocation.getZ() );
235
236 if ( xDist > maxDist || zDist > maxDist) {
237 //System.out.println("" + xDist + " / " + zDist );
238 event.setCancelled(true );
239 }
240 }
241 }
242
243 @EventHandler
244 public void onJoin(PlayerJoinEvent event) {
245 Player p = event.getPlayer();
246 if (jailed.contains( p.getName() ) ) {
247 p.teleport( jailLocation );
248 p.sendMessage("You are currently in jail and have been teleported to you cell");
249 }
250 }
251
252 @EventHandler
253 public void onBlockBreak(BlockBreakEvent event) {
254 Player p = event.getPlayer();
255 if (jailed.contains( p.getName() ) ) {
256 event.setCancelled( true );
257 }
258 }
259 @EventHandler
260 public void onBlockPlace(BlockPlaceEvent event) {
261 Player p = event.getPlayer();
262 if (jailed.contains( p.getName() ) ) {
263 event.setCancelled( true );
264 }
265 }
266
267 @EventHandler
268 public void onTeleport(PlayerTeleportEvent event) {
269 Player p = event.getPlayer();
270 if (jailed.contains( p.getName() ) ) {
271
272 //System.out.println( "Teleport: " + event.getCause().toString() );
273
274 Location from = event.getFrom();
275 Location to = event.getTo();
276 if ( from.getWorld() != to.getWorld() ) {
277 p.sendMessage("You are jailed and may not teleport");
278 event.setCancelled(true );
279 return;
280 }
281
282 double xDist = Math.abs( to.getX() - jailLocation.getX() );
283 double zDist = Math.abs( to.getZ() - jailLocation.getZ() );
284
285 if ( xDist > maxDist || zDist > maxDist) {
286 p.sendMessage("You are jailed and may not teleport");
287 event.setCancelled(true );
288 }
289 }
290 }
291
292 @EventHandler
293 public void onPortal(PlayerPortalEvent event) {
294 Player p = event.getPlayer();
295 if (jailed.contains( p.getName() ) ) {
296 p.sendMessage("You are jailed and may not use portals");
297 event.setCancelled( true );
298 }
299 }
300
301 @EventHandler
302 public void onRespawn(PlayerRespawnEvent event) {
303 Player p = event.getPlayer();
304 if (jailed.contains( p.getName() ) ) {
305 event.setRespawnLocation( jailLocation );
306 p.teleport( jailLocation );
307 }
308 }
309 }
310

  ViewVC Help
Powered by ViewVC 1.1.20