diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/com/robertx22/mine_and_slash/capability/entity/CooldownsData.java b/src/main/java/com/robertx22/mine_and_slash/capability/entity/CooldownsData.java index 7d9de9ed4..a2fe69a39 100644 --- a/src/main/java/com/robertx22/mine_and_slash/capability/entity/CooldownsData.java +++ b/src/main/java/com/robertx22/mine_and_slash/capability/entity/CooldownsData.java @@ -27,13 +27,15 @@ public Data(int ticks, int need) { } public void tickSpellCooldowns(int ticks) { - getAllSpellsOnCooldown().forEach(x -> tickDownCooldown(x, ticks)); + map.values().removeIf(data -> { + data.ticks -= ticks; + return data.ticks < 1; + }); } public void tickDownCooldown(String id, int ticks) { - - if (map.containsKey(id)) { - Data data = map.get(id); + Data data = map.get(id); + if (data != null) { data.ticks -= ticks; if (data.ticks < 1) { @@ -43,13 +45,10 @@ public void tickDownCooldown(String id, int ticks) { } public void onTicksPass(int ticks) { - if (map.isEmpty()) { - return; - } - new HashMap<>(map).entrySet() - .forEach(x -> { - tickDownCooldown(x.getKey(), ticks); - }); + map.values().removeIf(data -> { + data.ticks -= ticks; + return data.ticks < 1; + }); } public List getAllSpellsOnCooldown() { diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/gear_types/bases/BaseGearType.java b/src/main/java/com/robertx22/mine_and_slash/database/data/gear_types/bases/BaseGearType.java index 987a46c95..8174c00e9 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/gear_types/bases/BaseGearType.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/gear_types/bases/BaseGearType.java @@ -17,6 +17,7 @@ import com.robertx22.mine_and_slash.saveclasses.gearitem.gear_bases.StatRequirement; import com.robertx22.mine_and_slash.tags.TagList; import com.robertx22.mine_and_slash.tags.all.SlotTags; +import com.robertx22.mine_and_slash.tags.imp.SlotTag; import com.robertx22.mine_and_slash.uncommon.enumclasses.PlayStyle; import com.robertx22.mine_and_slash.uncommon.enumclasses.WeaponTypes; import com.robertx22.mine_and_slash.uncommon.interfaces.IAutoLocName; @@ -45,7 +46,7 @@ public final class BaseGearType implements IAutoLocName, JsonExileRegistry base_stats = new ArrayList<>(); public String weapon_type = WeaponTypes.none.id; - public TagList tags = new TagList(); + public TagList tags = new TagList<>(); public List possible_items = new ArrayList<>(); @@ -94,7 +95,7 @@ public WeaponTypes weaponType() { return ExileDB.WeaponTypes().get(weapon_type); } - public TagList getTags() { + public TagList getTags() { return tags; } diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/profession/Profession.java b/src/main/java/com/robertx22/mine_and_slash/database/data/profession/Profession.java index 81515f5ea..73ae27fe0 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/profession/Profession.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/profession/Profession.java @@ -78,8 +78,9 @@ public List getAllDrops(Player p, int lvl, int recipelvl, float dropC List ALLDROPS = new ArrayList<>(); - if (tiered_drops.containsKey(tier)) { - ALLDROPS.addAll(tiered_drops.get(tier)); + List tieredDrop = tiered_drops.get(tier); + if (tieredDrop != null) { + ALLDROPS.addAll(tieredDrop); } ALLDROPS.addAll(chance_drops); diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/ProfessionMatItems.java b/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/ProfessionMatItems.java index 3816c48bc..bda9a40cd 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/ProfessionMatItems.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/ProfessionMatItems.java @@ -11,33 +11,39 @@ import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.world.item.Item; +import java.util.EnumMap; import java.util.HashMap; import java.util.Map; public class ProfessionMatItems { - public static HashMap>> TIERED_MAIN_MATS = new HashMap<>(); + public static Map>> TIERED_MAIN_MATS = new HashMap<>(); public static void init() { for (String prof : Professions.ALL) { - TIERED_MAIN_MATS.put(prof, new HashMap<>()); + TIERED_MAIN_MATS.put(prof, new EnumMap<>(SkillItemTier.class)); } + var mining = TIERED_MAIN_MATS.get(Professions.MINING); + var farming = TIERED_MAIN_MATS.get(Professions.FARMING); + var husbandry = TIERED_MAIN_MATS.get(Professions.HUSBANDRY); + var fishing = TIERED_MAIN_MATS.get(Professions.FISHING); + for (SkillItemTier tier : SkillItemTier.values()) { - TIERED_MAIN_MATS.get(Professions.MINING).put(tier, Def.item("material/mining/" + tier.tier, () -> new ProfTierMatItem(Professions.MINING, tier, "Ore"))); - TIERED_MAIN_MATS.get(Professions.FARMING).put(tier, Def.item("material/farming/" + tier.tier, () -> new ProfTierMatItem(Professions.FARMING, tier, "Produce"))); - TIERED_MAIN_MATS.get(Professions.HUSBANDRY).put(tier, Def.item("material/meat/" + tier.tier, () -> new ProfTierMatItem(Professions.HUSBANDRY, tier, "Raw Meat"))); - TIERED_MAIN_MATS.get(Professions.FISHING).put(tier, Def.item("material/fishing/" + tier.tier, () -> new ProfTierMatItem(Professions.FISHING, tier, "Raw Fish"))); + mining.put(tier, Def.item("material/mining/" + tier.tier, () -> new ProfTierMatItem(Professions.MINING, tier, "Ore"))); + farming.put(tier, Def.item("material/farming/" + tier.tier, () -> new ProfTierMatItem(Professions.FARMING, tier, "Produce"))); + husbandry.put(tier, Def.item("material/meat/" + tier.tier, () -> new ProfTierMatItem(Professions.HUSBANDRY, tier, "Raw Meat"))); + fishing.put(tier, Def.item("material/fishing/" + tier.tier, () -> new ProfTierMatItem(Professions.FISHING, tier, "Raw Fish"))); } } public static void addDownRankRecipes() { - for (Map.Entry>> en : TIERED_MAIN_MATS.entrySet()) { + for (Map.Entry>> en : TIERED_MAIN_MATS.entrySet()) { for (Map.Entry> e : en.getValue().entrySet()) { if (e.getKey().tier != SkillItemTier.TIER0.tier) { diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/Professions.java b/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/Professions.java index 295edb732..7a860b406 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/Professions.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/profession/all/Professions.java @@ -205,7 +205,7 @@ public Builder blockTag(SkillItemTier tier, int exp, TagKey... blocks) { return this; } - public Builder dropTiered(HashMap> map, float chancemulti) { + public Builder dropTiered(Map> map, float chancemulti) { for (Map.Entry> en : map.entrySet()) { Item item = en.getValue().get(); diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/ComponentPart.java b/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/ComponentPart.java index a882c79be..b05e9c094 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/ComponentPart.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/ComponentPart.java @@ -116,10 +116,10 @@ public void tryActivate(SpellCtx ctx) { EffectCondition pred = EffectCondition.MAP.get(entityPredicate.type); if (pred != null) { - selected = selected.stream().filter(targetEntity -> { + selected.removeIf(targetEntity -> { SpellCtx chainedCtx = SpellCtx.onEntityHit(ctx, targetEntity); - return pred.can(chainedCtx, entityPredicate); - }).collect(Collectors.toList()); + return !pred.can(chainedCtx, entityPredicate); + }); } } list.addAll(selected); diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/PotionAction.java b/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/PotionAction.java index b12036096..62a088dfe 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/PotionAction.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/PotionAction.java @@ -44,18 +44,12 @@ public void tryActivate(Collection targets, SpellCtx ctx, MapHolde } else if (action == GiveOrTake.REMOVE_NEGATIVE) { int count = data.getOrDefault(COUNT, 1D).intValue(); - for (int i = 0; i < count; i++) { - - List opt = t.getActiveEffects() - .stream() - .filter(x -> x.getEffect().getCategory() == MobEffectCategory.HARMFUL) - .collect(Collectors.toList()); - - if (!opt.isEmpty()) { - t.removeEffect(opt.get(0).getEffect()); - } - } - + List effectsToRemove = t.getActiveEffects() + .stream() + .filter(x -> x.getEffect().getCategory() == MobEffectCategory.HARMFUL) + .limit(count) + .toList(); + effectsToRemove.forEach(effect -> t.removeEffect(effect.getEffect())); } } diff --git a/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/vanity/ParticleInRadiusAction.java b/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/vanity/ParticleInRadiusAction.java index 5cb00e0cc..0ac43a5ba 100644 --- a/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/vanity/ParticleInRadiusAction.java +++ b/src/main/java/com/robertx22/mine_and_slash/database/data/spells/components/actions/vanity/ParticleInRadiusAction.java @@ -34,12 +34,12 @@ public void tryActivate(Collection targets, SpellCtx ctx, MapHolde //SimpleParticleType particle = data.getParticle(); float radius = data.get(RADIUS).floatValue(); - - radius *= ctx.calculatedSpellData.data.getNumber(EventData.AREA_MULTI, 1F).number; - float height = data.getOrDefault(HEIGHT, 0D).floatValue(); int amount = data.get(PARTICLE_COUNT).intValue(); - amount *= ctx.calculatedSpellData.data.getNumber(EventData.AREA_MULTI, 1F).number; + + float areaMulti = ctx.calculatedSpellData.data.getNumber(EventData.AREA_MULTI, 1F).number; + radius *= areaMulti; + amount = (int) (amount * areaMulti); ParticleMotion motion = null; diff --git a/src/main/java/com/robertx22/mine_and_slash/uncommon/utilityclasses/AllyOrEnemy.java b/src/main/java/com/robertx22/mine_and_slash/uncommon/utilityclasses/AllyOrEnemy.java index 0e0d0f6b7..d1aaf63a3 100644 --- a/src/main/java/com/robertx22/mine_and_slash/uncommon/utilityclasses/AllyOrEnemy.java +++ b/src/main/java/com/robertx22/mine_and_slash/uncommon/utilityclasses/AllyOrEnemy.java @@ -3,10 +3,7 @@ import com.robertx22.mine_and_slash.config.forge.ServerContainer; import com.robertx22.mine_and_slash.database.data.spells.summons.entity.SummonEntity; import com.robertx22.mine_and_slash.uncommon.datasaving.Load; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.NeutralMob; -import net.minecraft.world.entity.OwnableEntity; +import net.minecraft.world.entity.*; import net.minecraft.world.entity.player.Player; import java.util.List; @@ -17,13 +14,6 @@ public enum AllyOrEnemy { summonShouldAttack() { - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream() - .filter(x -> is(caster, x)) - .collect(Collectors.toList()); - } - @Override public boolean is(Entity caster, LivingEntity target) { @@ -63,14 +53,9 @@ public boolean includesCaster() { allies() { - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream().filter(x -> is(caster, x)).collect(Collectors.toList()); - } - @Override public boolean is(Entity caster, LivingEntity target) { - return enemies.is(caster, target) == false; + return !enemies.is(caster, target); } @Override @@ -78,12 +63,8 @@ public boolean includesCaster() { return true; } }, - allies_not_self() { - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream().filter(x -> is(caster, x)).collect(Collectors.toList()); - } + allies_not_self() { @Override public boolean is(Entity caster, LivingEntity target) { return allies.is(caster, target); @@ -94,14 +75,8 @@ public boolean includesCaster() { return false; } }, - pets() { - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream() - .filter(x -> is(caster, x)) - .collect(Collectors.toList()); - } + pets() { @Override public boolean is(Entity caster, LivingEntity target) { if (caster instanceof Player p) { @@ -117,14 +92,8 @@ public boolean includesCaster() { return false; } }, - casters_summons() { - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream() - .filter(x -> is(caster, x)) - .collect(Collectors.toList()); - } + casters_summons() { @Override public boolean is(Entity caster, LivingEntity target) { if (caster instanceof Player p) { @@ -142,23 +111,20 @@ public boolean includesCaster() { return false; } }, + enemies { @Override public boolean is(Entity caster, LivingEntity target) { - if (caster instanceof Player p) { - if (EntityFinder.isTamedByAlly(p, target)) { + if (caster instanceof Player casterPlayer) { + if (EntityFinder.isTamedByAlly(casterPlayer, target)) { return false; } - if (target instanceof Player) { + if (target instanceof Player targetPlayer) { if (!caster.level().getServer().isPvpAllowed()) { return false; } - if (target == caster || TeamUtils.areOnSameTeam((Player) caster, (Player) target, false)) { - return false; - } else { - return true; - } + return target != caster && !TeamUtils.areOnSameTeam(casterPlayer, targetPlayer, false); } } else { @@ -177,27 +143,21 @@ public boolean is(Entity caster, LivingEntity target) { return true; } - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream() - .filter(x -> is(caster, x)) - .collect(Collectors.toList()); - } - @Override public boolean includesCaster() { return false; } }, + non_ai_enemies { @Override public boolean is(Entity caster, LivingEntity target) { - if (caster instanceof Player p) { - if (EntityFinder.isTamedByAlly(p, target)) { + if (caster instanceof Player casterPlayer) { + if (EntityFinder.isTamedByAlly(casterPlayer, target)) { return false; } - if (target.serializeNBT().contains("NoAI")) { + if (target instanceof Mob mob && mob.isNoAi()) { return false; } // Check for villagers and other NPCs @@ -208,15 +168,11 @@ public boolean is(Entity caster, LivingEntity target) { if (target instanceof net.minecraft.world.entity.npc.AbstractVillager) { return false; }*/ - if (target instanceof Player) { + if (target instanceof Player targetPlayer) { if (!caster.level().getServer().isPvpAllowed()) { return false; } - if (target == caster || TeamUtils.areOnSameTeam((Player) caster, (Player) target, false)) { - return false; - } else { - return true; - } + return target != caster && !TeamUtils.areOnSameTeam(casterPlayer, targetPlayer, false); } } else { @@ -235,13 +191,6 @@ public boolean is(Entity caster, LivingEntity target) { return true; } - @Override - public List getMatchingEntities(List list, Entity caster) { - return list.stream() - .filter(x -> is(caster, x)) - .collect(Collectors.toList()); - } - @Override public boolean includesCaster() { return false; @@ -264,8 +213,15 @@ public boolean includesCaster() { } }; - public abstract List getMatchingEntities(List list, Entity caster); + public List getMatchingEntities(List list, Entity caster) { + return list.stream() + .filter(x -> is(caster, x)) + .collect(Collectors.toList()); + } + /** + * @return whether {@code target} is an appropriate target for this target type for the caster {@code caster} + */ public abstract boolean is(Entity caster, LivingEntity target); public abstract boolean includesCaster(); diff --git a/src/main/java/com/robertx22/temp/SkillItemTier.java b/src/main/java/com/robertx22/temp/SkillItemTier.java index fd4d11804..1b5eb2950 100644 --- a/src/main/java/com/robertx22/temp/SkillItemTier.java +++ b/src/main/java/com/robertx22/temp/SkillItemTier.java @@ -117,15 +117,15 @@ public SkillItemTier higherTier() { } - public LevelRange levelRange; - public float lvl_req; - public String word; - public String rar; - public int tier; - public float statMulti; - public ChatFormatting format; - public int durationSeconds; - public int repairDurab; - public float percent_healed; + public final LevelRange levelRange; + public final float lvl_req; + public final String word; + public final String rar; + public final int tier; + public final float statMulti; + public final ChatFormatting format; + public final int durationSeconds; + public final int repairDurab; + public final float percent_healed; } \ No newline at end of file