mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 22:26:46 +01:00
Implement BukkitMetadataStore, fix legacy setMetadata calls
This commit is contained in:
parent
88767fd0a9
commit
5ba410f4cf
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user