diff --git a/src/main/java/com/seacroak/basicweapons/BasicWeapons.java b/src/main/java/com/seacroak/basicweapons/BasicWeapons.java index 67eb84a..0505352 100644 --- a/src/main/java/com/seacroak/basicweapons/BasicWeapons.java +++ b/src/main/java/com/seacroak/basicweapons/BasicWeapons.java @@ -1,8 +1,8 @@ package com.seacroak.basicweapons; -import com.seacroak.basicweapons.registry.BWItems; import com.seacroak.basicweapons.registry.LootTableModification; import com.seacroak.basicweapons.registry.MainRegistry; +import com.seacroak.basicweapons.registry.WeaponRegistry; import net.fabricmc.api.ModInitializer; import static com.seacroak.basicweapons.Constants.BW_LOG; @@ -11,7 +11,7 @@ public class BasicWeapons implements ModInitializer { @Override public void onInitialize() { - BWItems.init(); + WeaponRegistry.init(); MainRegistry.init(); LootTableModification.init(); BW_LOG.info("[Basic Weapons] Armaments added"); diff --git a/src/main/java/com/seacroak/basicweapons/data/WEAPON_MATERIAL.java b/src/main/java/com/seacroak/basicweapons/data/WEAPON_MATERIAL.java new file mode 100644 index 0000000..7826ae4 --- /dev/null +++ b/src/main/java/com/seacroak/basicweapons/data/WEAPON_MATERIAL.java @@ -0,0 +1,11 @@ +package com.seacroak.basicweapons.data; + +public enum WEAPON_MATERIAL { + WOOD, + STONE, + IRON, + BRONZE, + GOLD, + DIAMOND, + NETHERITE +} \ No newline at end of file diff --git a/src/main/java/com/seacroak/basicweapons/data/WEAPON_TYPE.java b/src/main/java/com/seacroak/basicweapons/data/WEAPON_TYPE.java new file mode 100644 index 0000000..a766d1f --- /dev/null +++ b/src/main/java/com/seacroak/basicweapons/data/WEAPON_TYPE.java @@ -0,0 +1,10 @@ +package com.seacroak.basicweapons.data; + +public enum WEAPON_TYPE { + DAGGER, + CLUB, + HAMMER, + SPEAR, + QUARTERSTAFF, + GLAIVE +} diff --git a/src/main/java/com/seacroak/basicweapons/data/WeaponStats.java b/src/main/java/com/seacroak/basicweapons/data/WeaponStats.java new file mode 100644 index 0000000..21f5e44 --- /dev/null +++ b/src/main/java/com/seacroak/basicweapons/data/WeaponStats.java @@ -0,0 +1,5 @@ +package com.seacroak.basicweapons.data; + +public record WeaponStats(WEAPON_TYPE weaponType, float damage, float speed, double range) { + +} \ No newline at end of file diff --git a/src/main/java/com/seacroak/basicweapons/item/GlaiveItem.java b/src/main/java/com/seacroak/basicweapons/item/GlaiveItem.java index a6535ef..8989e3a 100644 --- a/src/main/java/com/seacroak/basicweapons/item/GlaiveItem.java +++ b/src/main/java/com/seacroak/basicweapons/item/GlaiveItem.java @@ -5,7 +5,7 @@ import net.minecraft.item.ToolMaterial; public class GlaiveItem extends BasicWeaponItem { - public GlaiveItem(ToolMaterial tier, float attackDamage, float attackSpeed, Settings settings) { + public GlaiveItem(ToolMaterial tier, float attackDamage, float attackSpeed, double reach, Settings settings) { super(tier, attackDamage, attackSpeed, settings.component(DataComponentTypes.TOOL, createToolComponent())); } diff --git a/src/main/java/com/seacroak/basicweapons/item/QuarterstaffItem.java b/src/main/java/com/seacroak/basicweapons/item/QuarterstaffItem.java index 14b145b..0ed71c3 100644 --- a/src/main/java/com/seacroak/basicweapons/item/QuarterstaffItem.java +++ b/src/main/java/com/seacroak/basicweapons/item/QuarterstaffItem.java @@ -5,7 +5,7 @@ import net.minecraft.item.ToolMaterial; public class QuarterstaffItem extends BasicWeaponItem { - public QuarterstaffItem(ToolMaterial tier, float attackDamage, float attackSpeed, Settings settings) { + public QuarterstaffItem(ToolMaterial tier, float attackDamage, float attackSpeed, double reach, Settings settings) { super(tier, attackDamage, attackSpeed, settings.component(DataComponentTypes.TOOL, createToolComponent())); } diff --git a/src/main/java/com/seacroak/basicweapons/item/SpearItem.java b/src/main/java/com/seacroak/basicweapons/item/SpearItem.java index fddabef..1b63adc 100644 --- a/src/main/java/com/seacroak/basicweapons/item/SpearItem.java +++ b/src/main/java/com/seacroak/basicweapons/item/SpearItem.java @@ -6,7 +6,7 @@ import net.minecraft.registry.tag.BlockTags; public class SpearItem extends BasicWeaponSweeplessItem { - public SpearItem(ToolMaterial tier, float attackDamage, float attackSpeed, Settings settings) { + public SpearItem(ToolMaterial tier, float attackDamage, float attackSpeed, double reach, Settings settings) { super(tier, BlockTags.SWORD_EFFICIENT, attackDamage, attackSpeed, settings.component(DataComponentTypes.TOOL, createToolComponent())); } diff --git a/src/main/java/com/seacroak/basicweapons/registry/BWToolMaterial.java b/src/main/java/com/seacroak/basicweapons/material/BWToolMaterials.java similarity index 84% rename from src/main/java/com/seacroak/basicweapons/registry/BWToolMaterial.java rename to src/main/java/com/seacroak/basicweapons/material/BWToolMaterials.java index 1ecf68c..e443f7e 100644 --- a/src/main/java/com/seacroak/basicweapons/registry/BWToolMaterial.java +++ b/src/main/java/com/seacroak/basicweapons/material/BWToolMaterials.java @@ -1,4 +1,4 @@ -package com.seacroak.basicweapons.registry; +package com.seacroak.basicweapons.material; import net.minecraft.item.ToolMaterial; import net.minecraft.registry.RegistryKeys; @@ -6,7 +6,7 @@ import net.minecraft.registry.tag.TagKey; import net.minecraft.util.Identifier; -public class BWToolMaterial { +public class BWToolMaterials { public static final ToolMaterial BRONZE = new ToolMaterial(BlockTags.INCORRECT_FOR_IRON_TOOL, 350, 7.0F, 2.5F, 13, TagKey.of(RegistryKeys.ITEM, Identifier.of("bronze", "bronze.item.bronze_ingot"))); diff --git a/src/main/java/com/seacroak/basicweapons/registry/BWItems.java b/src/main/java/com/seacroak/basicweapons/registry/BWItems.java deleted file mode 100644 index 1673f69..0000000 --- a/src/main/java/com/seacroak/basicweapons/registry/BWItems.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.seacroak.basicweapons.registry; - -import com.seacroak.basicweapons.item.*; -import com.seacroak.basicweapons.util.ID; -import net.minecraft.item.Item; -import net.minecraft.item.ToolMaterial; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; - -import java.util.LinkedList; -import java.util.List; -import java.util.function.Supplier; - -import static com.seacroak.basicweapons.registry.MainRegistry.bronze_mod_loaded; - -public class BWItems { - public static final float daggerDamage = 1f; - public static final float daggerSpeed = -1.6f; - public static final double daggerRange = 0; - public static final float hammerDamage = 7f; - public static final float hammerSpeed = -3.4f; - public static final double hammerRange = 0; - public static final float clubDamage = 5f; - public static final float clubSpeed = -3.0f; - public static final double clubRange = 0; - public static final float spearDamage = 2f; - public static final float spearSpeed = -2.8f; - public static final double spearRange = 2; - public static final float quarterstaffDamage = 1f; - public static final float quarterstaffSpeed = -2.3f; - public static final double quarterstaffRange = 1.25; - public static final float glaiveDamage = 5f; - public static final float glaiveSpeed = -3.2f; - public static final double glaiveRange = 1.25; - - /* When referencing items, use registeredItems from MainRegistry, not items. - Indices are the same for both constants */ - public static List items = new LinkedList<>(); - - private static Item.Settings makeItemSettings(WEAPON_TYPE weaponType, String path, ToolMaterial material, float damage, float speed, double range) { - Item.Settings itemSettings = new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, ID.of(path))); - - switch (weaponType) { - case DAGGER -> { - itemSettings = itemSettings.attributeModifiers(DaggerItem.createAttributeModifiers(material, damage, speed, range)); - } - case QUARTERSTAFF -> { - itemSettings = itemSettings.attributeModifiers(QuarterstaffItem.createAttributeModifiers(material, damage, speed, range)); - ; - } - } - return itemSettings; - } - - public static void init() { - - /* Daggers */ - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.WOOD, "wooden_dagger", () -> new DaggerItem(ToolMaterial.WOOD, daggerDamage, daggerSpeed, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "wooden_dagger", ToolMaterial.WOOD, daggerDamage, daggerSpeed, daggerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.STONE, "stone_dagger", () -> new DaggerItem(ToolMaterial.STONE, daggerDamage, daggerSpeed, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "stone_dagger", ToolMaterial.STONE, daggerDamage, daggerSpeed, daggerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.IRON, "iron_dagger", () -> new DaggerItem(ToolMaterial.IRON, daggerDamage, daggerSpeed, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "iron_dagger", ToolMaterial.IRON, daggerDamage, daggerSpeed, daggerRange)))); - if (bronze_mod_loaded) - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.BRONZE, "bronze_dagger", () -> new DaggerItem(BWToolMaterial.BRONZE, daggerDamage, daggerSpeed, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "bronze_dagger", BWToolMaterial.BRONZE, daggerDamage, daggerSpeed, daggerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.GOLD, "golden_dagger", () -> new DaggerItem(ToolMaterial.GOLD, daggerDamage - 1, daggerSpeed + 1, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "golden_dagger", ToolMaterial.GOLD, daggerDamage - 1, daggerSpeed + 1, daggerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.DIAMOND, "diamond_dagger", () -> new DaggerItem(ToolMaterial.DIAMOND, daggerDamage, daggerSpeed, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "diamond_dagger", ToolMaterial.DIAMOND, daggerDamage, daggerSpeed, daggerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.DAGGER, WEAPON_MATERIAL.NETHERITE, "netherite_dagger", () -> new DaggerItem(ToolMaterial.NETHERITE, daggerDamage, daggerSpeed, daggerRange, makeItemSettings(WEAPON_TYPE.DAGGER, "netherite_dagger", ToolMaterial.NETHERITE, daggerDamage, daggerSpeed, daggerRange).fireproof()))); - - /* Hammers */ - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.WOOD, "wooden_hammer", () -> new HammerItem(ToolMaterial.WOOD, hammerDamage - 6, hammerSpeed + 0.4f, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "wooden_hammer", ToolMaterial.WOOD, hammerDamage - 6, hammerSpeed + 0.4f, hammerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.STONE, "stone_hammer", () -> new HammerItem(ToolMaterial.STONE, hammerDamage - 3, hammerSpeed + 0.2f, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "stone_hammer", ToolMaterial.STONE, hammerDamage - 3, hammerSpeed + 0.2f, hammerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.IRON, "iron_hammer", () -> new HammerItem(ToolMaterial.IRON, hammerDamage, hammerSpeed, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "iron_hammer", ToolMaterial.IRON, hammerDamage, hammerSpeed, hammerRange)))); - if (bronze_mod_loaded) - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.BRONZE, "bronze_hammer", () -> new HammerItem(BWToolMaterial.BRONZE, hammerDamage - 0.5f, hammerSpeed + 0.1f, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "bronze_hammer", BWToolMaterial.BRONZE, hammerDamage - 0.5f, hammerSpeed + 0.1f, hammerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.GOLD, "golden_hammer", () -> new HammerItem(ToolMaterial.GOLD, hammerDamage - 6, hammerSpeed + 0.6f, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "golden_hammer", ToolMaterial.GOLD, hammerDamage - 6, hammerSpeed + 0.6f, hammerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.DIAMOND, "diamond_hammer", () -> new HammerItem(ToolMaterial.DIAMOND, hammerDamage - 1, hammerSpeed + 0.1f, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "diamond_hammer", ToolMaterial.DIAMOND, hammerDamage - 1, hammerSpeed + 0.1f, hammerRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.HAMMER, WEAPON_MATERIAL.NETHERITE, "netherite_hammer", () -> new HammerItem(ToolMaterial.NETHERITE, hammerDamage - 1, hammerSpeed + 0.2f, hammerRange, makeItemSettings(WEAPON_TYPE.HAMMER, "netherite_hammer", ToolMaterial.NETHERITE, hammerDamage - 1, hammerSpeed + 0.2f, hammerRange).fireproof()))); - - /* Clubs */ - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.WOOD, "wooden_club", () -> new ClubItem(ToolMaterial.WOOD, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "wooden_club", ToolMaterial.WOOD, clubDamage, clubSpeed, clubRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.STONE, "stone_club", () -> new ClubItem(ToolMaterial.STONE, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "stone_club", ToolMaterial.STONE, clubDamage, clubSpeed, clubRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.IRON, "iron_club", () -> new ClubItem(ToolMaterial.IRON, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "iron_club", ToolMaterial.IRON, clubDamage, clubSpeed, clubRange)))); - if (bronze_mod_loaded) - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.BRONZE, "bronze_club", () -> new ClubItem(BWToolMaterial.BRONZE, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "bronze_club", BWToolMaterial.BRONZE, clubDamage, clubSpeed, clubRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.GOLD, "golden_club", () -> new ClubItem(ToolMaterial.GOLD, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "golden_club", ToolMaterial.GOLD, clubDamage, clubSpeed, clubRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.DIAMOND, "diamond_club", () -> new ClubItem(ToolMaterial.DIAMOND, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "diamond_club", ToolMaterial.DIAMOND, clubDamage, clubSpeed, clubRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.CLUB, WEAPON_MATERIAL.NETHERITE, "netherite_club", () -> new ClubItem(ToolMaterial.NETHERITE, clubDamage, clubSpeed, clubRange, makeItemSettings(WEAPON_TYPE.CLUB, "netherite_club", ToolMaterial.NETHERITE, clubDamage, clubSpeed, clubRange).fireproof()))); - - /* Spears */ - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.WOOD, "wooden_spear", () -> new SpearItem(ToolMaterial.WOOD, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "wooden_spear", ToolMaterial.WOOD, spearDamage, spearSpeed, spearRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.STONE, "stone_spear", () -> new SpearItem(ToolMaterial.STONE, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "stone_spear", ToolMaterial.STONE, spearDamage, spearSpeed, spearRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.IRON, "iron_spear", () -> new SpearItem(ToolMaterial.IRON, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "iron_spear", ToolMaterial.IRON, spearDamage, spearSpeed, spearRange)))); - if (bronze_mod_loaded) - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.BRONZE, "bronze_spear", () -> new SpearItem(BWToolMaterial.BRONZE, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "bronze_spear", BWToolMaterial.BRONZE, spearDamage, spearSpeed, spearRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.GOLD, "golden_spear", () -> new SpearItem(ToolMaterial.GOLD, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "golden_spear", ToolMaterial.GOLD, spearDamage, spearSpeed, spearRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.DIAMOND, "diamond_spear", () -> new SpearItem(ToolMaterial.DIAMOND, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "diamond_spear", ToolMaterial.DIAMOND, spearDamage, spearSpeed, spearRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.SPEAR, WEAPON_MATERIAL.NETHERITE, "netherite_spear", () -> new SpearItem(ToolMaterial.NETHERITE, spearDamage, spearSpeed, makeItemSettings(WEAPON_TYPE.SPEAR, "netherite_spear", ToolMaterial.NETHERITE, spearDamage, spearSpeed, spearRange).fireproof()))); - - /* Quarterstaves */ - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.WOOD, "wooden_quarterstaff", () -> new QuarterstaffItem(ToolMaterial.WOOD, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "wooden_quarterstaff", ToolMaterial.WOOD, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.STONE, "stone_quarterstaff", () -> new QuarterstaffItem(ToolMaterial.STONE, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "stone_quarterstaff", ToolMaterial.STONE, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.IRON, "iron_quarterstaff", () -> new QuarterstaffItem(ToolMaterial.IRON, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "iron_quarterstaff", ToolMaterial.IRON, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange)))); - if (bronze_mod_loaded) - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.BRONZE, "bronze_quarterstaff", () -> new QuarterstaffItem(BWToolMaterial.BRONZE, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "bronze_quarterstaff", BWToolMaterial.BRONZE, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.GOLD, "golden_quarterstaff", () -> new QuarterstaffItem(ToolMaterial.GOLD, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "golden_quarterstaff", ToolMaterial.GOLD, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.DIAMOND, "diamond_quarterstaff", () -> new QuarterstaffItem(ToolMaterial.DIAMOND, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "diamond_quarterstaff", ToolMaterial.DIAMOND, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.QUARTERSTAFF, WEAPON_MATERIAL.NETHERITE, "netherite_quarterstaff", () -> new QuarterstaffItem(ToolMaterial.NETHERITE, quarterstaffDamage, quarterstaffSpeed, makeItemSettings(WEAPON_TYPE.QUARTERSTAFF, "netherite_quarterstaff", ToolMaterial.NETHERITE, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange).fireproof()))); - - /* Glaives */ - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.WOOD, "wooden_glaive", () -> new GlaiveItem(ToolMaterial.WOOD, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "wooden_glaive", ToolMaterial.WOOD, glaiveDamage, glaiveSpeed, glaiveRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.STONE, "stone_glaive", () -> new GlaiveItem(ToolMaterial.STONE, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "stone_glaive", ToolMaterial.STONE, glaiveDamage, glaiveSpeed, glaiveRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.IRON, "iron_glaive", () -> new GlaiveItem(ToolMaterial.IRON, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "iron_glaive", ToolMaterial.IRON, glaiveDamage, glaiveSpeed, glaiveRange)))); - if (bronze_mod_loaded) - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.BRONZE, "bronze_glaive", () -> new GlaiveItem(BWToolMaterial.BRONZE, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "bronze_glaive", BWToolMaterial.BRONZE, glaiveDamage, glaiveSpeed, glaiveRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.GOLD, "golden_glaive", () -> new GlaiveItem(ToolMaterial.GOLD, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "golden_glaive", ToolMaterial.GOLD, glaiveDamage, glaiveSpeed, glaiveRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.DIAMOND, "diamond_glaive", () -> new GlaiveItem(ToolMaterial.DIAMOND, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "diamond_glaive", ToolMaterial.DIAMOND, glaiveDamage, glaiveSpeed, glaiveRange)))); - items.add(new UnregisteredItemInfo(WEAPON_TYPE.GLAIVE, WEAPON_MATERIAL.NETHERITE, "netherite_glaive", () -> new GlaiveItem(ToolMaterial.NETHERITE, glaiveDamage, glaiveSpeed, makeItemSettings(WEAPON_TYPE.GLAIVE, "netherite_glaive", ToolMaterial.NETHERITE, glaiveDamage, glaiveSpeed, glaiveRange).fireproof()))); - - } - - public enum WEAPON_TYPE { - DAGGER, CLUB, HAMMER, SPEAR, QUARTERSTAFF, GLAIVE - } - - public enum WEAPON_MATERIAL { - WOOD, STONE, IRON, BRONZE, GOLD, DIAMOND, NETHERITE - } - - /*** This class holds information about all items. - It is accessed by forge & fabric methods - for automatic registration ***/ - public static class UnregisteredItemInfo { - public final WEAPON_TYPE weaponType; - public final WEAPON_MATERIAL weaponMaterial; - public final String name; - public final Supplier itemSupplier; - - public UnregisteredItemInfo(WEAPON_TYPE weaponType, WEAPON_MATERIAL weaponMaterial, String name, Supplier itemSupplier) { - this.weaponType = weaponType; - this.weaponMaterial = weaponMaterial; - this.name = name; - this.itemSupplier = itemSupplier; - } - } - - -} diff --git a/src/main/java/com/seacroak/basicweapons/registry/MainRegistry.java b/src/main/java/com/seacroak/basicweapons/registry/MainRegistry.java index a470592..550fb03 100644 --- a/src/main/java/com/seacroak/basicweapons/registry/MainRegistry.java +++ b/src/main/java/com/seacroak/basicweapons/registry/MainRegistry.java @@ -1,6 +1,7 @@ package com.seacroak.basicweapons.registry; import com.seacroak.basicweapons.item.*; +import com.seacroak.basicweapons.registry.WeaponRegistry.ItemInfo; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.item.Item; @@ -12,10 +13,13 @@ import java.util.List; import java.util.Map; +import static com.seacroak.basicweapons.material.BWToolMaterials.BRONZE; +import static net.minecraft.item.ToolMaterial.*; + public class MainRegistry { public final static boolean bronze_mod_loaded = FabricLoader.getInstance().isModLoaded("bronze"); - public final static Map registeredItems = new HashMap<>(); + public final static Map registeredItems = new HashMap<>(); /* These holders are for loot table creation use to simplify selection of weapons by type or material @@ -36,41 +40,40 @@ public class MainRegistry { public static List netheriteWeapons = new LinkedList<>(); public static void init() { - - int x = 0; - for (BWItems.UnregisteredItemInfo item : BWItems.items - ) { - registeredItems.put(x, new RegisteredItemInfo(item.weaponType, item.weaponMaterial, item.name, Reggie.register(item.name, item.itemSupplier.get()))); - x += 1; + for (ItemInfo itemWithInfo : WeaponRegistry.itemsWithInfo) { + registeredItems.put(x++, new ItemInfo(itemWithInfo.weaponType, itemWithInfo.weaponMaterial, itemWithInfo.name, itemWithInfo.item)); } - for (Map.Entry item : registeredItems.entrySet()) { - switch (item.getValue().weaponType) { - case DAGGER -> daggers.add((DaggerItem) item.getValue().item); - case CLUB -> clubs.add((ClubItem) item.getValue().item); - case HAMMER -> hammers.add((HammerItem) item.getValue().item); - case SPEAR -> spears.add((SpearItem) item.getValue().item); - case QUARTERSTAFF -> quarterstaves.add((QuarterstaffItem) item.getValue().item); - case GLAIVE -> glaives.add((GlaiveItem) item.getValue().item); - default -> { - break; - } + // Populate type lists + for (Map.Entry entry : registeredItems.entrySet()) { + Item item = entry.getValue().item; + switch (entry.getValue().weaponType) { + case DAGGER -> daggers.add((DaggerItem) item); + case CLUB -> clubs.add((ClubItem) item); + case HAMMER -> hammers.add((HammerItem) item); + case SPEAR -> spears.add((SpearItem) item); + case QUARTERSTAFF -> quarterstaves.add((QuarterstaffItem) item); + case GLAIVE -> glaives.add((GlaiveItem) item); } - switch (item.getValue().weaponMaterial) { - case WOOD -> woodenWeapons.add(item.getValue().item); - case STONE -> stoneWeapons.add(item.getValue().item); - case IRON -> ironWeapons.add(item.getValue().item); - case BRONZE -> bronzeWeapons.add(item.getValue().item); - case GOLD -> goldenWeapons.add(item.getValue().item); - case DIAMOND -> diamondWeapons.add(item.getValue().item); - case NETHERITE -> netheriteWeapons.add(item.getValue().item); - default -> { - break; - } + if (entry.getValue().weaponMaterial.equals(WOOD)) { + woodenWeapons.add(item); + } else if (entry.getValue().weaponMaterial.equals(STONE)) { + stoneWeapons.add(item); + } else if (entry.getValue().weaponMaterial.equals(IRON)) { + ironWeapons.add(item); + } else if (entry.getValue().weaponMaterial.equals(BRONZE)) { + bronzeWeapons.add(item); + } else if (entry.getValue().weaponMaterial.equals(GOLD)) { + goldenWeapons.add(item); + } else if (entry.getValue().weaponMaterial.equals(DIAMOND)) { + diamondWeapons.add(item); + } else if (entry.getValue().weaponMaterial.equals(NETHERITE)) { + netheriteWeapons.add(item); } } + // Item group registration remains the same ItemGroupEvents.modifyEntriesEvent(ItemGroups.COMBAT).register(content -> { content.addAfter(Items.NETHERITE_AXE, registeredItems.get(0).item); for (int i = 1; i < registeredItems.size(); i++) { @@ -78,19 +81,4 @@ public static void init() { } }); } - - public static class RegisteredItemInfo { - public final BWItems.WEAPON_TYPE weaponType; - public final BWItems.WEAPON_MATERIAL weaponMaterial; - public final String name; - public final Item item; - - public RegisteredItemInfo(BWItems.WEAPON_TYPE weaponType, BWItems.WEAPON_MATERIAL weaponMaterial, String name, Item item) { - this.weaponType = weaponType; - this.weaponMaterial = weaponMaterial; - this.name = name; - this.item = item; - } - } - } diff --git a/src/main/java/com/seacroak/basicweapons/registry/WeaponRegistry.java b/src/main/java/com/seacroak/basicweapons/registry/WeaponRegistry.java new file mode 100644 index 0000000..2ffa580 --- /dev/null +++ b/src/main/java/com/seacroak/basicweapons/registry/WeaponRegistry.java @@ -0,0 +1,129 @@ +package com.seacroak.basicweapons.registry; + +import com.seacroak.basicweapons.data.WEAPON_TYPE; +import com.seacroak.basicweapons.item.*; +import com.seacroak.basicweapons.material.BWToolMaterials; +import com.seacroak.basicweapons.util.ID; +import com.seacroak.basicweapons.util.Reggie; +import net.minecraft.item.Item; +import net.minecraft.item.ToolMaterial; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; + +import java.util.LinkedList; +import java.util.List; + +import static com.seacroak.basicweapons.registry.MainRegistry.bronze_mod_loaded; + +public class WeaponRegistry { + public static final float daggerDamage = 1f; + public static final float daggerSpeed = -1.6f; + public static final double daggerRange = 0; + public static final float hammerDamage = 7f; + public static final float hammerSpeed = -3.4f; + public static final double hammerRange = 0; + public static final float clubDamage = 5f; + public static final float clubSpeed = -3.0f; + public static final double clubRange = 0; + public static final float spearDamage = 2f; + public static final float spearSpeed = -2.8f; + public static final double spearRange = 2; + public static final float quarterstaffDamage = 1f; + public static final float quarterstaffSpeed = -2.3f; + public static final double quarterstaffRange = 1.25; + public static final float glaiveDamage = 5f; + public static final float glaiveSpeed = -3.2f; + public static final double glaiveRange = 1.25; + + /* When referencing items, use the static fields in this class, not the itemsWithInfo list */ + public static List itemsWithInfo = new LinkedList<>(); + public static final Item WOODEN_DAGGER = registerWeapon("wooden_dagger", ToolMaterial.WOOD, WEAPON_TYPE.DAGGER, daggerDamage, daggerSpeed, daggerRange, DaggerItem::new); + public static final Item STONE_DAGGER = registerWeapon("stone_dagger", ToolMaterial.STONE, WEAPON_TYPE.DAGGER, daggerDamage, daggerSpeed, daggerRange, DaggerItem::new); + public static final Item IRON_DAGGER = registerWeapon("iron_dagger", ToolMaterial.IRON, WEAPON_TYPE.DAGGER, daggerDamage, daggerSpeed, daggerRange, DaggerItem::new); + public static final Item GOLDEN_DAGGER = registerWeapon("golden_dagger", ToolMaterial.GOLD, WEAPON_TYPE.DAGGER, daggerDamage - 1, daggerSpeed + 1, daggerRange, DaggerItem::new); + public static final Item DIAMOND_DAGGER = registerWeapon("diamond_dagger", ToolMaterial.DIAMOND, WEAPON_TYPE.DAGGER, daggerDamage, daggerSpeed, daggerRange, DaggerItem::new); + public static final Item NETHERITE_DAGGER = registerWeapon("netherite_dagger", ToolMaterial.NETHERITE, WEAPON_TYPE.DAGGER, daggerDamage, daggerSpeed, daggerRange, DaggerItem::new); + public static final Item WOODEN_HAMMER = registerWeapon("wooden_hammer", ToolMaterial.WOOD, WEAPON_TYPE.HAMMER, hammerDamage - 6, hammerSpeed + 0.4f, hammerRange, HammerItem::new); + public static final Item STONE_HAMMER = registerWeapon("stone_hammer", ToolMaterial.STONE, WEAPON_TYPE.HAMMER, hammerDamage - 3, hammerSpeed + 0.2f, hammerRange, HammerItem::new); + public static final Item IRON_HAMMER = registerWeapon("iron_hammer", ToolMaterial.IRON, WEAPON_TYPE.HAMMER, hammerDamage, hammerSpeed, hammerRange, HammerItem::new); + public static final Item GOLDEN_HAMMER = registerWeapon("golden_hammer", ToolMaterial.GOLD, WEAPON_TYPE.HAMMER, hammerDamage - 6, hammerSpeed + 0.6f, hammerRange, HammerItem::new); + public static final Item DIAMOND_HAMMER = registerWeapon("diamond_hammer", ToolMaterial.DIAMOND, WEAPON_TYPE.HAMMER, hammerDamage - 1, hammerSpeed + 0.1f, hammerRange, HammerItem::new); + public static final Item NETHERITE_HAMMER = registerWeapon("netherite_hammer", ToolMaterial.NETHERITE, WEAPON_TYPE.HAMMER, hammerDamage - 1, hammerSpeed + 0.2f, hammerRange, HammerItem::new); + public static final Item WOODEN_CLUB = registerWeapon("wooden_club", ToolMaterial.WOOD, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new); + public static final Item STONE_CLUB = registerWeapon("stone_club", ToolMaterial.STONE, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new); + public static final Item IRON_CLUB = registerWeapon("iron_club", ToolMaterial.IRON, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new); + public static final Item GOLDEN_CLUB = registerWeapon("golden_club", ToolMaterial.GOLD, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new); + public static final Item DIAMOND_CLUB = registerWeapon("diamond_club", ToolMaterial.DIAMOND, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new); + public static final Item NETHERITE_CLUB = registerWeapon("netherite_club", ToolMaterial.NETHERITE, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new); + public static final Item WOODEN_SPEAR = registerWeapon("wooden_spear", ToolMaterial.WOOD, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new); + public static final Item STONE_SPEAR = registerWeapon("stone_spear", ToolMaterial.STONE, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new); + public static final Item IRON_SPEAR = registerWeapon("iron_spear", ToolMaterial.IRON, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new); + public static final Item GOLDEN_SPEAR = registerWeapon("golden_spear", ToolMaterial.GOLD, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new); + public static final Item DIAMOND_SPEAR = registerWeapon("diamond_spear", ToolMaterial.DIAMOND, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new); + public static final Item NETHERITE_SPEAR = registerWeapon("netherite_spear", ToolMaterial.NETHERITE, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new); + public static final Item WOODEN_QUARTERSTAFF = registerWeapon("wooden_quarterstaff", ToolMaterial.WOOD, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new); + public static final Item STONE_QUARTERSTAFF = registerWeapon("stone_quarterstaff", ToolMaterial.STONE, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new); + public static final Item IRON_QUARTERSTAFF = registerWeapon("iron_quarterstaff", ToolMaterial.IRON, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new); + public static final Item GOLDEN_QUARTERSTAFF = registerWeapon("golden_quarterstaff", ToolMaterial.GOLD, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new); + public static final Item DIAMOND_QUARTERSTAFF = registerWeapon("diamond_quarterstaff", ToolMaterial.DIAMOND, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new); + public static final Item NETHERITE_QUARTERSTAFF = registerWeapon("netherite_quarterstaff", ToolMaterial.NETHERITE, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new); + public static final Item WOODEN_GLAIVE = registerWeapon("wooden_glaive", ToolMaterial.WOOD, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new); + public static final Item STONE_GLAIVE = registerWeapon("stone_glaive", ToolMaterial.STONE, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new); + public static final Item IRON_GLAIVE = registerWeapon("iron_glaive", ToolMaterial.IRON, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new); + public static final Item GOLDEN_GLAIVE = registerWeapon("golden_glaive", ToolMaterial.GOLD, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new); + public static final Item DIAMOND_GLAIVE = registerWeapon("diamond_glaive", ToolMaterial.DIAMOND, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new); + public static final Item NETHERITE_GLAIVE = registerWeapon("netherite_glaive", ToolMaterial.NETHERITE, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new); + public static final Item BRONZE_DAGGER = bronze_mod_loaded ? registerWeapon("bronze_dagger", BWToolMaterials.BRONZE, WEAPON_TYPE.DAGGER, daggerDamage, daggerSpeed, daggerRange, DaggerItem::new) : null; + public static final Item BRONZE_HAMMER = bronze_mod_loaded ? registerWeapon("bronze_hammer", BWToolMaterials.BRONZE, WEAPON_TYPE.HAMMER, hammerDamage - 0.5f, hammerSpeed + 0.1f, hammerRange, HammerItem::new) : null; + public static final Item BRONZE_CLUB = bronze_mod_loaded ? registerWeapon("bronze_club", BWToolMaterials.BRONZE, WEAPON_TYPE.CLUB, clubDamage, clubSpeed, clubRange, ClubItem::new) : null; + public static final Item BRONZE_SPEAR = bronze_mod_loaded ? registerWeapon("bronze_spear", BWToolMaterials.BRONZE, WEAPON_TYPE.SPEAR, spearDamage, spearSpeed, spearRange, SpearItem::new) : null; + public static final Item BRONZE_QUARTERSTAFF = bronze_mod_loaded ? registerWeapon("bronze_quarterstaff", BWToolMaterials.BRONZE, WEAPON_TYPE.QUARTERSTAFF, quarterstaffDamage, quarterstaffSpeed, quarterstaffRange, QuarterstaffItem::new) : null; + public static final Item BRONZE_GLAIVE = bronze_mod_loaded ? registerWeapon("bronze_glaive", BWToolMaterials.BRONZE, WEAPON_TYPE.GLAIVE, glaiveDamage, glaiveSpeed, glaiveRange, GlaiveItem::new) : null; + + private static Item addItem(WEAPON_TYPE type, ToolMaterial material, String name, Item item) { + itemsWithInfo.add(new ItemInfo(type, material, name, item)); + return item; + } + + private static Item registerWeapon(String name, ToolMaterial material, WEAPON_TYPE type, float damage, float speed, double range, WeaponFactory factory) { + return addItem(type, material, name, Reggie.register(name, (settings) -> { + Item.Settings itemSettings = attachDefaultSettings(name, type, material, damage, speed, range); + if (material == ToolMaterial.NETHERITE) itemSettings = itemSettings.fireproof(); + return factory.create(material, damage, speed, range, itemSettings); + })); + } + + private static Item.Settings attachDefaultSettings(String name, WEAPON_TYPE weaponType, ToolMaterial material, float damage, float speed, double range) { + Item.Settings itemSettings = new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, ID.of(name))); + switch (weaponType) { + case DAGGER, HAMMER, CLUB, SPEAR -> + itemSettings = itemSettings.attributeModifiers(BasicWeaponSweeplessItem.createAttributeModifiers(material, damage, speed, range)); + case QUARTERSTAFF, GLAIVE -> + itemSettings = itemSettings.attributeModifiers(BasicWeaponItem.createAttributeModifiers(material, damage, speed, range)); + } + return itemSettings; + } + + public static void init() { + + } + + @FunctionalInterface + private interface WeaponFactory { + T create(ToolMaterial material, float damage, float speed, double range, Item.Settings settings); + } + + public static class ItemInfo { + public final WEAPON_TYPE weaponType; + public final ToolMaterial weaponMaterial; + public final String name; + public final Item item; + + public ItemInfo(WEAPON_TYPE weaponType, ToolMaterial weaponMaterial, String name, Item item) { + this.weaponType = weaponType; + this.weaponMaterial = weaponMaterial; + this.name = name; + this.item = item; + } + } +} diff --git a/src/main/java/com/seacroak/basicweapons/registry/Reggie.java b/src/main/java/com/seacroak/basicweapons/util/Reggie.java similarity index 95% rename from src/main/java/com/seacroak/basicweapons/registry/Reggie.java rename to src/main/java/com/seacroak/basicweapons/util/Reggie.java index 7e594c1..a5f8f47 100644 --- a/src/main/java/com/seacroak/basicweapons/registry/Reggie.java +++ b/src/main/java/com/seacroak/basicweapons/util/Reggie.java @@ -1,6 +1,5 @@ -package com.seacroak.basicweapons.registry; +package com.seacroak.basicweapons.util; -import com.seacroak.basicweapons.util.ID; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.Blocks;