Skip to content

Commit

Permalink
Slightly change Measuring Tape behaviour and fix mod crashing on serv…
Browse files Browse the repository at this point in the history
…ers. Bump to 1.10.1
  • Loading branch information
lucaargolo committed Jul 17, 2023
1 parent 1573e00 commit c9c8bd2
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 60 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ modrinth_version=1.2.1
github_api_version=1.114

# Mod Properties
mod_version=1.10-BETA+1.19
mod_version=1.10.1-BETA+1.19
maven_group=io.github.lucaargolo

# Fabric Properties
Expand Down
16 changes: 5 additions & 11 deletions src/main/kotlin/io/github/lucaargolo/kibe/items/ItemCompendium.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,18 +86,12 @@ class ContainerInfo<T: ScreenHandler>(

}

interface Identified {
val identifier: Identifier
}

interface IdentifiedModelPredicateProvider : UnclampedModelPredicateProvider, Identified

class ItemInfo (
val identifier: Identifier,
val item: Item,
private val bakedModel: (() -> BakedModel)?,
var containers: List<ContainerInfo<*>>,
private val modelPredicateProviders: List<IdentifiedModelPredicateProvider>?
private val modelPredicateProviders: (() -> List<Pair<Identifier, UnclampedModelPredicateProvider>>?)?
){

fun init() {
Expand All @@ -107,9 +101,9 @@ class ItemInfo (

fun initClient() {
containers.forEach { it.initClient() }
modelPredicateProviders?.let { providers ->
modelPredicateProviders?.invoke()?.let { providers ->
for (provider in providers) {
ModelPredicateProviderRegistry.register(item, provider.identifier, provider)
ModelPredicateProviderRegistry.register(item, provider.first, provider.second)
}
}
if(bakedModel != null) {
Expand Down Expand Up @@ -237,11 +231,11 @@ val BROWN_SLEEPING_BAG = register(Identifier(MOD_ID, "brown_sleeping_bag"), Slee
val RED_SLEEPING_BAG = register(Identifier(MOD_ID, "red_sleeping_bag"), SleepingBag(settingsWithTab().maxCount(1).rarity(Rarity.RARE)))
val BLACK_SLEEPING_BAG = register(Identifier(MOD_ID, "black_sleeping_bag"), SleepingBag(settingsWithTab().maxCount(1).rarity(Rarity.RARE)))

val MEASURING_TAPE = register(Identifier(MOD_ID, "measuring_tape"), MeasuringTape(settingsWithTab().maxCount(1)), modelPredicateProviders = listOf(MeasuringTape.ModelPredicateProvider))
val MEASURING_TAPE = register(Identifier(MOD_ID, "measuring_tape"), MeasuringTape(settingsWithTab().maxCount(1)), modelPredicateProviders = { listOf(Pair(Identifier(MOD_ID, "extended"), MeasuringTapePredicateProvider())) })

private fun settingsWithTab() = Settings().group(CREATIVE_TAB)

fun register(identifier: Identifier, item: Item, bakedModel: (() -> BakedModel)? = null, containers: List<ContainerInfo<*>> = listOf(), modelPredicateProviders: List<IdentifiedModelPredicateProvider>? = null): Item {
fun register(identifier: Identifier, item: Item, bakedModel: (() -> BakedModel)? = null, containers: List<ContainerInfo<*>> = listOf(), modelPredicateProviders: (() -> List<Pair<Identifier, UnclampedModelPredicateProvider>>?)? = null): Item {
val info = ItemInfo(identifier, item, bakedModel, containers, modelPredicateProviders)
itemRegistry[item] = info
return item
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
package io.github.lucaargolo.kibe.items.miscellaneous

import io.github.lucaargolo.kibe.MOD_ID
import io.github.lucaargolo.kibe.items.IdentifiedModelPredicateProvider
import net.minecraft.client.MinecraftClient
import net.minecraft.client.item.TooltipContext
import net.minecraft.client.resource.language.I18n
import net.minecraft.client.world.ClientWorld
import net.minecraft.entity.Entity
import net.minecraft.entity.LivingEntity
import net.minecraft.entity.player.PlayerEntity
import net.minecraft.item.BlockItem
import net.minecraft.item.Item
import net.minecraft.item.ItemStack
import net.minecraft.item.ItemUsageContext
import net.minecraft.text.Text
import net.minecraft.util.*
import net.minecraft.util.hit.BlockHitResult
Expand Down Expand Up @@ -117,7 +110,7 @@ class MeasuringTape(settings: Settings) : Item(settings) {
}

private fun measureResult(fromPos: BlockPos, toPos: BlockPos): String {
val unit = I18n.translate("chat.kibe.measuring_tape.unit")
val unit = Text.translatable("chat.kibe.measuring_tape.unit").string
val dist = (Vec3d.ofCenter(fromPos).distanceTo(Vec3d.ofCenter(toPos)) * 100.0).roundToInt() / 100.0
val distX = abs(fromPos.x - toPos.x) + 1.0
val distY = abs(fromPos.y - toPos.y) + 1.0
Expand All @@ -138,36 +131,21 @@ class MeasuringTape(settings: Settings) : Item(settings) {

override fun use(world: World, user: PlayerEntity, hand: Hand): TypedActionResult<ItemStack> {
val stack = user.getStackInHand(hand)
if(!world.isClient && user.isSneaking && user.mainHandStack.isEmpty) {
user.sendMessage(Text.translatable("chat.kibe.measuring_tape.clear").formatted(Formatting.RED, Formatting.ITALIC), true)
stack.nbt?.remove(MEASURING_LEVEL)
stack.nbt?.remove(MEASURING_FROM_X)
stack.nbt?.remove(MEASURING_FROM_Y)
stack.nbt?.remove(MEASURING_FROM_Z)
stack?.nbt?.remove(MEASURING_TO_X)
stack?.nbt?.remove(MEASURING_TO_Y)
stack?.nbt?.remove(MEASURING_TO_Z)
return TypedActionResult.success(stack)
}
return super.use(world, user, hand)
}

override fun useOnBlock(context: ItemUsageContext): ActionResult {
val player = context.player ?: return super.useOnBlock(context)
val world = context.world
val pos = context.blockPos.toImmutable()

if (!world.isClient) {
val measuringFrom = measuringFrom(context.stack)
val measuringTo = measuringTo(context.stack)
if (measuringFrom == null) {
startMeasuring(context.stack, world, pos)
} else {
finishMeasuring(measuringFrom, measuringTo, player, pos, context.stack)
if(user.mainHandStack == stack || user.mainHandStack.isEmpty) {
val reach = if (user.isCreative) 5.0 else 4.5
val pos = (user.raycast(reach, 1f, true) as? BlockHitResult)?.blockPos ?: return TypedActionResult.pass(stack)
if(!world.isClient) {
val measuringFrom = measuringFrom(stack)
val measuringTo = measuringTo(stack)
if (measuringFrom == null) {
startMeasuring(stack, world, pos)
} else {
finishMeasuring(measuringFrom, measuringTo, user, pos, stack)
}
return TypedActionResult.success(stack)
}
}

return ActionResult.success(world.isClient)
return TypedActionResult.pass(stack)
}

override fun appendTooltip(stack: ItemStack, world: World?, tooltip: MutableList<Text>, context: TooltipContext) {
Expand Down Expand Up @@ -206,16 +184,4 @@ class MeasuringTape(settings: Settings) : Item(settings) {
}
}

object ModelPredicateProvider : IdentifiedModelPredicateProvider {
override fun unclampedCall(stack: ItemStack, world: ClientWorld?, entity: LivingEntity?, seed: Int): Float {
val nbt = stack.nbt ?: return 0f
if (MEASURING_LEVEL in nbt) {
return 1f
}
return 0f
}

override val identifier: Identifier
get() = Identifier(MOD_ID, "extended")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.github.lucaargolo.kibe.items.miscellaneous

import net.minecraft.client.item.UnclampedModelPredicateProvider
import net.minecraft.client.world.ClientWorld
import net.minecraft.entity.LivingEntity
import net.minecraft.item.ItemStack

class MeasuringTapePredicateProvider: UnclampedModelPredicateProvider {

override fun unclampedCall(stack: ItemStack, world: ClientWorld?, entity: LivingEntity?, seed: Int): Float {
val nbt = stack.nbt ?: return 0f
if (MeasuringTape.MEASURING_LEVEL in nbt) {
return 1f
}
return 0f
}


}

0 comments on commit c9c8bd2

Please sign in to comment.