Plugin owningPlugin = newMetadataValue.getOwningPlugin(); Validate.notNull(owningPlugin, "Plugin cannot be null"); String key = disambiguate(subject, metadataKey);
@Override public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { Map<Plugin, MetadataValue> values = metadata.get(metadataKey); if (values == null) { values = new HashMap<>(); metadata.put(metadataKey, values); } values.put(newMetadataValue.getOwningPlugin(), newMetadataValue); }
@Override public MCPlugin getOwningPlugin() { return new BukkitMCPlugin(this.value.getOwningPlugin()); }
private Player getPlanter(Metadatable tnt) { List<MetadataValue> values = tnt.getMetadata("mobarena-planter"); for (MetadataValue value : values) { if (value.getOwningPlugin().equals(plugin)) { return (Player) value.value(); } } return null; }
Plugin owningPlugin = newMetadataValue.getOwningPlugin(); Validate.notNull(owningPlugin, "Plugin cannot be null"); String key = disambiguate(subject, metadataKey);
@SuppressWarnings("unchecked") public static double getDamageToEntity(LivingEntity damager, LivingEntity victim) { for (MetadataValue value : victim.getMetadata("DamageCount")) { if (value.getOwningPlugin().getName().equals("MyPet")) { Map<UUID, Double> damageMap = (Map<UUID, Double>) value.value(); if (damageMap.containsKey(damager.getUniqueId())) { return damageMap.get(damager.getUniqueId()); } return 0; } } return 0; }
/** * Get the (first) metadata value on the given target that has the given * key and is of the given class type. * * @param target the target * @param key the key * @param expected the type of the value * @param <T> the type of the value * @return a value, or {@code null} if one does not exists */ @Nullable @SuppressWarnings("unchecked") public static <T> T getIfPresent(Metadatable target, String key, Class<T> expected) { List<MetadataValue> values = target.getMetadata(key); WorldGuardPlugin owner = WorldGuardPlugin.inst(); for (MetadataValue value : values) { if (value.getOwningPlugin() == owner) { Object v = value.value(); if (expected.isInstance(v)) { return (T) v; } } } return null; }
@SuppressWarnings("unchecked") public static Map<UUID, Double> getDamageToEntityPercent(LivingEntity victim) { Map<UUID, Double> damagePercentMap = new HashMap<>(); if (victim.hasMetadata("DamageCount")) { for (MetadataValue value : victim.getMetadata("DamageCount")) { if (value.getOwningPlugin().getName().equals("MyPet")) { Map<UUID, Double> damageMap = (Map<UUID, Double>) value.value(); double allDamage = 0; for (Double damage : damageMap.values()) { allDamage += damage; } if (allDamage <= 0) { return damagePercentMap; } for (UUID entity : damageMap.keySet()) { damagePercentMap.put(entity, damageMap.get(entity) / allDamage); } return damagePercentMap; } } } return damagePercentMap; } }
@SuppressWarnings("unchecked") public static double getDamageToEntityPercent(LivingEntity damager, LivingEntity victim) { if (victim.hasMetadata("DamageCount")) { UUID damagerUUID = damager.getUniqueId(); for (MetadataValue value : victim.getMetadata("DamageCount")) { if (value.getOwningPlugin().getName().equals("MyPet")) { Map<UUID, Double> damageMap = (Map<UUID, Double>) value.value(); double allDamage = 0; double damagerDamage = damageMap.containsKey(damagerUUID) ? damageMap.get(damagerUUID) : 0; for (UUID entity : damageMap.keySet()) { allDamage += damageMap.get(entity); } return damagerDamage / allDamage; } } } return 0; }
private void report(@Nullable User user, @NonNull Event e, @NonNull Location loc, @NonNull Flag flag, @NonNull Why why) { // A quick way to debug flag listener unit tests is to add this line here: System.out.println(why.name()); NOSONAR if (user != null && user.getPlayer().getMetadata(loc.getWorld().getName() + "_why_debug").stream() .filter(p -> p.getOwningPlugin().equals(getPlugin())).findFirst().map(MetadataValue::asBoolean).orElse(false)) { plugin.log("Why: " + e.getEventName() + " in world " + loc.getWorld().getName() + " at " + Util.xyz(loc.toVector())); plugin.log("Why: " + user.getName() + " " + flag.getID() + " - " + why.name()); } }
@SuppressWarnings("unchecked") public static void addDamageToEntity(LivingEntity damager, LivingEntity victim, double damage) { Map<UUID, Double> damageMap; if (victim.hasMetadata("DamageCount")) { for (MetadataValue value : victim.getMetadata("DamageCount")) { if (value.getOwningPlugin().getName().equals("MyPet")) { damageMap = (Map<UUID, Double>) value.value(); if (damageMap.containsKey(damager)) { double oldDamage = damageMap.get(damager); damageMap.put(damager.getUniqueId(), victim.getHealth() < damage ? victim.getHealth() + oldDamage : damage + oldDamage); } else { damageMap.put(damager.getUniqueId(), victim.getHealth() < damage ? victim.getHealth() : damage); } break; } } } else { damageMap = new WeakHashMap<>(); damageMap.put(damager.getUniqueId(), victim.getHealth() < damage ? victim.getHealth() : damage); victim.setMetadata("DamageCount", new FixedMetadataValue(MyPetApi.getPlugin(), damageMap)); } }
.filter(p -> p.getOwningPlugin().equals(getPlugin())).findFirst().map(MetadataValue::asBoolean).orElse(false); if (newValue) { user.sendMessage("commands.admin.why.turning-on", TextVariables.NAME, target.getName());
@Test public void getMetadata_MultipleMetaDataSetByMultiplePlugins_TwoMetadataValuesFound() { MockPlugin plugin1 = MockBukkit.createMockPlugin(); TestPlugin plugin2 = MockBukkit.load(TestPlugin.class); assertFalse(mt.hasMetadata("MyMetadata")); mt.setMetadata("MyMetadata", new FixedMetadataValue(plugin1, "wee")); mt.setMetadata("MyMetadata", new FixedMetadataValue(plugin1, "woo")); mt.setMetadata("MyMetadata", new FixedMetadataValue(plugin2, "also wee")); assertTrue(mt.hasMetadata("MyMetadata")); List<MetadataValue> metadata = mt.getMetadata("MyMetadata"); assertEquals(2, metadata.size()); MetadataValue value1 = metadata.get(0); MetadataValue value2 = metadata.get(1); if (value1.getOwningPlugin() == plugin2) { value2 = value1; value1 = metadata.get(1); } assertEquals("woo", value1.asString()); assertEquals(plugin1, value1.getOwningPlugin()); assertEquals("also wee", value2.asString()); assertEquals(plugin2, value2.getOwningPlugin()); }
@Test public void removeMetadata_MultipleSet_OneRemoved() { MockPlugin plugin1 = MockBukkit.createMockPlugin(); TestPlugin plugin2 = MockBukkit.load(TestPlugin.class); mt.setMetadata("MyMetadata", new FixedMetadataValue(plugin1, "wee")); mt.setMetadata("MyMetadata", new FixedMetadataValue(plugin2, "woo")); mt.removeMetadata("MyMetadata", plugin1); assertTrue(mt.hasMetadata("MyMetadata")); List<MetadataValue> metadata = mt.getMetadata("MyMetadata"); assertEquals(1, metadata.size()); MetadataValue value = metadata.get(0); assertEquals(plugin2, value.getOwningPlugin()); }
List<MetadataValue> metadata = entity.getMetadata("hit"); for (MetadataValue value : metadata) { if (value.getOwningPlugin().equals(plugin)) { Object o = value.value(); if (o != null && o instanceof WeakReference) {