aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/CropSpeedMeter.kt9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt6
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt18
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt16
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenBestCropTime.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneDisplay.kt65
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt15
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt4
10 files changed, 74 insertions, 74 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/CropSpeedMeter.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/CropSpeedMeter.kt
index 98c595a63..9db52fe7c 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/CropSpeedMeter.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/CropSpeedMeter.kt
@@ -5,6 +5,8 @@ import at.hannibal2.skyhanni.data.GardenCropMilestones.Companion.getCounter
import at.hannibal2.skyhanni.events.BlockClickEvent
import at.hannibal2.skyhanni.events.CropMilestoneUpdateEvent
import at.hannibal2.skyhanni.events.GuiRenderEvent
+import at.hannibal2.skyhanni.features.garden.CropType.Companion.getCropType
+import at.hannibal2.skyhanni.utils.BlockUtils.isBabyCrop
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.round
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
@@ -22,9 +24,14 @@ class CropSpeedMeter {
@SubscribeEvent
fun onBlockBreak(event: BlockClickEvent) {
if (!isEnabled()) return
- val cropBroken = CropType.getByBlock(event.getBlockState) ?: return
if (startCrops.isEmpty()) return
+ val blockState = event.getBlockState
+ val cropBroken = blockState.getCropType() ?: return
+ if (cropBroken.multiplier == 1) {
+ if (blockState.isBabyCrop()) return
+ }
+
if (currentCrop != cropBroken) {
currentCrop = cropBroken
currentBlocks = 0
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt
index 11deea8d4..e5fe7a056 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/CropType.kt
@@ -21,6 +21,8 @@ enum class CropType(val cropName: String, val toolName: String, val baseDrops: D
val icon by lazy { iconSupplier() }
+ val multiplier by lazy { if (this == SUGAR_CANE || this == CACTUS) 2 else 1 }
+
companion object {
fun getByName(cropName: String) = values().firstOrNull { it.cropName == cropName }
@@ -35,8 +37,8 @@ enum class CropType(val cropName: String, val toolName: String, val baseDrops: D
return getByName(itemName)
}
- fun getByBlock(blockState: IBlockState): CropType? {
- return when (blockState.block) {
+ fun IBlockState.getCropType(): CropType? {
+ return when (block) {
Blocks.wheat -> WHEAT
Blocks.carrots -> CARROT
Blocks.potatoes -> POTATO
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
index c7351b763..a838eecc5 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/FarmingFortuneDisplay.kt
@@ -5,13 +5,16 @@ import at.hannibal2.skyhanni.data.GardenCropMilestones
import at.hannibal2.skyhanni.data.GardenCropMilestones.Companion.getCounter
import at.hannibal2.skyhanni.data.GardenCropUpgrades.Companion.getUpgradeLevel
import at.hannibal2.skyhanni.events.*
+import at.hannibal2.skyhanni.features.garden.CropType.Companion.getCropType
import at.hannibal2.skyhanni.features.garden.CropType.Companion.getTurboCrop
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.addCropIcon
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.getCropType
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RenderUtils.renderSingleLineWithItems
-import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getCounter
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments
+import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHoeCounter
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@@ -45,14 +48,14 @@ class FarmingFortuneDisplay {
@SubscribeEvent(priority = EventPriority.LOW)
fun onInventoryUpdate(event: OwnInventorItemUpdateEvent) {
if (!GardenAPI.inGarden()) return
- if (GardenAPI.getCropTypeFromItem(event.itemStack) == null) return
+ if (event.itemStack.getCropType() == null) return
updateToolFortune(event.itemStack)
}
@SubscribeEvent
fun onBlockBreak(event: BlockClickEvent) {
if (!GardenAPI.inGarden()) return
- val cropBroken = CropType.getByBlock(event.getBlockState) ?: return
+ val cropBroken = event.getBlockState.getCropType() ?: return
if (cropBroken != currentCrop) {
currentCrop = cropBroken
updateToolFortune(event.itemInHand)
@@ -78,7 +81,7 @@ class FarmingFortuneDisplay {
if (event.phase != TickEvent.Phase.START || ticks++ % 5 != 0) return
val displayCrop = currentCrop ?: return
val updatedDisplay = mutableListOf<Any>()
- GardenAPI.addGardenCropToList(displayCrop, updatedDisplay)
+ updatedDisplay.addCropIcon(displayCrop)
val recentlySwitchedTool = System.currentTimeMillis() < lastToolSwitch + 1000
val displayString = upgradeFortune?.let {
"§6Farming Fortune§7: §e" + if (!recentlySwitchedTool) {
@@ -91,11 +94,12 @@ class FarmingFortuneDisplay {
}
private fun updateToolFortune(tool: ItemStack?) {
- val cropMatchesTool = currentCrop == GardenAPI.getCropTypeFromItem(tool)
+ val cropMatchesTool = currentCrop == tool?.getCropType()
val toolCounterFortune = if (cropMatchesTool) {
getToolFortune(tool) + getCounterFortune(tool) + getCollectionFortune(tool)
} else 0.0
- toolFortune = toolCounterFortune + getTurboCropFortune(tool, currentCrop) + getDedicationFortune(tool, currentCrop)
+ toolFortune =
+ toolCounterFortune + getTurboCropFortune(tool, currentCrop) + getDedicationFortune(tool, currentCrop)
}
private fun isEnabled(): Boolean = GardenAPI.inGarden() && config.farmingFortuneDisplay
@@ -131,7 +135,7 @@ class FarmingFortuneDisplay {
}
fun getCounterFortune(tool: ItemStack?): Double {
- val counter = tool?.getCounter() ?: return 0.0
+ val counter = tool?.getHoeCounter() ?: return 0.0
val digits = floor(log10(counter.toDouble()))
return (16 * digits - 48).takeIf { it > 0.0 } ?: 0.0
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt
index c7df35877..8a882226d 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt
@@ -6,8 +6,8 @@ import at.hannibal2.skyhanni.data.ScoreboardData
import at.hannibal2.skyhanni.events.*
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getCounter
-import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getCultivatingCount
+import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getCultivatingCounter
+import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getHoeCounter
import net.minecraft.client.Minecraft
import net.minecraft.item.ItemStack
import net.minecraft.network.play.client.C09PacketHeldItemChange
@@ -54,7 +54,7 @@ class GardenAPI {
private fun checkItemInHand() {
val toolItem = Minecraft.getMinecraft().thePlayer.heldItem
- val crop = getCropTypeFromItem(toolItem)
+ val crop = toolItem.getCropType()
val newTool = getToolInHand(toolItem, crop)
if (toolInHand != newTool) {
toolInHand = newTool
@@ -102,12 +102,12 @@ class GardenAPI {
fun inGarden() = LorenzUtils.inSkyBlock && LorenzUtils.skyBlockIsland == IslandType.GARDEN
- fun getCropTypeFromItem(item: ItemStack?): CropType? {
- val internalName = item?.getInternalName() ?: return null
+ fun ItemStack.getCropType(): CropType? {
+ val internalName = getInternalName()
return CropType.values().firstOrNull { internalName.startsWith(it.toolName) }
}
- fun readCounter(itemStack: ItemStack): Int = itemStack.getCounter() ?: itemStack.getCultivatingCount() ?: -1
+ fun readCounter(itemStack: ItemStack): Int = itemStack.getHoeCounter() ?: itemStack.getCultivatingCounter() ?: -1
fun CropType.getSpeed(): Int {
val speed = cropsPerSecond[this]
@@ -124,9 +124,9 @@ class GardenAPI {
cropsPerSecond[this] = speed
}
- fun addGardenCropToList(crop: CropType, list: MutableList<Any>) {
+ fun MutableList<Any>.addCropIcon(crop: CropType) {
try {
- list.add(crop.icon)
+ add(crop.icon)
} catch (e: NullPointerException) {
e.printStackTrace()
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenBestCropTime.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenBestCropTime.kt
index 87666a1ed..db8cb6e07 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenBestCropTime.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenBestCropTime.kt
@@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.garden
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.GardenCropMilestones
import at.hannibal2.skyhanni.data.GardenCropMilestones.Companion.getCounter
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.addCropIcon
import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.getSpeed
import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList
import at.hannibal2.skyhanni.utils.LorenzUtils.sorted
@@ -61,13 +62,13 @@ class GardenBestCropTime {
val list = mutableListOf<Any>()
list.add("§7$number# ")
- GardenAPI.addGardenCropToList(crop, list)
+ list.addCropIcon(crop)
val color = if (isCurrent) "§e" else "§7"
val contestFormat = if (GardenNextJacobContest.isNextCrop(crop)) "§n" else ""
val nextTier = GardenCropMilestones.getTierForCrops(crop.getCounter()) + 1
- val cropName = if (!config.cropMilestoneBestCompact) crop.cropName +" " else ""
+ val cropName = if (!config.cropMilestoneBestCompact) crop.cropName + " " else ""
val cropNameDisplay = "$color$contestFormat$cropName$nextTier§r"
list.add("$cropNameDisplay §b$duration")
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneDisplay.kt
index ca118f665..18b408666 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCropMilestoneDisplay.kt
@@ -7,17 +7,18 @@ import at.hannibal2.skyhanni.data.GardenCropMilestones.Companion.getCounter
import at.hannibal2.skyhanni.data.GardenCropMilestones.Companion.setCounter
import at.hannibal2.skyhanni.data.SendTitleHelper
import at.hannibal2.skyhanni.events.*
+import at.hannibal2.skyhanni.features.garden.CropType.Companion.getCropType
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.addCropIcon
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.getCropType
import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.setSpeed
+import at.hannibal2.skyhanni.utils.BlockUtils.isBabyCrop
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList
import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems
import at.hannibal2.skyhanni.utils.SoundUtils.playSound
import at.hannibal2.skyhanni.utils.TimeUtils
-import net.minecraft.block.properties.PropertyInteger
-import net.minecraft.block.state.IBlockState
import net.minecraft.client.audio.ISound
import net.minecraft.client.audio.PositionedSound
-import net.minecraft.init.Blocks
import net.minecraft.item.ItemStack
import net.minecraft.util.ResourceLocation
import net.minecraftforge.fml.common.eventhandler.EventPriority
@@ -123,7 +124,7 @@ class GardenCropMilestoneDisplay {
val item = event.itemStack
val counter = GardenAPI.readCounter(item)
if (counter == -1) return
- val crop = GardenAPI.getCropTypeFromItem(item) ?: return
+ val crop = item.getCropType() ?: return
if (cultivatingData.containsKey(crop)) {
val old = cultivatingData[crop]!!
val addedCounter = counter - old
@@ -156,45 +157,16 @@ class GardenCropMilestoneDisplay {
@SubscribeEvent
fun onBlockClick(event: BlockClickEvent) {
if (!isEnabled()) return
+ if (event.clickType != ClickType.LEFT_CLICK) return
- if (event.clickType == ClickType.LEFT_CLICK) {
- val blockState = event.getBlockState
-
- val blocks = isFarmBlock(blockState)
- if (blocks == 0) return
- if (blocks == 1) {
- for (property in blockState.block.blockState.properties) {
- val name = property.name
- if (name == "age") {
- if (property is PropertyInteger) {
- val value = blockState.getValue(property)!!
- if (value == 0) return
- }
- }
- }
- }
- blocksBroken += blocks
- }
- }
+ val blockState = event.getBlockState
- private fun isFarmBlock(blockState: IBlockState): Int {
- val block = blockState.block
- if (block == Blocks.carrots) return 1
- if (block == Blocks.potatoes) return 1
- if (block == Blocks.wheat) return 1
- if (block == Blocks.cocoa) return 1 // Cocoa Beans
- if (block == Blocks.red_mushroom) return 1
- if (block == Blocks.brown_mushroom) return 1
- if (block == Blocks.cactus) return 2
- if (block == Blocks.reeds) return 2 // Sugar Cane
- if (block == Blocks.nether_wart) return 1
- if (block == Blocks.melon_block) return 1
- if (block == Blocks.pumpkin) return 1
-
- if (block == Blocks.dirt) return 0
- if (block == Blocks.farmland) return 0
-
- return 0
+ val cropType = blockState.getCropType() ?: return
+ val multiplier = cropType.multiplier
+ if (multiplier == 1) {
+ if (blockState.isBabyCrop()) return
+ }
+ blocksBroken += multiplier
}
private var currentSpeed = 0
@@ -282,7 +254,7 @@ class GardenCropMilestoneDisplay {
val nextTier = currentTier + 1
val list = mutableListOf<Any>()
- GardenAPI.addGardenCropToList(crop, list)
+ list.addCropIcon(crop)
list.add("§7" + crop.cropName + " Tier $nextTier")
lineMap[1] = list
@@ -375,11 +347,8 @@ class GardenCropMilestoneDisplay {
val missing = need - have
// We assume perfect 20 blocks per seconds
- val blocksPerSecond = when (currentCrop) {
- CropType.CACTUS, CropType.SUGAR_CANE -> 40
+ val blocksPerSecond = 20 * (currentCrop?.multiplier ?: 1)
- else -> 20
- }
val missingTimeSeconds = missing / blocksPerSecond
val millis = missingTimeSeconds * 1000
val duration = TimeUtils.formatDuration(millis)
@@ -387,7 +356,7 @@ class GardenCropMilestoneDisplay {
lineMap[0] = Collections.singletonList("§6Mooshroom Cow Perk")
val list = mutableListOf<Any>()
- GardenAPI.addGardenCropToList(CropType.MUSHROOM, list)
+ list.addCropIcon(CropType.MUSHROOM)
list.add("§7Mushroom Tier $nextTier")
lineMap[1] = list
@@ -404,4 +373,4 @@ class GardenCropMilestoneDisplay {
}
private fun isEnabled() = GardenAPI.inGarden() && config.cropMilestoneProgress
-} \ No newline at end of file
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
index e22339edd..398b6818f 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
@@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.garden
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.*
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.addCropIcon
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzUtils
@@ -191,7 +192,7 @@ class GardenNextJacobContest {
}
for (crop in nextContest.crops) {
list.add(" ")
- GardenAPI.addGardenCropToList(crop, list)
+ list.addCropIcon(crop)
nextContestCrops.add(crop)
}
val format = TimeUtils.formatDuration(duration)
@@ -216,7 +217,7 @@ class GardenNextJacobContest {
if (!config.nextJacobContestDisplay) return
if (!inCalendar) return
- if (!display.isEmpty()) {
+ if (display.isNotEmpty()) {
config.nextJacobContestPos.renderSingleLineWithItems(display, posLabel = "Garden Next Jacob Contest")
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt
index 7a60f7120..4c4553cb8 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/ToolTooltipTweaks.kt
@@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.garden
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.LorenzToolTipEvent
+import at.hannibal2.skyhanni.features.garden.GardenAPI.Companion.getCropType
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getFarmingForDummiesCount
@@ -22,7 +23,7 @@ class ToolTooltipTweaks {
@SubscribeEvent
fun onTooltip(event: LorenzToolTipEvent) {
if (!LorenzUtils.inSkyBlock) return
- val crop = GardenAPI.getCropTypeFromItem(event.itemStack) ?: return
+ val crop = event.itemStack.getCropType() ?: return
val toolFortune = FarmingFortuneDisplay.getToolFortune(event.itemStack)
val counterFortune = FarmingFortuneDisplay.getCounterFortune(event.itemStack)
val collectionFortune = FarmingFortuneDisplay.getCollectionFortune(event.itemStack)
@@ -90,7 +91,7 @@ class ToolTooltipTweaks {
if (counterStartLine.contains(line)) removingCounterDescription = true
if (line == "§5§o§9Blessed Bonus") removingReforgeDescription = true
- if (removingReforgeDescription ) {
+ if (removingReforgeDescription) {
iterator.remove()
removingReforgeDescription = !reforgeEndLine.contains(line)
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt
index 5138ebf35..e16df26e9 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/BlockUtils.kt
@@ -1,6 +1,7 @@
package at.hannibal2.skyhanni.utils
import net.minecraft.block.Block
+import net.minecraft.block.properties.PropertyInteger
import net.minecraft.block.state.IBlockState
import net.minecraft.client.Minecraft
import net.minecraft.tileentity.TileEntitySkull
@@ -24,4 +25,18 @@ object BlockUtils {
return serializeNBT.getCompoundTag("Owner").getCompoundTag("Properties")
.getTagList("textures", Constants.NBT.TAG_COMPOUND).getCompoundTagAt(0).getString("Value")
}
+
+ fun IBlockState.isBabyCrop(): Boolean {
+ for (property in block.blockState.properties) {
+ val name = property.name
+ if (name != "age") continue
+
+ if (property is PropertyInteger) {
+ val value = getValue(property)!!
+ if (value == 0) return true
+ }
+ }
+
+ return false
+ }
} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt
index 3ff2e54e6..bb1c8705e 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/SkyBlockItemModifierUtils.kt
@@ -11,9 +11,9 @@ object SkyBlockItemModifierUtils {
fun ItemStack.getFarmingForDummiesCount() = getAttributeInt("farming_for_dummies_count")
- fun ItemStack.getCultivatingCount() = getAttributeInt("farmed_cultivating")
+ fun ItemStack.getCultivatingCounter() = getAttributeInt("farmed_cultivating")
- fun ItemStack.getCounter() = getAttributeInt("mined_crops")
+ fun ItemStack.getHoeCounter() = getAttributeInt("mined_crops")
fun ItemStack.getSilexCount(): Int? {
val enchantments = getEnchantments() ?: return null