slightly broken but very refactored. TODO: make the code that should run on the clientside run on the clientside
build / build (push) Has been cancelled
build / build (push) Has been cancelled
This commit is contained in:
@@ -1,78 +1,56 @@
|
||||
package dev.zxq5.items
|
||||
|
||||
import dev.zxq5.Fantasysmp
|
||||
import dev.zxq5.items.ModItems.register
|
||||
import net.minecraft.core.component.DataComponents
|
||||
import net.minecraft.resources.Identifier
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.tags.ItemTags
|
||||
import net.minecraft.util.Unit
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.InteractionResult
|
||||
import net.minecraft.world.effect.MobEffectInstance
|
||||
import net.minecraft.world.effect.MobEffects
|
||||
import net.minecraft.world.entity.EntityType
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.entity.projectile.hurtingprojectile.WitherSkull
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.ToolMaterial
|
||||
import net.minecraft.world.item.component.BlocksAttacks
|
||||
import net.minecraft.world.item.component.UseCooldown
|
||||
import net.minecraft.world.item.equipment.*
|
||||
import net.minecraft.world.item.equipment.ArmorMaterial
|
||||
import net.minecraft.world.item.equipment.ArmorType
|
||||
import net.minecraft.world.level.Level
|
||||
import java.util.Optional
|
||||
import java.util.*
|
||||
|
||||
|
||||
object Witherite {
|
||||
val base_durability = 40;
|
||||
val witherite_material_key: ResourceKey<EquipmentAsset> = ResourceKey.create<EquipmentAsset>(
|
||||
EquipmentAssets.ROOT_ID,
|
||||
Identifier.fromNamespaceAndPath(Fantasysmp.MOD_ID, "witherite")
|
||||
)
|
||||
|
||||
val armorMaterial = ArmorMaterial(
|
||||
base_durability,
|
||||
mapOf(
|
||||
ArmorType.HELMET to 3,
|
||||
ArmorType.CHESTPLATE to 8,
|
||||
ArmorType.LEGGINGS to 6,
|
||||
ArmorType.BOOTS to 3,
|
||||
ArmorType.BODY to 19,
|
||||
),
|
||||
5,
|
||||
SoundEvents.ARMOR_EQUIP_NETHERITE,
|
||||
3.0f,
|
||||
0.1f,
|
||||
ItemTags.REPAIRS_NETHERITE_ARMOR,
|
||||
witherite_material_key,
|
||||
)
|
||||
|
||||
object Witherite: GenericGearSet() {
|
||||
val SHIELD = register("witherite_shield", ::Item,
|
||||
Item.Properties().component(DataComponents.BLOCKS_ATTACKS, BlocksAttacks(
|
||||
0.25f, // 5 tick warmup
|
||||
1.0f, // standard disable cooldown
|
||||
listOf(
|
||||
BlocksAttacks.DamageReduction(
|
||||
90.0f, // horizontalBlockingAngle — 90° arc each side (180° total, same as vanilla)
|
||||
Optional.empty(), // type — empty = blocks all damage types
|
||||
0.0f, // base — flat damage reduction
|
||||
1.0f // factor — multiplier (1.0 = block 100% of damage)
|
||||
)
|
||||
), // full block — check if this constant exists, else build the list manually
|
||||
BlocksAttacks.ItemDamageFunction.DEFAULT, // check for this constant too
|
||||
Optional.empty(), // no bypass
|
||||
Optional.empty(), // default block sound
|
||||
Optional.empty() // default disable sound
|
||||
))
|
||||
Item.Properties()
|
||||
.component(DataComponents.BLOCKS_ATTACKS, BlocksAttacks(
|
||||
0.25f, // 5 tick warmup
|
||||
1.0f, // standard disable cooldown
|
||||
listOf(
|
||||
BlocksAttacks.DamageReduction(
|
||||
90.0f, // horizontalBlockingAngle — 90° arc each side (180° total, same as vanilla)
|
||||
Optional.empty(), // type — empty = blocks all damage types
|
||||
0.0f, // base — flat damage reduction
|
||||
1.0f // factor — multiplier (1.0 = block 100% of damage)
|
||||
)
|
||||
), // full block — check if this constant exists, else build the list manually
|
||||
BlocksAttacks.ItemDamageFunction.DEFAULT, // check for this constant too
|
||||
Optional.empty(), // no bypass
|
||||
Optional.empty(), // default block sound
|
||||
Optional.empty() // default disable sound
|
||||
))
|
||||
)
|
||||
|
||||
val SWORD = register("witherite_sword", ::WitheriteSword,
|
||||
Item.Properties()
|
||||
.enchantable(armorMaterial.enchantmentValue)
|
||||
.component(DataComponents.USE_COOLDOWN, UseCooldown(0.0f))
|
||||
.component(DataComponents.USE_COOLDOWN, UseCooldown(2f))
|
||||
.sword(ToolMaterial.NETHERITE, 3F, -2.4F)
|
||||
)
|
||||
|
||||
val AXE = register("witherite_axe", ::Item,
|
||||
val AXE = register("witherite_axe", ::WitheriteWeapon,
|
||||
Item.Properties()
|
||||
.enchantable(armorMaterial.enchantmentValue)
|
||||
.axe(ToolMaterial.NETHERITE, 5F, -3F))
|
||||
@@ -114,21 +92,33 @@ object Witherite {
|
||||
.durability(ArmorType.BOOTS.getDurability(armorMaterial.durability))
|
||||
)
|
||||
|
||||
val ITEMS = listOf(SWORD, AXE, SHIELD, HELMET, CHESTPLATE, LEGGINGS, BOOTS)
|
||||
val ARMOUR_SET = ArmorSet(HELMET, CHESTPLATE, LEGGINGS, BOOTS)
|
||||
override val materialName = "witherite"
|
||||
override val materialDefinition = super.materialDefinition.copy(assetId = materialKey)
|
||||
override val armorSet: ArmorSet = ArmorSet(HELMET, CHESTPLATE, LEGGINGS, BOOTS)
|
||||
override val items = listOf(SWORD, AXE, SHIELD, HELMET, CHESTPLATE, LEGGINGS, BOOTS)
|
||||
|
||||
fun init() {}
|
||||
override fun onLoad() {
|
||||
TODO("Not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
class WitheriteSword(properties: Properties) : Item(properties) {
|
||||
override fun use(level: Level, user: Player, hand: InteractionHand): InteractionResult {
|
||||
if (level.isClientSide) {
|
||||
return InteractionResult.PASS;
|
||||
}
|
||||
if (!user.isCrouching) return InteractionResult.PASS
|
||||
open class WitheriteWeapon(properties: Properties): Item(properties) {
|
||||
override fun hurtEnemy(itemStack: ItemStack, mob: LivingEntity, attacker: LivingEntity) {
|
||||
super.hurtEnemy(itemStack, mob, attacker)
|
||||
|
||||
val stack = user.getItemInHand(hand)
|
||||
if (user.cooldowns.isOnCooldown(stack)) return InteractionResult.PASS
|
||||
if (attacker.level().isClientSide) return
|
||||
|
||||
val amplifier = if (attacker is Player) { 0 } else { 2 }
|
||||
mob.addEffect(MobEffectInstance(MobEffects.WITHER, 60, amplifier), attacker)
|
||||
}
|
||||
}
|
||||
|
||||
class WitheriteSword(properties: Properties) : WitheriteWeapon(properties) {
|
||||
override fun use(level: Level, user: Player, hand: InteractionHand): InteractionResult {
|
||||
if (level.isClientSide
|
||||
|| !user.isCrouching
|
||||
|| !Witherite.fullSetEquippedBy(user)
|
||||
) return InteractionResult.PASS;
|
||||
|
||||
val skull = WitherSkull(EntityType.WITHER_SKULL, level)
|
||||
skull.setPos(user.eyePosition)
|
||||
@@ -136,8 +126,6 @@ class WitheriteSword(properties: Properties) : Item(properties) {
|
||||
level.addFreshEntity(skull)
|
||||
skull.playSound(SoundEvents.WITHER_SHOOT)
|
||||
|
||||
user.cooldowns.addCooldown(stack, 25)
|
||||
|
||||
return InteractionResult.SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user