mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-06-30 12:44:45 +02:00
Implement BukkitMetadataStore, fix legacy setMetadata calls
This commit is contained in:
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user