diff --git a/mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/util/MetadataStore.java b/mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/util/MetadataStore.java index f23df27bf..8ce90a9d9 100644 --- a/mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/util/MetadataStore.java +++ b/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> { /** * @param holder holder of the metadata @@ -14,17 +14,15 @@ public interface MetadataStore { * @return the metadata value or null */ @Nullable - V getMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey key); + V getMetadata(@NotNull E holder, @NotNull MetadataKey key); /** * @param holder holder of the metdata * @param key metadata key * @param value metadata value * @param value type - * @return the existing metadata value if set, or null */ - @Nullable - V setMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey key, @Nullable V value); + void setMetadata(@NotNull E holder, @NotNull MetadataKey key, @NotNull V value); /** * @param holder holder of the metadata @@ -33,6 +31,6 @@ public interface MetadataStore { * @return the removed metadata key */ @Nullable - V removeMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey key); + V removeMetadata(@NotNull E holder, @NotNull MetadataKey key); } diff --git a/mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/BukkitBootstrap.java b/mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/BukkitBootstrap.java index aee4b2ce5..54b6e6564 100644 --- a/mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/BukkitBootstrap.java +++ b/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 diff --git a/mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/platform/util/BukkitMetadataStore.java b/mcmmo-bukkit/src/main/java/com/gmail/nossr50/mcmmo/bukkit/platform/util/BukkitMetadataStore.java new file mode 100644 index 000000000..2cbd49d79 --- /dev/null +++ b/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> { + private final BukkitBootstrap bukkitBootstrap; + + public BukkitMetadataStore(BukkitBootstrap bukkitBootstrap) { + this.bukkitBootstrap = bukkitBootstrap; + } + + @Override + public @Nullable V getMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey key) { + final List metadata = holder.getNative().getMetadata(key.getKey()); + if (!metadata.isEmpty()) { + return (V) metadata.get(0); + } + return null; + } + + @Override + public void setMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey key, @NotNull V value) { + holder.getNative().setMetadata(key.getKey(), new FixedMetadataValue(bukkitBootstrap, (V) value)); + } + + @Override + public @Nullable V removeMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey key) { + final List metadata = holder.getNative().getMetadata(key.getKey()); + if (!metadata.isEmpty()) { + holder.getNative().removeMetadata(key.getKey(), bukkitBootstrap); + } + return (V) metadata.get(0); + } +} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/core/MetadataConstants.java b/mcmmo-core/src/main/java/com/gmail/nossr50/core/MetadataConstants.java index f67b5882f..e63877488 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/core/MetadataConstants.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/core/MetadataConstants.java @@ -35,6 +35,7 @@ public class MetadataConstants { public final static MetadataKey PETS_ANIMAL_TRACKING_METAKEY = new MetadataKey<>("mcMMO: Pet Animal"); public static final MetadataKey COTW_TEMPORARY_SUMMON = new MetadataKey<>("mcMMO: COTW Entity"); + @Deprecated public static FixedMetadataValue metadataValue; //Gains value in onEnable } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java b/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java index d4611a61d..baa2368f9 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/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