优化半自动,连发,栓动/泵动的开火冷却逻辑

This commit is contained in:
Atsuihsio 2024-11-05 20:44:16 +08:00
parent d2be87a71c
commit 96a0ffb020
57 changed files with 544 additions and 1198 deletions

View file

@ -54,6 +54,7 @@ public class ClickHandler {
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1)); ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1));
ClientEventHandler.holdFire = false; ClientEventHandler.holdFire = false;
ClientEventHandler.customRpm = 0;
} }
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
if (player.hasEffect(ModMobEffects.SHOCK.get())) { if (player.hasEffect(ModMobEffects.SHOCK.get())) {

View file

@ -73,18 +73,18 @@ public class Glock17ItemModel extends GeoModel<Glock17Item> {
gun.setRotZ(-11 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz)); gun.setRotZ(-11 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz));
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (-0.06f * fp - 0.09f * fr)); shen.setPosY((float) (0.4f * fp + 0.44f * fr));
shen.setPosZ((float) (0.825 * fp + 0.34f * fr + 0.35 * fpz)); shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz));
shen.setRotX((float) (0.1f * fp + 0.05f * fr + 0.01f * fpz)); shen.setRotX((float) (0.15f * fp + 0.3f * fr + 0.3f * fpz));
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz));
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon));
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 + 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 + 0.3 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.7 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.27 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.27 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.27 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.25 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));
slide.setPosZ(1.5f * (float) fp); slide.setPosZ(1.5f * (float) fp);

View file

@ -82,18 +82,18 @@ public class Glock18ItemModel extends GeoModel<Glock18Item> {
gun.setRotZ(-11 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz)); gun.setRotZ(-11 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz));
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (-0.06f * fp - 0.09f * fr)); shen.setPosY((float) (0.4f * fp + 0.44f * fr));
shen.setPosZ((float) (0.825 * fp + 0.34f * fr + 0.35 * fpz)); shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz));
shen.setRotX((float) (0.1f * fp + 0.05f * fr + 0.01f * fpz)); shen.setRotX((float) (0.15f * fp + 0.3f * fr + 0.3f * fpz));
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz));
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon));
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 + 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 + 0.3 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.7 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.27 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.27 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.25 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));
slide.setPosZ(1.5f * (float) fp); slide.setPosZ(1.5f * (float) fp);

View file

@ -38,6 +38,7 @@ public class M1911ItemModel extends GeoModel<M1911Item> {
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); CoreGeoBone shen = getAnimationProcessor().getBone("shen");
CoreGeoBone slide = getAnimationProcessor().getBone("huatao"); CoreGeoBone slide = getAnimationProcessor().getBone("huatao");
CoreGeoBone bullet = getAnimationProcessor().getBone("bullet"); CoreGeoBone bullet = getAnimationProcessor().getBone("bullet");
CoreGeoBone hammer = getAnimationProcessor().getBone("hammer");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
@ -71,20 +72,21 @@ public class M1911ItemModel extends GeoModel<M1911Item> {
gun.setScaleZ(1f - (0.35f * (float) zp)); gun.setScaleZ(1f - (0.35f * (float) zp));
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (-0.06f * fp - 0.09f * fr)); shen.setPosY((float) (0.4f * fp + 0.44f * fr));
shen.setPosZ((float) (0.825 * fp + 0.34f * fr + 0.35 * fpz)); shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz));
shen.setRotX((float) (0.1f * fp + 0.05f * fr + 0.01f * fpz)); shen.setRotX((float) (0.15f * fp + 0.3f * fr + 0.3f * fpz));
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz));
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon));
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 + 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 + 0.3 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.7 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.27 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.27 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.27 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.25 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));
slide.setPosZ(2.75f * (float) fp); slide.setPosZ(2.75f * (float) fp);
hammer.setRotX(60 * Mth.DEG_TO_RAD + (120 * Mth.DEG_TO_RAD * (float) fp));
CoreGeoBone root = getAnimationProcessor().getBone("root"); CoreGeoBone root = getAnimationProcessor().getBone("root");
root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph)); root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph));

View file

@ -57,31 +57,31 @@ public class M60ItemModel extends GeoModel<M60Item> {
r.setRotX(1.5f); r.setRotX(1.5f);
} }
if (stack.getOrCreateTag().getInt("ammo") < 5 && stack.getOrCreateTag().getBoolean("bullet_chain")) { if (stack.getOrCreateTag().getInt("ammo") < 5 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b5.setScaleX(0); b5.setScaleX(0);
b5.setScaleY(0); b5.setScaleY(0);
b5.setScaleZ(0); b5.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 4 && stack.getOrCreateTag().getBoolean("bullet_chain")) { if (stack.getOrCreateTag().getInt("ammo") < 4 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b4.setScaleX(0); b4.setScaleX(0);
b4.setScaleY(0); b4.setScaleY(0);
b4.setScaleZ(0); b4.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 3 && stack.getOrCreateTag().getBoolean("bullet_chain")) { if (stack.getOrCreateTag().getInt("ammo") < 3 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b3.setScaleX(0); b3.setScaleX(0);
b3.setScaleY(0); b3.setScaleY(0);
b3.setScaleZ(0); b3.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 2 && stack.getOrCreateTag().getBoolean("bullet_chain")) { if (stack.getOrCreateTag().getInt("ammo") < 2 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b2.setScaleX(0); b2.setScaleX(0);
b2.setScaleY(0); b2.setScaleY(0);
b2.setScaleZ(0); b2.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 1 && stack.getOrCreateTag().getBoolean("bullet_chain")) { if (stack.getOrCreateTag().getInt("ammo") < 1 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b1.setScaleX(0); b1.setScaleX(0);
b1.setScaleY(0); b1.setScaleY(0);
b1.setScaleZ(0); b1.setScaleZ(0);

View file

@ -77,7 +77,7 @@ public class M870ItemModel extends GeoModel<M870Item> {
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.4 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.77 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));

View file

@ -60,26 +60,26 @@ public class MarlinItemModel extends GeoModel<MarlinItem> {
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
gun.setPosX(1.712f * (float) zp); gun.setPosX(1.712f * (float) zp);
gun.setPosY(1.06f * (float) zp - (float) (0.7f * zpz)); gun.setPosY(1.06f * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(4f * (float) zp + (float) (0.9f * zpz)); gun.setPosZ(3f * (float) zp + (float) (0.2f * zpz));
gun.setRotZ((float) (0.02f * zpz)); gun.setRotZ((float) (0.02f * zpz));
gun.setScaleZ(1f - (0.5f * (float) zp)); gun.setScaleZ(1f - (0.2f * (float) zp));
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (0.4f * fp + 0.44f * fr)); shen.setPosY((float) (0.4f * fp + 0.44f * fr));
shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz)); shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz));
shen.setRotX((float) (0.02f * fp + 0.25f * fr + 0.01f * fpz)); shen.setRotX((float) (0.01f * fp + 0.15f * fr + 0.01f * fpz));
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz));
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon));
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.4 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.6 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));
if (stack.getOrCreateTag().getInt("fire_animation") > 0) { if (stack.getOrCreateTag().getBoolean("empty")) {
jichui.setRotX(-0.52f); jichui.setRotX(-0.52f);
} }

View file

@ -40,6 +40,8 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
CoreGeoBone scope = getAnimationProcessor().getBone("scope"); CoreGeoBone scope = getAnimationProcessor().getBone("scope");
CoreGeoBone l = getAnimationProcessor().getBone("l"); CoreGeoBone l = getAnimationProcessor().getBone("l");
CoreGeoBone r = getAnimationProcessor().getBone("r"); CoreGeoBone r = getAnimationProcessor().getBone("r");
CoreGeoBone action = getAnimationProcessor().getBone("action");
CoreGeoBone lh = getAnimationProcessor().getBone("lh");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
@ -92,6 +94,9 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 4.3)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 4.3));
action.setPosZ(6f * (float) ClientEventHandler.actionMove);
lh.setPosZ(-6f * (float) ClientEventHandler.actionMove);
CoreGeoBone root = getAnimationProcessor().getBone("root"); CoreGeoBone root = getAnimationProcessor().getBone("root");
root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph)); root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph));
root.setPosY((float) (swayY + movePosY - 40 * ClientEventHandler.drawTime - 2f * vY)); root.setPosY((float) (swayY + movePosY - 40 * ClientEventHandler.drawTime - 2f * vY));

View file

@ -69,7 +69,7 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
gun.setScaleZ(1f - (0.7f * (float) zp)); gun.setScaleZ(1f - (0.7f * (float) zp));
scope.setScaleZ(1f - (0.8f * (float) zp)); scope.setScaleZ(1f - (0.8f * (float) zp));
cb.setRotZ(cb.getRotZ() + times * (float) (stack.getOrCreateTag().getDouble("chamber_rot"))); cb.setRotZ((float) (cb.getRotZ() + times * 10 * ClientEventHandler.chamberRot));
CoreGeoBone holo = getAnimationProcessor().getBone("holo"); CoreGeoBone holo = getAnimationProcessor().getBone("holo");
holo.setPosY(0.09f); holo.setPosY(0.09f);

View file

@ -35,6 +35,8 @@ public class TracheliumItemModel extends GeoModel<Trachelium> {
public void setCustomAnimations(Trachelium animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(Trachelium animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("bone"); CoreGeoBone gun = getAnimationProcessor().getBone("bone");
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); CoreGeoBone shen = getAnimationProcessor().getBone("shen");
CoreGeoBone hammer = getAnimationProcessor().getBone("jichui");
CoreGeoBone lun = getAnimationProcessor().getBone("lun");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
@ -67,18 +69,21 @@ public class TracheliumItemModel extends GeoModel<Trachelium> {
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (0.4f * fp + 0.44f * fr)); shen.setPosY((float) (0.4f * fp + 0.44f * fr));
shen.setPosZ((float) (3.325 * fp + 0.34f * fr + 2.35 * fpz)); shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz));
shen.setRotX((float) (0.05f * fp + 0.3f * fr + 0.2f * fpz)); shen.setRotX((float) (0.15f * fp + 0.3f * fr + 0.3f * fpz));
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz));
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon));
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.2 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.7 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.3 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.27 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));
hammer.setRotX(60 * Mth.DEG_TO_RAD * (float) fp);
lun.setRotZ(-120 * Mth.DEG_TO_RAD * (float) fp);
CoreGeoBone root = getAnimationProcessor().getBone("root"); CoreGeoBone root = getAnimationProcessor().getBone("root");
root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph)); root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph));
root.setPosY((float) (swayY + movePosY - 40 * ClientEventHandler.drawTime - 2f * vY)); root.setPosY((float) (swayY + movePosY - 40 * ClientEventHandler.drawTime - 2f * vY));

View file

@ -80,9 +80,6 @@ public class MinigunItemRenderer extends GeoItemRenderer<MinigunItem> {
Player player = mc.player; Player player = mc.player;
if (player != null) { if (player != null) {
ItemStack itemStack = player.getMainHandItem();
if (name.equals("flare")) { if (name.equals("flare")) {
if (ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5) { if (ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5) {
bone.setHidden(true); bone.setHidden(true);
@ -95,7 +92,7 @@ public class MinigunItemRenderer extends GeoItemRenderer<MinigunItem> {
} }
if (name.equals("light")) { if (name.equals("light")) {
bone.setHidden(!(itemStack.getOrCreateTag().getDouble("fire_animation") > 0)); bone.setHidden(!(ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5));
} }
} }

View file

@ -13,10 +13,8 @@ import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.minecraft.client.CameraType; import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@ -123,14 +121,14 @@ public class CrossHairOverlay {
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.setShaderColor(1, 1, 1, 1); RenderSystem.setShaderColor(1, 1, 1, 1);
if (!stack.is(ModTags.Items.GUN)) return; // if (!stack.is(ModTags.Items.GUN)) return;
if (stack.getOrCreateTag().getBoolean("need_bolt_action")) { // if (stack.getOrCreateTag().getBoolean("need_bolt_action")) {
Font font = Minecraft.getInstance().font; // Font font = Minecraft.getInstance().font;
Component component = Component.translatable("des.superbwarfare.need_bolt_action"); // Component component = Component.translatable("des.superbwarfare.need_bolt_action");
//
guiGraphics.drawString(font, component, w / 2 - font.width(component) / 2, h / 2 + 50, 0xFF6969); // guiGraphics.drawString(font, component, w / 2 - font.width(component) / 2, h / 2 + 50, 0xFF6969);
} // }
} }

View file

@ -116,6 +116,11 @@ public class ClientEventHandler {
public static boolean holdFire = false; public static boolean holdFire = false;
public static int burstFireSize = 0; public static int burstFireSize = 0;
public static int customRpm = 0;
public static double chamberRot = 0;
public static double actionMove = 0;
@SubscribeEvent @SubscribeEvent
public static void handleWeaponTurn(RenderHandEvent event) { public static void handleWeaponTurn(RenderHandEvent event) {
LocalPlayer player = Minecraft.getInstance().player; LocalPlayer player = Minecraft.getInstance().player;
@ -162,6 +167,7 @@ public class ClientEventHandler {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
int mode = GunsTool.getGunIntTag(stack, "FireMode");
// 精准度 // 精准度
float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
@ -202,9 +208,24 @@ public class ClientEventHandler {
if (player.getPersistentData().getDouble("noRun") == 0 && player.isSprinting() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS) { if (player.getPersistentData().getDouble("noRun") == 0 && player.isSprinting() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS) {
cantFireTime = Mth.clamp(cantFireTime + 3 * times, 0, 24); cantFireTime = Mth.clamp(cantFireTime + 3 * times, 0, 24);
} else { } else {
cantFireTime = Mth.clamp(cantFireTime - 6 * speed * times, 0, 24); cantFireTime = Mth.clamp(cantFireTime - 6 * speed * times, 0, 40);
} }
int rpm = (int) (stack.getOrCreateTag().getDouble("rpm") + customRpm);
if (rpm == 0) {
rpm = 600;
}
if (GunsTool.getPerkIntTag(stack, "DesperadoTimePost") > 0) {
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
rpm *= (int) (1.25 + 0.05 * perkLevel);
}
double rps = (double) rpm / 60;
// cooldown in ms
int cooldown = (int) (1000 / rps);
if ((holdFire || burstFireSize > 0) if ((holdFire || burstFireSize > 0)
&& (player.getMainHandItem().is(ModTags.Items.NORMAL_GUN) && (player.getMainHandItem().is(ModTags.Items.NORMAL_GUN)
&& cantFireTime == 0 && cantFireTime == 0
@ -219,51 +240,46 @@ public class ClientEventHandler {
&& !stack.getOrCreateTag().getBoolean("need_bolt_action")) && !stack.getOrCreateTag().getBoolean("need_bolt_action"))
|| (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10 || (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10
))) { ))) {
int customRpm = 0;
if (stack.getItem() == ModItems.DEVOTION.get()) { if (mode == 0) {
customRpm = stack.getOrCreateTag().getInt("customRpm"); if (clientTimer.getProgress() == 0) {
clientTimer.start();
shootClient(player);
}
} else {
if (!clientTimer.started()) {
clientTimer.start();
// 首发瞬间发射
clientTimer.setProgress((cooldown + 1));
}
if (clientTimer.getProgress() >= cooldown) {
shootClient(player);
clientTimer.setProgress((clientTimer.getProgress() - cooldown));
}
} }
if (stack.getItem() == ModItems.MINIGUN.get() && player.isInWater()) {
customRpm = (int) (-0.25 * stack.getOrCreateTag().getDouble("rpm"));
}
int rpm = (int) (stack.getOrCreateTag().getDouble("rpm") + customRpm);
if (rpm == 0) {
rpm = 600;
}
if (GunsTool.getPerkIntTag(stack, "DesperadoTimePost") > 0) {
int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack);
rpm *= (int) (1.25 + 0.05 * perkLevel);
}
double rps = (double) rpm / 60;
// cooldown in ms
int cooldown = (int) (1000 / rps);
if (!clientTimer.started()) {
clientTimer.start();
// 首发瞬间发射
clientTimer.setProgress((cooldown + 1));
}
if (clientTimer.getProgress() >= cooldown) {
shootClient(player);
ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(spread, burstFireSize));
clientTimer.setProgress((clientTimer.getProgress() - cooldown));
}
if (notInGame()) { if (notInGame()) {
clientTimer.stop(); clientTimer.stop();
} }
} else { } else {
clientTimer.stop(); if (mode != 0) {
clientTimer.stop();
}
fireSpread = 0; fireSpread = 0;
} }
gunPartMove(times);
if (mode == 0 && clientTimer.getProgress() >= cooldown) {
clientTimer.stop();
}
if (stack.getItem() == ModItems.DEVOTION.get() && (stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))) {
customRpm = 0;
}
} }
public static void shootClient(Player player) { public static void shootClient(Player player) {
@ -275,11 +291,27 @@ public class ClientEventHandler {
holdFire = false; holdFire = false;
} }
if (mode == 1 && stack.getOrCreateTag().getInt("ammo") == 1) { if (mode == 1) {
burstFireSize = 1; if (stack.getOrCreateTag().getInt("ammo") == 1) {
burstFireSize = 1;
}
if (burstFireSize == 1) {
cantFireTime = 40;
}
burstFireSize--;
} }
burstFireSize--; if (stack.is(ModItems.DEVOTION.get())) {
customRpm = Math.min(customRpm + 20, 500);
}
if (stack.getItem() == ModItems.SENTINEL.get()) {
chamberRot = 1;
}
if (stack.getItem() == ModItems.NTW_20.get()) {
actionMove = 1;
}
playGunClientSounds(player); playGunClientSounds(player);
handleClientShoot(); handleClientShoot();
@ -304,12 +336,18 @@ public class ClientEventHandler {
} }
} }
public static void gunPartMove(float times) {
chamberRot = Mth.lerp(0.07 * times, chamberRot, 0);
actionMove = Mth.lerp(0.2 * times, actionMove, 0);
}
public static void handleClientShoot() { public static void handleClientShoot() {
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
CompoundTag tag = player.getMainHandItem().getOrCreateTag(); CompoundTag tag = player.getMainHandItem().getOrCreateTag();
if (!player.getMainHandItem().is(ModTags.Items.GUN)) return; if (!player.getMainHandItem().is(ModTags.Items.GUN)) return;
ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(gunSpread));
fireRecoilTime = 10; fireRecoilTime = 10;
float gunRecoilY = (float) tag.getDouble("recoil_y") * 10; float gunRecoilY = (float) tag.getDouble("recoil_y") * 10;
@ -766,7 +804,7 @@ public class ClientEventHandler {
float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
boolean breath = (entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).breath; boolean breath = (entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).breath;
breathTime = Mth.lerp(0.08f * times, breathTime, breath ? 1 : 0); breathTime = Mth.lerp(0.2f * times, breathTime, breath ? 1 : 0);
} }
private static void handleShockCamera(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) { private static void handleShockCamera(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) {

View file

@ -57,14 +57,14 @@ public class GunEventHandler {
private static void handleGunBolt(Player player) { private static void handleGunBolt(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
if (stack.getOrCreateTag().getInt("fire_animation") == 1 && stack.getOrCreateTag().getBoolean("need_bolt_action")) {
stack.getOrCreateTag().putInt("bolt_action_anim", stack.getOrCreateTag().getInt("bolt_action_time") + 1);
player.getCooldowns().addCooldown(stack.getItem(), stack.getOrCreateTag().getInt("bolt_action_time") + 1);
playGunBoltSounds(player);
}
if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) { if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) {
stack.getOrCreateTag().putInt("bolt_action_anim", stack.getOrCreateTag().getInt("bolt_action_anim") - 1); stack.getOrCreateTag().putInt("bolt_action_anim", stack.getOrCreateTag().getInt("bolt_action_anim") - 1);
} }
if (stack.getItem() == ModItems.MARLIN.get() && stack.getOrCreateTag().getInt("bolt_action_anim") == 9) {
stack.getOrCreateTag().putBoolean("empty", false);
}
if (stack.getOrCreateTag().getInt("bolt_action_anim") == 1) { if (stack.getOrCreateTag().getInt("bolt_action_anim") == 1) {
stack.getOrCreateTag().putBoolean("need_bolt_action", false); stack.getOrCreateTag().putBoolean("need_bolt_action", false);
} }
@ -271,11 +271,11 @@ public class GunEventHandler {
MinecraftForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack)); MinecraftForge.EVENT_BUS.post(new ReloadEvent.Pre(player, stack));
if (stack.is(ModTags.Items.OPEN_BOLT)) { if (stack.is(ModTags.Items.OPEN_BOLT)) {
if (tag.getInt("ammo") == 0) { if (tag.getInt("ammo") == 0) {
data.putInt("ReloadTime", data.getInt("EmptyReloadTime") + 2); data.putInt("ReloadTime", data.getInt("EmptyReloadTime") + 1);
stack.getOrCreateTag().putBoolean("is_empty_reloading", true); stack.getOrCreateTag().putBoolean("is_empty_reloading", true);
playGunEmptyReloadSounds(player); playGunEmptyReloadSounds(player);
} else { } else {
data.putInt("ReloadTime", (int) tag.getDouble("normal_reload_time") + 2); data.putInt("ReloadTime", (int) tag.getDouble("normal_reload_time") + 1);
stack.getOrCreateTag().putBoolean("is_normal_reloading", true); stack.getOrCreateTag().putBoolean("is_normal_reloading", true);
playGunNormalReloadSounds(player); playGunNormalReloadSounds(player);
} }
@ -284,9 +284,6 @@ public class GunEventHandler {
stack.getOrCreateTag().putBoolean("is_empty_reloading", true); stack.getOrCreateTag().putBoolean("is_empty_reloading", true);
playGunEmptyReloadSounds(player); playGunEmptyReloadSounds(player);
} }
if (stack.getItem() == ModItems.DEVOTION.get()) {
tag.putInt("customRpm", 0);
}
tag.putBoolean("start_reload", false); tag.putBoolean("start_reload", false);
} }
@ -317,7 +314,7 @@ public class GunEventHandler {
if (stack.getItem() == ModItems.M_60.get()) { if (stack.getItem() == ModItems.M_60.get()) {
if (data.getInt("ReloadTime") == 55) { if (data.getInt("ReloadTime") == 55) {
tag.putBoolean("bullet_chain", false); tag.putBoolean("HideBulletChain", false);
} }
} }
@ -506,16 +503,16 @@ public class GunEventHandler {
if (tag.getDouble("prepare_load_time") != 0 && tag.getInt("ammo") == 0) { if (tag.getDouble("prepare_load_time") != 0 && tag.getInt("ammo") == 0) {
playGunPrepareLoadReloadSounds(player); playGunPrepareLoadReloadSounds(player);
tag.putInt("prepare_load", (int) tag.getDouble("prepare_load_time") + 1); tag.putInt("prepare_load", (int) tag.getDouble("prepare_load_time") + 1);
player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("prepare_load_time") + 1); player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("prepare_load_time"));
} else if (tag.getDouble("prepare_empty") != 0 && tag.getInt("ammo") == 0) { } else if (tag.getDouble("prepare_empty") != 0 && tag.getInt("ammo") == 0) {
// 此处判断空仓换弹如莫辛纳甘 // 此处判断空仓换弹如莫辛纳甘
playGunEmptyPrepareSounds(player); playGunEmptyPrepareSounds(player);
tag.putInt("prepare", (int) tag.getDouble("prepare_empty") + 1); tag.putInt("prepare", (int) tag.getDouble("prepare_empty") + 1);
player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("prepare_empty") + 1); player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("prepare_empty"));
} else { } else {
playGunPrepareReloadSounds(player); playGunPrepareReloadSounds(player);
tag.putInt("prepare", (int) tag.getDouble("prepare_time") + 1); tag.putInt("prepare", (int) tag.getDouble("prepare_time") + 1);
player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("prepare_time") + 1); player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("prepare_time"));
} }
tag.putBoolean("force_stop", false); tag.putBoolean("force_stop", false);
@ -635,11 +632,15 @@ public class GunEventHandler {
// 三阶段 // 三阶段
if ((tag.getInt("iterative") == 1 && tag.getInt("reload_stage") == 3) || tag.getBoolean("force_stage3_start")) { if ((tag.getInt("iterative") == 1 && tag.getInt("reload_stage") == 3) || tag.getBoolean("force_stage3_start")) {
tag.putBoolean("force_stage3_start", false); tag.putBoolean("force_stage3_start", false);
tag.putDouble("finish", (int) tag.getDouble("finish_time") + 2); tag.putInt("finish", (int) tag.getDouble("finish_time") + 2);
player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("finish_time") + 2); player.getCooldowns().addCooldown(stack.getItem(), (int) tag.getDouble("finish_time") + 2);
playGunEndReloadSounds(player); playGunEndReloadSounds(player);
} }
if (stack.getItem() == ModItems.MARLIN.get() && tag.getInt("finish") == 10) {
tag.putBoolean("empty", false);
}
// 三阶段结束 // 三阶段结束
if (tag.getInt("finish") == 1) { if (tag.getInt("finish") == 1) {
tag.putInt("reload_stage", 0); tag.putInt("reload_stage", 0);

View file

@ -190,10 +190,6 @@ public class PlayerEventHandler {
* 判断玩家是否在奔跑 * 判断玩家是否在奔跑
*/ */
private static void handlePlayerSprint(Player player) { private static void handlePlayerSprint(Player player) {
if (player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) {
player.getPersistentData().putDouble("noRun", 10);
}
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).holdFire) { if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).holdFire) {
player.getPersistentData().putDouble("noRun", 10); player.getPersistentData().putDouble("noRun", 10);
} }

View file

@ -229,6 +229,7 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> MARLIN_PREPARE = REGISTRY.register("marlin_prepare", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_prepare"))); public static final RegistryObject<SoundEvent> MARLIN_PREPARE = REGISTRY.register("marlin_prepare", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_prepare")));
public static final RegistryObject<SoundEvent> MARLIN_LOOP = REGISTRY.register("marlin_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_loop"))); public static final RegistryObject<SoundEvent> MARLIN_LOOP = REGISTRY.register("marlin_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_loop")));
public static final RegistryObject<SoundEvent> MARLIN_END = REGISTRY.register("marlin_end", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_end"))); public static final RegistryObject<SoundEvent> MARLIN_END = REGISTRY.register("marlin_end", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_end")));
public static final RegistryObject<SoundEvent> MARLIN_BOLT = REGISTRY.register("marlin_bolt", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "marlin_bolt")));
public static final RegistryObject<SoundEvent> M_870_FIRE_1P = REGISTRY.register("m_870_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_fire_1p"))); public static final RegistryObject<SoundEvent> M_870_FIRE_1P = REGISTRY.register("m_870_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_fire_1p")));
public static final RegistryObject<SoundEvent> M_870_FIRE_3P = REGISTRY.register("m_870_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_fire_3p"))); public static final RegistryObject<SoundEvent> M_870_FIRE_3P = REGISTRY.register("m_870_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_fire_3p")));
@ -236,6 +237,7 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> M_870_VERYFAR = REGISTRY.register("m_870_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_veryfar"))); public static final RegistryObject<SoundEvent> M_870_VERYFAR = REGISTRY.register("m_870_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_veryfar")));
public static final RegistryObject<SoundEvent> M_870_PREPARE_LOAD = REGISTRY.register("m_870_prepare_load", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_prepare_load"))); public static final RegistryObject<SoundEvent> M_870_PREPARE_LOAD = REGISTRY.register("m_870_prepare_load", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_prepare_load")));
public static final RegistryObject<SoundEvent> M_870_LOOP = REGISTRY.register("m_870_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_loop"))); public static final RegistryObject<SoundEvent> M_870_LOOP = REGISTRY.register("m_870_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_loop")));
public static final RegistryObject<SoundEvent> M_870_BOLT = REGISTRY.register("m_870_bolt", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_870_bolt")));
public static final RegistryObject<SoundEvent> GLOCK_17_FIRE_1P = REGISTRY.register("glock_17_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "glock_17_fire_1p"))); public static final RegistryObject<SoundEvent> GLOCK_17_FIRE_1P = REGISTRY.register("glock_17_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "glock_17_fire_1p")));
public static final RegistryObject<SoundEvent> GLOCK_17_FIRE_3P = REGISTRY.register("glock_17_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "glock_17_fire_3p"))); public static final RegistryObject<SoundEvent> GLOCK_17_FIRE_3P = REGISTRY.register("glock_17_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "glock_17_fire_3p")));

View file

@ -65,10 +65,6 @@ public abstract class GunItem extends Item {
itemstack.getOrCreateTag().putBoolean("draw", false); itemstack.getOrCreateTag().putBoolean("draw", false);
} }
if (itemstack.getOrCreateTag().getInt("fire_animation") > 0) {
itemstack.getOrCreateTag().putInt("fire_animation", (itemstack.getOrCreateTag().getInt("fire_animation") - 1));
}
handleGunPerks(itemstack); handleGunPerks(itemstack);
handleGunAttachment(itemstack); handleGunAttachment(itemstack);

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.handgun; package net.mcreator.superbwarfare.item.gun.handgun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.Glock17ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.Glock17ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -73,10 +73,6 @@ public class Glock17Item extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.handgun; package net.mcreator.superbwarfare.item.gun.handgun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.Glock18ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.Glock18ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -12,7 +13,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -74,10 +74,6 @@ public class Glock18Item extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_empty"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.handgun; package net.mcreator.superbwarfare.item.gun.handgun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.M1911ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.M1911ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -67,21 +67,6 @@ public class M1911Item extends GunItem implements GeoItem, AnimatedItem {
transformType = type; transformType = type;
} }
private PlayState fireAnimPredicate(AnimationState<M1911Item> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m1911.fire"));
}
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle"));
}
private PlayState idlePredicate(AnimationState<M1911Item> event) { private PlayState idlePredicate(AnimationState<M1911Item> event) {
LocalPlayer player = Minecraft.getInstance().player; LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP; if (player == null) return PlayState.STOP;
@ -93,27 +78,25 @@ public class M1911Item extends GunItem implements GeoItem, AnimatedItem {
} }
if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.glock.reload_normal")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m1911.reload_normal"));
} }
if (player.isSprinting() && player.onGround() if (player.isSprinting() && player.onGround()
&& player.getPersistentData().getDouble("noRun") == 0 && player.getPersistentData().getDouble("noRun") == 0
&& !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) { && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && ClientEventHandler.drawTime < 0.01) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m1911.run_fast"));
} else { } else {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.run")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m1911.run"));
} }
} }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.glock.idle")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m1911.idle"));
} }
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var fireAnimController = new AnimationController<>(this, "fireAnimController", 0, this::fireAnimPredicate);
data.add(fireAnimController);
var idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate); var idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate);
data.add(idleController); data.add(idleController);
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.handgun; package net.mcreator.superbwarfare.item.gun.handgun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.TracheliumItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.TracheliumItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -83,10 +83,6 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("fire_animation") > 1) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.trachelium.reload"));
} }

View file

@ -80,12 +80,6 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
var tag = stack.getOrCreateTag();
if (tag.getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.reload"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.launcher; package net.mcreator.superbwarfare.item.gun.launcher;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.M79ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.M79ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
@ -82,10 +82,6 @@ public class M79Item extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m79.reload"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.launcher; package net.mcreator.superbwarfare.item.gun.launcher;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.RpgItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.RpgItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
@ -79,9 +79,7 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem {
var tag = stack.getOrCreateTag(); var tag = stack.getOrCreateTag();
if (tag.getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.reload"));

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.machinegun; package net.mcreator.superbwarfare.item.gun.machinegun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.M60ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.M60ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -12,7 +13,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -139,7 +139,7 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem {
itemstack.getOrCreateTag().putBoolean("draw", false); itemstack.getOrCreateTag().putBoolean("draw", false);
if (itemstack.getOrCreateTag().getInt("ammo") <= 5) { if (itemstack.getOrCreateTag().getInt("ammo") <= 5) {
itemstack.getOrCreateTag().putBoolean("bullet_chain", true); itemstack.getOrCreateTag().putBoolean("HideBulletChain", true);
} }
} }
super.inventoryTick(itemstack, level, entity, slot, selected); super.inventoryTick(itemstack, level, entity, slot, selected);

View file

@ -20,13 +20,11 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffects; import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;
import net.minecraft.world.level.Level;
import net.minecraftforge.client.extensions.common.IClientItemExtensions; import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
@ -70,6 +68,35 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem {
transformType = type; transformType = type;
} }
private PlayState fireAnimPredicate(AnimationState<MarlinItem> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift"));
}
if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.prepare"));
}
if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload"));
}
if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload2"));
}
if (stack.getOrCreateTag().getInt("reload_stage") == 3) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.finish"));
}
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.marlin.idle"));
}
private PlayState idlePredicate(AnimationState<MarlinItem> event) { private PlayState idlePredicate(AnimationState<MarlinItem> event) {
LocalPlayer player = Minecraft.getInstance().player; LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP; if (player == null) return PlayState.STOP;
@ -77,29 +104,7 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem {
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (transformType != null && transformType.firstPerson()) { if (transformType != null && transformType.firstPerson()) {
if (stack.getOrCreateTag().getDouble("marlin_animation_time") > 0 && !stack.getOrCreateTag().getBoolean("fastfiring")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift"));
}
if (stack.getOrCreateTag().getDouble("marlin_animation_time") > 0 && stack.getOrCreateTag().getBoolean("fastfiring")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift2"));
}
if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getDouble("prepare") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.prepare"));
}
if (stack.getOrCreateTag().getDouble("load_index") == 0 && stack.getOrCreateTag().getInt("reload_stage") == 2) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload"));
}
if (stack.getOrCreateTag().getDouble("load_index") == 1 && stack.getOrCreateTag().getInt("reload_stage") == 2) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload2"));
}
if (stack.getOrCreateTag().getInt("reload_stage") == 3) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.finish"));
}
if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
@ -117,6 +122,8 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem {
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate);
data.add(fireAnimController);
var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate);
data.add(idleController); data.add(idleController);
} }
@ -126,18 +133,12 @@ public class MarlinItem extends GunItem implements GeoItem, AnimatedItem {
return this.cache; return this.cache;
} }
@Override
public void inventoryTick(ItemStack itemstack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(itemstack, world, entity, slot, selected);
var tag = itemstack.getOrCreateTag();
if (tag.getDouble("marlin_animation_time") > 0) {
tag.putDouble("marlin_animation_time", tag.getDouble("marlin_animation_time") - 1);
}
}
@Override @Override
public Set<SoundEvent> getReloadSound() { public Set<SoundEvent> getReloadSound() {
return Set.of(ModSounds.MARLIN_LOOP.get(), ModSounds.MARLIN_PREPARE.get(), ModSounds.MARLIN_END.get()); return Set.of(ModSounds.MARLIN_LOOP.get(),
ModSounds.MARLIN_PREPARE.get(),
ModSounds.MARLIN_END.get(),
ModSounds.MARLIN_BOLT.get());
} }
public static ItemStack getGunInstance() { public static ItemStack getGunInstance() {

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.shotgun; package net.mcreator.superbwarfare.item.gun.shotgun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.Aa12ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.Aa12ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -12,7 +13,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.RarityTool; import net.mcreator.superbwarfare.tools.RarityTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -84,10 +84,6 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem {
if (this.animationProcedure.equals("empty")) { if (this.animationProcedure.equals("empty")) {
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aa12.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aa12.reload_empty")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aa12.reload_empty"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.shotgun; package net.mcreator.superbwarfare.item.gun.shotgun;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.M870ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.M870ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
@ -70,13 +70,13 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem {
transformType = type; transformType = type;
} }
private PlayState idlePredicate(AnimationState<M870Item> event) { private PlayState fireAnimPredicate(AnimationState<M870Item> event) {
LocalPlayer player = Minecraft.getInstance().player; LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP; if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getDouble("fire_animation") > 0 && stack.getOrCreateTag().getDouble("fire_animation") < 15) { if (stack.getOrCreateTag().getInt("bolt_action_anim") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.shift"));
} }
@ -100,6 +100,15 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.finish")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m870.finish"));
} }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.idle"));
}
private PlayState idlePredicate(AnimationState<M870Item> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) { if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && ClientEventHandler.drawTime < 0.01) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) { if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m870.run_fast"));
@ -114,6 +123,8 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem {
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate);
data.add(fireAnimController);
var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate); var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate);
data.add(idleController); data.add(idleController);
} }
@ -130,7 +141,9 @@ public class M870Item extends GunItem implements GeoItem, AnimatedItem {
@Override @Override
public Set<SoundEvent> getReloadSound() { public Set<SoundEvent> getReloadSound() {
return Set.of(ModSounds.M_870_PREPARE_LOAD.get(), ModSounds.M_870_LOOP.get()); return Set.of(ModSounds.M_870_PREPARE_LOAD.get(),
ModSounds.M_870_LOOP.get(),
ModSounds.M_870_BOLT.get());
} }
public static ItemStack getGunInstance() { public static ItemStack getGunInstance() {

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.sniper; package net.mcreator.superbwarfare.item.gun.sniper;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.Ntw20Renderer; import net.mcreator.superbwarfare.client.renderer.item.Ntw20Renderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -11,7 +12,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.RarityTool; import net.mcreator.superbwarfare.tools.RarityTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
@ -83,10 +83,6 @@ public class Ntw20Item extends GunItem implements GeoItem, AnimatedItem {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.shift"));
} }
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.reload_empty")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ntw_20.reload_empty"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.sniper; package net.mcreator.superbwarfare.item.gun.sniper;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.SentinelItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.SentinelItemRenderer;
import net.mcreator.superbwarfare.energy.ItemEnergyProvider; import net.mcreator.superbwarfare.energy.ItemEnergyProvider;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
@ -12,7 +13,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.RarityTool; import net.mcreator.superbwarfare.tools.RarityTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -196,10 +196,6 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem {
} }
} }
); );
if (tag.getDouble("chamber_rot") > 0) {
tag.putDouble("chamber_rot", tag.getDouble("chamber_rot") - 1);
}
} }
@Override @Override

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.special; package net.mcreator.superbwarfare.item.gun.special;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.TaserItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.TaserItemRenderer;
import net.mcreator.superbwarfare.energy.ItemEnergyProvider; import net.mcreator.superbwarfare.energy.ItemEnergyProvider;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
@ -13,7 +14,6 @@ import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool; import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
@ -126,10 +126,6 @@ public class TaserItem extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
if (stack.getOrCreateTag().getInt("fire_animation") > 1) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.reload")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.taser.reload"));
} }

View file

@ -70,6 +70,8 @@ public class FireMessage {
return; return;
} }
handleGunBolt(player, player.getMainHandItem());
if (type == 0) { if (type == 0) {
handlePlayerShoot(player); handlePlayerShoot(player);
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
@ -88,10 +90,6 @@ public class FireMessage {
handleBowShoot(player); handleBowShoot(player);
} }
if (player.getMainHandItem().getItem() == ModItems.DEVOTION.get()) {
player.getMainHandItem().getOrCreateTag().putDouble("customRpm", 0);
}
if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) { if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) {
var handItem = player.getMainHandItem(); var handItem = player.getMainHandItem();
var tag = handItem.getOrCreateTag(); var tag = handItem.getOrCreateTag();
@ -157,11 +155,12 @@ public class FireMessage {
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
}); });
} }
}
// 栓动武器左键手动拉栓 private static void handleGunBolt(Player player, ItemStack stack) {
if (tag.getInt("bolt_action_time") > 0 && tag.getInt("ammo") > 0 && tag.getInt("bolt_action_anim") == 0) { if (stack.getOrCreateTag().getInt("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 0 && stack.getOrCreateTag().getInt("bolt_action_anim") == 0) {
if (!player.getCooldowns().isOnCooldown(handItem.getItem()) && handItem.getOrCreateTag().getBoolean("need_bolt_action")) { if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getBoolean("need_bolt_action")) {
handItem.getOrCreateTag().putInt("bolt_action_anim", handItem.getOrCreateTag().getInt("bolt_action_time") + 1); stack.getOrCreateTag().putInt("bolt_action_anim", stack.getOrCreateTag().getInt("bolt_action_time") + 1);
GunEventHandler.playGunBoltSounds(player); GunEventHandler.playGunBoltSounds(player);
} }
} }
@ -225,7 +224,6 @@ public class FireMessage {
player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 7); player.getCooldowns().addCooldown(player.getMainHandItem().getItem(), 7);
player.getMainHandItem().getOrCreateTag().putInt("arrow_empty", 7); player.getMainHandItem().getOrCreateTag().putInt("arrow_empty", 7);
player.getMainHandItem().getOrCreateTag().putDouble("power", 0); player.getMainHandItem().getOrCreateTag().putDouble("power", 0);
stack.getOrCreateTag().putInt("fire_animation", 2);
int count = 0; int count = 0;
for (var inv : player.getInventory().items) { for (var inv : player.getInventory().items) {
@ -372,7 +370,6 @@ public class FireMessage {
level.addFreshEntity(taserBulletProjectile); level.addFreshEntity(taserBulletProjectile);
} }
stack.getOrCreateTag().putInt("fire_animation", 4);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
@ -428,7 +425,6 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
} }
stack.getOrCreateTag().putInt("fire_animation", 2);
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) {
@ -486,7 +482,6 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
} }
tag.putInt("fire_animation", 2);
tag.putInt("ammo", tag.getInt("ammo") - 1); tag.putInt("ammo", tag.getInt("ammo") - 1);
if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) {
@ -546,7 +541,6 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FAR.get(), SoundSource.PLAYERS, 10, 1);
} }
tag.putInt("fire_animation", 2);
tag.putInt("ammo", tag.getInt("ammo") - 1); tag.putInt("ammo", tag.getInt("ammo") - 1);
if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) {

View file

@ -8,14 +8,12 @@ import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.AmmoPerk;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.ParticleTool;
import net.mcreator.superbwarfare.tools.SoundTool; import net.mcreator.superbwarfare.tools.SoundTool;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -31,33 +29,30 @@ import static net.mcreator.superbwarfare.event.GunEventHandler.playGunSounds;
public class ShootMessage { public class ShootMessage {
private final double spread; private final double spread;
private final int burstSize;
public ShootMessage(double spread, int burstSize) { public ShootMessage(double spread) {
this.spread = spread; this.spread = spread;
this.burstSize = burstSize;
} }
public static ShootMessage decode(FriendlyByteBuf buffer) { public static ShootMessage decode(FriendlyByteBuf buffer) {
return new ShootMessage(buffer.readDouble(), buffer.readInt()); return new ShootMessage(buffer.readDouble());
} }
public static void encode(ShootMessage message, FriendlyByteBuf buffer) { public static void encode(ShootMessage message, FriendlyByteBuf buffer) {
buffer.writeDouble(message.spread); buffer.writeDouble(message.spread);
buffer.writeInt(message.burstSize);
} }
public static void handler(ShootMessage message, Supplier<NetworkEvent.Context> contextSupplier) { public static void handler(ShootMessage message, Supplier<NetworkEvent.Context> contextSupplier) {
NetworkEvent.Context context = contextSupplier.get(); NetworkEvent.Context context = contextSupplier.get();
context.enqueueWork(() -> { context.enqueueWork(() -> {
if (context.getSender() != null) { if (context.getSender() != null) {
pressAction(context.getSender(), message.spread, message.burstSize); pressAction(context.getSender(), message.spread);
} }
}); });
context.setPacketHandled(true); context.setPacketHandled(true);
} }
public static void pressAction(Player player, double spared, int burstSize) { public static void pressAction(Player player, double spared) {
Level level = player.level(); Level level = player.level();
if (!level.isLoaded(player.blockPosition())) { if (!level.isLoaded(player.blockPosition())) {
@ -66,23 +61,9 @@ public class ShootMessage {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
double rpm = stack.getOrCreateTag().getDouble("rpm") + stack.getOrCreateTag().getInt("customRpm");
int coolDownTick = (int) Math.ceil(20 / (rpm / 60));
int mode = GunsTool.getGunIntTag(stack, "FireMode");
int projectileAmount = (int) stack.getOrCreateTag().getDouble("projectile_amount"); int projectileAmount = (int) stack.getOrCreateTag().getDouble("projectile_amount");
if (stack.getOrCreateTag().getInt("ammo") > 0) { if (stack.getOrCreateTag().getInt("ammo") > 0) {
int singleInterval = 0;
int burstCooldown = 0;
if (mode == 0) {
singleInterval = coolDownTick;
} else if (mode == 1) {
burstCooldown = burstSize == 0 ? coolDownTick + 3 : 0;
}
/* /*
空仓挂机 空仓挂机
@ -99,16 +80,11 @@ public class ShootMessage {
} }
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1));
stack.getOrCreateTag().putInt("fire_animation", coolDownTick);
stack.getOrCreateTag().putDouble("empty", 1); stack.getOrCreateTag().putDouble("empty", 1);
if (stack.getItem() == ModItems.M_60.get()) { if (stack.getItem() == ModItems.M_60.get() && stack.getOrCreateTag().getInt("ammo") <= 5) {
stack.getOrCreateTag().putBoolean("bullet_chain", true); stack.getOrCreateTag().putBoolean("HideBulletChain", true);
}
if (stack.getItem() == ModItems.DEVOTION.get()) {
stack.getOrCreateTag().putInt("customRpm", Mth.clamp(stack.getOrCreateTag().getInt("customRpm") + 20, 0, 500));
} }
if (stack.getItem() == ModItems.ABEKIRI.get()) { if (stack.getItem() == ModItems.ABEKIRI.get()) {
@ -123,25 +99,8 @@ public class ShootMessage {
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false) iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false)
); );
stack.getOrCreateTag().putDouble("chamber_rot", 20);
} }
int customCoolDown = 0;
if (stack.getItem() == ModItems.MARLIN.get()) {
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) {
stack.getOrCreateTag().putDouble("marlin_animation_time", 15);
stack.getOrCreateTag().putBoolean("fastfiring", false);
customCoolDown = 5;
} else {
stack.getOrCreateTag().putDouble("marlin_animation_time", 10);
stack.getOrCreateTag().putBoolean("fastfiring", true);
}
}
int cooldown = burstCooldown + singleInterval + customCoolDown;
player.getCooldowns().addCooldown(stack.getItem(), cooldown);
var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO);
for (int index0 = 0; index0 < (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : projectileAmount); index0++) { for (int index0 = 0; index0 < (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : projectileAmount); index0++) {
@ -188,8 +147,6 @@ public class ShootMessage {
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
}); });
} }
tag.putInt("fire_animation", 2);
} }
} }
} }

View file

@ -1,11 +1,11 @@
{ {
"format_version": "1.8.0", "format_version": "1.8.0",
"animations": { "animations": {
"animation.glock.idle": { "animation.m1911.idle": {
"loop": true, "loop": true,
"animation_length": 2 "animation_length": 2
}, },
"animation.glock.run": { "animation.m1911.run": {
"loop": true, "loop": true,
"animation_length": 0.8, "animation_length": 0.8,
"bones": { "bones": {
@ -80,7 +80,7 @@
} }
} }
}, },
"animation.glock.run_fast": { "animation.m1911.run_fast": {
"loop": true, "loop": true,
"animation_length": 0.7, "animation_length": 0.7,
"bones": { "bones": {
@ -158,48 +158,7 @@
} }
} }
}, },
"animation.m1911.fire": { "animation.m1911.reload_normal": {
"loop": "hold_on_last_frame",
"animation_length": 0.1667,
"override_previous_animation": true,
"bones": {
"lun": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0417": {
"vector": [0, 0, -22.5]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0417": {
"vector": [0, 0, 0]
}
}
},
"roll": {
"rotation": {
"0.0": {
"vector": [-5, 0, 0]
},
"0.0833": {
"vector": [0, 0, 0],
"easing": "easeInElastic"
}
}
},
"hammer": {
"rotation": {
"vector": [60, 0, 0]
}
}
}
},
"animation.glock.reload_normal": {
"loop": "hold_on_last_frame", "loop": "hold_on_last_frame",
"animation_length": 1.4, "animation_length": 1.4,
"bones": { "bones": {
@ -278,55 +237,6 @@
} }
} }
}, },
"camera": {
"rotation": {
"0.05": {
"vector": [0, 0, 0]
},
"0.175": {
"vector": [2, -2, 1],
"easing": "easeInSine"
},
"0.25": {
"vector": [2.5, 3, -2],
"easing": "easeInElastic"
},
"0.3": {
"vector": [-1, -2, 1],
"easing": "easeInSine"
},
"0.375": {
"vector": [0, 2, -0.8]
},
"0.475": {
"vector": [-0.67, -0.67, 0.4]
},
"0.75": {
"vector": [0.5, 0, 1.2],
"easing": "easeOutSine"
},
"0.875": {
"vector": [-0.1, 0, 2]
},
"0.975": {
"vector": [0, 0, 1.5],
"easing": "easeInElastic"
},
"1.025": {
"vector": [1, 1, -2.5],
"easing": "easeInSine"
},
"1.1": {
"vector": [-0.5, -0.5, 1.5]
},
"1.2": {
"vector": [0.5, 0.5, -1.17]
},
"1.3": {
"vector": [0, 0, 0]
}
}
},
"Righthand": { "Righthand": {
"rotation": { "rotation": {
"0.25": { "0.25": {
@ -656,6 +566,55 @@
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
},
"camera": {
"rotation": {
"0.05": {
"vector": [0, 0, 0]
},
"0.175": {
"vector": [2, -2, 1],
"easing": "easeInSine"
},
"0.25": {
"vector": [2.5, 3, -2],
"easing": "easeInElastic"
},
"0.3": {
"vector": [-1, -2, 1],
"easing": "easeInSine"
},
"0.375": {
"vector": [0, 2, -0.8]
},
"0.475": {
"vector": [-0.67, -0.67, 0.4]
},
"0.75": {
"vector": [0.5, 0, 1.2],
"easing": "easeOutSine"
},
"0.875": {
"vector": [-0.1, 0, 2]
},
"0.975": {
"vector": [0, 0, 1.5],
"easing": "easeInElastic"
},
"1.025": {
"vector": [1, 1, -2.5],
"easing": "easeInSine"
},
"1.1": {
"vector": [-0.5, -0.5, 1.5]
},
"1.2": {
"vector": [0.5, 0.5, -1.17]
},
"1.3": {
"vector": [0, 0, 0]
}
}
} }
} }
}, },

View file

@ -193,62 +193,6 @@
} }
} }
}, },
"animation.m870.draw": {
"animation_length": 1,
"bones": {
"main": {
"rotation": {
"0.0": {
"vector": [27.21312, -47.42646, -2.0218]
},
"0.2917": {
"vector": [12.5, -15, 0]
},
"0.4167": {
"vector": [3.48268, 0.40464, 8.20687]
},
"0.5833": {
"vector": [0, 0, -2]
},
"0.7083": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [3, -17.3, 0]
},
"0.4167": {
"vector": [0, 0, -1.65]
},
"0.5": {
"vector": [0, 0, 0.93]
},
"0.7083": {
"vector": [0, 0, 0]
}
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.4167": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [0.25, -0.5, 0.5],
"easing": "easeInSine"
},
"0.5833": {
"vector": [0, 0, 0],
"easing": "easeOutSine"
}
}
}
}
},
"animation.m870.prepare": { "animation.m870.prepare": {
"animation_length": 0.75, "animation_length": 0.75,
"bones": { "bones": {
@ -1191,38 +1135,33 @@
} }
}, },
"animation.m870.shift": { "animation.m870.shift": {
"animation_length": 0.675, "loop": "hold_on_last_frame",
"animation_length": 1,
"bones": { "bones": {
"main": { "main": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.05": { "0.1": {
"vector": [-12.70704, -2.00287, -6.82365] "vector": [-0.90661, -0.7335, -2.65556]
}, },
"0.175": { "0.15": {
"vector": [-4.73303, -1.97055, -6.0739] "vector": [-1.39899, -0.87335, 6.1433],
},
"0.225": {
"vector": [-4.60652, -1.80399, -2.32556]
},
"0.3": {
"vector": [-7.39899, -0.87335, 6.1433],
"easing": "easeOutSine" "easing": "easeOutSine"
}, },
"0.375": { "0.225": {
"vector": [-5.75249, -0.05015, 7.75233], "vector": [-0.75249, -0.05015, 7.75233],
"easing": "easeInCirc" "easing": "easeInCirc"
}, },
"0.475": { "0.325": {
"vector": [-3.15429, -0.87108, -4.64335], "vector": [-0.15429, -0.87108, -4.64335],
"easing": "easeOutQuad" "easing": "easeOutQuad"
}, },
"0.575": { "0.425": {
"vector": [-1.60854, 0.22225, 3.17569] "vector": [-1.60854, 0.22225, 3.17569]
}, },
"0.675": { "0.525": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
@ -1230,30 +1169,24 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.05": { "0.075": {
"vector": [-0.375, 0.1, 3.575] "vector": [0, 0, -0.25]
}, },
"0.125": { "0.175": {
"vector": [-0.63, -0.4, 1.375] "vector": [-0.155, -0.475, 0.45],
"easing": "easeInOutSine"
}, },
"0.25": { "0.275": {
"vector": [-0.39, -0.44, 1.06] "vector": [-0.155, -0.475, 0.45],
"easing": "easeInOutSine"
}, },
"0.325": { "0.325": {
"vector": [-0.155, -0.475, 2.95],
"easing": "easeInOutSine"
},
"0.425": {
"vector": [-0.155, -0.475, 2.95],
"easing": "easeInOutSine"
},
"0.475": {
"vector": [-0.06, -0.19, 0.7] "vector": [-0.06, -0.19, 0.7]
}, },
"0.55": { "0.4": {
"vector": [0, 0, -0.4] "vector": [0, 0, -0.4]
}, },
"0.675": { "0.525": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
@ -1263,10 +1196,10 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.2": { "0.05": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.525": { "0.375": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
@ -1274,16 +1207,16 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.2": { "0.05": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.275": { "0.125": {
"vector": [0, 0, 2.5] "vector": [0, 0, 2.5]
}, },
"0.45": { "0.3": {
"vector": [0, 0, 2.5] "vector": [0, 0, 2.5]
}, },
"0.525": { "0.375": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
@ -1323,19 +1256,19 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.175": { "0.025": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.2": { "0.05": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.25": { "0.1": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.425": { "0.275": {
"vector": [0, 200, 0] "vector": [0, 200, 0]
}, },
"0.45": { "0.3": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
@ -1343,104 +1276,97 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.175": { "0.025": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.2": { "0.05": {
"vector": [0, 1.3, -0.2] "vector": [0, 1.3, -0.2]
}, },
"0.25": { "0.1": {
"vector": [0, 1.3, 1.5] "vector": [0, 1.3, 1.5]
}, },
"0.275": { "0.125": {
"vector": [-3.02654, 1.74663, 1.62913] "vector": [-3.02654, 1.74663, 1.62913]
}, },
"0.3": { "0.15": {
"vector": [-5.37048, 1.67247, 1.20688] "vector": [-5.37048, 1.67247, 1.20688]
}, },
"0.325": { "0.175": {
"vector": [-7.70182, 1.64131, 1.28384] "vector": [-7.70182, 1.64131, 1.28384]
}, },
"0.35": { "0.2": {
"vector": [-9.97823, 1.51902, 1.84468] "vector": [-9.97823, 1.51902, 1.84468]
}, },
"0.375": { "0.225": {
"vector": [-12.48333, 1.10912, 2.30914] "vector": [-12.48333, 1.10912, 2.30914]
}, },
"0.4": { "0.25": {
"vector": [-14.74357, 2.32811, 3.06307] "vector": [-14.74357, 2.32811, 3.06307]
}, },
"0.425": { "0.275": {
"vector": [-1508.57, 2.02, 2.78] "vector": [-1508.57, 2.02, 2.78]
}, },
"0.45": { "0.3": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
"scale": { "scale": {
"0.0": {
"vector": [0, 0, 0]
},
"0.2": {
"vector": [1, 1, 1]
},
"0.375": {
"vector": [1, 1, 1]
},
"0.4": {
"vector": [0, 0, 0]
}
}
},
"camera": {
"rotation": {
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.05": { "0.05": {
"vector": [-2, -1, -2] "vector": [1, 1, 1]
}, },
"0.1": { "0.225": {
"vector": [-1.5, 0.5, 1] "vector": [1, 1, 1]
}, },
"0.175": { "0.25": {
"vector": [-1, -0.25, -0.5]
},
"0.2": {
"vector": [-0.94, -0.24, 0]
},
"0.3": {
"vector": [-0.71, -1.5, 2]
},
"0.35": {
"vector": [-0.59, 0.3, 0.5]
},
"0.425": {
"vector": [-0.35, -0.4, -1.5]
},
"0.5": {
"vector": [-0.15, 0.3, 0.64]
},
"0.6": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
}, },
"Lefthand": { "Lefthand": {
"position": { "position": {
"0.2": { "0.05": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.275": { "0.125": {
"vector": [0, 0, 2.5] "vector": [0, 0, 2.5]
}, },
"0.45": { "0.3": {
"vector": [0, 0, 2.5] "vector": [0, 0, 2.5]
}, },
"0.525": { "0.375": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
},
"camera": {
"rotation": {
"0.075": {
"vector": [0, 0, 0]
},
"0.15": {
"vector": [-0.71, -1.5, 2]
},
"0.2": {
"vector": [-0.59, 0.3, 0.5]
},
"0.275": {
"vector": [-0.35, -0.4, -1.5]
},
"0.35": {
"vector": [-0.15, 0.3, 0.64]
},
"0.45": {
"vector": [0, 0, 0]
}
}
}
},
"sound_effects": {
"0.0": {
"effect": "m_870_bolt"
} }
} }
}, },

View file

@ -3,86 +3,7 @@
"animations": { "animations": {
"animation.marlin.idle": { "animation.marlin.idle": {
"loop": true, "loop": true,
"animation_length": 2, "animation_length": 2
"bones": {
"bullet": {
"scale": {
"vector": [0, 0, 0]
}
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
}
}
},
"animation.marlin.draw": {
"animation_length": 1,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [27.21312, -47.42646, -2.0218]
},
"0.3": {
"vector": [12.5, -15, 0]
},
"0.4": {
"vector": [3.48268, 0.40464, 8.20687]
},
"0.6": {
"vector": [0, 0, -2]
},
"0.7": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [3, -17.3, 0]
},
"0.4": {
"vector": [0, 0, -1.65]
},
"0.5": {
"vector": [0, 0, 0.93]
},
"0.7": {
"vector": [0, 0, 0]
}
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.4": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [0.25, -0.5, 0.5],
"easing": "easeInSine"
},
"0.6": {
"vector": [0, 0, 0],
"easing": "easeOutSine"
}
}
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
}
}
}, },
"animation.marlin.run": { "animation.marlin.run": {
"loop": true, "loop": true,
@ -130,11 +51,6 @@
} }
} }
}, },
"bullet": {
"scale": {
"vector": [0, 0, 0]
}
},
"camera": { "camera": {
"rotation": { "rotation": {
"0.0": { "0.0": {
@ -153,14 +69,6 @@
"vector": [-0.3, -0.3, 0.3] "vector": [-0.3, -0.3, 0.3]
} }
} }
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
} }
} }
}, },
@ -301,83 +209,28 @@
} }
} }
}, },
"animation.marlin.fire": {
"animation_length": 0.1083,
"bones": {
"0": {
"rotation": {
"vector": [0, 0, 0]
},
"position": {
"vector": [0, 0, 0]
}
},
"bullet": {
"scale": {
"vector": [0, 0, 0]
}
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
}
}
},
"animation.marlin.fire2": {
"animation_length": 0.1083,
"bones": {
"0": {
"rotation": {
"vector": [0, 0, 0]
},
"position": {
"vector": [0, 0, 0]
}
},
"bullet": {
"scale": {
"vector": [0, 0, 0]
}
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
}
}
},
"animation.marlin.shift": { "animation.marlin.shift": {
"loop": "hold_on_last_frame", "loop": "hold_on_last_frame",
"animation_length": 0.6, "animation_length": 0.6,
"bones": { "bones": {
"0": { "0": {
"rotation": { "rotation": {
"0.0": { "0.05": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.0667": { "0.1167": {
"vector": [-0.07669, 0.14268, -5.6755] "vector": [-0.93779, 0.20262, 8.99033]
}, },
"0.1333": { "0.1833": {
"vector": [-0.20051, 0.51542, 4.52219], "vector": [-0.03704, 0, -3.62963]
"easing": "easeInOutSine"
}, },
"0.2167": { "0.3": {
"vector": [-2.16, 0.41, 3.62], "vector": [-2.69136, 0, -2.41975]
"easing": "easeInSine"
}, },
"0.3333": { "0.4167": {
"vector": [-0.44, 0.27, 2.41], "vector": [2.0388, 0, -0.8642]
"easing": "easeOutSine"
}, },
"0.5667": { "0.5333": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
@ -385,23 +238,22 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.1": { "0.1333": {
"vector": [-0.4, -0.2, 0.6], "vector": [0, -0.6, 0.5]
"easing": "easeInElastic"
}, },
"0.1833": { "0.2167": {
"vector": [-0.42, -0.46, -0.27], "vector": [0, -0.43, -1.06]
"easing": "easeInElastic"
}, },
"0.2667": { "0.3167": {
"vector": [-0.28, -0.11, -0.18], "vector": [0.02682, -0.98905, -1.45462]
"easing": "easeInElastic"
}, },
"0.4167": { "0.3833": {
"vector": [-0.14, 0.1, 0.41], "vector": [0, -0.16, 1.23]
"easing": "easeInElastic"
}, },
"0.5667": { "0.4667": {
"vector": [0, 0, -0.5]
},
"0.5333": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
@ -411,15 +263,23 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.0833": { "0.1167": {
"vector": [-5.322, 11.403, 4.10285], "vector": [-5.322, 11.403, 4.10285],
"easing": "easeOutSine" "easing": "easeOutSine"
}, },
"0.25": { "0.1333": {
"vector": [-20.32, 11.4, 4.1], "vector": [-5.322, 11.403, 4.10285],
"easing": "easeInElastic" "easing": "easeOutSine"
}, },
"0.4": { "0.2167": {
"vector": [-20.32, 11.4, 4.1],
"easing": "linear"
},
"0.35": {
"vector": [-20.32, 11.4, 4.1],
"easing": "linear"
},
"0.3833": {
"vector": [-5.322, 11.403, 4.10285], "vector": [-5.322, 11.403, 4.10285],
"easing": "easeInOutCubic" "easing": "easeInOutCubic"
}, },
@ -431,15 +291,23 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.0833": { "0.1167": {
"vector": [-1.9, -0.1, -0.1], "vector": [-1.9, -0.1, -0.1],
"easing": "easeOutSine" "easing": "easeOutSine"
}, },
"0.25": { "0.1333": {
"vector": [-1.9, -0.1, -2.3], "vector": [-1.9, -0.1, -0.1],
"easing": "easeInElastic" "easing": "easeOutSine"
}, },
"0.4": { "0.2167": {
"vector": [-1.9, -0.1, -2.3],
"easing": "linear"
},
"0.35": {
"vector": [-1.9, -0.1, -2.3],
"easing": "linear"
},
"0.3833": {
"vector": [-1.9, -0.1, -0.1], "vector": [-1.9, -0.1, -0.1],
"easing": "easeInOutCubic" "easing": "easeInOutCubic"
}, },
@ -450,14 +318,21 @@
}, },
"ganggan": { "ganggan": {
"rotation": { "rotation": {
"0.0833": { "0.1167": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.25": { "0.1333": {
"vector": [-60, 0, 0], "vector": [0, 0, 0]
"easing": "easeInElastic"
}, },
"0.4": { "0.2167": {
"vector": [-60, 0, 0],
"easing": "linear"
},
"0.35": {
"vector": [-60, 0, 0],
"easing": "linear"
},
"0.3833": {
"vector": [0, 0, 0], "vector": [0, 0, 0],
"easing": "easeInElastic" "easing": "easeInElastic"
} }
@ -473,14 +348,21 @@
}, },
"huakuai": { "huakuai": {
"position": { "position": {
"0.0833": { "0.1167": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.25": { "0.1333": {
"vector": [0, 0, 1.9], "vector": [0, 0, 0]
"easing": "easeInElastic"
}, },
"0.4": { "0.2167": {
"vector": [0, 0, 1.9],
"easing": "linear"
},
"0.35": {
"vector": [0, 0, 1.9],
"easing": "linear"
},
"0.3833": {
"vector": [0, 0, 0], "vector": [0, 0, 0],
"easing": "easeInElastic" "easing": "easeInElastic"
} }
@ -552,9 +434,6 @@
} }
}, },
"scale": { "scale": {
"0.0": {
"vector": [0, 0, 0]
},
"0.1": { "0.1": {
"vector": [1, 1, 1] "vector": [1, 1, 1]
}, },
@ -586,255 +465,11 @@
"easing": "easeInElastic" "easing": "easeInElastic"
} }
} }
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
} }
} },
}, "sound_effects": {
"animation.marlin.shift2": { "0.0": {
"loop": "hold_on_last_frame", "effect": "marlin_end"
"animation_length": 0.5,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.05": {
"vector": [-0.07669, 0.14268, -5.6755]
},
"0.1333": {
"vector": [-0.20051, 0.51542, 4.52219],
"easing": "easeInOutSine"
},
"0.2": {
"vector": [-2.16, 0.41, 3.62],
"easing": "easeInSine"
},
"0.2833": {
"vector": [-0.44, 0.27, 2.41],
"easing": "easeOutSine"
},
"0.45": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.1": {
"vector": [-0.4, -0.2, 0.6],
"easing": "easeInElastic"
},
"0.1667": {
"vector": [-0.42, -0.46, -0.27],
"easing": "easeInElastic"
},
"0.2333": {
"vector": [-0.28, -0.11, -0.18],
"easing": "easeInElastic"
},
"0.3167": {
"vector": [-0.14, 0.1, 0.41],
"easing": "easeInElastic"
},
"0.45": {
"vector": [0, 0, 0]
}
}
},
"Righthand": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0667": {
"vector": [-5.322, 11.403, 4.10285],
"easing": "easeOutSine"
},
"0.1667": {
"vector": [-20.32, 11.4, 4.1],
"easing": "easeInElastic"
},
"0.2833": {
"vector": [-5.322, 11.403, 4.10285],
"easing": "easeInOutCubic"
},
"0.4167": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0667": {
"vector": [-1.9, -0.1, -0.1],
"easing": "easeOutSine"
},
"0.1667": {
"vector": [-1.9, -0.1, -2.3],
"easing": "easeInElastic"
},
"0.2833": {
"vector": [-1.9, -0.1, -0.1],
"easing": "easeInOutCubic"
},
"0.4167": {
"vector": [0, 0, 0]
}
}
},
"ganggan": {
"rotation": {
"0.0667": {
"vector": [0, 0, 0]
},
"0.1667": {
"vector": [-60, 0, 0],
"easing": "easeInElastic"
},
"0.2833": {
"vector": [0, 0, 0],
"easing": "easeInElastic"
}
}
},
"bullethead": {
"position": {
"vector": [0, 0, 0]
},
"scale": {
"vector": [0, 0, 0]
}
},
"huakuai": {
"position": {
"0.0667": {
"vector": [0, 0, 0]
},
"0.1667": {
"vector": [0, 0, 1.9],
"easing": "easeInElastic"
},
"0.2833": {
"vector": [0, 0, 0],
"easing": "easeInElastic"
}
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0667": {
"vector": [1, 0.5, 1]
},
"0.1833": {
"vector": [1, -2, -2],
"easing": "easeInElastic"
},
"0.3": {
"vector": [1, 0.5, 1]
},
"0.45": {
"vector": [0, 0, 0],
"easing": "easeInElastic"
}
}
},
"bullet": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.05": {
"vector": [0, 0, 0]
},
"0.0667": {
"vector": [0, 0, 0]
},
"0.1167": {
"vector": [0, 0, 0]
},
"0.25": {
"vector": [0, 200, 0]
},
"0.2833": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.05": {
"vector": [0, 0, 0]
},
"0.0667": {
"vector": [0, 0, -0.2]
},
"0.1167": {
"vector": [0, 0, 1.5]
},
"0.15": {
"vector": [-2.32654, 0.7466, 1.92913]
},
"0.1667": {
"vector": [-4.27048, 1.1725, 2.40688]
},
"0.1833": {
"vector": [-5.89, 1.36, 2.95]
},
"0.2": {
"vector": [-7.50182, 1.3413, 3.68384]
},
"0.2167": {
"vector": [-8.97823, 1.019, 4.34468]
},
"0.2333": {
"vector": [-10.23, 0.46, 5.08]
},
"0.25": {
"vector": [-1508.57, 2.02, 2.78]
},
"0.2667": {
"vector": [0, 0, 0]
}
},
"scale": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0333": {
"vector": [1, 1, 1]
},
"0.25": {
"vector": [1, 1, 1]
},
"0.2667": {
"vector": [0, 0, 0]
},
"0.45": {
"vector": [0, 0, 0]
}
}
},
"Lefthand": {
"rotation": {
"vector": [-36.92278, -14.87784, 55.91421]
},
"position": {
"vector": [-1.3, 1.55, -1.15]
}
} }
} }
}, },
@ -850,8 +485,8 @@
"0.0417": { "0.0417": {
"vector": [-7.64829, -3.7641, 21.26762] "vector": [-7.64829, -3.7641, 21.26762]
}, },
"0.2": { "0.125": {
"vector": [-18.239, 20.14826, 45.50003] "vector": [-17.17955, 5.85094, 50.17078]
}, },
"0.25": { "0.25": {
"vector": [-19.51825, 23.01719, 49.32139], "vector": [-19.51825, 23.01719, 49.32139],
@ -862,41 +497,36 @@
"0.0": { "0.0": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.125": {
"vector": [-0.18, -0.21, 0.32]
},
"0.25": { "0.25": {
"vector": [-0.6, 3.38, 1.1], "vector": [-0.6, 3.38, 1.1],
"easing": "easeInOutSine" "easing": "easeInSine"
} }
} }
}, },
"Lefthand": { "Lefthand": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-36.92278, -14.87784, 55.91421] "vector": [0, 0, 0]
}, },
"0.0833": { "0.125": {
"vector": [-36.92278, -14.87784, 55.91421] "vector": [-29.5, 0, 0]
}, },
"0.25": { "0.25": {
"vector": [-69.73114, -16.81988, 61.84372], "vector": [-45, 0, 0]
"easing": "linear"
} }
}, },
"position": { "position": {
"0.0": { "0.0": {
"vector": [-1.3, 1.55, -1.15] "vector": [0, 0, 0]
}, },
"0.0833": { "0.125": {
"vector": [-1.3, 1.55, -1.15] "vector": [4.23155, 4.59678, -0.20118]
},
"0.1333": {
"vector": [3.71625, 2.71032, -0.24509]
},
"0.1667": {
"vector": [3.91675, 3.95006, 0.32566]
}, },
"0.25": { "0.25": {
"vector": [3.68428, 6.19247, 0.90079], "vector": [5.5774, 7.76512, -0.33163]
"easing": "linear"
} }
} }
}, },
@ -1038,22 +668,18 @@
"Lefthand": { "Lefthand": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-72.73114, -16.81988, 61.84372], "vector": [-45, 0, 0]
"easing": "linear"
}, },
"0.8333": { "0.825": {
"vector": [-72.73114, -16.81988, 61.84372], "vector": [-45, 0, 0]
"easing": "linear"
} }
}, },
"position": { "position": {
"0.0": { "0.0": {
"vector": [3.68428, 6.19247, 0.90079], "vector": [5.5774, 7.76512, -0.33163]
"easing": "linear"
}, },
"0.8333": { "0.825": {
"vector": [3.68428, 6.19247, 0.90079], "vector": [5.5774, 7.76512, -0.33163]
"easing": "linear"
} }
} }
}, },
@ -1285,22 +911,18 @@
"Lefthand": { "Lefthand": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-72.73114, -16.81988, 61.84372], "vector": [-45, 0, 0]
"easing": "linear"
}, },
"0.8333": { "0.825": {
"vector": [-72.73114, -16.81988, 61.84372], "vector": [-45, 0, 0]
"easing": "linear"
} }
}, },
"position": { "position": {
"0.0": { "0.0": {
"vector": [3.68428, 6.19247, 0.90079], "vector": [5.5774, 7.76512, -0.33163]
"easing": "linear"
}, },
"0.8333": { "0.825": {
"vector": [3.68428, 6.19247, 0.90079], "vector": [5.5774, 7.76512, -0.33163]
"easing": "linear"
} }
} }
}, },
@ -1419,7 +1041,7 @@
}, },
"animation.marlin.finish": { "animation.marlin.finish": {
"loop": "hold_on_last_frame", "loop": "hold_on_last_frame",
"animation_length": 0.7083, "animation_length": 1,
"bones": { "bones": {
"0": { "0": {
"rotation": { "rotation": {
@ -1438,16 +1060,16 @@
"vector": [-19.12116, 5.55971, 55.71985], "vector": [-19.12116, 5.55971, 55.71985],
"easing": "easeInBack" "easing": "easeInBack"
}, },
"0.45": { "0.4083": {
"vector": [-7.92819, 1.03543, 32.79611] "vector": [-7.92819, 1.03543, 32.79611]
}, },
"0.5417": { "0.4917": {
"vector": [-7.97396, 1.43681, 13.3542] "vector": [0, 0, 0]
}, },
"0.65": { "0.575": {
"vector": [0, 0, -3] "vector": [-2, 0, 0]
}, },
"0.7": { "0.7083": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
@ -1470,13 +1092,13 @@
"vector": [0.13, 0.31, -0.21] "vector": [0.13, 0.31, -0.21]
}, },
"0.4": { "0.4": {
"vector": [0, 0.25, -0.65] "vector": [0, 0.25, -1.65]
}, },
"0.5": { "0.5083": {
"vector": [0, 0.25, 0.93] "vector": [0, 0.16, 1.15]
}, },
"0.6417": { "0.6167": {
"vector": [0, -0.25, -0.45] "vector": [0, 0.07, -0.4]
}, },
"0.7": { "0.7": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
@ -1485,36 +1107,36 @@
}, },
"Righthand": { "Righthand": {
"rotation": { "rotation": {
"0.1417": { "0.0833": {
"vector": [-5.322, 11.403, 4.10285], "vector": [-5.322, 11.403, 4.10285],
"easing": "easeOutSine" "easing": "easeOutSine"
}, },
"0.3417": { "0.2": {
"vector": [-20.32, 11.4, 4.1], "vector": [-20.32, 11.4, 4.1],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"0.5417": { "0.2667": {
"vector": [-5.322, 11.403, 4.10285], "vector": [-5.322, 11.403, 4.10285],
"easing": "easeInOutCubic" "easing": "easeInOutCubic"
}, },
"0.675": { "0.4": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
}, },
"position": { "position": {
"0.1417": { "0.0833": {
"vector": [-1.9, -0.1, -0.1], "vector": [-1.9, -0.1, -0.1],
"easing": "easeOutSine" "easing": "easeOutSine"
}, },
"0.3417": { "0.2": {
"vector": [-1.9, -0.1, -2.3], "vector": [-1.9, -0.1, -2.3],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"0.5417": { "0.2667": {
"vector": [-1.9, -0.1, -0.1], "vector": [-1.9, -0.1, -0.1],
"easing": "easeInOutCubic" "easing": "easeInOutCubic"
}, },
"0.675": { "0.4": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
} }
} }
@ -1522,42 +1144,43 @@
"Lefthand": { "Lefthand": {
"rotation": { "rotation": {
"0.0": { "0.0": {
"vector": [-69.73114, -16.81988, 61.84372], "vector": [-45, 0, 0]
"easing": "linear"
}, },
"0.325": { "0.2333": {
"vector": [-46.1235, -16.17767, 13.61388] "vector": [-45, 0, 0]
},
"0.425": {
"vector": [-30.76, 0, 0]
}, },
"0.575": { "0.575": {
"vector": [-36.92278, -14.87784, 55.91421] "vector": [0, 0, 0]
} }
}, },
"position": { "position": {
"0.0": { "0.0": {
"vector": [3.68428, 6.19247, 0.90079], "vector": [5.5774, 7.76512, -0.33163]
"easing": "linear"
}, },
"0.325": { "0.2333": {
"vector": [3.72757, 8.02813, -1.43582] "vector": [5.5774, 7.76512, -0.33163]
}, },
"0.4583": { "0.425": {
"vector": [2.00609, 4.04766, -2.19] "vector": [4.47999, 4.39556, -0.18687]
}, },
"0.575": { "0.575": {
"vector": [-1.3, 1.55, -1.15] "vector": [0, 0, 0]
} }
} }
}, },
"ganggan": { "ganggan": {
"rotation": { "rotation": {
"0.1417": { "0.0833": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.3417": { "0.2": {
"vector": [-60, 0, 0], "vector": [-60, 0, 0],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"0.5417": { "0.2667": {
"vector": [0, 0, 0], "vector": [0, 0, 0],
"easing": "easeInElastic" "easing": "easeInElastic"
} }
@ -1565,14 +1188,14 @@
}, },
"huakuai": { "huakuai": {
"position": { "position": {
"0.1417": { "0.0833": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.3417": { "0.2": {
"vector": [0, 0, 1.9], "vector": [0, 0, 1.9],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"0.5417": { "0.2667": {
"vector": [0, 0, 0], "vector": [0, 0, 0],
"easing": "easeInElastic" "easing": "easeInElastic"
} }

View file

@ -152,47 +152,6 @@
} }
} }
}, },
"animation.ntw_20.fire": {
"loop": "hold_on_last_frame",
"animation_length": 0.7917,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [-5, 0, 0]
},
"0.1667": {
"vector": [0, 0, 0],
"easing": "easeInElastic"
}
}
},
"action": {
"position": {
"0.0": {
"vector": [0, 0, 4]
},
"0.3333": {
"vector": [0, 0, 0],
"easing": "easeInBounce",
"easingArgs": [0.1]
}
}
},
"Lefthand": {
"position": {
"0.0": {
"vector": [0, 0, -4]
},
"0.3333": {
"vector": [0, 0, 0],
"easing": "easeInBounce",
"easingArgs": [0.1]
}
}
}
}
},
"animation.ntw_20.shift": { "animation.ntw_20.shift": {
"loop": "hold_on_last_frame", "loop": "hold_on_last_frame",
"animation_length": 2, "animation_length": 2,

View file

@ -166,30 +166,6 @@
} }
} }
}, },
"animation.trachelium.fire": {
"animation_length": 0.0417,
"override_previous_animation": true,
"bones": {
"lun": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0417": {
"vector": [0, 0, -22.5]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.0417": {
"vector": [0, 0, 0]
}
}
}
}
},
"animation.trachelium.reload": { "animation.trachelium.reload": {
"loop": "hold_on_last_frame", "loop": "hold_on_last_frame",
"animation_length": 3, "animation_length": 3,
@ -1351,62 +1327,6 @@
} }
} }
} }
},
"animation.trachelium.draw": {
"animation_length": 0.6,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [27.21312, -47.42646, -2.0218]
},
"0.1": {
"vector": [12.5, -15, 0]
},
"0.2": {
"vector": [3.48268, 0.40464, 8.20687]
},
"0.4": {
"vector": [0, 0, -2]
},
"0.5": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [3, -17.3, 0]
},
"0.2": {
"vector": [0, 0, -1.65]
},
"0.3": {
"vector": [0, 0, 0.93]
},
"0.5": {
"vector": [0, 0, 0]
}
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.2": {
"vector": [0, 0, 0]
},
"0.3": {
"vector": [0.25, -0.5, 0.5],
"easing": "easeInSine"
},
"0.4": {
"vector": [0, 0, 0],
"easing": "easeOutSine"
}
}
}
}
} }
}, },
"geckolib_format_version": 2 "geckolib_format_version": 2

View file

@ -32,7 +32,7 @@
{ {
"name": "shen", "name": "shen",
"parent": "bone", "parent": "bone",
"pivot": [0, 0, 0] "pivot": [0, 0, 8]
}, },
{ {
"name": "0", "name": "0",
@ -62,11 +62,11 @@
{ {
"name": "Lefthand", "name": "Lefthand",
"parent": "0", "parent": "0",
"pivot": [4.5, -7.2, 4.6], "pivot": [3.40584, -7.42087, 4.12016],
"rotation": [138.9854, -17.66046, 170.45987], "rotation": [108.94926, -42.40297, -138.34723],
"cubes": [ "cubes": [
{ {
"origin": [2.5, -7.2, 2.6], "origin": [1.40584, -7.42087, 2.12016],
"size": [4, 12, 4], "size": [4, 12, 4],
"uv": { "uv": {
"north": {"uv": [7, 12], "uv_size": [3, 12]}, "north": {"uv": [7, 12], "uv_size": [3, 12]},

View file

@ -32,7 +32,7 @@
{ {
"name": "shen", "name": "shen",
"parent": "bone", "parent": "bone",
"pivot": [0, 0, 0] "pivot": [0, 0, 4]
}, },
{ {
"name": "0", "name": "0",

View file

@ -32,7 +32,7 @@
{ {
"name": "shen", "name": "shen",
"parent": "bone", "parent": "bone",
"pivot": [0, 0, 0] "pivot": [0, -1, 3]
}, },
{ {
"name": "0", "name": "0",

View file

@ -1175,6 +1175,14 @@
} }
] ]
}, },
"marlin_bolt": {
"sounds": [
{
"name": "superbwarfare:marlin/marlin_end",
"stream": false
}
]
},
"m_870_fire_1p": { "m_870_fire_1p": {
"sounds": [ "sounds": [
{ {
@ -1223,6 +1231,14 @@
} }
] ]
}, },
"m_870_bolt": {
"sounds": [
{
"name": "superbwarfare:m_870/m_870_bolt",
"stream": false
}
]
},
"glock_17_fire_1p": { "glock_17_fire_1p": {
"sounds": [ "sounds": [
{ {

View file

@ -15,6 +15,5 @@
"burst_size": 1, "burst_size": 1,
"EmptyReloadTime": 64, "EmptyReloadTime": 64,
"BypassesArmor": 0.7, "BypassesArmor": 0.7,
"SoundRadius": 20, "SoundRadius": 20
"rpm": 120
} }

View file

@ -20,6 +20,5 @@
"iterative_time": 11, "iterative_time": 11,
"finish_time": 18, "finish_time": 18,
"BypassesArmor": 0.5, "BypassesArmor": 0.5,
"SoundRadius": 18, "SoundRadius": 18
"rpm": 240
} }

View file

@ -20,5 +20,5 @@
"finish_time": 12, "finish_time": 12,
"BypassesArmor": 0.05, "BypassesArmor": 0.05,
"SoundRadius": 16, "SoundRadius": 16,
"rpm": 80 "bolt_action_time": 11
} }

View file

@ -20,6 +20,5 @@
"normal_reload_time": 60, "normal_reload_time": 60,
"EmptyReloadTime": 78, "EmptyReloadTime": 78,
"BypassesArmor": 0.6, "BypassesArmor": 0.6,
"SoundRadius": 18, "SoundRadius": 18
"rpm": 180
} }

View file

@ -14,10 +14,10 @@
"burst": 0, "burst": 0,
"auto": 0, "auto": 0,
"burst_size": 1, "burst_size": 1,
"prepare_time": 8, "prepare_time": 7,
"iterative_time": 16, "iterative_time": 16,
"finish_time": 19, "finish_time": 19,
"BypassesArmor": 0.3, "BypassesArmor": 0.3,
"SoundRadius": 15, "SoundRadius": 15,
"rpm": 120 "bolt_action_time": 12
} }

View file

@ -20,6 +20,5 @@
"iterative_time": 11, "iterative_time": 11,
"finish_time": 18, "finish_time": 18,
"BypassesArmor": 0.54, "BypassesArmor": 0.54,
"SoundRadius": 18, "SoundRadius": 18
"rpm": 240
} }

View file

@ -18,6 +18,5 @@
"normal_reload_time": 63, "normal_reload_time": 63,
"EmptyReloadTime": 92, "EmptyReloadTime": 92,
"BypassesArmor": 1, "BypassesArmor": 1,
"SoundRadius": 22, "SoundRadius": 22
"rpm": 90
} }

View file

@ -18,6 +18,5 @@
"normal_reload_time": 59, "normal_reload_time": 59,
"EmptyReloadTime": 89, "EmptyReloadTime": 89,
"BypassesArmor": 0.8, "BypassesArmor": 0.8,
"SoundRadius": 20, "SoundRadius": 20
"rpm": 240
} }

View file

@ -18,5 +18,5 @@
"EmptyReloadTime": 70, "EmptyReloadTime": 70,
"BypassesArmor": 0.45, "BypassesArmor": 0.45,
"SoundRadius": 17, "SoundRadius": 17,
"rpm": 400 "rpm": 300
} }

View file

@ -16,5 +16,5 @@
"EmptyReloadTime": 65, "EmptyReloadTime": 65,
"BypassesArmor": 0.3, "BypassesArmor": 0.3,
"SoundRadius": 10, "SoundRadius": 10,
"rpm": 300 "rpm": 240
} }