Bladeren bron

minor refactoring of ProjectileUtils and MetadataConstants

nossr50 2 maanden geleden
bovenliggende
commit
1005b29e96

+ 27 - 29
src/main/java/com/gmail/nossr50/util/MetadataConstants.java

@@ -1,18 +1,40 @@
 package com.gmail.nossr50.util;
 
-import com.google.common.collect.ImmutableSet;
 import org.bukkit.metadata.FixedMetadataValue;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * Stores our constants related to metadata
  */
 public class MetadataConstants {
-    /* Metadata Values
-     * Take great care if you ever modify the value of these keys
-     */
+    public static final @NotNull Set<String> MOB_METADATA_KEYS = Set.of(
+        MetadataConstants.METADATA_KEY_MOB_SPAWNER_MOB,
+        MetadataConstants.METADATA_KEY_EGG_MOB,
+        MetadataConstants.METADATA_KEY_NETHER_PORTAL_MOB,
+        MetadataConstants.METADATA_KEY_COTW_SUMMONED_MOB,
+        MetadataConstants.METADATA_KEY_PLAYER_BRED_MOB,
+        MetadataConstants.METADATA_KEY_PLAYER_TAMED_MOB,
+        MetadataConstants.METADATA_KEY_EXPLOITED_ENDERMEN,
+        MetadataConstants.METADATA_KEY_CUSTOM_NAME,
+        MetadataConstants.METADATA_KEY_RUPTURE,
+        MetadataConstants.METADATA_KEY_EXPLOSION_FROM_RUPTURE,
+        MetadataConstants.METADATA_KEY_OLD_NAME_KEY,
+        MetadataConstants.METADATA_KEY_DODGE_TRACKER
+    );
+
+    public static final @NotNull List<String> ARROW_METADATA_KEYS = List.of(
+            MetadataConstants.METADATA_KEY_INF_ARROW,
+            MetadataConstants.METADATA_KEY_BOW_FORCE,
+            MetadataConstants.METADATA_KEY_ARROW_DISTANCE,
+            MetadataConstants.METADATA_KEY_SPAWNED_ARROW,
+            MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW,
+            MetadataConstants.METADATA_KEY_BOUNCE_COUNT,
+            MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE
+    );
+
     public static final @NotNull String METADATA_KEY_REPLANT = "mcMMO: Recently Replanted";
     public static final @NotNull String METADATA_KEY_CROSSBOW_PROJECTILE = "mcMMO: Crossbow Projectile";
     public static final @NotNull String METADATA_KEY_SPAWNED_ARROW = "mcMMO: Spawned Arrow";
@@ -23,10 +45,8 @@ public class MetadataConstants {
     public static final @NotNull String METADATA_KEY_DODGE_TRACKER = "mcMMO: Dodge Tracker";
     public static final @NotNull String METADATA_KEY_CUSTOM_DAMAGE = "mcMMO: Custom Damage";
     public static final @NotNull String METADATA_KEY_TRAVELING_BLOCK = "mcMMO: Traveling Block";
-    public static final @NotNull String METADATA_KEY_PISTON_TRACKING = "mcMMO: Piston Tracking";
     public static final @NotNull String METADATA_KEY_TRACKED_TNT = "mcMMO: Tracked TNT";
     public static final @NotNull String METADATA_KEY_NAME_VISIBILITY = "mcMMO: Name Visibility";
-    public static final @NotNull String METADATA_KEY_TRACKED_ITEM = "mcMMO: Tracked Item";
     public static final @NotNull String METADATA_KEY_INF_ARROW = "mcMMO: Infinite Arrow";
     public static final @NotNull String METADATA_KEY_TRACKED_ARROW = "mcMMO: Tracked Arrow";
     public static final @NotNull String METADATA_KEY_BOW_FORCE = "mcMMO: Bow Force";
@@ -50,28 +70,6 @@ public class MetadataConstants {
     public static final @NotNull String METADATA_KEY_CUSTOM_NAME = "mcmmo_custom_name";
     public static final @NotNull String METADATA_KEY_OLD_NAME_KEY = "mcmmo_old_name";
     public static final @NotNull String METADATA_KEY_RUPTURE = "mcmmo_rupture";
-
     public static final byte SIMPLE_FLAG_VALUE = (byte) 0x1;
-
-    public static final @NotNull ImmutableSet<String> MOB_METADATA_KEYS;
-
     public static FixedMetadataValue MCMMO_METADATA_VALUE;
-
-    static {
-        HashSet<String> temp = new HashSet<>();
-        temp.add(MetadataConstants.METADATA_KEY_MOB_SPAWNER_MOB);
-        temp.add(MetadataConstants.METADATA_KEY_EGG_MOB);
-        temp.add(MetadataConstants.METADATA_KEY_NETHER_PORTAL_MOB);
-        temp.add(MetadataConstants.METADATA_KEY_COTW_SUMMONED_MOB);
-        temp.add(MetadataConstants.METADATA_KEY_PLAYER_BRED_MOB);
-        temp.add(MetadataConstants.METADATA_KEY_PLAYER_TAMED_MOB);
-        temp.add(MetadataConstants.METADATA_KEY_EXPLOITED_ENDERMEN);
-        temp.add(MetadataConstants.METADATA_KEY_CUSTOM_NAME);
-        temp.add(MetadataConstants.METADATA_KEY_RUPTURE);
-        temp.add(MetadataConstants.METADATA_KEY_EXPLOSION_FROM_RUPTURE);
-        temp.add(MetadataConstants.METADATA_KEY_OLD_NAME_KEY);
-        temp.add(MetadataConstants.METADATA_KEY_DODGE_TRACKER);
-
-        MOB_METADATA_KEYS = ImmutableSet.copyOf(temp);
-    }
 }

+ 27 - 57
src/main/java/com/gmail/nossr50/util/skills/ProjectileUtils.java

@@ -5,13 +5,16 @@ import com.gmail.nossr50.util.MetadataConstants;
 import org.bukkit.block.BlockFace;
 import org.bukkit.entity.Arrow;
 import org.bukkit.metadata.FixedMetadataValue;
+import org.bukkit.metadata.MetadataValue;
 import org.bukkit.plugin.Plugin;
 import org.bukkit.util.Vector;
 import org.jetbrains.annotations.NotNull;
 
+import static com.gmail.nossr50.util.MetadataConstants.ARROW_METADATA_KEYS;
 import static com.gmail.nossr50.util.MetadataConstants.MCMMO_METADATA_VALUE;
 
 public class ProjectileUtils {
+
     public static Vector getNormal(BlockFace blockFace) {
         return switch (blockFace) {
             case UP -> new Vector(0, 1, 0);
@@ -30,65 +33,32 @@ public class ProjectileUtils {
      * @param arrow projectile
      */
     public static void cleanupProjectileMetadata(@NotNull Arrow arrow) {
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_INF_ARROW)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_INF_ARROW, mcMMO.p);
-        }
-
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_BOW_FORCE)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_BOW_FORCE, mcMMO.p);
-        }
-
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_ARROW_DISTANCE)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_ARROW_DISTANCE, mcMMO.p);
-        }
-
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_SPAWNED_ARROW)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_SPAWNED_ARROW, mcMMO.p);
-        }
-
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW, mcMMO.p);
-        }
-
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_BOUNCE_COUNT)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_BOUNCE_COUNT, mcMMO.p);
-        }
-
-        if (arrow.hasMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE)) {
-            arrow.removeMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE, mcMMO.p);
-        }
+        ARROW_METADATA_KEYS.stream()
+                .filter(arrow::hasMetadata)
+                .forEach(key -> arrow.removeMetadata(key, mcMMO.p));
     }
 
-    public static void copyArrowMetadata(@NotNull Plugin pluginRef, @NotNull Arrow arrowToCopy, @NotNull Arrow newArrow) {
-        if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_INF_ARROW)) {
-            newArrow.setMetadata(MetadataConstants.METADATA_KEY_INF_ARROW,
-                    arrowToCopy.getMetadata(MetadataConstants.METADATA_KEY_INF_ARROW).get(0));
-        }
-
-        if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_BOW_FORCE)) {
-            newArrow.setMetadata(MetadataConstants.METADATA_KEY_BOW_FORCE,
-                    new FixedMetadataValue(pluginRef,
-                            arrowToCopy.getMetadata(MetadataConstants.METADATA_KEY_BOW_FORCE).get(0).asDouble()));
-        }
-
-        if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_ARROW_DISTANCE)) {
-            newArrow.setMetadata(MetadataConstants.METADATA_KEY_ARROW_DISTANCE,
-                    arrowToCopy.getMetadata(MetadataConstants.METADATA_KEY_ARROW_DISTANCE).get(0));
-        }
-
-        if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_SPAWNED_ARROW)) {
-            newArrow.setMetadata(MetadataConstants.METADATA_KEY_SPAWNED_ARROW,
-                    arrowToCopy.getMetadata(MetadataConstants.METADATA_KEY_SPAWNED_ARROW).get(0));
-        }
-
-        if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW)) {
-            newArrow.setMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW,
-                    arrowToCopy.getMetadata(MetadataConstants.METADATA_KEY_MULTI_SHOT_ARROW).get(0));
-        }
-
-        if (arrowToCopy.hasMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE)) {
-            newArrow.setMetadata(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE, MCMMO_METADATA_VALUE);
-        }
+    /**
+     * Copies metadata from one arrow to another.
+     *
+     * @param pluginRef mcMMO plugin reference.
+     * @param sourceArrow The arrow from which metadata is copied.
+     * @param targetArrow The arrow to which metadata is copied.
+     */
+    public static void copyArrowMetadata(@NotNull Plugin pluginRef, @NotNull Arrow sourceArrow,
+                                         @NotNull Arrow targetArrow) {
+        ARROW_METADATA_KEYS.stream()
+                .filter(sourceArrow::hasMetadata)
+                .forEach(key -> {
+                    final MetadataValue metadataValue = sourceArrow.getMetadata(key).get(0);
+                    if (key.equals(MetadataConstants.METADATA_KEY_BOW_FORCE)) {
+                        targetArrow.setMetadata(key, new FixedMetadataValue(pluginRef, metadataValue.asDouble()));
+                    } else if (key.equals(MetadataConstants.METADATA_KEY_CROSSBOW_PROJECTILE)) {
+                        targetArrow.setMetadata(key, MCMMO_METADATA_VALUE);
+                    } else {
+                        targetArrow.setMetadata(key, metadataValue);
+                    }
+                });
     }
 
     public static boolean isCrossbowProjectile(@NotNull Arrow arrow) {