SkyblockAPICached.java 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package xyz.spaceio.hooks;
  2. import java.util.Optional;
  3. import java.util.UUID;
  4. import java.util.Map.Entry;
  5. import java.util.concurrent.ExecutionException;
  6. import java.util.concurrent.TimeUnit;
  7. import org.bukkit.Location;
  8. import com.google.common.cache.CacheBuilder;
  9. import com.google.common.cache.CacheLoader;
  10. import com.google.common.cache.LoadingCache;
  11. import com.google.common.collect.Maps;
  12. public class SkyblockAPICached {
  13. private SkyblockAPIHook hook;
  14. public SkyblockAPICached(SkyblockAPIHook hook) {
  15. this.hook = hook;
  16. }
  17. LoadingCache<Entry<UUID, String>, Integer> cachedIslandLevel = CacheBuilder.newBuilder()
  18. .maximumSize(1000)
  19. .expireAfterWrite(10, TimeUnit.SECONDS)
  20. .build(
  21. new CacheLoader<Entry<UUID, String>, Integer>() {
  22. public Integer load(Entry<UUID, String> key) {
  23. return hook.getIslandLevel(key.getKey(), key.getValue());
  24. }
  25. });
  26. LoadingCache<Location, Optional<UUID>> cachedIslandOwner = CacheBuilder.newBuilder()
  27. .maximumSize(1000)
  28. .expireAfterWrite(100, TimeUnit.SECONDS)
  29. .build(
  30. new CacheLoader<Location, Optional<UUID>>() {
  31. public Optional<UUID> load(Location key) {
  32. return hook.getIslandOwner(key);
  33. }
  34. });
  35. public int getIslandLevel(UUID owner, String world) {
  36. Entry<UUID, String> entry = Maps.immutableEntry(owner, world);
  37. try {
  38. return cachedIslandLevel.get(entry);
  39. } catch (ExecutionException e) {
  40. // TODO Auto-generated catch block
  41. e.printStackTrace();
  42. return 0;
  43. }
  44. }
  45. public Optional<UUID> getIslandOwner(Location loc){
  46. try {
  47. return cachedIslandOwner.get(loc);
  48. } catch (ExecutionException e) {
  49. // TODO Auto-generated catch block
  50. e.printStackTrace();
  51. }
  52. return null;
  53. }
  54. public String[] getSkyBlockWorldNames() {
  55. return hook.getSkyBlockWorldNames();
  56. }
  57. }