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

Annotation 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 - (hide annotations) (download)
Thu Apr 4 12:15:09 2013 UTC (11 years, 2 months ago) by torben
File size: 8805 byte(s)
when add/remove people from jail send back the name of the inmate
1 torben 1856 package dk.thoerup.bukkit.hoeruputils;
2    
3     import org.bukkit.ChatColor;
4     import org.bukkit.Location;
5     import org.bukkit.Server;
6 torben 1858 import org.bukkit.World;
7 torben 1856 import org.bukkit.command.Command;
8     import org.bukkit.command.CommandExecutor;
9     import org.bukkit.command.CommandSender;
10     import org.bukkit.entity.Player;
11 torben 1862 import org.bukkit.OfflinePlayer;
12 torben 1856 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 torben 1859 import org.bukkit.event.player.PlayerRespawnEvent;
21 torben 1856
22     import org.bukkit.event.block.BlockBreakEvent;
23     import org.bukkit.event.block.BlockPlaceEvent;
24    
25 torben 1858 import org.bukkit.configuration.file.YamlConfiguration;
26    
27     import java.io.File;
28     import java.io.*;
29    
30 torben 1856 import java.util.ArrayList;
31 torben 1858 import java.util.Set;
32 torben 1856 import java.util.TreeSet;
33    
34     public class Jail implements CommandExecutor, Listener {
35    
36 torben 1862 HoerupUtilsPlugin plugin;
37 torben 1856
38     TreeSet<String> jailed = new TreeSet<String>();
39    
40     Location jailLocation;
41     Location releaseLocation;
42    
43     final double maxDist = 25.0;
44    
45 torben 1862 public Jail(HoerupUtilsPlugin plugin) {
46 torben 1856 this.plugin = plugin;
47    
48    
49 torben 1858 load();
50 torben 1856 }
51    
52 torben 1858 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 torben 1857 public void save() {
74 torben 1858 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 torben 1857 }
88    
89 torben 1858 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 torben 1856 @Override
115     public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
116 torben 1860 if (args.length == 0) {
117     sender.sendMessage("Usage: /jail <imprison|release|list|tpjail|tprelease|setjail|setrelease>");
118 torben 1856 return true;
119     }
120 torben 1860
121     if (sender instanceof Player ) {
122     Player p = (Player) sender;
123 torben 1911 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 torben 1860 return true;
128     }
129     } else {
130 torben 1861 if ( args[0].equals("imprison") || args[0].equals("release") || args[0].equals("list") ) {
131     //do nothing
132     } else {
133 torben 1860 sender.sendMessage("only imprison, release and list may be used from console");
134     return true;
135     }
136 torben 1856 }
137    
138    
139     if (args[0].equals("imprison")) {
140     if (args.length != 2) {
141 torben 1861 sender.sendMessage("You must specify the player");
142 torben 1856 return true;
143     }
144    
145 torben 1862 OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] );
146     if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) {
147 torben 1860 sender.sendMessage("Player not found");
148 torben 1856 return true;
149     }
150    
151 torben 1862 if (inmate instanceof Player) {
152     Player p = (Player) inmate;
153     p.sendMessage("You have been imprisoned");
154     p.teleport( jailLocation );
155     }
156 torben 1856 jailed.add( inmate.getName() );
157 torben 1857 save();
158 torben 1967 sender.sendMessage("player " + inmate.getName() + " is imprisoned");
159 torben 1856 return true;
160     }
161    
162     if (args[0].equals("release")) {
163     if (args.length != 2) {
164 torben 1861 sender.sendMessage("You must specify the player");
165 torben 1856 return true;
166     }
167    
168 torben 1862 OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] );
169     if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) {
170 torben 1860 sender.sendMessage("Player not found");
171 torben 1856 return true;
172     }
173    
174     jailed.remove( inmate.getName() );
175 torben 1862 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 torben 1857 save();
183 torben 1967 sender.sendMessage("player " + inmate.getName() + " is released");
184 torben 1856 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 torben 1857
201     if (args[0].equals("setjail")) {
202 torben 1860 Player p = (Player) sender;
203 torben 1857 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 torben 1860 Player p = (Player) sender;
210 torben 1857 releaseLocation = p.getLocation().clone();
211     p.sendMessage("New release location has been set");
212     save();
213     return true;
214     }
215    
216 torben 1856 if (args[0].equals("tpjail")) {
217 torben 1860 Player p = (Player) sender;
218 torben 1856 p.teleport(jailLocation);
219     return true;
220     }
221     if (args[0].equals("tprelease")) {
222 torben 1860 Player p = (Player) sender;
223 torben 1856 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 torben 1857 p.sendMessage("You are currently in jail and have been teleported to you cell");
253 torben 1856 }
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 torben 1859
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 torben 1856 }
314    

  ViewVC Help
Powered by ViewVC 1.1.20