From cdbf78486472e99d0bded518ee17c10d3d511c00 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Wed, 21 May 2025 01:25:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E6=BB=9AGlock17=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/model/item/Glock17ItemModel.java | 201 +++++++++--------- 1 file changed, 105 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java index 1fa5cf297..a95f15331 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java @@ -1,9 +1,19 @@ package com.atsuishio.superbwarfare.client.model.item; import com.atsuishio.superbwarfare.Mod; +import com.atsuishio.superbwarfare.client.AnimationHelper; +import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; +import com.atsuishio.superbwarfare.data.gun.GunData; +import com.atsuishio.superbwarfare.event.ClientEventHandler; +import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item; +import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.model.GeoModel; public class Glock17ItemModel extends GeoModel { @@ -13,113 +23,112 @@ public class Glock17ItemModel extends GeoModel { @Override public ResourceLocation getAnimationResource(Glock17Item animatable) { - return Mod.loc("animations/aurelia_sceptre.animation.json"); + return Mod.loc("animations/glock17.animation.json"); } @Override public ResourceLocation getModelResource(Glock17Item animatable) { - return Mod.loc("geo/aurelia_sceptre.geo.json"); + return Mod.loc("geo/glock17.geo.json"); } @Override public ResourceLocation getTextureResource(Glock17Item animatable) { - return Mod.loc("textures/item/aurelia_sceptre.png"); + return Mod.loc("textures/item/glock17.png"); } @Override public void setCustomAnimations(Glock17Item animatable, long instanceId, AnimationState animationState) { - // TODO 动画 -// GeoBone gun = getAnimationProcessor().getBone("bone"); -// GeoBone slide = getAnimationProcessor().getBone("huatao"); -// GeoBone bullet = getAnimationProcessor().getBone("bullet"); -// -// Player player = Minecraft.getInstance().player; -// if (player == null) return; -// ItemStack stack = player.getMainHandItem(); -// if (!(stack.getItem() instanceof GunItem)) return; -// -// float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); -// double zt = ClientEventHandler.zoomTime; -// double zp = ClientEventHandler.zoomPos; -// double zpz = ClientEventHandler.zoomPosZ; -// double fpz = ClientEventHandler.firePosZ * 13 * times; -// double fp = ClientEventHandler.firePos; -// double fr = ClientEventHandler.fireRot; -// -// gun.setPosX(1.23f * (float) zp); -// gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz)); -// gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz)); -// gun.setScaleZ(1f - (0.55f * (float) zp)); -// -// GeoBone body = getAnimationProcessor().getBone("gun"); -// -// fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz); -// fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon); -// -// body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); -// body.setPosY((float) (0.15f * fp + 0.18f * fr)); -// body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz)); -// body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz)); -// body.setRotY(fireRotY); -// body.setRotZ(fireRotZ); -// -// body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt))); -// body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt))); -// body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt))); -// body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt))); -// body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt))); -// body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt))); -// -// CrossHairOverlay.gunRot = body.getRotZ(); -// -// slide.setPosZ(1.5f * (float) fp); -// -// ClientEventHandler.gunRootMove(getAnimationProcessor()); -// -// GeoBone camera = getAnimationProcessor().getBone("camera"); -// GeoBone main = getAnimationProcessor().getBone("0"); -// -// float numR = (float) (1 - 0.12 * zt); -// float numP = (float) (1 - 0.68 * zt); -// -// var data = GunData.from(stack); -// -// if (data.reload.time() > 0) { -// main.setRotX(numR * main.getRotX()); -// main.setRotY(numR * main.getRotY()); -// main.setRotZ(numR * main.getRotZ()); -// main.setPosX(numP * main.getPosX()); -// main.setPosY(numP * main.getPosY()); -// main.setPosZ(numP * main.getPosZ()); -// camera.setRotX(numR * camera.getRotX()); -// camera.setRotY(numR * camera.getRotY()); -// camera.setRotZ(numR * camera.getRotZ()); -// } -// -// ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ()); -// AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f); -// -// GeoBone shell = getAnimationProcessor().getBone("shell"); -// GeoBone barrel = getAnimationProcessor().getBone("guan"); -// if (data.holdOpen.get()) { -// slide.setPosZ(1.5f); -// barrel.setRotX(4 * Mth.DEG_TO_RAD); -// bullet.setScaleX(0); -// bullet.setScaleY(0); -// bullet.setScaleZ(0); -// -// shell.setScaleX(0); -// shell.setScaleY(0); -// shell.setScaleZ(0); -// } else { -// barrel.setRotX(0); -// bullet.setScaleX(1); -// bullet.setScaleY(1); -// bullet.setScaleZ(1); -// -// shell.setScaleX(1); -// shell.setScaleY(1); -// shell.setScaleZ(1); -// } + GeoBone gun = getAnimationProcessor().getBone("bone"); + GeoBone slide = getAnimationProcessor().getBone("huatao"); + GeoBone bullet = getAnimationProcessor().getBone("bullet"); + + Player player = Minecraft.getInstance().player; + if (player == null) return; + ItemStack stack = player.getMainHandItem(); + if (!(stack.getItem() instanceof GunItem)) return; + + float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8); + double zt = ClientEventHandler.zoomTime; + double zp = ClientEventHandler.zoomPos; + double zpz = ClientEventHandler.zoomPosZ; + double fpz = ClientEventHandler.firePosZ * 13 * times; + double fp = ClientEventHandler.firePos; + double fr = ClientEventHandler.fireRot; + + gun.setPosX(1.23f * (float) zp); + gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz)); + gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz)); + gun.setScaleZ(1f - (0.55f * (float) zp)); + + GeoBone body = getAnimationProcessor().getBone("gun"); + + fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz); + fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon); + + body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); + body.setPosY((float) (0.15f * fp + 0.18f * fr)); + body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz)); + body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz)); + body.setRotY(fireRotY); + body.setRotZ(fireRotZ); + + body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt))); + body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt))); + body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt))); + body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt))); + body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt))); + body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt))); + + CrossHairOverlay.gunRot = body.getRotZ(); + + slide.setPosZ(1.5f * (float) fp); + + ClientEventHandler.gunRootMove(getAnimationProcessor()); + + GeoBone camera = getAnimationProcessor().getBone("camera"); + GeoBone main = getAnimationProcessor().getBone("0"); + + float numR = (float) (1 - 0.12 * zt); + float numP = (float) (1 - 0.68 * zt); + + var data = GunData.from(stack); + + if (data.reload.time() > 0) { + main.setRotX(numR * main.getRotX()); + main.setRotY(numR * main.getRotY()); + main.setRotZ(numR * main.getRotZ()); + main.setPosX(numP * main.getPosX()); + main.setPosY(numP * main.getPosY()); + main.setPosZ(numP * main.getPosZ()); + camera.setRotX(numR * camera.getRotX()); + camera.setRotY(numR * camera.getRotY()); + camera.setRotZ(numR * camera.getRotZ()); + } + + ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ()); + AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f); + + GeoBone shell = getAnimationProcessor().getBone("shell"); + GeoBone barrel = getAnimationProcessor().getBone("guan"); + if (data.holdOpen.get()) { + slide.setPosZ(1.5f); + barrel.setRotX(4 * Mth.DEG_TO_RAD); + bullet.setScaleX(0); + bullet.setScaleY(0); + bullet.setScaleZ(0); + + shell.setScaleX(0); + shell.setScaleY(0); + shell.setScaleZ(0); + } else { + barrel.setRotX(0); + bullet.setScaleX(1); + bullet.setScaleY(1); + bullet.setScaleZ(1); + + shell.setScaleX(1); + shell.setScaleY(1); + shell.setScaleZ(1); + } } }