feat: Parse 1.21.3 and below bow animations
This commit is contained in:
@@ -22,6 +22,7 @@ import moe.nea.firmament.features.texturepack.predicates.LorePredicate
|
|||||||
import moe.nea.firmament.features.texturepack.predicates.NotPredicate
|
import moe.nea.firmament.features.texturepack.predicates.NotPredicate
|
||||||
import moe.nea.firmament.features.texturepack.predicates.OrPredicate
|
import moe.nea.firmament.features.texturepack.predicates.OrPredicate
|
||||||
import moe.nea.firmament.features.texturepack.predicates.PetPredicate
|
import moe.nea.firmament.features.texturepack.predicates.PetPredicate
|
||||||
|
import moe.nea.firmament.features.texturepack.predicates.PullingPredicate
|
||||||
import moe.nea.firmament.util.json.KJsonOps
|
import moe.nea.firmament.util.json.KJsonOps
|
||||||
|
|
||||||
object CustomModelOverrideParser {
|
object CustomModelOverrideParser {
|
||||||
@@ -79,6 +80,12 @@ object CustomModelOverrideParser {
|
|||||||
if (predicateName == "cast") { // 1.21.4
|
if (predicateName == "cast") { // 1.21.4
|
||||||
parsedPredicates.add(CastPredicate.Parser.parse(predicates[predicateName]) ?: return neverPredicate)
|
parsedPredicates.add(CastPredicate.Parser.parse(predicates[predicateName]) ?: return neverPredicate)
|
||||||
}
|
}
|
||||||
|
if (predicateName == "pull") {
|
||||||
|
parsedPredicates.add(PullingPredicate.Parser.parse(predicates[predicateName]) ?: return neverPredicate)
|
||||||
|
}
|
||||||
|
if (predicateName == "pulling") {
|
||||||
|
parsedPredicates.add(PullingPredicate.AnyPulling)
|
||||||
|
}
|
||||||
if (!predicateName.startsWith("firmament:")) continue
|
if (!predicateName.startsWith("firmament:")) continue
|
||||||
val identifier = Identifier.of(predicateName)
|
val identifier = Identifier.of(predicateName)
|
||||||
val parser = predicateParsers[identifier] ?: return neverPredicate
|
val parser = predicateParsers[identifier] ?: return neverPredicate
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
package moe.nea.firmament.features.texturepack
|
package moe.nea.firmament.features.texturepack
|
||||||
|
|
||||||
|
import net.minecraft.entity.LivingEntity
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
|
|
||||||
interface FirmamentModelPredicate {
|
interface FirmamentModelPredicate {
|
||||||
fun test(stack: ItemStack): Boolean
|
fun test(stack: ItemStack, holder: LivingEntity?): Boolean = test(stack)
|
||||||
|
fun test(stack: ItemStack): Boolean = test(stack, null)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class PredicateModel {
|
|||||||
) {
|
) {
|
||||||
val model =
|
val model =
|
||||||
overrides
|
overrides
|
||||||
.find { it.predicate.test(stack) }
|
.findLast { it.predicate.test(stack, user) }
|
||||||
?.model
|
?.model
|
||||||
?: fallback
|
?: fallback
|
||||||
model.update(state, stack, resolver, transformationMode, world, user, seed)
|
model.update(state, stack, resolver, transformationMode, world, user, seed)
|
||||||
|
|||||||
@@ -3,15 +3,16 @@ package moe.nea.firmament.features.texturepack.predicates
|
|||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
|
import net.minecraft.entity.LivingEntity
|
||||||
import moe.nea.firmament.features.texturepack.CustomModelOverrideParser
|
import moe.nea.firmament.features.texturepack.CustomModelOverrideParser
|
||||||
import moe.nea.firmament.features.texturepack.FirmamentModelPredicate
|
import moe.nea.firmament.features.texturepack.FirmamentModelPredicate
|
||||||
import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser
|
import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
|
|
||||||
class AndPredicate(val children: Array<FirmamentModelPredicate>) : FirmamentModelPredicate {
|
class AndPredicate(val children: Array<FirmamentModelPredicate>) : FirmamentModelPredicate {
|
||||||
override fun test(stack: ItemStack): Boolean {
|
override fun test(stack: ItemStack, holder: LivingEntity?): Boolean {
|
||||||
return children.all { it.test(stack) }
|
return children.all { it.test(stack, holder) }
|
||||||
}
|
}
|
||||||
|
|
||||||
object Parser : FirmamentModelPredicateParser {
|
object Parser : FirmamentModelPredicateParser {
|
||||||
override fun parse(jsonElement: JsonElement): FirmamentModelPredicate {
|
override fun parse(jsonElement: JsonElement): FirmamentModelPredicate {
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package moe.nea.firmament.features.texturepack.predicates
|
package moe.nea.firmament.features.texturepack.predicates
|
||||||
|
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
|
import net.minecraft.entity.LivingEntity
|
||||||
|
import net.minecraft.entity.player.PlayerEntity
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import moe.nea.firmament.features.texturepack.FirmamentModelPredicate
|
import moe.nea.firmament.features.texturepack.FirmamentModelPredicate
|
||||||
import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser
|
import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser
|
||||||
import moe.nea.firmament.util.MC
|
|
||||||
|
|
||||||
class CastPredicate : FirmamentModelPredicate {
|
class CastPredicate : FirmamentModelPredicate {
|
||||||
object Parser : FirmamentModelPredicateParser {
|
object Parser : FirmamentModelPredicateParser {
|
||||||
@@ -14,7 +15,11 @@ class CastPredicate : FirmamentModelPredicate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun test(stack: ItemStack, holder: LivingEntity?): Boolean {
|
||||||
|
return (holder as? PlayerEntity)?.fishHook != null && holder.activeItem === stack
|
||||||
|
}
|
||||||
|
|
||||||
override fun test(stack: ItemStack): Boolean {
|
override fun test(stack: ItemStack): Boolean {
|
||||||
return MC.player?.fishHook != null // TODO pass through more of the model predicate context
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package moe.nea.firmament.features.texturepack.predicates
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement
|
||||||
|
import net.minecraft.entity.LivingEntity
|
||||||
|
import net.minecraft.item.BowItem
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import moe.nea.firmament.features.texturepack.FirmamentModelPredicate
|
||||||
|
import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser
|
||||||
|
|
||||||
|
class PullingPredicate(val percentage: Double) : FirmamentModelPredicate {
|
||||||
|
companion object {
|
||||||
|
val AnyPulling = PullingPredicate(0.1)
|
||||||
|
}
|
||||||
|
|
||||||
|
object Parser : FirmamentModelPredicateParser {
|
||||||
|
override fun parse(jsonElement: JsonElement): FirmamentModelPredicate? {
|
||||||
|
return PullingPredicate(jsonElement.asDouble)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun test(stack: ItemStack, holder: LivingEntity?): Boolean {
|
||||||
|
if (holder == null) return false
|
||||||
|
return BowItem.getPullProgress(holder.itemUseTime) >= percentage
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user