Add SimplyCompatSwordItem and sword-specific registry for better weapon item management

This commit is contained in:
Chris Toph 2025-02-26 04:40:55 -05:00
parent e6a6314f6b
commit 5d3db95a19
3 changed files with 71 additions and 12 deletions

View file

@ -0,0 +1,38 @@
package cc.toph.simplycompat.item;
import cc.toph.simplycompat.registry.SimplyCompatRegistries;
import cc.toph.simplycompat.util.ToolMaterials;
import cc.toph.simplycompat.util.WeaponType;
import net.sweenus.simplyswords.item.SimplySwordsSwordItem;
/**
* Extended Class from Simply Swords to store sword type.
* Storing Sword type will let us avoid all the static mess in registries.
* This class stores all the data we need from the sword, so we can just
* retrieve the object from the registries thanks to {@link SimplyCompatRegistries#SWORD_ITEM} and do whatever we need.
*/
public class SimplyCompatSwordItem extends SimplySwordsSwordItem {
/**
* The type of the weapon.
*/
public final WeaponType TYPE;
/**
* Constructor for SimplyCompatSwordItem.
*
* @param toolMaterial The material of the tool, which some of its properties/stats.
* @param type The type of the weapon, which affects its modifiers.
* @param <E> The type of the enum that extends ToolMaterials.
*/
public <E extends Enum<E> & ToolMaterials<E>> SimplyCompatSwordItem(ToolMaterials<E> toolMaterial, WeaponType type) {
super(
toolMaterial,
(int) (toolMaterial.getDamageModifier() + type.getPositiveModifier() - type.getNegativeModifier()),
type.getAttackSpeed(),
toolMaterial.getRepairIngredient().toString()
);
this.TYPE = type;
}
}

View file

@ -1,31 +1,36 @@
package cc.toph.simplycompat.registry; package cc.toph.simplycompat.registry;
import cc.toph.simplycompat.SimplyCompat; import cc.toph.simplycompat.SimplyCompat;
import cc.toph.simplycompat.item.SimplyCompatSwordItem;
import cc.toph.simplycompat.item.SimplyCompatToolMaterials; import cc.toph.simplycompat.item.SimplyCompatToolMaterials;
import cc.toph.simplycompat.util.ToolMaterials; import cc.toph.simplycompat.util.ToolMaterials;
import cc.toph.simplycompat.util.WeaponType; import cc.toph.simplycompat.util.WeaponType;
import dev.architectury.registry.registries.DeferredRegister; import dev.architectury.registry.registries.DeferredRegister;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.item.Item;
import net.sweenus.simplyswords.item.SimplySwordsSwordItem;
public final class ItemsRegistry { public final class ItemsRegistry {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(
/**
* Special register for swords only.
*/
public static final DeferredRegister<SimplyCompatSwordItem> SWORDS = DeferredRegister.create(
SimplyCompat.MOD_ID, SimplyCompat.MOD_ID,
Registries.ITEM SimplyCompatRegistries.SWORD_ITEM
); );
/**
* Registers a sword item with the given material and weapon type.
*
* @param material The material of the tool, which some of its properties/stats.
* @param type The type of the weapon, which affects its modifiers.
* @param <E> The type of the enum that extends ToolMaterials.
*/
public static <E extends Enum<E> & ToolMaterials<E>> void registerSword( public static <E extends Enum<E> & ToolMaterials<E>> void registerSword(
ToolMaterials<E> material, ToolMaterials<E> material,
WeaponType type WeaponType type
) { ) {
float finalDamage = material.getDamageModifier() + type.getPositiveModifier() - type.getNegativeModifier();
String name = material.getName() + "_" + type.getWeaponNameSuffix(); String name = material.getName() + "_" + type.getWeaponNameSuffix();
SWORDS.register(name, () ->
ITEMS.register(name, () -> new SimplyCompatSwordItem(material, type));
new SimplySwordsSwordItem(material, (int) finalDamage, type.getAttackSpeed(), material.getIdentifier())
);
} }
/** /**
@ -46,6 +51,6 @@ public final class ItemsRegistry {
} }
CompatRegistry.registerAll(); CompatRegistry.registerAll();
ITEMS.register(); SWORDS.register();
} }
} }

View file

@ -0,0 +1,16 @@
package cc.toph.simplycompat.registry;
import cc.toph.simplycompat.SimplyCompat;
import cc.toph.simplycompat.item.SimplyCompatSwordItem;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
public class SimplyCompatRegistries extends Registries {
// Defines a Key for Sword Items, enabling the usage of Sword Specific Registries
// In essence allows the usage of the SimplyCompatSwordItem so we can access modded sword data
public static final ResourceKey<Registry<SimplyCompatSwordItem>> SWORD_ITEM = ResourceKey.createRegistryKey(new ResourceLocation(SimplyCompat.MOD_ID, "sword_item"));
}