public static void extrapolateFloatList(List<AscendingPair<Float>> list) { RandomUtils.extrapolateList(Float.class,list); }
public static float lerp(String[] list, int levelIndex, int nextLevelIndex, float distance) { if (list.length == 0) return 0; if (levelIndex >= list.length) return Float.parseFloat(list[list.length - 1]); if (nextLevelIndex >= list.length) return Float.parseFloat(list[list.length - 1]); float previousValue = Float.parseFloat(list[levelIndex]); float nextValue = Float.parseFloat(list[nextLevelIndex]); return lerp(previousValue, nextValue, distance); }
public void add(WandLevel other) { spellProbability = RandomUtils.merge(spellProbability, other.spellProbability); materialProbability = RandomUtils.merge(materialProbability, other.materialProbability); this.materialCountProbability = materialCountProbability.isEmpty() ? other.materialCountProbability : materialCountProbability; this.spellCountProbability = spellCountProbability.isEmpty() ? other.spellCountProbability : spellCountProbability; this.useProbability = useProbability.isEmpty() ? other.useProbability : useProbability; this.addUseProbability = addUseProbability.isEmpty() ? other.addUseProbability : addUseProbability; this.propertyCountProbability = propertyCountProbability.isEmpty() ? other.propertyCountProbability : propertyCountProbability; for (Map.Entry<String, Deque<WeightedPair<Float>>> entry : other.propertiesProbability.entrySet()) { Deque<WeightedPair<Float>> thisOne = propertiesProbability.get(entry.getKey()); if (thisOne == null || thisOne.isEmpty()) { propertiesProbability.put(entry.getKey(), entry.getValue()); } } this.manaRegenerationProbability = manaRegenerationProbability.isEmpty() ? other.manaRegenerationProbability : manaRegenerationProbability; this.manaMaxProbability = manaMaxProbability.isEmpty() ? other.manaMaxProbability : manaMaxProbability; }
public static void populateIntegerProbabilityMap(Deque<WeightedPair<Integer>> probabilityMap, ConfigurationSection parent, String key, int levelIndex, int nextLevelIndex, float distance) { if (parent.isConfigurationSection(key)) { populateProbabilityMap(Integer.class, probabilityMap, parent.getConfigurationSection(key), levelIndex, nextLevelIndex, distance); } else if (parent.isInt(key)) { populateProbabilityConstant(Integer.class, probabilityMap, parent.getString(key)); } else { populateProbabilityList(Integer.class, probabilityMap, ConfigurationUtils.getStringList(parent, key)); } }
RandomUtils.populateStringProbabilityMap(spells, template, "spells", levelIndex, nextLevelIndex, distance); RandomUtils.populateIntegerProbabilityMap(spellCountProbability, template, "spell_count", levelIndex, nextLevelIndex, distance); RandomUtils.populateStringProbabilityMap(brushes, template, "materials", levelIndex, nextLevelIndex, distance); for (WeightedPair<String> brushValue : brushes) { MaterialBrush brush = new MaterialBrush(brushValue.getValue()); RandomUtils.populateIntegerProbabilityMap(materialCountProbability, template.getConfigurationSection("material_count"), levelIndex, nextLevelIndex, distance); RandomUtils.populateIntegerProbabilityMap(useProbability, template, "uses", levelIndex, nextLevelIndex, distance); RandomUtils.populateIntegerProbabilityMap(addUseProbability, template, "add_uses", levelIndex, nextLevelIndex, distance); RandomUtils.populateIntegerProbabilityMap(propertyCountProbability, template, "property_count", levelIndex, nextLevelIndex, distance); for (String propertyKey : propertiesConfig.getKeys(false)) { Deque<WeightedPair<Float>> propertyProbability = new ArrayDeque<>(); RandomUtils.populateFloatProbabilityMap(propertyProbability, propertiesConfig, propertyKey, levelIndex, nextLevelIndex, distance); propertyKey = propertyKey.replace("|", "."); propertiesProbability.put(propertyKey, propertyProbability); RandomUtils.populateIntegerProbabilityMap(manaRegenerationProbability, template, "mana_regeneration", levelIndex, nextLevelIndex, distance); RandomUtils.populateIntegerProbabilityMap(manaMaxProbability, template, "mana_max", levelIndex, nextLevelIndex, distance);
int count = RandomUtils.weightedRandom(countProbability); if (hasLimit) { count = Math.min(count, limit - mobCount); target.setYaw(RandomUtils.getRandom().nextFloat() * 360); target.setPitch(RandomUtils.getRandom().nextFloat() * 180 - 90); String randomType = RandomUtils.weightedRandom(entityTypeProbability); try { EntityData entityData = controller.getMob(randomType);
public static void populateStringProbabilityMap(Deque<WeightedPair<String>> probabilityMap, ConfigurationSection parent, String key, int levelIndex, int nextLevelIndex, float distance) { if (parent.isConfigurationSection(key)) { populateProbabilityMap(String.class, probabilityMap, parent.getConfigurationSection(key), levelIndex, nextLevelIndex, distance); } else { populateProbabilityList(String.class, probabilityMap, ConfigurationUtils.getStringList(parent, key)); } }
public static void populateFloatProbabilityMap(Deque<WeightedPair<Float>> probabilityMap, ConfigurationSection nodeMap) { RandomUtils.populateProbabilityMap(Float.class, probabilityMap, nodeMap, 0, 0, 0); }
RandomUtils.populateStringProbabilityMap(tickSpells, template.getConfigurationSection("cast"), levelIndex, nextLevelIndex, distance); } else { tickSpells = null; RandomUtils.populateStringProbabilityMap(deathSpells, template.getConfigurationSection("death_cast"), levelIndex, nextLevelIndex, distance); } else { deathSpells = null; delay = (int)RandomUtils.lerp(StringUtils.split(template.getString("delay"), ','), levelIndex, nextLevelIndex, distance); } else { delay = null; moveRange = (int)RandomUtils.lerp(StringUtils.split(template.getString("move"), ','), levelIndex, nextLevelIndex, distance); } else { moveRange = null; dropXp = (int)RandomUtils.lerp(StringUtils.split(template.getString("drop_xp"), ','), levelIndex, nextLevelIndex, distance); } else { dropXp = null; birthRange = (int)RandomUtils.lerp(StringUtils.split(template.getString("birth_range"), ','), levelIndex, nextLevelIndex, distance); } else { birthRange = null; liveRange = (int)RandomUtils.lerp(StringUtils.split(template.getString("live_range"), ','), levelIndex, nextLevelIndex, distance); } else { liveRange = null; radius = (int)RandomUtils.lerp(StringUtils.split(template.getString("radius"),','), levelIndex, nextLevelIndex, distance);
public Spawner(@Nonnull MageController controller, @Nonnull AutomatonTemplate automaton, ConfigurationSection configuration) { this.controller = controller; entityTypeProbability = new ArrayDeque<>(); RandomUtils.populateStringProbabilityMap(entityTypeProbability, configuration, "mobs"); if (entityTypeProbability.isEmpty()) { controller.getLogger().warning("Automaton template " + automaton.getKey() + " has a spawner with no mobs defined"); } countProbability = new ArrayDeque<>(); RandomUtils.populateIntegerProbabilityMap(countProbability, configuration, "count", 0, 0, 0); if (countProbability.isEmpty()) { countProbability.add(new WeightedPair<>(1.0f, 1)); } probability = configuration.getDouble("probability", 0); playerRange = configuration.getInt("player_range", 64); minPlayers = configuration.getInt("min_players", 1); limit = configuration.getInt("limit", 0); limitRange = configuration.getInt("limit_range", 16); verticalRange = configuration.getInt("vertical_range", 0); radius = configuration.getDouble("radius"); verticalRadius = configuration.getDouble("vertical_radius"); locationRetry = configuration.getInt("retries", 4); passthrough = controller.getMaterialSetManager().getMaterialSet("passthrough"); randomizePitch = configuration.getBoolean("randomize_pitch", false); randomizeYaw = configuration.getBoolean("randomize_yaw", false); track = configuration.getBoolean("track", true); }
RandomUtils.populateStringProbabilityMap(dropProbability, table, 0, 0, 0); drops.add(dropProbability); } else { if (dropList != null) { Deque<WeightedPair<String>> dropProbability = new ArrayDeque<>(); RandomUtils.populateProbabilityList(String.class, dropProbability, dropList); drops.add(dropProbability);
@Override public void initialize(Spell spell, ConfigurationSection parameters) { super.initialize(spell, parameters); if (parameters.contains("slopes")) { slopeProbability = new ArrayDeque<>(); RandomUtils.populateIntegerProbabilityMap(slopeProbability, ConfigurationUtils.getConfigurationSection(parameters, "slopes")); } }
@Override protected void loadTemplate(ConfigurationSection template) { super.loadTemplate(template); if (template.contains("levels")) { ConfigurationSection levelTemplate = template.getConfigurationSection("levels"); Collection<String> levelKeys = levelTemplate.getKeys(false); List<AscendingPair<Float>> levels = new ArrayList<>(); for (String levelString : levelKeys) { int level = Integer.parseInt(levelString); double weight = levelTemplate.getDouble(levelString); levels.add(new AscendingPair<>(level, (float)weight)); } RandomUtils.extrapolateFloatList(levels); levelWeights = new ArrayDeque<>(); float threshold = 0; for (AscendingPair<Float> level : levels) { float weight = level.getValue(); int levelIndex = (int)level.getIndex(); threshold += weight; levelWeights.add(new WeightedPair<>(threshold, weight, levelIndex)); } } else { levelWeights = null; } }
center.setYaw(RandomUtils.getRandom().nextInt(360));
public static void populateFloatProbabilityMap(Deque<WeightedPair<Float>> probabilityMap, ConfigurationSection parent, String key, int levelIndex, int nextLevelIndex, float distance) { if (parent.isConfigurationSection(key)) { populateProbabilityMap(Float.class, probabilityMap, parent.getConfigurationSection(key), levelIndex, nextLevelIndex, distance); } else if (parent.isDouble(key) || parent.isInt(key)) { populateProbabilityConstant(Float.class, probabilityMap, parent.getString(key)); } else { populateProbabilityList(Float.class, probabilityMap, ConfigurationUtils.getStringList(parent, key)); } }
int slope = slopeProbability == null ? 0 : RandomUtils.weightedRandom(slopeProbability); if (maxHeight - targetBlock.getY() <= slope) { return SpellResult.NO_TARGET; Material material = RandomUtils.getRandom(materials);
public static void populateStringProbabilityMap(Deque<WeightedPair<String>> probabilityMap, ConfigurationSection nodeMap) { RandomUtils.populateProbabilityMap(String.class, probabilityMap, nodeMap, 0, 0, 0); }
@Override public void initialize(Spell spell, ConfigurationSection parameters) { super.initialize(spell, parameters); if (parameters.contains("slopes")) { slopeProbability = new ArrayDeque<>(); RandomUtils.populateIntegerProbabilityMap(slopeProbability, ConfigurationUtils.getConfigurationSection(parameters, "slopes")); } }
int startIndex = RandomUtils.getRandom().nextInt(materials.size()); int index = startIndex; while (true) { level = RandomUtils.weightedRandom(levelWeights);
public static void populateFloatProbabilityMap(Deque<WeightedPair<Float>> probabilityMap, ConfigurationSection nodeMap, int levelIndex, int nextLevelIndex, float distance) { RandomUtils.populateProbabilityMap(Float.class, probabilityMap, nodeMap, levelIndex, nextLevelIndex, distance); }