Explorar el Código

Implement BukkitMetadataStore, fix legacy setMetadata calls

Shane Freeder hace 5 años
padre
commit
5ba410f4cf

+ 4 - 6
mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/util/MetadataStore.java

@@ -5,7 +5,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 
-public interface MetadataStore {
+public interface MetadataStore<E extends MMOEntity<?>> {
 
     /**
      * @param holder holder of the metadata
@@ -14,17 +14,15 @@ public interface MetadataStore {
      * @return the metadata value or null
      */
     @Nullable
-    <V> V getMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey<V> key);
+    <V> V getMetadata(@NotNull E holder, @NotNull MetadataKey<V> key);
 
     /**
      * @param holder holder of the metdata
      * @param key metadata key
      * @param value metadata value
      * @param <V> value type
-     * @return the existing metadata value if set, or null
      */
-    @Nullable
-    <V> V setMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey<V> key, @Nullable V value);
+    <V> void setMetadata(@NotNull E holder, @NotNull MetadataKey<V> key, @NotNull V value);
 
     /**
      * @param holder holder of the metadata
@@ -33,6 +31,6 @@ public interface MetadataStore {
      * @return the removed metadata key
      */
     @Nullable
-    <V> V removeMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey<V> key);
+    <V> V removeMetadata(@NotNull E holder, @NotNull MetadataKey<V> key);
 
 }

+ 6 - 0
mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/BukkitBootstrap.java

@@ -1,5 +1,6 @@
 package com.gmail.nossr50.mcmmo.bukkit;
 
+import com.gmail.nossr50.core.MetadataConstants;
 import com.gmail.nossr50.datatypes.player.BukkitMMOPlayer;
 import com.gmail.nossr50.listeners.*;
 import com.gmail.nossr50.mcMMO;
@@ -11,6 +12,7 @@ import com.gmail.nossr50.mcmmo.api.platform.util.MetadataStore;
 import com.gmail.nossr50.mcmmo.api.platform.util.MobHealthBarManager;
 import com.gmail.nossr50.mcmmo.bukkit.platform.entity.BukkitMMOEntity;
 import com.gmail.nossr50.mcmmo.bukkit.platform.scheduler.BukkitPlatformScheduler;
+import com.gmail.nossr50.mcmmo.bukkit.platform.util.BukkitMetadataStore;
 import com.gmail.nossr50.mcmmo.bukkit.platform.util.BukkitMobHealthBarManager;
 import org.bstats.bukkit.Metrics;
 import org.bukkit.Bukkit;
@@ -25,6 +27,7 @@ import org.bukkit.inventory.ItemStack;
 import org.bukkit.inventory.Recipe;
 import org.bukkit.inventory.ShapelessRecipe;
 import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.metadata.FixedMetadataValue;
 import org.bukkit.plugin.PluginManager;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.jetbrains.annotations.NotNull;
@@ -43,6 +46,8 @@ public class BukkitBootstrap extends JavaPlugin implements PlatformProvider {
     private mcMMO core = new mcMMO(this);
     private final BukkitPlatformScheduler scheduler = new BukkitPlatformScheduler(this);
     private final MobHealthBarManager healthBarManager = new BukkitMobHealthBarManager(this, core);
+    private final BukkitMetadataStore bukkitMetadataStore = new BukkitMetadataStore(this);
+
     private PaperCommandManager paperCommandManager;
 
 
@@ -80,6 +85,7 @@ public class BukkitBootstrap extends JavaPlugin implements PlatformProvider {
         registerEvents();
         paperCommandManager = new PaperCommandManager(this);
         paperCommandManager.registerDependency(mcMMO.class, core);
+        MetadataConstants.metadataValue = new FixedMetadataValue(this, true);
     }
 
     @Override

+ 46 - 0
mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/platform/util/BukkitMetadataStore.java

@@ -0,0 +1,46 @@
+package com.gmail.nossr50.mcmmo.bukkit.platform.util;
+
+import com.gmail.nossr50.mcmmo.api.data.MMOEntity;
+import com.gmail.nossr50.mcmmo.api.platform.util.MetadataKey;
+import com.gmail.nossr50.mcmmo.api.platform.util.MetadataStore;
+import com.gmail.nossr50.mcmmo.bukkit.BukkitBootstrap;
+
+import org.bukkit.entity.Entity;
+import org.bukkit.metadata.FixedMetadataValue;
+import org.bukkit.metadata.MetadataValue;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+@SuppressWarnings("unchecked")
+public class BukkitMetadataStore implements MetadataStore<MMOEntity<Entity>> {
+    private final BukkitBootstrap bukkitBootstrap;
+
+    public BukkitMetadataStore(BukkitBootstrap bukkitBootstrap) {
+        this.bukkitBootstrap = bukkitBootstrap;
+    }
+
+    @Override
+    public <V> @Nullable V getMetadata(@NotNull MMOEntity<Entity> holder, @NotNull MetadataKey<V> key) {
+        final List<MetadataValue> metadata = holder.getNative().getMetadata(key.getKey());
+        if (!metadata.isEmpty()) {
+            return (V) metadata.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public <V> void setMetadata(@NotNull MMOEntity<Entity> holder, @NotNull MetadataKey<V> key, @NotNull V value) {
+        holder.getNative().setMetadata(key.getKey(), new FixedMetadataValue(bukkitBootstrap, (V) value));
+    }
+
+    @Override
+    public <V> @Nullable V removeMetadata(@NotNull MMOEntity<Entity> holder, @NotNull MetadataKey<V> key) {
+        final List<MetadataValue> metadata = holder.getNative().getMetadata(key.getKey());
+        if (!metadata.isEmpty()) {
+            holder.getNative().removeMetadata(key.getKey(), bukkitBootstrap);
+        }
+        return (V) metadata.get(0);
+    }
+}

+ 1 - 0
mcmmo-core/src/main/java/com/gmail/nossr50/core/MetadataConstants.java

@@ -35,6 +35,7 @@ public class MetadataConstants {
     public final static MetadataKey<Boolean> PETS_ANIMAL_TRACKING_METAKEY = new MetadataKey<>("mcMMO: Pet Animal");
     public static final MetadataKey<Boolean> COTW_TEMPORARY_SUMMON = new MetadataKey<>("mcMMO: COTW Entity");
 
+    @Deprecated
     public static FixedMetadataValue metadataValue; //Gains value in onEnable
 
 }

+ 3 - 0
mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java

@@ -190,8 +190,11 @@ public class mcMMO implements McMMOApi {
                 commandRegistrationManager.registerACFCommands();
                 commandRegistrationManager.registerCommands();
 
+                /*
                 nbtManager = new NBTManager();
 
+                 */
+
                 //Init Chunk Manager Factory
                 chunkManagerFactory = new ChunkManagerFactory(this);
                 placeStore = chunkManagerFactory.getChunkManager(); // Get our ChunkletManager