Don’t create new shells all the time!
[Sone.git] / src / main / java / net / pterodactylus / sone / data / ShellCache.java
index 0b19429..7e28285 100644 (file)
@@ -63,15 +63,20 @@ public class ShellCache<T> {
         *            The ID of the object
         * @param object
         *            The object to store
+        * @return The real object, or the shell if there is no real object yet
         */
        @SuppressWarnings("unchecked")
-       public void put(String id, T object) {
+       public T put(String id, T object) {
                if (!(object instanceof Shell<?>)) {
                        objectCache.put(id, object);
                        shellCache.remove(id);
-               } else {
-                       shellCache.put(id, (Shell<T>) object);
+                       return object;
                }
+               if (objectCache.containsKey(id)) {
+                       return objectCache.get(id);
+               }
+               shellCache.put(id, (Shell<T>) object);
+               return object;
        }
 
        /**
@@ -84,9 +89,11 @@ public class ShellCache<T> {
         */
        public T get(String id) {
                if (!objectCache.containsKey(id)) {
-                       Shell<T> shell = shellCreator.createShell();
-                       shellCache.put(id, shell);
-                       return shell.getShelled();
+                       if (!shellCache.containsKey(id)) {
+                               Shell<T> shell = shellCreator.createShell(id);
+                               shellCache.put(id, shell);
+                       }
+                       return shellCache.get(id).getShelled();
                }
                return objectCache.get(id);
        }