use of net.silentchaos512.gear.api.item.GearType in project Silent-Gear by SilentChaos512.
the class CompoundPart method getStatModifiers.
@Override
public Collection<StatInstance> getStatModifiers(IPartData part, PartType partType, StatGearKey key, ItemStack gear) {
// Get the materials and all the stat modifiers they provide for this stat
List<IMaterialInstance> materials = getMaterials(part);
List<StatInstance> statMods = materials.stream().flatMap(m -> m.getStatModifiers(partType, key).stream()).collect(Collectors.toList());
// Get any base modifiers for this part (could be none)
statMods.addAll(this.stats.get(key));
if (statMods.isEmpty()) {
// No modifiers for this stat, so doing anything else is pointless
return statMods;
}
GetStatModifierEvent event = new GetStatModifierEvent((PartData) part, (ItemStat) key.getStat(), statMods);
MinecraftForge.EVENT_BUS.post(event);
// Average together all modifiers of the same op. This makes things like rods with varying
// numbers of materials more "sane".
List<StatInstance> ret = new ArrayList<>(event.getModifiers());
for (StatInstance.Operation op : StatInstance.Operation.values()) {
Collection<StatInstance> modsForOp = ret.stream().filter(s -> s.getOp() == op).collect(Collectors.toList());
if (modsForOp.size() > 1) {
StatInstance mod = compressModifiers(modsForOp, op, key);
ret.removeIf(inst -> inst.getOp() == op);
ret.add(mod);
}
}
// Synergy
if (key.getStat().doesSynergyApply()) {
final float synergy = SynergyUtils.getSynergy(this.partType, materials, getTraits(part, PartGearKey.of(gearType, partType), gear));
if (!MathUtils.floatsEqual(synergy, 1.0f)) {
final float multi = synergy - 1f;
for (int i = 0; i < ret.size(); ++i) {
StatInstance oldMod = ret.get(i);
float value = oldMod.getValue();
// Taking the abs of value times multi makes negative mods become less negative
StatInstance newMod = oldMod.copySetValue(value + Math.abs(value) * multi);
ret.remove(i);
ret.add(i, newMod);
}
}
}
return ret;
}
use of net.silentchaos512.gear.api.item.GearType in project Silent-Gear by SilentChaos512.
the class CompoundPart method getRandomMaterials.
private List<MaterialInstance> getRandomMaterials(GearType gearType, int count, int tier) {
// Excludes children, will select a random child material (if appropriate) below
List<IMaterial> matsOfTier = MaterialManager.getValues(tier == 0).stream().map(MaterialInstance::of).filter(m -> tier < 0 || tier == m.getTier(this.partType)).filter(m -> m.allowedInPart(this.partType) && m.isCraftingAllowed(this.partType, gearType)).map(MaterialInstance::get).collect(Collectors.toList());
if (!matsOfTier.isEmpty()) {
List<MaterialInstance> ret = new ArrayList<>();
for (int i = 0; i < count; ++i) {
IMaterial material = matsOfTier.get(SilentGear.RANDOM.nextInt(matsOfTier.size()));
ret.add(getRandomChildMaterial(material));
}
return ret;
}
if (tier == -1) {
// Something went wrong...
return Collections.emptyList();
}
// No materials of tier? Select randoms of any tier.
return getRandomMaterials(gearType, count, -1);
}
use of net.silentchaos512.gear.api.item.GearType in project Silent-Gear by SilentChaos512.
the class CompoundPart method randomizeData.
@Override
public PartData randomizeData(GearType gearType, int tier) {
for (ItemStack stack : this.getIngredient().getItems()) {
if (stack.getItem() instanceof CompoundPartItem) {
int materialCount = getRandomMaterialCount(partType);
List<MaterialInstance> materials = getRandomMaterials(gearType, materialCount, tier);
ItemStack craftingItem = ((CompoundPartItem) stack.getItem()).create(materials);
return PartData.of(this, craftingItem);
}
}
return super.randomizeData(gearType, tier);
}
use of net.silentchaos512.gear.api.item.GearType in project Silent-Gear by SilentChaos512.
the class EnchantmentTrait method onRecalculatePost.
@Override
public void onRecalculatePost(TraitActionContext context) {
ItemStack gear = context.getGear();
GearType gearType = GearHelper.getType(gear);
int traitLevel = context.getTraitLevel();
enchantments.forEach((type, list) -> {
if (gearType.matches(type)) {
addEnchantments(gear, traitLevel, list);
}
});
}
use of net.silentchaos512.gear.api.item.GearType in project Silent-Gear by SilentChaos512.
the class NBTTrait method onGearCrafted.
@Override
public void onGearCrafted(TraitActionContext context) {
ItemStack gear = context.getGear();
GearType gearType = GearHelper.getType(gear);
int traitLevel = context.getTraitLevel();
data.forEach((type, list) -> {
if (gearType.matches(type) || "all".equals(type)) {
list.stream().filter(e -> e.level == traitLevel).forEach(e -> gear.getOrCreateTag().merge(e.data));
}
});
}
Aggregations