Implement BukkitMetadataStore, fix legacy setMetadata calls

This commit is contained in:
Shane Freeder
2020-03-04 23:18:15 +00:00
parent 88767fd0a9
commit 5ba410f4cf
5 changed files with 60 additions and 6 deletions

View File

@ -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

View File

@ -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);
}
}