diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/CustomGunModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/CustomGunModel.java new file mode 100644 index 000000000..ba9b7a10b --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/CustomGunModel.java @@ -0,0 +1,28 @@ +package com.atsuishio.superbwarfare.client.model.item; + +import com.atsuishio.superbwarfare.client.molang.MolangVariable; +import com.atsuishio.superbwarfare.item.gun.GunItem; +import net.minecraft.client.Minecraft; +import software.bernie.geckolib.animatable.GeoAnimatable; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.loading.math.MathParser; +import software.bernie.geckolib.loading.math.MolangQueries; +import software.bernie.geckolib.model.GeoModel; + +public abstract class CustomGunModel extends GeoModel { + + @Override + public void applyMolangQueries(AnimationState animationState, double animTime) { + Minecraft mc = Minecraft.getInstance(); + + MathParser.setVariable(MolangQueries.LIFE_TIME, () -> animTime / 20d); + + if (mc.level != null) { + MathParser.setVariable(MolangQueries.ACTOR_COUNT, mc.level::getEntityCount); + MathParser.setVariable(MolangQueries.TIME_OF_DAY, () -> mc.level.getDayTime() / 24000f); + MathParser.setVariable(MolangQueries.MOON_PHASE, mc.level::getMoonPhase); + } + + MathParser.setVariable(MolangVariable.SBW_SYSTEM_TIME, System::currentTimeMillis); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java index 65816d3b9..196a8434f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.client.model.item; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.AnimationHelper; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; -import com.atsuishio.superbwarfare.client.renderer.molang.MolangVariable; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.rifle.InsidiousItem; @@ -14,10 +13,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.cache.object.GeoBone; -import software.bernie.geckolib.loading.math.MathParser; -import software.bernie.geckolib.model.GeoModel; -public class InsidiousItemModel extends GeoModel { +public class InsidiousItemModel extends CustomGunModel { public static float fireRotY = 0f; public static float fireRotZ = 0f; @@ -91,10 +88,4 @@ public class InsidiousItemModel extends GeoModel { AnimationHelper.handleReloadShakeAnimation(stack, main, camera, numR, numP); ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ()); } - - @Override - public void applyMolangQueries(AnimationState animationState, double animTime) { - super.applyMolangQueries(animationState, animTime); - MathParser.setVariable(MolangVariable.SBW_SYSTEM_TIME, System::currentTimeMillis); - } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/molang/MolangVariable.java b/src/main/java/com/atsuishio/superbwarfare/client/molang/MolangVariable.java new file mode 100644 index 000000000..d0126bc07 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/client/molang/MolangVariable.java @@ -0,0 +1,19 @@ +package com.atsuishio.superbwarfare.client.molang; + +import software.bernie.geckolib.loading.math.MathParser; +import software.bernie.geckolib.loading.math.value.Variable; + +import java.util.function.DoubleSupplier; + +public class MolangVariable { + + public static final String SBW_SYSTEM_TIME = "query.sbw_system_time"; + + public static void register() { + register(SBW_SYSTEM_TIME, () -> 0); + } + + private static void register(String name, DoubleSupplier supplier) { + MathParser.registerVariable(new Variable(name, supplier)); + } +} diff --git a/src/main/resources/assets/superbwarfare/animations/insidious.animation.json b/src/main/resources/assets/superbwarfare/animations/insidious.animation.json index e031aea51..886322271 100644 --- a/src/main/resources/assets/superbwarfare/animations/insidious.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/insidious.animation.json @@ -3,14 +3,14 @@ "animations": { "animation.insidious.idle": { "animation_length": 1, - "bones": { - "rot1": { - "rotation": [0, 0, "(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - }, - "rot2": { - "rotation": [0, 0, "-(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - } - } + "bones": { + "rot1": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / math.pi * 360"] + }, + "rot2": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / math.pi * (-360)"] + } + } }, "animation.insidious.reload": { "animation_length": 3, @@ -308,34 +308,34 @@ "Lefthand": { "rotation": { "0.0": [0, 0, 0], - "0.0833": [-3.1936, 24.51049, 7.5871], - "0.2083": [-3.14008, 19.39916, 11.32393], + "0.0667": [-3.1936, 24.51049, 7.5871], + "0.2": [-3.14008, 19.39916, 11.32393], "0.2917": [-4.46292, 0.94838, 16.96183], "0.4583": [-4.46292, 0.94838, 16.96183], "0.7083": [-4.46292, 0.94838, 16.96183], - "0.8333": [-28.33435, -12.61568, 45.95484], + "0.8167": [-28.33435, -12.61568, 45.95484], "1.5417": [-28.33435, -12.61568, 45.95484], "1.75": [-15.82573, 15.60063, 31.96328], - "1.7917": [-19.88703, 0.29301, 34.55901], - "1.9167": [-18.4573, 3.88617, 32.29314], + "1.8": [-19.88703, 0.29301, 34.55901], + "1.9333": [-18.4573, 3.88617, 32.29314], "2.0417": [0, 0, 7], - "2.125": [0, 0, 0] + "2.1083": [0, 0, 0] }, "position": { "0.0": [0, 0, 0], - "0.0833": [0, -0.8, 0], - "0.2083": [-0.09, -3.36, 9.03], + "0.0667": [0, -0.8, 0], + "0.2": [-0.09, -3.36, 9.03], "0.2917": [-0.15, -2.75, 16], "0.4583": [-0.15, -2.75, 16], "0.7083": [-0.15, -2.75, 16], - "0.8333": [-0.55, -2.75, 17.65], + "0.8167": [-0.55, -2.75, 17.65], "1.5417": [-0.55, -2.75, 17.65], - "1.625": [-1, -3.59, 15.87], + "1.6417": [-1, -3.59, 15.87], "1.75": [-0.55, -7.7, 14.1], - "1.7917": [-0.55, -3.35, 16.25], - "1.9167": [-0.55, -5.5, 14.15], + "1.8": [-0.55, -3.35, 16.25], + "1.9333": [-0.55, -5.5, 14.15], "2.0417": [0, -1, 2], - "2.125": [0, 0, 0] + "2.1083": [0, 0, 0] } }, "camera": { @@ -486,12 +486,79 @@ } } }, - "rot1": { - "rotation": [0, 0, "(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] + "rot1": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / 3 / math.pi * 360"] + }, + "rot2": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / 3 / math.pi * (-360)"] + } + } + }, + "animation.insidious.run": { + "loop": true, + "animation_length": 0.8, + "bones": { + "0": { + "rotation": { + "0.0": { + "post": [-19.82442, -57.81517, 38.62375], + "lerp_mode": "catmullrom" + }, + "0.2": { + "post": [-23.65942, -57.81517, 38.62375], + "lerp_mode": "catmullrom" + }, + "0.4": { + "post": [-19.82442, -57.81517, 38.62375], + "lerp_mode": "catmullrom" + }, + "0.6": { + "post": [-15.98942, -57.81517, 38.62375], + "lerp_mode": "catmullrom" + }, + "0.8": { + "post": [-19.82442, -57.81517, 38.62375], + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": [6.85, -3.45, 0], + "lerp_mode": "catmullrom" + }, + "0.2": { + "post": [4.8, -2.45, 0], + "lerp_mode": "catmullrom" + }, + "0.4": { + "post": [3.1, -3.45, 0], + "lerp_mode": "catmullrom" + }, + "0.6": { + "post": [4.35, -2.45, 0], + "lerp_mode": "catmullrom" + }, + "0.8": { + "post": [6.85, -3.45, 0], + "lerp_mode": "catmullrom" + } + } }, - "rot2": { - "rotation": [0, 0, "-(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - } + "camera": { + "rotation": { + "0.0": [-0.3, -0.3, 0.3], + "0.2": [0.3, 0, -0.3], + "0.4": [-0.3, 0.3, 0.3], + "0.6": [0.3, 0, -0.3], + "0.8": [-0.3, -0.3, 0.3] + } + }, + "rot1": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / 0.8 / math.pi * 360"] + }, + "rot2": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / 0.8 / math.pi * (-360)"] + } } }, "animation.insidious.run_fast": { @@ -558,79 +625,12 @@ "0.7": [-0.3, -0.3, 0.3] } }, - "rot1": { - "rotation": [0, 0, "(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - }, - "rot2": { - "rotation": [0, 0, "-(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - } - } - }, - "animation.insidious.run": { - "loop": true, - "animation_length": 1, - "bones": { - "0": { - "rotation": { - "0.0": { - "post": [-19.82442, -57.81517, 38.62375], - "lerp_mode": "catmullrom" - }, - "0.2": { - "post": [-23.65942, -57.81517, 38.62375], - "lerp_mode": "catmullrom" - }, - "0.4": { - "post": [-19.82442, -57.81517, 38.62375], - "lerp_mode": "catmullrom" - }, - "0.6": { - "post": [-15.98942, -57.81517, 38.62375], - "lerp_mode": "catmullrom" - }, - "0.8": { - "post": [-19.82442, -57.81517, 38.62375], - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": [6.85, -3.45, 0], - "lerp_mode": "catmullrom" - }, - "0.2": { - "post": [4.8, -2.45, 0], - "lerp_mode": "catmullrom" - }, - "0.4": { - "post": [3.1, -3.45, 0], - "lerp_mode": "catmullrom" - }, - "0.6": { - "post": [4.35, -2.45, 0], - "lerp_mode": "catmullrom" - }, - "0.8": { - "post": [6.85, -3.45, 0], - "lerp_mode": "catmullrom" - } - } - }, - "camera": { - "rotation": { - "0.0": [-0.3, -0.3, 0.3], - "0.2": [0.3, 0, -0.3], - "0.4": [-0.3, 0.3, 0.3], - "0.6": [0.3, 0, -0.3], - "0.8": [-0.3, -0.3, 0.3] - } - }, - "rot1": { - "rotation": [0, 0, "(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - }, - "rot2": { - "rotation": [0, 0, "-(sbw.system_time % 36000000) / 400 / 2 / math.pi * 360"] - } + "rot1": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / 0.7 / math.pi * 360"] + }, + "rot2": { + "rotation": [0, 0, "(query.sbw_system_time % 36000000) / 1600 / 0.7 / math.pi * (-360)"] + } } } } diff --git a/src/main/templates/META-INF/neoforge.mods.toml b/src/main/templates/META-INF/neoforge.mods.toml index 335a45f64..980d7f7ac 100644 --- a/src/main/templates/META-INF/neoforge.mods.toml +++ b/src/main/templates/META-INF/neoforge.mods.toml @@ -38,7 +38,7 @@ side = "BOTH" [[dependencies.superbwarfare]] modId = "geckolib" type = "required" -versionRange = "[4.7.1.2,)" +versionRange = "[4.4.6,)" ordering = "NONE" side = "BOTH"