/[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 1861 - (hide 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 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     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 torben 1859 import org.bukkit.event.player.PlayerRespawnEvent;
20 torben 1856
21     import org.bukkit.event.block.BlockBreakEvent;
22     import org.bukkit.event.block.BlockPlaceEvent;
23    
24 torben 1858 import org.bukkit.configuration.file.YamlConfiguration;
25    
26     import java.io.File;
27     import java.io.*;
28    
29 torben 1856 import java.util.ArrayList;
30 torben 1858 import java.util.Set;
31 torben 1856 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 torben 1858 load();
49 torben 1856 }
50    
51 torben 1858 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 torben 1857 public void save() {
73 torben 1858 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 torben 1857 }
87    
88 torben 1858 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 torben 1856 @Override
114     public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
115 torben 1860 if (args.length == 0) {
116     sender.sendMessage("Usage: /jail <imprison|release|list|tpjail|tprelease|setjail|setrelease>");
117 torben 1856 return true;
118     }
119 torben 1860
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 torben 1861 if ( args[0].equals("imprison") || args[0].equals("release") || args[0].equals("list") ) {
128     //do nothing
129     } else {
130 torben 1860 sender.sendMessage("only imprison, release and list may be used from console");
131     return true;
132     }
133 torben 1856 }
134    
135    
136     if (args[0].equals("imprison")) {
137     if (args.length != 2) {
138 torben 1861 sender.sendMessage("You must specify the player");
139 torben 1856 return true;
140     }
141    
142     Player inmate = sender.getServer().getPlayer( args[1] );
143     if (inmate == null) {
144 torben 1860 sender.sendMessage("Player not found");
145 torben 1856 return true;
146     }
147    
148    
149     inmate.sendMessage("You have been imprisoned");
150     inmate.teleport( jailLocation );
151     jailed.add( inmate.getName() );
152 torben 1857 save();
153 torben 1856 return true;
154     }
155    
156     if (args[0].equals("release")) {
157     if (args.length != 2) {
158 torben 1861 sender.sendMessage("You must specify the player");
159 torben 1856 return true;
160     }
161    
162     Player inmate = sender.getServer().getPlayer( args[1] );
163     if (inmate == null) {
164 torben 1860 sender.sendMessage("Player not found");
165 torben 1856 return true;
166     }
167    
168    
169     jailed.remove( inmate.getName() );
170     inmate.sendMessage("You have been released from prison");
171     inmate.teleport( releaseLocation );
172 torben 1857 save();
173 torben 1856 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 torben 1857
190     if (args[0].equals("setjail")) {
191 torben 1860 Player p = (Player) sender;
192 torben 1857 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 torben 1860 Player p = (Player) sender;
199 torben 1857 releaseLocation = p.getLocation().clone();
200     p.sendMessage("New release location has been set");
201     save();
202     return true;
203     }
204    
205 torben 1856 if (args[0].equals("tpjail")) {
206 torben 1860 Player p = (Player) sender;
207 torben 1856 p.teleport(jailLocation);
208     return true;
209     }
210     if (args[0].equals("tprelease")) {
211 torben 1860 Player p = (Player) sender;
212 torben 1856 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 torben 1857 p.sendMessage("You are currently in jail and have been teleported to you cell");
242 torben 1856 }
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 torben 1859
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 torben 1856 }
303    

  ViewVC Help
Powered by ViewVC 1.1.20