浏览代码

Current progress on data accessors

Pushing because I started on stuff and don't wanna lose it...
Shane Freeder 5 年之前
父节点
当前提交
21a0a05683

+ 5 - 0
mcmmo-api/build.gradle.kts

@@ -1,3 +1,8 @@
 plugins {
 plugins {
     `java-library`
     `java-library`
+}
+
+
+dependencies {
+    api("org.jetbrains:annotations:17.0.0")
 }
 }

+ 4 - 0
mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/data/MMOEntity.java

@@ -0,0 +1,4 @@
+package com.gmail.nossr50.mcmmo.api.data;
+
+public interface MMOEntity {
+}

+ 1 - 1
mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/data/MMOPlayer.java

@@ -1,6 +1,6 @@
 package com.gmail.nossr50.mcmmo.api.data;
 package com.gmail.nossr50.mcmmo.api.data;
 
 
-public interface MMOPlayer<N> {
+public interface MMOPlayer<N> extends MMOEntity {
 
 
 
 
     N getPlayer();
     N getPlayer();

+ 10 - 0
mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/PlatformProvider.java

@@ -1,5 +1,9 @@
 package com.gmail.nossr50.mcmmo.api.platform;
 package com.gmail.nossr50.mcmmo.api.platform;
 
 
+import com.gmail.nossr50.mcmmo.api.data.MMOPlayer;
+import com.gmail.nossr50.mcmmo.api.platform.util.MetadataStore;
+
+import java.io.File;
 import java.util.logging.Logger;
 import java.util.logging.Logger;
 
 
 public interface PlatformProvider {
 public interface PlatformProvider {
@@ -7,4 +11,10 @@ public interface PlatformProvider {
     Logger getLogger();
     Logger getLogger();
 
 
     void tearDown();
     void tearDown();
+
+    MetadataStore getMetadataStore();
+
+    File getDataFolder();
+
+    void getVersion();
 }
 }

+ 17 - 0
mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/util/MetadataKey.java

@@ -0,0 +1,17 @@
+package com.gmail.nossr50.mcmmo.api.platform.util;
+
+import org.jetbrains.annotations.NotNull;
+
+public class MetadataKey<V> {
+
+    private final String key;
+
+    public MetadataKey(@NotNull String key) {
+        this.key = key;
+    }
+
+    @NotNull
+    public String getKey() {
+        return key;
+    }
+}

+ 39 - 0
mcmmo-api/src/main/java/com/gmail/nossr50/mcmmo/api/platform/util/MetadataStore.java

@@ -0,0 +1,39 @@
+package com.gmail.nossr50.mcmmo.api.platform.util;
+
+import com.gmail.nossr50.mcmmo.api.data.MMOEntity;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+
+public interface MetadataStore {
+
+    /**
+     * @param holder holder of the metadata
+     * @param key key for the metdata
+     * @param <V> value type
+     * @return the metadata value or null
+     */
+    @Nullable
+    <V> V getMetadata(@NotNull MMOEntity 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);
+
+    /**
+     * @param holder holder of the metadata
+     * @param key metadata key
+     * @param <V> value type
+     * @return the removed metadata key
+     */
+    @Nullable
+    <V> V removeMetadata(@NotNull MMOEntity holder, @NotNull MetadataKey<V> key);
+
+}

+ 1 - 1
mcmmo-bukkit/build.gradle.kts

@@ -33,7 +33,7 @@ dependencies {
     implementation(project(":mcmmo-core"))
     implementation(project(":mcmmo-core"))
 
 
     api("org.apache.tomcat:tomcat-jdbc:7.0.52")
     api("org.apache.tomcat:tomcat-jdbc:7.0.52")
-    implementation("org.jetbrains:annotations:17.0.0")
+    api("net.kyori:event-api:3.0.0")
     implementation("org.apache.maven.scm:maven-scm-provider-gitexe:1.8.1")
     implementation("org.apache.maven.scm:maven-scm-provider-gitexe:1.8.1")
     implementation("org.bstats:bstats-bukkit:1.4")
     implementation("org.bstats:bstats-bukkit:1.4")
     implementation("org.spigotmc:spigot:1.14.4-R0.1-SNAPSHOT")
     implementation("org.spigotmc:spigot:1.14.4-R0.1-SNAPSHOT")

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

@@ -2,6 +2,7 @@ package com.gmail.nossr50.mcmmo.bukkit;
 
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.mcmmo.api.platform.PlatformProvider;
 import com.gmail.nossr50.mcmmo.api.platform.PlatformProvider;
+import com.gmail.nossr50.mcmmo.api.platform.util.MetadataStore;
 
 
 import org.bukkit.event.HandlerList;
 import org.bukkit.event.HandlerList;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.bukkit.plugin.java.JavaPlugin;
@@ -25,4 +26,9 @@ public class BukkitBoostrap extends JavaPlugin implements PlatformProvider {
         core.debug("Unregister all events...");
         core.debug("Unregister all events...");
         HandlerList.unregisterAll(this); // Cancel event registrations
         HandlerList.unregisterAll(this); // Cancel event registrations
     }
     }
+
+    @Override
+    public MetadataStore getMetadataStore() {
+        return null;
+    }
 }
 }

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

@@ -1,5 +1,7 @@
 package com.gmail.nossr50.core;
 package com.gmail.nossr50.core;
 
 
+import com.gmail.nossr50.mcmmo.api.platform.util.MetadataKey;
+
 import org.bukkit.metadata.FixedMetadataValue;
 import org.bukkit.metadata.FixedMetadataValue;
 
 
 /**
 /**
@@ -8,30 +10,28 @@ import org.bukkit.metadata.FixedMetadataValue;
 public class MetadataConstants {
 public class MetadataConstants {
 
 
     /* Metadata Values */
     /* Metadata Values */
-    public static final String FISH_HOOK_REF_METAKEY = "mcMMO: Fish Hook Tracker";
-    public static final String DODGE_TRACKER        = "mcMMO: Dodge Tracker";
-    public static final String CUSTOM_DAMAGE_METAKEY = "mcMMO: Custom Damage";
-    public final static String UNNATURAL_MOB_METAKEY = "mcMMO: Spawned Entity";
-    public final static String PISTON_TRACKING_METAKEY = "mcMMO: Piston Tracking";
-    public final static String FURNACE_TRACKING_METAKEY = "mcMMO: Tracked Furnace";
-    public final static String TNT_TRACKING_METAKEY = "mcMMO: Tracked TNT";
-    public final static String SPAWNED_FIREWORKS_METAKEY = "mcMMO: Funfetti";
-    public final static String SAFE_TNT_METAKEY = "mcMMO: Safe TNT";
-    public final static String CUSTOM_NAME_METAKEY = "mcMMO: Custom Name";
-    public final static String NAME_VISIBILITY_METAKEY = "mcMMO: Name Visibility";
-    public final static String DROPPED_ITEM_TRACKING_METAKEY = "mcMMO: Tracked Item";
-    public final static String INFINITE_ARROW_METAKEY = "mcMMO: Infinite Arrow";
-    public final static String BOW_FORCE_METAKEY = "mcMMO: Bow Force";
-    public final static String ARROW_DISTANCE_METAKEY = "mcMMO: Arrow Distance";
-    public final static String ARROW_TRACKER_METAKEY = "mcMMO: Arrow Tracker";
-    public final static String BONUS_DROPS_METAKEY = "mcMMO: Bonus Drops";
-    public final static String DISARMED_ITEM_METAKEY = "mcMMO: Disarmed Item";
-    public final static String PLAYER_DATA_METAKEY = "mcMMO: Player Data";
-    public final static String GREEN_THUMB_METAKEY = "mcMMO: Green Thumb";
-    public final static String DATABASE_PROCESSING_COMMAND_METAKEY = "mcMMO: Processing Database Command";
-    public final static String PETS_ANIMAL_TRACKING_METAKEY = "mcMMO: Pet Animal";
-    public static final String COTW_TEMPORARY_SUMMON = "mcMMO: COTW Entity";
-
-    public static FixedMetadataValue metadataValue; //Gains value in onEnable
+    public static final MetadataKey<Boolean> FISH_HOOK_REF_METAKEY = new MetadataKey<>("mcMMO: Fish Hook Tracker");
+    public static final MetadataKey<Boolean> DODGE_TRACKER        = new MetadataKey<>("mcMMO: Dodge Tracker");
+    public static final MetadataKey<Boolean> CUSTOM_DAMAGE_METAKEY = new MetadataKey<>("mcMMO: Custom Damage");
+    public final static MetadataKey<Boolean> UNNATURAL_MOB_METAKEY = new MetadataKey<>("mcMMO: Spawned Entity");
+    public final static MetadataKey<Boolean> PISTON_TRACKING_METAKEY = new MetadataKey<>("mcMMO: Piston Tracking");
+    public final static MetadataKey<Boolean> FURNACE_TRACKING_METAKEY = new MetadataKey<>("mcMMO: Tracked Furnace");
+    public final static MetadataKey<Boolean> TNT_TRACKING_METAKEY = new MetadataKey<>("mcMMO: Tracked TNT");
+    public final static MetadataKey<Boolean> SPAWNED_FIREWORKS_METAKEY = new MetadataKey<>("mcMMO: Funfetti");
+    public final static MetadataKey<Boolean> SAFE_TNT_METAKEY = new MetadataKey<>("mcMMO: Safe TNT");
+    public final static MetadataKey<String> CUSTOM_NAME_METAKEY = new MetadataKey<>("mcMMO: Custom Name");
+    public final static MetadataKey<Boolean> NAME_VISIBILITY_METAKEY = new MetadataKey<>("mcMMO: Name Visibility");
+    public final static MetadataKey<Boolean> DROPPED_ITEM_TRACKING_METAKEY = new MetadataKey<>("mcMMO: Tracked Item");
+    public final static MetadataKey<Boolean> INFINITE_ARROW_METAKEY = new MetadataKey<>("mcMMO: Infinite Arrow");
+    public final static MetadataKey<Boolean> BOW_FORCE_METAKEY = new MetadataKey<>("mcMMO: Bow Force");
+    public final static MetadataKey<Boolean> ARROW_DISTANCE_METAKEY = new MetadataKey<>("mcMMO: Arrow Distance");
+    public final static MetadataKey<Boolean> ARROW_TRACKER_METAKEY = new MetadataKey<>("mcMMO: Arrow Tracker");
+    public final static MetadataKey<Boolean> BONUS_DROPS_METAKEY = new MetadataKey<>("mcMMO: Bonus Drops");
+    public final static MetadataKey<Boolean> DISARMED_ITEM_METAKEY = new MetadataKey<>("mcMMO: Disarmed Item");
+    public final static MetadataKey<Boolean> PLAYER_DATA_METAKEY = new MetadataKey<>("mcMMO: Player Data");
+    public final static MetadataKey<Boolean> GREEN_THUMB_METAKEY = new MetadataKey<>("mcMMO: Green Thumb");
+    public final static MetadataKey<Boolean> DATABASE_PROCESSING_COMMAND_METAKEY = new MetadataKey<>("mcMMO: Processing Database Command");
+    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");
 
 
 }
 }

+ 6 - 5
mcmmo-core/src/main/java/com/gmail/nossr50/mcMMO.java

@@ -139,9 +139,6 @@ public class mcMMO implements McMMOApi {
         try {
         try {
             platformProvider.getLogger().setFilter(new LogFilter(this));
             platformProvider.getLogger().setFilter(new LogFilter(this));
 
 
-            //TODO: Disgusting...
-            MetadataConstants.metadataValue = new FixedMetadataValue(this, true);
-
             PluginManager pluginManager = platformProvider.getServer().getPluginManager();
             PluginManager pluginManager = platformProvider.getServer().getPluginManager();
             healthBarPluginEnabled = pluginManager.getPlugin("HealthBar") != null;
             healthBarPluginEnabled = pluginManager.getPlugin("HealthBar") != null;
 
 
@@ -214,7 +211,7 @@ public class mcMMO implements McMMOApi {
                     new PlayerProfileLoadingTask(this, player).runTaskLaterAsynchronously(this, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
                     new PlayerProfileLoadingTask(this, player).runTaskLaterAsynchronously(this, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
                 }
                 }
 
 
-                debug("Version " + getDescription().getVersion() + " is enabled!");
+                debug("Version " + getVersion() + " is enabled!");
 
 
                 scheduleTasks();
                 scheduleTasks();
                 commandRegistrationManager = new CommandRegistrationManager(this);
                 commandRegistrationManager = new CommandRegistrationManager(this);
@@ -307,6 +304,10 @@ public class mcMMO implements McMMOApi {
         perkUtils = new PerkUtils(this);
         perkUtils = new PerkUtils(this);
     }
     }
 
 
+    private String getVersion() {
+        platformProvider.getVersion();
+    }
+
     public void onLoad()
     public void onLoad()
     {
     {
         if(getServer().getPluginManager().getPlugin("WorldGuard") != null) {
         if(getServer().getPluginManager().getPlugin("WorldGuard") != null) {
@@ -579,7 +580,7 @@ public class mcMMO implements McMMOApi {
      * Setup the various storage file paths
      * Setup the various storage file paths
      */
      */
     private void setupFilePaths() {
     private void setupFilePaths() {
-        mainDirectory = getDataFolder().getPath() + File.separator;
+        mainDirectory = platformProvider.getDataFolder().getPath() + File.separator;
         localesDirectory = mainDirectory + "locales" + File.separator;
         localesDirectory = mainDirectory + "locales" + File.separator;
         flatFileDirectory = mainDirectory + "flatfile" + File.separator;
         flatFileDirectory = mainDirectory + "flatfile" + File.separator;
         usersFile = flatFileDirectory + "mcmmo.users";
         usersFile = flatFileDirectory + "mcmmo.users";