重制SVD,添加SVD的配件适配
This commit is contained in:
parent
c8d747811a
commit
e6bdee12ff
20 changed files with 8818 additions and 9813 deletions
|
@ -1,9 +1,9 @@
|
||||||
package com.atsuishio.superbwarfare.client.layer;
|
package com.atsuishio.superbwarfare.client.layer;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
import com.atsuishio.superbwarfare.ModUtils;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem;
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
@ -13,7 +13,7 @@ import software.bernie.geckolib.renderer.GeoRenderer;
|
||||||
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
||||||
|
|
||||||
public class SvdLayer extends GeoRenderLayer<SvdItem> {
|
public class SvdLayer extends GeoRenderLayer<SvdItem> {
|
||||||
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/svd_e.png");
|
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/ak12_e.png");
|
||||||
|
|
||||||
public SvdLayer(GeoRenderer<SvdItem> entityRenderer) {
|
public SvdLayer(GeoRenderer<SvdItem> entityRenderer) {
|
||||||
super(entityRenderer);
|
super(entityRenderer);
|
||||||
|
|
|
@ -16,8 +16,14 @@ import software.bernie.geckolib.core.animatable.model.CoreGeoBone;
|
||||||
import software.bernie.geckolib.core.animation.AnimationState;
|
import software.bernie.geckolib.core.animation.AnimationState;
|
||||||
import software.bernie.geckolib.model.GeoModel;
|
import software.bernie.geckolib.model.GeoModel;
|
||||||
|
|
||||||
|
import static com.atsuishio.superbwarfare.event.ClientEventHandler.isProne;
|
||||||
|
|
||||||
public class SvdItemModel extends GeoModel<SvdItem> {
|
public class SvdItemModel extends GeoModel<SvdItem> {
|
||||||
|
|
||||||
|
public static float fireRotY = 0f;
|
||||||
|
public static float fireRotZ = 0f;
|
||||||
|
public static float rotXBipod = 0f;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getAnimationResource(SvdItem animatable) {
|
public ResourceLocation getAnimationResource(SvdItem animatable) {
|
||||||
return ModUtils.loc("animations/svd.animation.json");
|
return ModUtils.loc("animations/svd.animation.json");
|
||||||
|
@ -37,22 +43,12 @@ public class SvdItemModel extends GeoModel<SvdItem> {
|
||||||
public void setCustomAnimations(SvdItem animatable, long instanceId, AnimationState animationState) {
|
public void setCustomAnimations(SvdItem animatable, long instanceId, AnimationState animationState) {
|
||||||
CoreGeoBone gun = getAnimationProcessor().getBone("bone");
|
CoreGeoBone gun = getAnimationProcessor().getBone("bone");
|
||||||
CoreGeoBone bolt = getAnimationProcessor().getBone("bolt");
|
CoreGeoBone bolt = getAnimationProcessor().getBone("bolt");
|
||||||
CoreGeoBone scope = getAnimationProcessor().getBone("pso1");
|
|
||||||
CoreGeoBone bt1 = getAnimationProcessor().getBone("bullton1");
|
|
||||||
CoreGeoBone bt2 = getAnimationProcessor().getBone("bullton2");
|
|
||||||
CoreGeoBone glass = getAnimationProcessor().getBone("glass");
|
|
||||||
CoreGeoBone holo = getAnimationProcessor().getBone("holo");
|
|
||||||
CoreGeoBone flare = getAnimationProcessor().getBone("flare");
|
|
||||||
|
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
if (GunsTool.getGunBooleanTag(stack, "HoldOpen")) {
|
|
||||||
bolt.setPosZ(3.25f);
|
|
||||||
}
|
|
||||||
|
|
||||||
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
|
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
|
||||||
double zt = ClientEventHandler.zoomTime;
|
double zt = ClientEventHandler.zoomTime;
|
||||||
double zp = ClientEventHandler.zoomPos;
|
double zp = ClientEventHandler.zoomPos;
|
||||||
|
@ -71,43 +67,85 @@ public class SvdItemModel extends GeoModel<SvdItem> {
|
||||||
double fp = ClientEventHandler.firePos;
|
double fp = ClientEventHandler.firePos;
|
||||||
double fr = ClientEventHandler.fireRot;
|
double fr = ClientEventHandler.fireRot;
|
||||||
|
|
||||||
gun.setPosX(2.02f * (float) zp);
|
int type = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.SCOPE);
|
||||||
gun.setPosY(0.85f * (float) zp - (float) (0.6f * zpz));
|
int stockType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.STOCK);
|
||||||
gun.setPosZ(13.2f * (float) zp + (float) (0.5f * zpz));
|
int barrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
|
||||||
|
int gripType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP);
|
||||||
|
|
||||||
|
float posX = switch (type) {
|
||||||
|
case 0, 1 -> 1.701f;
|
||||||
|
case 2 -> 1.531f;
|
||||||
|
default -> 0f;
|
||||||
|
};
|
||||||
|
float posY = switch (type) {
|
||||||
|
case 0 -> 1.02f;
|
||||||
|
case 1 -> 0.04f;
|
||||||
|
case 2 -> 0.12f;
|
||||||
|
default -> 0f;
|
||||||
|
};
|
||||||
|
float scaleZ = switch (type) {
|
||||||
|
case 0 -> 0.4f;
|
||||||
|
case 1 -> 0.45f;
|
||||||
|
case 2 -> 0.85f;
|
||||||
|
default -> 0f;
|
||||||
|
};
|
||||||
|
float posZ = switch (type) {
|
||||||
|
case 0 -> 7f;
|
||||||
|
case 1 -> 7.5f;
|
||||||
|
case 2 -> 12.85f;
|
||||||
|
default -> 0f;
|
||||||
|
};
|
||||||
|
|
||||||
|
gun.setPosX(posX * (float) zp);
|
||||||
|
gun.setPosY(posY * (float) zp - (float) (0.2f * zpz));
|
||||||
|
gun.setPosZ(posZ * (float) zp + (float) (0.3f * zpz));
|
||||||
gun.setRotZ((float) (0.05f * zpz));
|
gun.setRotZ((float) (0.05f * zpz));
|
||||||
gun.setScaleZ(1f - (0.8f * (float) zp));
|
gun.setScaleZ(1f - (scaleZ * (float) zp));
|
||||||
|
|
||||||
scope.setScaleZ(1f - (0.95f * (float) zp));
|
stack.getOrCreateTag().putBoolean("HoloHidden", gun.getPosX() <= 1.4);
|
||||||
bt1.setScaleY(1f - (0.5f * (float) zp));
|
|
||||||
bt2.setScaleX(1f - (0.5f * (float) zp));
|
|
||||||
stack.getOrCreateTag().putBoolean("HoloHidden", gun.getPosX() <= 1.9);
|
|
||||||
|
|
||||||
CoreGeoBone shen = getAnimationProcessor().getBone("shen");
|
CoreGeoBone shen;
|
||||||
|
if (zt < 0.5) {
|
||||||
if (ClientEventHandler.zoom) {
|
shen = getAnimationProcessor().getBone("fireRootNormal");
|
||||||
flare.setPosY(-2.5f);
|
} else {
|
||||||
|
shen = switch (type) {
|
||||||
|
case 0 -> getAnimationProcessor().getBone("fireRoot0");
|
||||||
|
case 1 -> getAnimationProcessor().getBone("fireRoot1");
|
||||||
|
case 2 -> getAnimationProcessor().getBone("fireRoot2");
|
||||||
|
default -> getAnimationProcessor().getBone("fireRootNormal");
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
|
fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
|
||||||
shen.setPosY((float) (0.4f * fp + 0.44f * fr));
|
fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.8f + 1 * fpz) * ClientEventHandler.recoilHorizon);
|
||||||
shen.setPosZ((float) (1.325 * fp + 0.34f * fr + 2.35 * fpz));
|
|
||||||
shen.setRotX((float) (0.01f * fp + 0.15f * fr + 0.01f * fpz));
|
shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
|
||||||
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz));
|
shen.setPosY((float) (0.15f * fp + 0.18f * fr));
|
||||||
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon));
|
shen.setPosZ((float) (2.935 * fp + 0.23f * fr + 1.325 * fpz));
|
||||||
|
shen.setRotX((float) ((0.015f * fp + 0.12f * fr + 0.015f * fpz)));
|
||||||
|
shen.setRotY(fireRotY);
|
||||||
|
shen.setRotZ(fireRotZ);
|
||||||
|
|
||||||
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.8 * zt)));
|
||||||
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.6 * zt)));
|
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.6 * zt) * (barrelType == 1 ? 0.8 : 1.0) * (stockType == 2 ? 0.9 : 1.0) * (gripType == 1 ? 0.9 : 1.0) * (isProne(player) && gripType == 3 ? 0.9 : 1.0)));
|
||||||
shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt)));
|
shen.setRotX((float) (shen.getRotX() * (1 - 0.8 * zt) * (barrelType == 1 ? 0.4 : 1.0) * (stockType == 2 ? 0.6 : 1.0) * (gripType == 1 ? 0.7 : 1.0) * (isProne(player) && gripType == 3 ? 0.1 : 1.0)));
|
||||||
shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt)));
|
shen.setRotY((float) (shen.getRotY() * (1 - 0.85 * zt)));
|
||||||
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt)));
|
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.4 * zt)));
|
||||||
|
|
||||||
CrossHairOverlay.gunRot = shen.getRotZ();
|
CrossHairOverlay.gunRot = shen.getRotZ();
|
||||||
|
|
||||||
holo.setPosY(0.05f + 1.1f * (float) fp);
|
bolt.setPosZ(5f * (float) fp);
|
||||||
holo.setRotZ(-0.04f * (float) fp);
|
|
||||||
holo.setScaleX(0.75f);
|
if (GunsTool.getGunBooleanTag(stack, "HoldOpen")) {
|
||||||
holo.setScaleY(0.75f);
|
bolt.setPosZ(4f);
|
||||||
|
}
|
||||||
|
|
||||||
|
CoreGeoBone l = getAnimationProcessor().getBone("l");
|
||||||
|
CoreGeoBone r = getAnimationProcessor().getBone("r");
|
||||||
|
rotXBipod = Mth.lerp(1.5f * times, rotXBipod, isProne(player) ? -90 : 0);
|
||||||
|
l.setRotX(rotXBipod * Mth.DEG_TO_RAD);
|
||||||
|
r.setRotX(rotXBipod * Mth.DEG_TO_RAD);
|
||||||
|
|
||||||
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));
|
||||||
|
@ -116,14 +154,11 @@ public class SvdItemModel extends GeoModel<SvdItem> {
|
||||||
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
|
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
|
||||||
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
|
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
|
||||||
|
|
||||||
glass.setPosX(0.25f * -movePosX);
|
|
||||||
glass.setPosY(0.2f * (float) fp + 0.5f * (float) vY + (float) swayY + movePosY);
|
|
||||||
|
|
||||||
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
|
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
|
||||||
CoreGeoBone main = getAnimationProcessor().getBone("0");
|
CoreGeoBone main = getAnimationProcessor().getBone("0");
|
||||||
|
|
||||||
float numR = (float) (1 - 0.94 * zt);
|
float numR = (float) (1 - 0.96 * zt);
|
||||||
float numP = (float) (1 - 0.88 * zt);
|
float numP = (float) (1 - 0.9 * zt);
|
||||||
|
|
||||||
AnimationHelper.handleReloadShakeAnimation(stack, main, camera, numR, numP);
|
AnimationHelper.handleReloadShakeAnimation(stack, main, camera, numR, numP);
|
||||||
ClientEventHandler.shake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
|
ClientEventHandler.shake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package com.atsuishio.superbwarfare.client.renderer.item;
|
package com.atsuishio.superbwarfare.client.renderer.item;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.AnimationHelper;
|
import com.atsuishio.superbwarfare.client.AnimationHelper;
|
||||||
|
import com.atsuishio.superbwarfare.client.ItemModelHelper;
|
||||||
import com.atsuishio.superbwarfare.client.layer.SvdLayer;
|
import com.atsuishio.superbwarfare.client.layer.SvdLayer;
|
||||||
import com.atsuishio.superbwarfare.client.model.item.SvdItemModel;
|
import com.atsuishio.superbwarfare.client.model.item.SvdItemModel;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.init.ModTags;
|
import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem;
|
import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem;
|
||||||
|
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -85,26 +87,35 @@ public class SvdItemRenderer extends GeoItemRenderer<SvdItem> {
|
||||||
ItemStack itemStack = player.getMainHandItem();
|
ItemStack itemStack = player.getMainHandItem();
|
||||||
if (!itemStack.is(ModTags.Items.GUN)) return;
|
if (!itemStack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
if (name.equals("holo")) {
|
if (name.equals("mount")) {
|
||||||
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") || !ClientEventHandler.zoom);
|
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 0 || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name.equals("glass")) {
|
if (name.equals("Cross1")) {
|
||||||
|
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
|
||||||
|
|| !ClientEventHandler.zoom
|
||||||
|
|| GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) != 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name.equals("Cross2")) {
|
||||||
|
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
|
||||||
|
|| !ClientEventHandler.zoom
|
||||||
|
|| GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) != 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 2
|
||||||
|
&& (name.equals("Hidden") || name.equals("gun") || name.equals("bolt") || name.equals("Lefthand") || name.equals("Barrel")) && ClientEventHandler.zoom && !itemStack.getOrCreateTag().getBoolean("HoloHidden")) {
|
||||||
bone.setHidden(true);
|
bone.setHidden(true);
|
||||||
}
|
renderingArms = false;
|
||||||
|
|
||||||
if (name.equals("handguard")) {
|
|
||||||
bone.setHidden(!itemStack.getOrCreateTag().getBoolean("HoloHidden") && ClientEventHandler.zoom);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name.equals("holo")) {
|
|
||||||
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") || !ClientEventHandler.zoom);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (name.equals("flare")) {
|
if (name.equals("flare")) {
|
||||||
if (ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5) {
|
if (ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5 || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.BARREL) == 2) {
|
||||||
bone.setHidden(true);
|
bone.setHidden(true);
|
||||||
} else {
|
} else {
|
||||||
|
if (GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 2 && ClientEventHandler.zoom && !itemStack.getOrCreateTag().getBoolean("HoloHidden")) {
|
||||||
|
bone.setPosY(-2f);
|
||||||
|
}
|
||||||
bone.setHidden(false);
|
bone.setHidden(false);
|
||||||
bone.setScaleX((float) (0.75 + 0.5 * (Math.random() - 0.5)));
|
bone.setScaleX((float) (0.75 + 0.5 * (Math.random() - 0.5)));
|
||||||
bone.setScaleY((float) (0.75 + 0.5 * (Math.random() - 0.5)));
|
bone.setScaleY((float) (0.75 + 0.5 * (Math.random() - 0.5)));
|
||||||
|
@ -112,6 +123,8 @@ public class SvdItemRenderer extends GeoItemRenderer<SvdItem> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ItemModelHelper.handleGunAttachments(bone, itemStack, name);
|
||||||
|
|
||||||
if (this.transformType.firstPerson() && renderingArms) {
|
if (this.transformType.firstPerson() && renderingArms) {
|
||||||
AbstractClientPlayer localPlayer = mc.player;
|
AbstractClientPlayer localPlayer = mc.player;
|
||||||
|
|
||||||
|
@ -132,12 +145,12 @@ public class SvdItemRenderer extends GeoItemRenderer<SvdItem> {
|
||||||
VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc));
|
VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc));
|
||||||
if (name.equals("Lefthand")) {
|
if (name.equals("Lefthand")) {
|
||||||
stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
|
stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
|
||||||
AnimationHelper.renderPartOverBone(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
AnimationHelper.renderPartOverBone2(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
||||||
AnimationHelper.renderPartOverBone(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
AnimationHelper.renderPartOverBone2(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
||||||
} else {
|
} else {
|
||||||
stack.translate(SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
|
stack.translate(SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
|
||||||
AnimationHelper.renderPartOverBone(model.rightArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
AnimationHelper.renderPartOverBone2(model.rightArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
||||||
AnimationHelper.renderPartOverBone(model.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
AnimationHelper.renderPartOverBone2(model.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.currentBuffer.getBuffer(this.renderType);
|
this.currentBuffer.getBuffer(this.renderType);
|
||||||
|
|
|
@ -771,7 +771,7 @@ public class ClientEventHandler {
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
if (!stack.is(ModTags.Items.GUN)) return;
|
if (!(stack.getItem() instanceof GunItem gunItem)) return;
|
||||||
if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.hidePassenger())
|
if (player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.isDriver(player) && iArmedVehicle.hidePassenger())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -781,7 +781,7 @@ public class ClientEventHandler {
|
||||||
if (player.isCrouching() && player.getBbHeight() >= 1 && !isProne(player)) {
|
if (player.isCrouching() && player.getBbHeight() >= 1 && !isProne(player)) {
|
||||||
pose = 0.85f;
|
pose = 0.85f;
|
||||||
} else if (isProne(player)) {
|
} else if (isProne(player)) {
|
||||||
pose = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 3 ? 0 : 0.25f;
|
pose = (GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 3 || gunItem.hasBipod(stack)) ? 0 : 0.25f;
|
||||||
} else {
|
} else {
|
||||||
pose = 1;
|
pose = 1;
|
||||||
}
|
}
|
||||||
|
@ -924,14 +924,14 @@ public class ClientEventHandler {
|
||||||
|
|
||||||
private static void handleWeaponSway(LivingEntity entity) {
|
private static void handleWeaponSway(LivingEntity entity) {
|
||||||
ItemStack stack = entity.getMainHandItem();
|
ItemStack stack = entity.getMainHandItem();
|
||||||
if (stack.is(ModTags.Items.GUN) && entity instanceof Player player) {
|
if (stack.getItem() instanceof GunItem gunItem && entity instanceof Player player) {
|
||||||
float times = 2 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
|
float times = 2 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8);
|
||||||
double pose;
|
double pose;
|
||||||
|
|
||||||
if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && isProne(player)) {
|
if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && isProne(player)) {
|
||||||
pose = 0.85;
|
pose = 0.85;
|
||||||
} else if (isProne(player)) {
|
} else if (isProne(player)) {
|
||||||
pose = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 3 ? 0 : 0.25f;
|
pose = (GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 3 || gunItem.hasBipod(stack)) ? 0 : 0.25f;
|
||||||
} else {
|
} else {
|
||||||
pose = 1;
|
pose = 1;
|
||||||
}
|
}
|
||||||
|
@ -1175,7 +1175,7 @@ public class ClientEventHandler {
|
||||||
if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && !isProne(player)) {
|
if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && !isProne(player)) {
|
||||||
pose = 0.7f;
|
pose = 0.7f;
|
||||||
} else if (isProne(player)) {
|
} else if (isProne(player)) {
|
||||||
if (GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 3) {
|
if (GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 3 || gunItem.hasBipod(stack)) {
|
||||||
pose = 0.1f;
|
pose = 0.1f;
|
||||||
} else {
|
} else {
|
||||||
pose = 0.5f;
|
pose = 0.5f;
|
||||||
|
|
|
@ -364,6 +364,12 @@ public class GunEventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.SVD.get()) {
|
||||||
|
if (data.getInt("ReloadTime") == 18) {
|
||||||
|
data.putBoolean("HoldOpen", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (stack.getItem() == ModItems.SKS.get()) {
|
if (stack.getItem() == ModItems.SKS.get()) {
|
||||||
if (data.getInt("ReloadTime") == 14) {
|
if (data.getInt("ReloadTime") == 14) {
|
||||||
data.putBoolean("HoldOpen", false);
|
data.putBoolean("HoldOpen", false);
|
||||||
|
|
|
@ -223,6 +223,9 @@ public class ModSounds {
|
||||||
public static final RegistryObject<SoundEvent> SVD_FIRE_3P = REGISTRY.register("svd_fire_3p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_fire_3p")));
|
public static final RegistryObject<SoundEvent> SVD_FIRE_3P = REGISTRY.register("svd_fire_3p", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_fire_3p")));
|
||||||
public static final RegistryObject<SoundEvent> SVD_FAR = REGISTRY.register("svd_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_far")));
|
public static final RegistryObject<SoundEvent> SVD_FAR = REGISTRY.register("svd_far", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_far")));
|
||||||
public static final RegistryObject<SoundEvent> SVD_VERYFAR = REGISTRY.register("svd_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_veryfar")));
|
public static final RegistryObject<SoundEvent> SVD_VERYFAR = REGISTRY.register("svd_veryfar", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_veryfar")));
|
||||||
|
public static final RegistryObject<SoundEvent> SVD_FIRE_1P_S = REGISTRY.register("svd_fire_1p_s", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_fire_1p_s")));
|
||||||
|
public static final RegistryObject<SoundEvent> SVD_FIRE_3P_S = REGISTRY.register("svd_fire_3p_s", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_fire_3p_s")));
|
||||||
|
public static final RegistryObject<SoundEvent> SVD_FAR_S = REGISTRY.register("svd_far_s", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_far_s")));
|
||||||
public static final RegistryObject<SoundEvent> SVD_RELOAD_NORMAL = REGISTRY.register("svd_reload_normal", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_reload_normal")));
|
public static final RegistryObject<SoundEvent> SVD_RELOAD_NORMAL = REGISTRY.register("svd_reload_normal", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_reload_normal")));
|
||||||
public static final RegistryObject<SoundEvent> SVD_RELOAD_EMPTY = REGISTRY.register("svd_reload_empty", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_reload_empty")));
|
public static final RegistryObject<SoundEvent> SVD_RELOAD_EMPTY = REGISTRY.register("svd_reload_empty", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("svd_reload_empty")));
|
||||||
|
|
||||||
|
|
|
@ -291,6 +291,9 @@ public abstract class GunItem extends Item {
|
||||||
public boolean canCustomStock(ItemStack stack) {
|
public boolean canCustomStock(ItemStack stack) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
public boolean hasBipod(ItemStack stack) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean ejectShell(ItemStack stack) {
|
public boolean ejectShell(ItemStack stack) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
import com.atsuishio.superbwarfare.init.ModTags;
|
import com.atsuishio.superbwarfare.init.ModTags;
|
||||||
import com.atsuishio.superbwarfare.item.AnimatedItem;
|
import com.atsuishio.superbwarfare.item.AnimatedItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.network.ModVariables;
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
import com.atsuishio.superbwarfare.perk.PerkHelper;
|
||||||
import com.atsuishio.superbwarfare.tools.GunsTool;
|
import com.atsuishio.superbwarfare.tools.GunsTool;
|
||||||
|
@ -16,15 +17,18 @@ 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;
|
||||||
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
|
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
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;
|
||||||
|
@ -94,10 +98,25 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem {
|
||||||
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle"));
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private PlayState editPredicate(AnimationState<SvdItem> 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.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.svd.edit"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.svd.idle"));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||||
var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate);
|
var idleController = new AnimationController<>(this, "idleController", 3, this::idlePredicate);
|
||||||
data.add(idleController);
|
data.add(idleController);
|
||||||
|
var editController = new AnimationController<>(this, "editController", 1, this::editPredicate);
|
||||||
|
data.add(editController);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -120,6 +139,34 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem {
|
||||||
public void setAnimationProcedure(String procedure) {
|
public void setAnimationProcedure(String procedure) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) {
|
||||||
|
super.inventoryTick(stack, world, entity, slot, selected);
|
||||||
|
|
||||||
|
int scopeType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.SCOPE);
|
||||||
|
int magType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.MAGAZINE);
|
||||||
|
|
||||||
|
if (scopeType == 3) {
|
||||||
|
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
|
||||||
|
tag.putInt("Scope", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int customMag = switch (magType) {
|
||||||
|
case 1 -> 10;
|
||||||
|
case 2 -> 20;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
double customZoom = switch (scopeType) {
|
||||||
|
case 0, 1 -> 0;
|
||||||
|
case 2 -> 3.75;
|
||||||
|
default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
|
||||||
|
GunsTool.setGunIntTag(stack, "CustomMagazine", customMag);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getGunIcon() {
|
public ResourceLocation getGunIcon() {
|
||||||
return ModUtils.loc("textures/gun_icon/svd_icon.png");
|
return ModUtils.loc("textures/gun_icon/svd_icon.png");
|
||||||
|
@ -135,6 +182,26 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem {
|
||||||
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
return PerkHelper.SNIPER_RIFLE_PERKS.test(perk) || PerkHelper.MAGAZINE_PERKS.test(perk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canCustom(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canCustomBarrel(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canCustomScope(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canCustomMagazine(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isMagazineReload(ItemStack stack) {
|
public boolean isMagazineReload(ItemStack stack) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -155,6 +222,11 @@ public class SvdItem extends GunItem implements GeoItem, AnimatedItem {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasBipod(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getFireMode() {
|
public int getFireMode() {
|
||||||
return FireMode.SEMI.flag;
|
return FireMode.SEMI.flag;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -8,9 +8,9 @@
|
||||||
"display": {
|
"display": {
|
||||||
"firstperson_righthand": {
|
"firstperson_righthand": {
|
||||||
"translation": [
|
"translation": [
|
||||||
-6.75,
|
-7.25,
|
||||||
3.5,
|
4.25,
|
||||||
3.5
|
4
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"firstperson_lefthand": {
|
"firstperson_lefthand": {
|
||||||
|
|
|
@ -1119,6 +1119,30 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"svd_fire_1p_s": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:svd/svd_fire_1p_s",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"svd_fire_3p_s": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:svd/svd_fire_3p_s",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"svd_far_s": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:svd/svd_far_s",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"svd_reload_normal": {
|
"svd_reload_normal": {
|
||||||
"sounds": [
|
"sounds": [
|
||||||
{
|
{
|
||||||
|
|
BIN
src/main/resources/assets/superbwarfare/sounds/svd/svd_far_s.ogg
Normal file
BIN
src/main/resources/assets/superbwarfare/sounds/svd/svd_far_s.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 36 KiB |
Binary file not shown.
Before Width: | Height: | Size: 11 KiB |
|
@ -1,5 +1,4 @@
|
||||||
{
|
{
|
||||||
"CustomZoom": 2.75,
|
|
||||||
"Spread": 5.5,
|
"Spread": 5.5,
|
||||||
"RecoilX": 0.004,
|
"RecoilX": 0.004,
|
||||||
"RecoilY": 0.009,
|
"RecoilY": 0.009,
|
||||||
|
@ -8,8 +7,8 @@
|
||||||
"Velocity": 42,
|
"Velocity": 42,
|
||||||
"Magazine": 10,
|
"Magazine": 10,
|
||||||
"Weight": 5,
|
"Weight": 5,
|
||||||
"NormalReloadTime": 56,
|
"NormalReloadTime": 59,
|
||||||
"EmptyReloadTime": 70,
|
"EmptyReloadTime": 78,
|
||||||
"BypassesArmor": 0.45,
|
"BypassesArmor": 0.45,
|
||||||
"SoundRadius": 17,
|
"SoundRadius": 17,
|
||||||
"RPM": 300
|
"RPM": 300
|
||||||
|
|
Loading…
Add table
Reference in a new issue