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

  ViewVC Help
Powered by ViewVC 1.1.20