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

  ViewVC Help
Powered by ViewVC 1.1.20