diff --git a/build.gradle b/build.gradle index 95d61e6d..4902d752 100644 --- a/build.gradle +++ b/build.gradle @@ -52,8 +52,8 @@ dependencies { // Clumps modImplementation "com.blamejared.clumps:Clumps-fabric-${project.minecraft_version}:${project.clumps_version}" - // Projectile Damage - modImplementation "maven.modrinth:projectile-damage-attribute:${project.projectile_damage_version}+${project.minecraft_version}-fabric" + // Ranged Weapon API + modImplementation "maven.modrinth:ranged-weapon-api:${project.ranged_weapon_api_version}" // Cloth Config modApi("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}") { diff --git a/gradle.properties b/gradle.properties index f4cf79d3..77cbf795 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,8 +3,8 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/develop/ - minecraft_version=1.20 - yarn_mappings=1.20+build.1 + minecraft_version=1.20.1 + yarn_mappings=1.20.1+build.10 loader_version=0.14.21 # Mod Properties @@ -14,12 +14,12 @@ org.gradle.jvmargs=-Xmx1G # Dependencies # check this on https://fabricmc.net/develop/ - fabric_version=0.83.0+1.20 + fabric_version=0.87.0+1.20.1 cloth_config_version=11.0.99 mixin_extras_version=0.2.0-beta.8 # Compatibility - clumps_version=11.0.0.1 - projectile_damage_version=3.2.1 + clumps_version=12.0.0.3 + ranged_weapon_api_version=1.1.1+1.20.1 reach_entity_attributes_version=2.4.0 #pehkui_version=3.7.8 \ No newline at end of file diff --git a/src/main/java/chronosacaria/mcdw/Mcdw.java b/src/main/java/chronosacaria/mcdw/Mcdw.java index e3432b93..2effed28 100644 --- a/src/main/java/chronosacaria/mcdw/Mcdw.java +++ b/src/main/java/chronosacaria/mcdw/Mcdw.java @@ -1,5 +1,6 @@ package chronosacaria.mcdw; +import chronosacaria.mcdw.compat.RangedWeaponAPICompat; import chronosacaria.mcdw.configs.CompatibilityFlags; import chronosacaria.mcdw.configs.McdwConfig; import chronosacaria.mcdw.data.ConfigItemEnabledCondition; @@ -7,6 +8,7 @@ import chronosacaria.mcdw.registries.*; import me.shedaniel.autoconfig.AutoConfig; import net.fabricmc.api.ModInitializer; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.util.Identifier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -39,5 +41,8 @@ public void onInitialize() { SummonedEntityRegistry.register(); StatusEffectsRegistry.register(); EnchantmentRestrictionsRegistry.register(); + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { + RangedWeaponAPICompat.init(); + } } } \ No newline at end of file diff --git a/src/main/java/chronosacaria/mcdw/compat/RangedWeaponAPICompat.java b/src/main/java/chronosacaria/mcdw/compat/RangedWeaponAPICompat.java new file mode 100644 index 00000000..d9ef7633 --- /dev/null +++ b/src/main/java/chronosacaria/mcdw/compat/RangedWeaponAPICompat.java @@ -0,0 +1,35 @@ +package chronosacaria.mcdw.compat; + +import chronosacaria.mcdw.enums.*; +import net.fabric_extras.ranged_weapon.api.CustomRangedWeapon; +import net.fabric_extras.ranged_weapon.api.RangedConfig; +import net.minecraft.item.Item; + +import java.util.HashMap; + +public class RangedWeaponAPICompat { + public static void init() { + var items = new HashMap(); + items.putAll(BowsID.getItemsEnum()); + items.putAll(ShortbowsID.getItemsEnum()); + items.putAll(LongbowsID.getItemsEnum()); + items.putAll(CrossbowsID.getItemsEnum()); + + for (var entry: items.entrySet()) { + var id = entry.getKey(); + if (!id.getIsEnabled()) { + continue; + } + var isCrossbow = id instanceof CrossbowsID; + var item = entry.getValue(); + var damage = id.getWeaponItemStats().projectileDamage; + var speed = id.getWeaponItemStats().drawSpeed; + float standardPullTime = isCrossbow ? 25F : 20F; + var pullTime = isCrossbow // Speed seems to have inverse effects on crossbows compared to bows + ? speed + : standardPullTime * (20.0 / (float)speed); + var velocity = (id.getWeaponItemStats().range / 15.0f) * 3.0; + ((CustomRangedWeapon)item).setRangedWeaponConfig(new RangedConfig((int) pullTime, (float) damage, (float) velocity)); + } + } +} diff --git a/src/main/java/chronosacaria/mcdw/enums/BowsID.java b/src/main/java/chronosacaria/mcdw/enums/BowsID.java index 9af0ff84..8ca18bde 100644 --- a/src/main/java/chronosacaria/mcdw/enums/BowsID.java +++ b/src/main/java/chronosacaria/mcdw/enums/BowsID.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; import net.minecraft.item.ToolMaterials; -import net.projectile_damage.api.IProjectileWeapon; import org.jetbrains.annotations.NotNull; import java.util.EnumMap; @@ -64,7 +63,7 @@ public enum BowsID implements IRangedWeaponID, IInnateEnchantment { BowsID(boolean isEnabled, ToolMaterial material, double projectileDamage, int drawSpeed, float range, String... repairIngredient) { this.isEnabled = isEnabled; this.material = material; - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { this.projectileDamage = projectileDamage; } else { this.projectileDamage = 0; @@ -124,7 +123,7 @@ public ToolMaterial getMaterial() { @Override public double getProjectileDamage() { - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { return projectileDamage; } else { return 0; @@ -188,10 +187,6 @@ public Map getInnateEnchantments() { public McdwBow makeWeapon() { McdwBow mcdwBow = new McdwBow(this, CleanlinessHelper.stringToMaterial(this.getWeaponItemStats().material), this.getWeaponItemStats().drawSpeed, this.getWeaponItemStats().range, this.getWeaponItemStats().repairIngredient); - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { - ((IProjectileWeapon) mcdwBow).setProjectileDamage(this.getWeaponItemStats().projectileDamage); - ((IProjectileWeapon) mcdwBow).setCustomLaunchVelocity((this.getWeaponItemStats().range / 15.0f) * 3.0); - } getItemsEnum().put(this, mcdwBow); return mcdwBow; } diff --git a/src/main/java/chronosacaria/mcdw/enums/CrossbowsID.java b/src/main/java/chronosacaria/mcdw/enums/CrossbowsID.java index 8992cc26..324ded70 100644 --- a/src/main/java/chronosacaria/mcdw/enums/CrossbowsID.java +++ b/src/main/java/chronosacaria/mcdw/enums/CrossbowsID.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; import net.minecraft.item.ToolMaterials; -import net.projectile_damage.api.IProjectileWeapon; import org.jetbrains.annotations.NotNull; import java.util.EnumMap; @@ -63,7 +62,7 @@ public enum CrossbowsID implements IRangedWeaponID, IInnateEnchantment { CrossbowsID(boolean isEnabled, ToolMaterial material, double projectileDamage, int drawSpeed, float range, String... repairIngredient) { this.isEnabled = isEnabled; this.material = material; - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { this.projectileDamage = projectileDamage; } else { this.projectileDamage = 0; @@ -123,7 +122,7 @@ public ToolMaterial getMaterial() { @Override public double getProjectileDamage() { - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { return projectileDamage; } else { return 0; @@ -186,10 +185,6 @@ public Map getInnateEnchantments() { public McdwCrossbow makeWeapon() { McdwCrossbow mcdwCrossbow = new McdwCrossbow(this, CleanlinessHelper.stringToMaterial(this.getWeaponItemStats().material), this.getWeaponItemStats().drawSpeed, this.getWeaponItemStats().range, this.getWeaponItemStats().repairIngredient); - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { - ((IProjectileWeapon) mcdwCrossbow).setProjectileDamage(this.getWeaponItemStats().projectileDamage); - ((IProjectileWeapon) mcdwCrossbow).setCustomLaunchVelocity((this.getWeaponItemStats().range / 8.0f) * 3.15); - } getItemsEnum().put(this, mcdwCrossbow); return mcdwCrossbow; } diff --git a/src/main/java/chronosacaria/mcdw/enums/IRangedWeaponID.java b/src/main/java/chronosacaria/mcdw/enums/IRangedWeaponID.java index 6aae7616..c667d3a7 100644 --- a/src/main/java/chronosacaria/mcdw/enums/IRangedWeaponID.java +++ b/src/main/java/chronosacaria/mcdw/enums/IRangedWeaponID.java @@ -39,7 +39,7 @@ class RangedStats { public RangedStats rangedStats(boolean isEnabled, String material, double projectileDamage, int drawSpeed, float range, String[] repairIngredient) { this.isEnabled = isEnabled; this.material = material; - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { this.projectileDamage = projectileDamage; } else { this.projectileDamage = 0; diff --git a/src/main/java/chronosacaria/mcdw/enums/LongbowsID.java b/src/main/java/chronosacaria/mcdw/enums/LongbowsID.java index 66d4f819..72f2afdf 100644 --- a/src/main/java/chronosacaria/mcdw/enums/LongbowsID.java +++ b/src/main/java/chronosacaria/mcdw/enums/LongbowsID.java @@ -13,7 +13,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; import net.minecraft.item.ToolMaterials; -import net.projectile_damage.api.IProjectileWeapon; import org.jetbrains.annotations.NotNull; import java.util.EnumMap; @@ -37,7 +36,7 @@ public enum LongbowsID implements IRangedWeaponID, IInnateEnchantment { LongbowsID(boolean isEnabled, ToolMaterial material, double projectileDamage, int drawSpeed, float range, String... repairIngredient) { this.isEnabled = isEnabled; this.material = material; - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { this.projectileDamage = projectileDamage; } else { this.projectileDamage = 0; @@ -97,7 +96,7 @@ public ToolMaterial getMaterial() { @Override public double getProjectileDamage() { - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { return projectileDamage; } else { return 0; @@ -143,10 +142,6 @@ public Map getInnateEnchantments() { public McdwLongbow makeWeapon() { McdwLongbow mcdwLongbow = new McdwLongbow(this, CleanlinessHelper.stringToMaterial(this.getWeaponItemStats().material), this.getWeaponItemStats().drawSpeed, this.getWeaponItemStats().range, this.getWeaponItemStats().repairIngredient); - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { - ((IProjectileWeapon) mcdwLongbow).setProjectileDamage(this.getWeaponItemStats().projectileDamage); - ((IProjectileWeapon) mcdwLongbow).setCustomLaunchVelocity((this.getWeaponItemStats().range / 15.0f) * 3.0); - } getItemsEnum().put(this, mcdwLongbow); return mcdwLongbow; } diff --git a/src/main/java/chronosacaria/mcdw/enums/ShortbowsID.java b/src/main/java/chronosacaria/mcdw/enums/ShortbowsID.java index d93cfde5..1fbb2d91 100644 --- a/src/main/java/chronosacaria/mcdw/enums/ShortbowsID.java +++ b/src/main/java/chronosacaria/mcdw/enums/ShortbowsID.java @@ -12,7 +12,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ToolMaterial; import net.minecraft.item.ToolMaterials; -import net.projectile_damage.api.IProjectileWeapon; import org.jetbrains.annotations.NotNull; import java.util.EnumMap; @@ -38,7 +37,7 @@ public enum ShortbowsID implements IRangedWeaponID, IInnateEnchantment { ShortbowsID(boolean isEnabled, ToolMaterial material, double projectileDamage, int drawSpeed, float range, String... repairIngredient) { this.isEnabled = isEnabled; this.material = material; - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { this.projectileDamage = projectileDamage; } else { this.projectileDamage = 0; @@ -97,7 +96,7 @@ public ToolMaterial getMaterial() { @Override public double getProjectileDamage() { - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { + if (FabricLoader.getInstance().isModLoaded("ranged_weapon_api")) { return projectileDamage; } else { return 0; @@ -143,10 +142,6 @@ public Map getInnateEnchantments() { public McdwShortbow makeWeapon() { McdwShortbow mcdwShortbow = new McdwShortbow(this, CleanlinessHelper.stringToMaterial(this.getWeaponItemStats().material), this.getWeaponItemStats().drawSpeed, this.getWeaponItemStats().range, this.getWeaponItemStats().repairIngredient); - if (FabricLoader.getInstance().isModLoaded("projectile_damage")) { - ((IProjectileWeapon) mcdwShortbow).setProjectileDamage(this.getWeaponItemStats().projectileDamage); - ((IProjectileWeapon) mcdwShortbow).setCustomLaunchVelocity((this.getWeaponItemStats().range / 15.0f) * 3.0); - } getItemsEnum().put(this, mcdwShortbow); return mcdwShortbow; }