Skip to content

Commit 373fe9d

Browse files
committed
3x3 5x5 ichor mining ability impl
1 parent 58560da commit 373fe9d

File tree

9 files changed

+68
-10
lines changed

9 files changed

+68
-10
lines changed

Diff for: src/main/java/dev/sterner/mixin/ServerPlayerGameModeMixin.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package dev.sterner.mixin;
22

3+
import dev.sterner.api.VoidBoundApi;
34
import dev.sterner.api.item.HammerLikeItem;
5+
import dev.sterner.api.item.ItemAbility;
46
import net.minecraft.core.BlockPos;
57
import net.minecraft.server.level.ServerLevel;
68
import net.minecraft.server.level.ServerPlayer;
@@ -33,8 +35,12 @@ public class ServerPlayerGameModeMixin {
3335
public void voidbound$beforeDestroyBlock(BlockPos blockPos, CallbackInfoReturnable<Boolean> cir) {
3436
ItemStack itemStack = this.player.getMainHandItem();
3537
if (itemStack.getItem() instanceof HammerLikeItem hammerLikeItem) {
36-
BlockState blockState = this.level.getBlockState(blockPos);
37-
hammerLikeItem.executeHammerAction(this.level, blockPos, blockState, itemStack, this.player);
38+
var three = VoidBoundApi.INSTANCE.getActiveAbility(itemStack) == ItemAbility.MINING_3X3;
39+
var five = VoidBoundApi.INSTANCE.getActiveAbility(itemStack) == ItemAbility.MINING_5X5;
40+
if (three || five || !hammerLikeItem.isIchor()) {
41+
BlockState blockState = this.level.getBlockState(blockPos);
42+
hammerLikeItem.executeHammerAction(this.level, blockPos, blockState, itemStack, this.player, five);
43+
}
3844
}
3945
}
4046
}

Diff for: src/main/kotlin/dev/sterner/api/item/HammerLikeItem.kt

+11-5
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ import net.minecraft.world.level.block.Block
1616
import net.minecraft.world.level.block.state.BlockState
1717
import net.minecraft.world.level.levelgen.structure.BoundingBox
1818
import net.minecraft.world.phys.BlockHitResult
19-
import java.util.function.Consumer
2019

2120
/**
2221
* Implement to add a classic hammer behaviour to an item, this means an item which should break multiple blocks on one break
2322
*/
2423
interface HammerLikeItem {
2524

25+
fun isIchor(): Boolean
2626
fun getRadius(): Int
2727
fun getDepth(): Int
2828
fun getHammerTier(): Tier
@@ -36,7 +36,8 @@ interface HammerLikeItem {
3636
blockPos: BlockPos,
3737
blockState: BlockState,
3838
itemStack: ItemStack,
39-
player: ServerPlayer
39+
player: ServerPlayer,
40+
five: Boolean
4041
) {
4142
// Only proceed if not on the client side and the block can be broken
4243
if (level.isClientSide || blockState.getDestroySpeed(level, blockPos) == 0.0f) return
@@ -48,13 +49,17 @@ interface HammerLikeItem {
4849
val hitResult = player.pick(20.0, 0.0f, false) as? BlockHitResult ?: return
4950

5051
// Perform the AOE block break
51-
breakNearbyBlocks(hitResult, blockPos, itemStack, level, player)
52+
breakNearbyBlocks(hitResult, blockPos, itemStack, level, player, five)
5253
}
5354

5455
/**
5556
* Determines if the hammer can break the block based on its tier.
5657
*/
5758
fun isToolEffective(state: BlockState): Boolean {
59+
if (isIchor()) {
60+
return true
61+
}
62+
5863
val tierLevel = getHammerTier().level
5964
return when {
6065
tierLevel < 3 && state.`is`(BlockTags.NEEDS_DIAMOND_TOOL) -> false
@@ -79,12 +84,13 @@ interface HammerLikeItem {
7984
blockPos: BlockPos,
8085
hammerStack: ItemStack,
8186
level: Level,
82-
entity: LivingEntity
87+
entity: LivingEntity,
88+
five: Boolean
8389
) {
8490
if (entity !is ServerPlayer) return
8591

8692
val direction = hitResult.direction
87-
val areaOfEffect = calculateAoeBoundingBox(blockPos, direction, getRadius(), getDepth())
93+
val areaOfEffect = calculateAoeBoundingBox(blockPos, direction, if (five) 5 else getRadius(), getDepth())
8894

8995
if (!entity.isCreative && hammerStack.damageValue >= hammerStack.maxDamage - 1) return
9096

Diff for: src/main/kotlin/dev/sterner/common/item/tool/CragbreakerItem.kt

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ open class CragbreakerItem(
3535
return super.getDestroySpeed(stack, state) + getExtraMiningSpeed(stack)
3636
}
3737

38+
override fun isIchor(): Boolean {
39+
return false
40+
}
41+
3842
override fun getRadius(): Int {
3943
return 3
4044
}

Diff for: src/main/kotlin/dev/sterner/common/item/tool/EarthsplitterItem.kt

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ open class EarthsplitterItem(
3232
return super.getDestroySpeed(stack, state) + getExtraMiningSpeed(stack)
3333
}
3434

35+
override fun isIchor(): Boolean {
36+
return false
37+
}
38+
3539
override fun getRadius(): Int {
3640
return 3
3741
}

Diff for: src/main/kotlin/dev/sterner/common/item/tool/ichor/IchoriumTerraformer.kt

+38-1
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,31 @@ package dev.sterner.common.item.tool.ichor
22

33
import com.google.common.collect.ImmutableMultimap
44
import com.google.common.collect.Multimap
5+
import dev.sterner.api.VoidBoundApi
6+
import dev.sterner.api.item.HammerLikeItem
7+
import dev.sterner.api.item.ItemAbility
8+
import dev.sterner.registry.VoidBoundComponentRegistry
9+
import dev.sterner.registry.VoidBoundTiers
10+
import net.minecraft.tags.BlockTags
11+
import net.minecraft.tags.TagKey
12+
import net.minecraft.world.InteractionHand
13+
import net.minecraft.world.InteractionResultHolder
514
import net.minecraft.world.entity.EquipmentSlot
615
import net.minecraft.world.entity.ai.attributes.Attribute
716
import net.minecraft.world.entity.ai.attributes.AttributeModifier
17+
import net.minecraft.world.entity.player.Player
818
import net.minecraft.world.item.AxeItem
919
import net.minecraft.world.item.ItemStack
1020
import net.minecraft.world.item.Tier
21+
import net.minecraft.world.level.Level
22+
import net.minecraft.world.level.block.Block
1123
import net.minecraft.world.level.block.state.BlockState
1224
import team.lodestar.lodestone.registry.common.LodestoneAttributeRegistry
1325

1426
class IchoriumTerraformer(tier: Tier, attackDamageModifier: Float, attackSpeedModifier: Float,
1527
properties: Properties
1628
) : AxeItem(tier, attackDamageModifier, attackSpeedModifier, properties
17-
) {
29+
), HammerLikeItem {
1830

1931
override fun getDestroySpeed(stack: ItemStack, state: BlockState): Float {
2032
return this.speed
@@ -24,6 +36,11 @@ class IchoriumTerraformer(tier: Tier, attackDamageModifier: Float, attackSpeedMo
2436
return true
2537
}
2638

39+
override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder<ItemStack> {
40+
println(VoidBoundApi.getActiveAbility(player.mainHandItem))
41+
return super.use(level, player, usedHand)
42+
}
43+
2744
override fun getDefaultAttributeModifiers(equipmentSlot: EquipmentSlot): Multimap<Attribute, AttributeModifier> {
2845

2946
val attributeBuilder = ImmutableMultimap.Builder<Attribute, AttributeModifier>()
@@ -44,4 +61,24 @@ class IchoriumTerraformer(tier: Tier, attackDamageModifier: Float, attackSpeedMo
4461
equipmentSlot
4562
)
4663
}
64+
65+
override fun isIchor(): Boolean {
66+
return true
67+
}
68+
69+
override fun getRadius(): Int {
70+
return 3
71+
}
72+
73+
override fun getDepth(): Int {
74+
return 2
75+
}
76+
77+
override fun getHammerTier(): Tier {
78+
return VoidBoundTiers.ICHORIUM
79+
}
80+
81+
override fun getBlockTags(): TagKey<Block> {
82+
return BlockTags.MINEABLE_WITH_PICKAXE //Doesnt matter
83+
}
4784
}

Diff for: src/main/kotlin/dev/sterner/networking/AbilityUpdatePacket.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ class AbilityUpdatePacket(val uuid: UUID, val itemAbility: ItemAbility) : Lodest
2020

2121
constructor(buf: FriendlyByteBuf) : this(buf.readUUID(), ItemAbility.valueOf(buf.readUtf()))
2222

23-
2423
override fun executeServer(
2524
server: MinecraftServer?,
2625
player: ServerPlayer?,
@@ -31,7 +30,7 @@ class AbilityUpdatePacket(val uuid: UUID, val itemAbility: ItemAbility) : Lodest
3130
server?.execute {
3231
if (player?.uuid == uuid) {
3332
val item = player.mainHandItem
34-
VoidBoundApi.addItemAbility(item, itemAbility, true)
33+
VoidBoundApi.setActiveAbility(item, itemAbility)
3534
}
3635
}
3736
}

Diff for: src/main/resources/assets/voidbound/lang/en_us.json

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@
6161
"voidbound.ability.autosmelt": "Autosmelt",
6262
"voidbound.ability.quickdraw": "Quickdraw",
6363
"voidbound.ability.slow_fall": "Slow fall",
64+
"voidbound.ability.mining_3x3": "3x3 Mining",
65+
"voidbound.ability.mining_5x5": "5x5 Mining",
6466

6567
"entity.voidbound.particle_entity": "Particle",
6668
"entity.voidbound.soul_steel_golem": "Soul Steel Golem",
624 Bytes
Loading
601 Bytes
Loading

0 commit comments

Comments
 (0)