Skip to content

Commit b526141

Browse files
committed
feat: add option to block without a shield
1 parent e8d42e5 commit b526141

5 files changed

Lines changed: 16 additions & 4 deletions

File tree

src/main/java/eu/midnightdust/swordblocking/SwordBlockingClient.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ public static boolean canEntityBlock(ItemStack mainHandStack, ItemStack offHandS
3131

3232
// TODO/NOTE: I know this can be condensed more but i'm tired so will recheck later
3333
public static boolean canShieldSwordBlock(ItemStack mainHandStack, ItemStack offHandStack) {
34-
if (SwordBlockingConfig.enabled && (offHandStack.getItem() instanceof ShieldItem || mainHandStack.getItem() instanceof ShieldItem)) {
34+
if (!SwordBlockingConfig.enabled) return false;
35+
boolean hasShield = offHandStack.getItem() instanceof ShieldItem || mainHandStack.getItem() instanceof ShieldItem;
36+
if (!SwordBlockingConfig.requireShield) {
37+
return mainHandStack.getItem().components().has(DataComponents.DAMAGE) || offHandStack.getItem().components().has(DataComponents.DAMAGE);
38+
} else if (hasShield) {
3539
final Item weaponItem = offHandStack.getItem() instanceof ShieldItem ? mainHandStack.getItem() : offHandStack.getItem();
3640
return weaponItem.components().has(DataComponents.DAMAGE);
3741
} else {

src/main/java/eu/midnightdust/swordblocking/config/SwordBlockingConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,7 @@ public class SwordBlockingConfig extends MidnightConfig {
2323

2424
@Entry
2525
public static boolean blockHitAnimation = false;
26+
27+
@Entry
28+
public static boolean requireShield = true;
2629
}

src/main/java/eu/midnightdust/swordblocking/mixins/MixinHumanoidModel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import eu.midnightdust.swordblocking.ducks.ArmedItemStackData;
66
import net.minecraft.client.model.HumanoidModel;
77
import net.minecraft.client.renderer.entity.state.HumanoidRenderState;
8+
import net.minecraft.core.component.DataComponents;
89
import net.minecraft.world.entity.HumanoidArm;
910
import net.minecraft.world.item.ItemStack;
1011
import net.minecraft.world.item.ShieldItem;
@@ -29,7 +30,7 @@ public abstract class MixinHumanoidModel {
2930
final ItemStack offHandStack = armedItemStackData.swordblocking$getOffHandItem();
3031
final ItemStack mainHandStack = armedItemStackData.swordblocking$getMainHandItem();
3132
if (renderState.isUsingItem && SwordBlockingClient.canEntityBlock(mainHandStack, offHandStack)) {
32-
if (offHandStack.getItem() instanceof ShieldItem) {
33+
if (mainHandStack.getItem().components().has(DataComponents.DAMAGE)) {
3334
this.poseRightArm(renderState, HumanoidModel.ArmPose.BLOCK);
3435
} else {
3536
this.poseLeftArm(renderState, HumanoidModel.ArmPose.BLOCK);

src/main/resources/assets/swordblocking/lang/en_us.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77
"swordblocking.midnightconfig.hideOffhandSlot.tooltip": "Hides the offhand slot when a shield is in the offhand.",
88
"swordblocking.midnightconfig.disableUseEquipAnimation": "Remove the equip animation when blocking.",
99
"swordblocking.midnightconfig.lockBlockingArmPosition": "Disable arm moving when blocking.",
10-
"swordblocking.midnightconfig.blockHitAnimation": "Enable block hitting animation."
10+
"swordblocking.midnightconfig.blockHitAnimation": "Enable block hitting animation.",
11+
"swordblocking.midnightconfig.requireShield": "Require Shield",
12+
"swordblocking.midnightconfig.requireShield.tooltip": "Require a shield in the offhand or mainhand slot to block."
1113
}

src/main/resources/assets/swordblocking/lang/ru_ru.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77
"swordblocking.midnightconfig.hideOffhandSlot.tooltip": "Скрывает слот второй руки, если в ней находится щит.",
88
"swordblocking.midnightconfig.disableUseEquipAnimation": "Удалять анимацию оснащения при блокировании.",
99
"swordblocking.midnightconfig.lockBlockingArmPosition": "Отключить движение руки при блокировании.",
10-
"swordblocking.midnightconfig.blockHitAnimation": "Включить анимацию удара по блоку."
10+
"swordblocking.midnightconfig.blockHitAnimation": "Включить анимацию удара по блоку.",
11+
"swordblocking.midnightconfig.requireShield": "",
12+
"swordblocking.midnightconfig.requireShield.tooltip": ""
1113
}

0 commit comments

Comments
 (0)