diff --git a/src/main/java/net/mcreator/target/entity/Mk42Entity.java b/src/main/java/net/mcreator/target/entity/Mk42Entity.java index f51f51212..a441cdee6 100644 --- a/src/main/java/net/mcreator/target/entity/Mk42Entity.java +++ b/src/main/java/net/mcreator/target/entity/Mk42Entity.java @@ -1,14 +1,13 @@ package net.mcreator.target.entity; -import net.mcreator.target.init.TargetModDamageTypes; -import net.mcreator.target.init.TargetModEntities; -import net.mcreator.target.init.TargetModItems; -import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.init.*; import net.mcreator.target.item.common.ammo.CannonShellItem; import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.tools.CustomExplosion; import net.mcreator.target.tools.ParticleTool; import net.mcreator.target.tools.SoundTool; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; @@ -237,6 +236,7 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity { gunner.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.recoilHorizon = 2 * Math.random() - 1; capability.cannonFiring = 1; + capability.cannonRecoil = 10; capability.syncPlayerVariables(gunner); }); } @@ -295,6 +295,7 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity { if (player instanceof ServerPlayer serverPlayer) { SoundTool.playLocalSound(serverPlayer, TargetModSounds.MK_42_FIRE_1P.get(), 2, 1); + SoundTool.playLocalSound(serverPlayer, TargetModSounds.MK_42_RELOAD.get(), 2, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.MK_42_FIRE_3P.get(), SoundSource.PLAYERS, 6, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.MK_42_FAR.get(), SoundSource.PLAYERS, 16, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.MK_42_VERYFAR.get(), SoundSource.PLAYERS, 32, 1); @@ -357,6 +358,15 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity { private PlayState movementPredicate(AnimationState event) { if (this.animationprocedure.equals("empty")) { + + if (this.getFirstPassenger() != null) { + Entity gunner = this.getFirstPassenger(); + var capability = gunner.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null); + if (capability.orElse(new TargetModVariables.PlayerVariables()).cannonRecoil > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mk42.fire")); + } + } + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mk42.idle")); } return PlayState.STOP; @@ -394,8 +404,8 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { - data.add(new AnimationController<>(this, "movement", 4, this::movementPredicate)); - data.add(new AnimationController<>(this, "procedure", 4, this::procedurePredicate)); + data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate)); + data.add(new AnimationController<>(this, "procedure", 0, this::procedurePredicate)); } @Override diff --git a/src/main/java/net/mcreator/target/entity/model/Mk42Model.java b/src/main/java/net/mcreator/target/entity/model/Mk42Model.java index 8d2230f56..498bc6028 100644 --- a/src/main/java/net/mcreator/target/entity/model/Mk42Model.java +++ b/src/main/java/net/mcreator/target/entity/model/Mk42Model.java @@ -1,8 +1,10 @@ package net.mcreator.target.entity.model; import net.mcreator.target.entity.Mk42Entity; +import net.mcreator.target.network.TargetModVariables; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.core.animatable.model.CoreGeoBone; import software.bernie.geckolib.core.animation.AnimationState; @@ -30,5 +32,12 @@ public class Mk42Model extends GeoModel { CoreGeoBone barrle = getAnimationProcessor().getBone("maingun"); EntityModelData entityData = (EntityModelData) animationState.getData(DataTickets.ENTITY_MODEL_DATA); barrle.setRotX((entityData.headPitch()) * Mth.DEG_TO_RAD); + +// CoreGeoBone paoguan = getAnimationProcessor().getBone("paoguan"); +// if (animatable.getFirstPassenger() == null) return; +// Entity gunner = animatable.getFirstPassenger(); +// var capability = gunner.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null); +// paoguan.setPosZ(capability.orElse(new TargetModVariables.PlayerVariables()).cannonRecoil); + } } diff --git a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java index 9d332ffb6..be6672300 100644 --- a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java @@ -81,6 +81,12 @@ public class PlayerEventHandler { capability.syncPlayerVariables(player); }); } + if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).cannonRecoil > 0) { + player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.cannonRecoil = (player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).cannonRecoil - 1; + capability.syncPlayerVariables(player); + }); + } } } diff --git a/src/main/java/net/mcreator/target/init/TargetModSounds.java b/src/main/java/net/mcreator/target/init/TargetModSounds.java index 4cf4bf06f..a23a3cba6 100644 --- a/src/main/java/net/mcreator/target/init/TargetModSounds.java +++ b/src/main/java/net/mcreator/target/init/TargetModSounds.java @@ -185,6 +185,7 @@ public class TargetModSounds { public static final RegistryObject MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "mk_42_fire_3p"))); public static final RegistryObject MK_42_FAR = REGISTRY.register("mk_42_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "mk_42_far"))); public static final RegistryObject MK_42_VERYFAR = REGISTRY.register("mk_42_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "mk_42_veryfar"))); + public static final RegistryObject MK_42_RELOAD = REGISTRY.register("mk_42_reload", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "mk_42_reload"))); public static final RegistryObject BULLET_SUPPLY = REGISTRY.register("bullet_supply", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "bullet_supply"))); public static final RegistryObject ADJUST_FOV = REGISTRY.register("adjust_fov", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("target", "adjust_fov"))); diff --git a/src/main/java/net/mcreator/target/network/TargetModVariables.java b/src/main/java/net/mcreator/target/network/TargetModVariables.java index d287cfec5..d00495c3d 100644 --- a/src/main/java/net/mcreator/target/network/TargetModVariables.java +++ b/src/main/java/net/mcreator/target/network/TargetModVariables.java @@ -270,6 +270,7 @@ public class TargetModVariables { public double recoilHorizon = 0; public double firing = 0; public double cannonFiring = 0; + public int cannonRecoil = 0; public double targetAngle = 0; public int rifleAmmo = 0; public boolean refresh = false; @@ -293,6 +294,7 @@ public class TargetModVariables { nbt.putDouble("recoil_horizon", recoilHorizon); nbt.putDouble("firing", firing); nbt.putDouble("cannonFiring", cannonFiring); + nbt.putInt("cannonRecoil", cannonRecoil); nbt.putDouble("target_angle", targetAngle); nbt.putInt("rifle_ammo", rifleAmmo); nbt.putBoolean("refresh", refresh); @@ -314,6 +316,7 @@ public class TargetModVariables { recoilHorizon = nbt.getDouble("recoil_horizon"); firing = nbt.getDouble("firing"); cannonFiring = nbt.getDouble("cannonFiring"); + cannonRecoil = nbt.getInt("cannonRecoil"); targetAngle = nbt.getDouble("target_angle"); rifleAmmo = nbt.getInt("rifle_ammo"); refresh = nbt.getBoolean("refresh"); @@ -371,6 +374,7 @@ public class TargetModVariables { variables.recoilHorizon = message.data.recoilHorizon; variables.firing = message.data.firing; variables.cannonFiring = message.data.cannonFiring; + variables.cannonRecoil = message.data.cannonRecoil; variables.targetAngle = message.data.targetAngle; variables.rifleAmmo = message.data.rifleAmmo; variables.refresh = message.data.refresh; diff --git a/src/main/resources/assets/target/animations/mk_42.animation.json b/src/main/resources/assets/target/animations/mk_42.animation.json index f34ccc205..6ef93daad 100644 --- a/src/main/resources/assets/target/animations/mk_42.animation.json +++ b/src/main/resources/assets/target/animations/mk_42.animation.json @@ -3,6 +3,42 @@ "animations": { "animation.mk42.idle": { "loop": true + }, + "animation.mk42.fire": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "paoguan": { + "position": { + "0.0": { + "vector": [0, 0, 11], + "easing": "easeInElastic" + }, + "0.4917": { + "vector": [0, 0, 0], + "easing": "easeInQuad" + } + } + } + } + }, + "animation.mk42.fire2": { + "loop": "hold_on_last_frame", + "animation_length": 0.5, + "bones": { + "paoguan": { + "position": { + "0.0": { + "vector": [0, 0, 11], + "easing": "easeInElastic" + }, + "0.4917": { + "vector": [0, 0, 0], + "easing": "easeInQuad" + } + } + } + } } }, "geckolib_format_version": 2 diff --git a/src/main/resources/assets/target/sounds.json b/src/main/resources/assets/target/sounds.json index f6b0fde1e..4d67bbe1a 100644 --- a/src/main/resources/assets/target/sounds.json +++ b/src/main/resources/assets/target/sounds.json @@ -1542,5 +1542,21 @@ "stream": false } ] + }, + "mk_42_reload": { + "sounds": [ + { + "name": "target:mk_42/mk_42_reload_01", + "stream": false + }, + { + "name": "target:mk_42/mk_42_reload_02", + "stream": false + }, + { + "name": "target:mk_42/mk_42_reload_03", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_1.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_1.ogg index 80ba46a41..e1e3ebbee 100644 Binary files a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_1.ogg and b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_1.ogg differ diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_2.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_2.ogg index ef7f7c958..029aec563 100644 Binary files a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_2.ogg and b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_2.ogg differ diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_3.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_3.ogg index 0788f3a0c..d71a47210 100644 Binary files a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_3.ogg and b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_3.ogg differ diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_4.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_4.ogg index 2a29caa97..504456965 100644 Binary files a/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_4.ogg and b/src/main/resources/assets/target/sounds/mk_42/mk_42_fire_1p_4.ogg differ diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_01.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_01.ogg new file mode 100644 index 000000000..004ad5c6f Binary files /dev/null and b/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_01.ogg differ diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_02.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_02.ogg new file mode 100644 index 000000000..704c97a8d Binary files /dev/null and b/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_02.ogg differ diff --git a/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_03.ogg b/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_03.ogg new file mode 100644 index 000000000..f435eda39 Binary files /dev/null and b/src/main/resources/assets/target/sounds/mk_42/mk_42_reload_03.ogg differ