001 import java.util.ArrayList; 002 import java.util.Collections; 003 import java.util.HashMap; 004 import java.util.List; 005 import java.util.Map; 006 import java.util.logging.Level; 007 import java.util.logging.Logger; 008 import net.minecraft.server.MinecraftServer; 009 010 /** 011 * DataSource.java - Abstract class for implementing new data sources. 012 * 013 * @author James 014 */ 015 public abstract class DataSource { 016 017 protected static final Logger log = Logger.getLogger("Minecraft"); 018 protected List<Group> groups = new ArrayList<Group>(); 019 protected List<Kit> kits = new ArrayList<Kit>(); 020 protected List<Warp> homes = new ArrayList<Warp>(); 021 protected List<Warp> warps = new ArrayList<Warp>(); 022 protected List<Ban> bans = new ArrayList<Ban>(); 023 protected Map<String, Integer> items = new HashMap<String, Integer>(); 024 protected MinecraftServer server; 025 protected final Object groupLock = new Object(), kitLock = new Object(), banLock = new Object(); 026 protected final Object homeLock = new Object(), warpLock = new Object(), itemLock = new Object(); 027 028 /** 029 * Initializes the data source 030 */ 031 abstract public void initialize(); 032 033 /** 034 * Loads all groups 035 */ 036 abstract public void loadGroups(); 037 038 /** 039 * Loads all kits 040 */ 041 abstract public void loadKits(); 042 043 /** 044 * Loads all homes 045 */ 046 abstract public void loadHomes(); 047 048 /** 049 * Loads all warps 050 */ 051 abstract public void loadWarps(); 052 053 /** 054 * Loads all items 055 */ 056 abstract public void loadItems(); 057 058 /** 059 * Loads the ban list 060 */ 061 abstract public void loadBanList(); 062 063 /** 064 * Adds user to the list 065 * 066 * @param player 067 */ 068 abstract public void addPlayer(Player player); 069 070 /** 071 * Modifies the provided user 072 * 073 * @param player 074 */ 075 abstract public void modifyPlayer(Player player); 076 077 /** 078 * Checks to see if the specified player exists 079 * 080 * @param player 081 * @return true if player exists 082 */ 083 abstract public boolean doesPlayerExist(String player); 084 085 /** 086 * Returns specified user 087 * 088 * @param name 089 * @return user 090 */ 091 abstract public Player getPlayer(String name); 092 093 /** 094 * Adds specified group to the list of groups 095 * 096 * @param group 097 */ 098 abstract public void addGroup(Group group); 099 100 /** 101 * Modifies group 102 * 103 * @param group 104 */ 105 abstract public void modifyGroup(Group group); 106 107 /** 108 * Returns specified group 109 * 110 * @param name 111 * @return group 112 */ 113 public Group getGroup(String name) { 114 synchronized (groupLock) { 115 for (Group group : groups) { 116 if (group.Name.equalsIgnoreCase(name)) { 117 return group; 118 } 119 } 120 } 121 122 if (!name.equals("")) { 123 log.log(Level.INFO, "Unable to find group '" + name + "'. Are you sure you have that group?"); 124 } 125 126 return null; 127 } 128 129 /** 130 * Returns the default group 131 * 132 * @return default group 133 */ 134 public Group getDefaultGroup() { 135 synchronized (groupLock) { 136 for (Group group : groups) { 137 if (group.DefaultGroup) { 138 return group; 139 } 140 } 141 } 142 return null; 143 } 144 145 /** 146 * Adds kit to list of kits 147 * 148 * @param kit 149 */ 150 abstract public void addKit(Kit kit); 151 152 /** 153 * Modifies kit 154 * 155 * @param kit 156 */ 157 abstract public void modifyKit(Kit kit); 158 159 /** 160 * Returns specified kit 161 * 162 * @param name 163 * @return kit 164 */ 165 public Kit getKit(String name) { 166 synchronized (kitLock) { 167 for (Kit kit : kits) { 168 if (kit.Name.equalsIgnoreCase(name)) { 169 return kit; 170 } 171 } 172 } 173 return null; 174 } 175 176 /** 177 * Returns true if there are any kits 178 * 179 * @return true if there are kits 180 */ 181 public boolean hasKits() { 182 synchronized (kitLock) { 183 return kits.size() > 0; 184 } 185 } 186 187 /** 188 * Returns a list of all kits names separated by commas 189 * 190 * @param player 191 * @return string list of kits 192 */ 193 public String getKitNames(Player player) { 194 StringBuilder builder = new StringBuilder(); 195 builder.append(""); // incaseofnull 196 197 synchronized (kitLock) { 198 for (Kit kit : kits) { 199 if (player.isInGroup(kit.Group) || kit.Group.equals("")) { 200 builder.append(kit.Name).append(" "); 201 } 202 } 203 } 204 205 return builder.toString(); 206 } 207 208 /** 209 * Adds home to list of homes 210 * 211 * @param home 212 */ 213 abstract public void addHome(Warp home); 214 215 /** 216 * Modifies home 217 * 218 * @param home 219 */ 220 abstract public void changeHome(Warp home); 221 222 /** 223 * Returns specified home 224 * 225 * @param name 226 * @return home 227 */ 228 public Warp getHome(String name) { 229 synchronized (homeLock) { 230 for (Warp home : homes) { 231 if (home.Name.equalsIgnoreCase(name)) { 232 return home; 233 } 234 } 235 } 236 return null; 237 } 238 239 /** 240 * Adds warp to list of warps 241 * 242 * @param warp 243 */ 244 abstract public void addWarp(Warp warp); 245 246 /** 247 * Modifies warp 248 * 249 * @param warp 250 */ 251 abstract public void changeWarp(Warp warp); 252 253 /** 254 * Removes warp from list of warps 255 * 256 * @param warp 257 */ 258 abstract public void removeWarp(Warp warp); 259 260 /** 261 * Returns specified warp 262 * 263 * @param name 264 * @return warp 265 */ 266 public Warp getWarp(String name) { 267 synchronized (warpLock) { 268 for (Warp warp : warps) { 269 if (warp.Name.equalsIgnoreCase(name)) { 270 return warp; 271 } 272 } 273 } 274 return null; 275 } 276 277 /** 278 * Returns true if there are any warps 279 * 280 * @return true if there are warps 281 */ 282 public boolean hasWarps() { 283 synchronized (warpLock) { 284 return warps.size() > 0; 285 } 286 } 287 288 /** 289 * Returns a string containing all warp names the player has access to 290 * 291 * @param player 292 * @return string list of warps 293 */ 294 public String getWarpNames(Player player) { 295 StringBuilder builder = new StringBuilder(); 296 builder.append(""); // incaseofnull 297 298 synchronized (warpLock) { 299 for (Warp warp : warps) { 300 if (player.isInGroup(warp.Group) || warp.Group.equals("")) { 301 builder.append(warp.Name).append(" "); 302 } 303 } 304 } 305 306 return builder.toString(); 307 } 308 309 /** 310 * Returns item id corresponding to item name 311 * 312 * @param name 313 * @return item id 314 */ 315 public int getItem(String name) { 316 synchronized (itemLock) { 317 if (items.containsKey(name)) { 318 return items.get(name); 319 } 320 } 321 return 0; 322 } 323 324 /** 325 * Returns the name of the item corresponding to the ID 326 * 327 * @param id 328 * id of item 329 * @return name of item 330 */ 331 public String getItem(int id) { 332 synchronized (itemLock) { 333 for (String name : items.keySet()) { 334 if (items.get(name) == id) { 335 return name; 336 } 337 } 338 } 339 return String.valueOf(id); 340 } 341 342 /** 343 * Returns an unmodifiable map of items 344 * 345 * @return unmodifiable map of items 346 */ 347 public Map<String, Integer> getItems() { 348 return Collections.unmodifiableMap(items); 349 } 350 351 /** 352 * Adds player to whitelist 353 * 354 * @param name 355 */ 356 abstract public void addToWhitelist(String name); 357 358 /** 359 * Removes player from whitelist 360 * 361 * @param name 362 */ 363 abstract public void removeFromWhitelist(String name); 364 365 /** 366 * Returns true if whitelist is enabled 367 * 368 * @return true if whitelist is enabled 369 * @deprecated use etc.getInstance().isWhitelistEnabled() instead 370 */ 371 @Deprecated 372 public boolean hasWhitelist() { 373 return etc.getInstance().isWhitelistEnabled(); 374 } 375 376 /** 377 * Returns true if the player is on the whitelist 378 * 379 * @param user 380 * @return true if player is on whitelist 381 */ 382 abstract public boolean isUserOnWhitelist(String user); 383 384 /** 385 * Adds player to reservelist 386 * 387 * @param name 388 */ 389 abstract public void addToReserveList(String name); 390 391 /** 392 * Removes player from reservelist 393 * 394 * @param name 395 */ 396 abstract public void removeFromReserveList(String name); 397 398 /** 399 * Returns true if player is on reservelist 400 * 401 * @param user 402 * @return true if player is on reserve list 403 */ 404 abstract public boolean isUserOnReserveList(String user); 405 406 /** 407 * Adds or modifies specified ban 408 * 409 * @param ban 410 * Ban to add or modify 411 */ 412 abstract public void modifyBan(Ban ban); 413 414 /** 415 * Checks to see if this player or IP is on the ban list 416 * 417 * @param player 418 * Player name 419 * @param ip 420 * IP Address 421 * @return true if either name or IP is on the ban list 422 */ 423 public boolean isOnBanList(String player, String ip) { 424 synchronized (banLock) { 425 for (Ban ban : bans) { 426 if (ban.getName().equalsIgnoreCase(player) || ban.getIp().equalsIgnoreCase(ip)) { 427 return true; 428 } 429 } 430 } 431 return false; 432 } 433 434 /** 435 * Retrieves the ban details 436 * 437 * @param player 438 * Player name 439 * @param ip 440 * IP Address 441 * @return the ban 442 */ 443 public Ban getBan(String player, String ip) { 444 synchronized (banLock) { 445 for (Ban ban : bans) { 446 if (ban.getName().equalsIgnoreCase(player) || ban.getIp().equalsIgnoreCase(ip)) { 447 return ban; 448 } 449 } 450 } 451 return null; 452 } 453 }