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

  ViewVC Help
Powered by ViewVC 1.1.20