/[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 2438 - (hide 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 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     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 import org.bukkit.event.block.BlockBreakEvent;
21     import org.bukkit.event.block.BlockPlaceEvent;
22 torben 1858 import org.bukkit.configuration.file.YamlConfiguration;
23    
24     import java.io.*;
25 torben 1856 import java.util.ArrayList;
26 torben 1858 import java.util.Set;
27 torben 1856 import java.util.TreeSet;
28    
29     public class Jail implements CommandExecutor, Listener {
30    
31 torben 1862 HoerupUtilsPlugin plugin;
32 torben 1856
33     TreeSet<String> jailed = new TreeSet<String>();
34    
35     Location jailLocation;
36     Location releaseLocation;
37    
38     final double maxDist = 25.0;
39    
40 torben 1862 public Jail(HoerupUtilsPlugin plugin) {
41 torben 1856 this.plugin = plugin;
42    
43    
44 torben 1858 load();
45 torben 1856 }
46    
47 torben 1858 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 torben 2438 @SuppressWarnings("unchecked")
65 torben 1858 Set<String> tmpSet = (Set<String>) config.get("jails");
66     jailed.addAll(tmpSet);
67     }
68    
69 torben 1857 public void save() {
70 torben 1858 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 torben 1857 }
84    
85 torben 1858 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 torben 1856 @Override
111     public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
112 torben 1860 if (args.length == 0) {
113     sender.sendMessage("Usage: /jail <imprison|release|list|tpjail|tprelease|setjail|setrelease>");
114 torben 1856 return true;
115     }
116 torben 1860
117     if (sender instanceof Player ) {
118     Player p = (Player) sender;
119 torben 1911 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 torben 1860 return true;
124     }
125     } else {
126 torben 1861 if ( args[0].equals("imprison") || args[0].equals("release") || args[0].equals("list") ) {
127     //do nothing
128     } else {
129 torben 1860 sender.sendMessage("only imprison, release and list may be used from console");
130     return true;
131     }
132 torben 1856 }
133    
134    
135     if (args[0].equals("imprison")) {
136     if (args.length != 2) {
137 torben 1861 sender.sendMessage("You must specify the player");
138 torben 1856 return true;
139     }
140    
141 torben 1862 OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] );
142     if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) {
143 torben 1860 sender.sendMessage("Player not found");
144 torben 1856 return true;
145     }
146    
147 torben 1862 if (inmate instanceof Player) {
148     Player p = (Player) inmate;
149     p.sendMessage("You have been imprisoned");
150     p.teleport( jailLocation );
151     }
152 torben 1856 jailed.add( inmate.getName() );
153 torben 1857 save();
154 torben 1967 sender.sendMessage("player " + inmate.getName() + " is imprisoned");
155 torben 1856 return true;
156     }
157    
158     if (args[0].equals("release")) {
159     if (args.length != 2) {
160 torben 1861 sender.sendMessage("You must specify the player");
161 torben 1856 return true;
162     }
163    
164 torben 1862 OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] );
165     if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) {
166 torben 1860 sender.sendMessage("Player not found");
167 torben 1856 return true;
168     }
169    
170     jailed.remove( inmate.getName() );
171 torben 1862 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 torben 1857 save();
179 torben 1967 sender.sendMessage("player " + inmate.getName() + " is released");
180 torben 1856 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 torben 1857
197     if (args[0].equals("setjail")) {
198 torben 1860 Player p = (Player) sender;
199 torben 1857 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 torben 1860 Player p = (Player) sender;
206 torben 1857 releaseLocation = p.getLocation().clone();
207     p.sendMessage("New release location has been set");
208     save();
209     return true;
210     }
211    
212 torben 1856 if (args[0].equals("tpjail")) {
213 torben 1860 Player p = (Player) sender;
214 torben 1856 p.teleport(jailLocation);
215     return true;
216     }
217     if (args[0].equals("tprelease")) {
218 torben 1860 Player p = (Player) sender;
219 torben 1856 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 torben 1857 p.sendMessage("You are currently in jail and have been teleported to you cell");
249 torben 1856 }
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 torben 1859
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 torben 1856 }
310    

  ViewVC Help
Powered by ViewVC 1.1.20