AK添加配件

This commit is contained in:
Atsuihsio 2024-10-24 00:45:59 +08:00
parent 7af8ca583c
commit 490840184d
42 changed files with 14122 additions and 5727 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-10-20T16:11:59.726701 Tags for minecraft:item mod id superbwarfare // 1.20.1 2024-10-23T17:29:33.3301118 Tags for minecraft:item mod id superbwarfare
cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json
0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json 0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json
295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json 295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json
@ -27,7 +27,12 @@ af6fd64b4a685c353f243763db268f7b2304c009 data/forge/tags/items/storage_blocks/le
3743c2790deca7e779d3e4b82f092de39b446988 data/forge/tags/items/storage_blocks/steel.json 3743c2790deca7e779d3e4b82f092de39b446988 data/forge/tags/items/storage_blocks/steel.json
144e54d908121dee498b2ebba3b24b09fd6f18d9 data/forge/tags/items/storage_blocks/tungsten.json 144e54d908121dee498b2ebba3b24b09fd6f18d9 data/forge/tags/items/storage_blocks/tungsten.json
4d4dfd25a2a749e000e1bb742c2f984d4e094e5d data/superbwarfare/tags/items/cannot_reload.json 4d4dfd25a2a749e000e1bb742c2f984d4e094e5d data/superbwarfare/tags/items/cannot_reload.json
5e4b48e22d53f009abdfe557e5911c728ba5f715 data/superbwarfare/tags/items/can_custom_gun.json 5e4b48e22d53f009abdfe557e5911c728ba5f715 data/superbwarfare/tags/items/can_apply_barrel.json
5e4b48e22d53f009abdfe557e5911c728ba5f715 data/superbwarfare/tags/items/can_apply_grip.json
73b1b24e00ea24b494900d06c03c03368f9433ff data/superbwarfare/tags/items/can_apply_magazine.json
73b1b24e00ea24b494900d06c03c03368f9433ff data/superbwarfare/tags/items/can_apply_scope.json
5e4b48e22d53f009abdfe557e5911c728ba5f715 data/superbwarfare/tags/items/can_apply_stock.json
73b1b24e00ea24b494900d06c03c03368f9433ff data/superbwarfare/tags/items/can_custom_gun.json
dff9ff6d6637951191906cb55a210ae5a3ad5cd6 data/superbwarfare/tags/items/extra_one_ammo.json dff9ff6d6637951191906cb55a210ae5a3ad5cd6 data/superbwarfare/tags/items/extra_one_ammo.json
52598e22974c8da0d2852defe4c9005e1d67744b data/superbwarfare/tags/items/gun.json 52598e22974c8da0d2852defe4c9005e1d67744b data/superbwarfare/tags/items/gun.json
62eb408544731ce4cfcd119d8a6cc74731189ac0 data/superbwarfare/tags/items/handgun.json 62eb408544731ce4cfcd119d8a6cc74731189ac0 data/superbwarfare/tags/items/handgun.json

View file

@ -0,0 +1,5 @@
{
"values": [
"superbwarfare:ak_12"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"superbwarfare:ak_12"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"superbwarfare:ak_12",
"superbwarfare:ak_47"
]
}

View file

@ -0,0 +1,6 @@
{
"values": [
"superbwarfare:ak_12",
"superbwarfare:ak_47"
]
}

View file

@ -0,0 +1,5 @@
{
"values": [
"superbwarfare:ak_12"
]
}

View file

@ -1,5 +1,6 @@
{ {
"values": [ "values": [
"superbwarfare:ak_12" "superbwarfare:ak_12",
"superbwarfare:ak_47"
] ]
} }

View file

@ -158,6 +158,8 @@ public class ClickHandler {
if (player == null) return; if (player == null) return;
if (player.isSpectator()) return; if (player.isSpectator()) return;
ItemStack stack = player.getMainHandItem();
setKeyState(event); setKeyState(event);
int key = event.getKey(); int key = event.getKey();
@ -173,27 +175,30 @@ public class ClickHandler {
} }
if (key == ModKeyMappings.EDIT_MODE.getKey().getValue()) { if (key == ModKeyMappings.EDIT_MODE.getKey().getValue()) {
ModUtils.PACKET_HANDLER.sendToServer(new EditModeMessage(0)); ModUtils.PACKET_HANDLER.sendToServer(new EditModeMessage(0));
editModelShake();
} }
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) {
if (key == ModKeyMappings.EDIT_SCOPE.getKey().getValue()) { if (key == ModKeyMappings.EDIT_SCOPE.getKey().getValue() && stack.is(ModTags.Items.CAN_APPLY_SCOPE)) {
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(0)); ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(0));
editModelShake(); editModelShake();
} }
if (key == ModKeyMappings.EDIT_BARREL.getKey().getValue()) { if (key == ModKeyMappings.EDIT_BARREL.getKey().getValue() && stack.is(ModTags.Items.CAN_APPLY_BARREL) && !player.isCrouching()) {
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(1)); ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(1));
editModelShake(); editModelShake();
} }
if (key == ModKeyMappings.EDIT_MAGAZINE.getKey().getValue()) { if (key == ModKeyMappings.EDIT_MAGAZINE.getKey().getValue() && stack.is(ModTags.Items.CAN_APPLY_MAGAZINE)) {
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(2)); ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(2));
editModelShake(); editModelShake();
} }
if (key == ModKeyMappings.EDIT_STOCK.getKey().getValue()) { if (key == ModKeyMappings.EDIT_STOCK.getKey().getValue() && stack.is(ModTags.Items.CAN_APPLY_STOCK)) {
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(3)); ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(3));
editModelShake(); editModelShake();
} }
if (key == ModKeyMappings.EDIT_BARREL.getKey().getValue() && stack.is(ModTags.Items.CAN_APPLY_GRIP) && player.isCrouching()) {
ModUtils.PACKET_HANDLER.sendToServer(new EditMessage(4));
editModelShake();
}
} }
if (key == ModKeyMappings.SENSITIVITY_INCREASE.getKey().getValue()) { if (key == ModKeyMappings.SENSITIVITY_INCREASE.getKey().getValue()) {

View file

@ -13,6 +13,7 @@ public class ItemModelHelper {
splitBoneName(bone, name, "Magazine", tag); splitBoneName(bone, name, "Magazine", tag);
splitBoneName(bone, name, "Barrel", tag); splitBoneName(bone, name, "Barrel", tag);
splitBoneName(bone, name, "Stock", tag); splitBoneName(bone, name, "Stock", tag);
splitBoneName(bone, name, "Grip", tag);
} }
private static void splitBoneName(GeoBone bone, String boneName, String tagName, CompoundTag tag) { private static void splitBoneName(GeoBone bone, String boneName, String tagName, CompoundTag tag) {

View file

@ -15,6 +15,8 @@ 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 net.mcreator.superbwarfare.event.PlayerEventHandler.isProne;
public class AK12ItemModel extends GeoModel<AK12Item> { public class AK12ItemModel extends GeoModel<AK12Item> {
@Override @Override
@ -75,7 +77,7 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
default -> 0f; default -> 0f;
}; };
float scaleZ = switch (type) { float scaleZ = switch (type) {
case 0 -> 0.55f; case 0 -> 0.45f;
case 1 -> 0.4f; case 1 -> 0.4f;
case 2 -> 0.77f; case 2 -> 0.77f;
case 3 -> 0.78f; case 3 -> 0.78f;
@ -101,7 +103,7 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
scope2.setScaleZ(1f - (0.3f * (float) zp)); scope2.setScaleZ(1f - (0.3f * (float) zp));
scope3.setScaleZ(1f - (0.7f * (float) zp)); scope3.setScaleZ(1f - (0.7f * (float) zp));
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.85));
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (0.15f * fp + 0.18f * fr)); shen.setPosY((float) (0.15f * fp + 0.18f * fr));
@ -122,6 +124,13 @@ public class AK12ItemModel extends GeoModel<AK12Item> {
cross3.setRotZ(0.01f * (float) (ClientEventHandler.recoilHorizon * fp)); cross3.setRotZ(0.01f * (float) (ClientEventHandler.recoilHorizon * fp));
cross3.setPosY(-0.23f * (float) (fp + 2.3 * fr)); cross3.setPosY(-0.23f * (float) (fp + 2.3 * fr));
CoreGeoBone l = getAnimationProcessor().getBone("l");
CoreGeoBone r = getAnimationProcessor().getBone("r");
if (isProne(player)) {
l.setRotX(-90 * Mth.DEG_TO_RAD);
r.setRotX(-90 * 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));

View file

@ -1,10 +1,11 @@
package net.mcreator.superbwarfare.client.model.item; package net.mcreator.superbwarfare.client.model.item;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.AnimationHelper;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.rifle.AK47Item; import net.mcreator.superbwarfare.item.gun.rifle.AK47Item;
import net.mcreator.superbwarfare.client.AnimationHelper; import net.mcreator.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -35,7 +36,7 @@ public class AK47ItemModel extends GeoModel<AK47Item> {
public void setCustomAnimations(AK47Item animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(AK47Item 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 scope = getAnimationProcessor().getBone("kobra"); CoreGeoBone scope = getAnimationProcessor().getBone("Scope1");
CoreGeoBone shuan = getAnimationProcessor().getBone("shuan"); CoreGeoBone shuan = getAnimationProcessor().getBone("shuan");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
@ -60,10 +61,29 @@ public class AK47ItemModel extends GeoModel<AK47Item> {
double fp = ClientEventHandler.firePos; double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
gun.setPosX(1.97f * (float) zp); int type = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.SCOPE);
gun.setPosY(0.011f * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(3.8f * (float) zp + (float) (0.5f * zpz)); float posY = switch (type) {
gun.setScaleZ(1f - (0.2f * (float) zp)); case 0,2,3 -> 1.071f;
case 1 -> 0.261f;
default -> 0f;
};
float scaleZ = switch (type) {
case 0,2,3 -> 0.55f;
case 1 -> 0.2f;
default -> 0f;
};
// float posZ = switch (type) {
// case 0, 1 -> 2.8f;
// case 2 -> 2.8f;
// case 3 -> 2.8f;
// default -> 0f;
// };
gun.setPosX(1.962f * (float) zp);
gun.setPosY(posY * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(2.8f * (float) zp + (float) (0.5f * zpz));
gun.setScaleZ(1f - (scaleZ * (float) zp));
scope.setScaleZ(1f - (0.4f * (float) zp)); scope.setScaleZ(1f - (0.4f * (float) zp));
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.8));
@ -71,12 +91,12 @@ public class AK47ItemModel extends GeoModel<AK47Item> {
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp));
shen.setPosY((float) (0.15f * fp + 0.18f * fr)); shen.setPosY((float) (0.15f * fp + 0.18f * fr));
shen.setPosZ((float) (0.275 * fp + 0.34f * fr + 0.65 * fpz)); shen.setPosZ((float) (0.275 * fp + 0.34f * fr + 0.65 * fpz));
shen.setRotX((float) (0.01f * fp + 0.05f * fr + 0.01f * fpz)); shen.setRotX((float) (0.01f * fp + 0.08f * 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.5 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.5 * zt)));
shen.setPosY((float) (shen.getPosY() * (-1 + 0.4 * 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)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.9 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.9 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.9 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.9 * zt)));
@ -96,7 +116,7 @@ public class AK47ItemModel extends GeoModel<AK47Item> {
CoreGeoBone main = getAnimationProcessor().getBone("0"); CoreGeoBone main = getAnimationProcessor().getBone("0");
float numR = (float) (1 - 0.94 * zt); float numR = (float) (1 - 0.94 * zt);
float numP = (float) (1 - 0.8 * zt); float numP = (float) (1 - 0.92 * zt);
if (stack.getOrCreateTag().getInt("gun_reloading_time") > 0) { if (stack.getOrCreateTag().getInt("gun_reloading_time") > 0) {
main.setRotX(numR * main.getRotX()); main.setRotX(numR * main.getRotX());

View file

@ -2,10 +2,12 @@ package net.mcreator.superbwarfare.client.renderer.item;
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.mcreator.superbwarfare.client.AnimationHelper;
import net.mcreator.superbwarfare.client.ItemModelHelper;
import net.mcreator.superbwarfare.client.layer.AK47Layer; import net.mcreator.superbwarfare.client.layer.AK47Layer;
import net.mcreator.superbwarfare.client.model.item.AK47ItemModel; import net.mcreator.superbwarfare.client.model.item.AK47ItemModel;
import net.mcreator.superbwarfare.item.gun.rifle.AK47Item; import net.mcreator.superbwarfare.item.gun.rifle.AK47Item;
import net.mcreator.superbwarfare.client.AnimationHelper; import net.mcreator.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel; import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.player.AbstractClientPlayer;
@ -78,42 +80,80 @@ public class AK47ItemRenderer extends GeoItemRenderer<AK47Item> {
bone.setHidden(this.hiddenBones.contains(name)); bone.setHidden(this.hiddenBones.contains(name));
} }
if (name.equals("flare")) { Player player = mc.player;
Player player = Minecraft.getInstance().player;
ItemStack itemStack = null;
if (player != null) { if (player != null) {
itemStack = player.getMainHandItem(); ItemStack itemStack = player.getMainHandItem();
if (name.equals("Cross1")) {
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
|| GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS
|| GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) != 1);
} }
if (itemStack != null && itemStack.getOrCreateTag().getDouble("flash_time") > 0) {
// if (name.equals("Cross2")) {
// bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
// || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS
// || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) != 2);
// }
// if (name.equals("Cross3")) {
// bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden")
// || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS
// || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) != 3);
// }
// if (GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 2
// && (name.equals("hidden"))) {
// bone.setHidden(!itemStack.getOrCreateTag().getBoolean("HoloHidden") && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS);
// }
//
// if (GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 3
// && (name.equals("jing") || name.equals("Barrel") || name.equals("humu") || name.equals("qiangguan") || name.equals("houzhunxing"))) {
// bone.setHidden(!itemStack.getOrCreateTag().getBoolean("HoloHidden") && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS);
// }
if (name.equals("flare")) {
// if (GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.BARREL) == 1) {
// bone.setPosZ(2.25f);
// }
if (itemStack.getOrCreateTag().getDouble("flash_time") == 0 || GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.BARREL) == 2) {
bone.setHidden(true);
} else {
bone.setHidden(false); bone.setHidden(false);
bone.setScaleX((float) (0.55 + 0.5 * (Math.random() - 0.5))); bone.setScaleX((float) (0.55 + 0.5 * (Math.random() - 0.5)));
bone.setScaleY((float) (0.55 + 0.5 * (Math.random() - 0.5))); bone.setScaleY((float) (0.55 + 0.5 * (Math.random() - 0.5)));
bone.setRotZ((float) (0.5 * (Math.random() - 0.5))); bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
} else {
bone.setHidden(true);
} }
} }
if (name.equals("holo")) { if (name.equals("daogui")) {
Player player = Minecraft.getInstance().player; bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.SCOPE) == 0);
ItemStack itemStack = null;
if (player != null) {
itemStack = player.getMainHandItem();
} }
if (player != null) {
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS); if (name.equals("Mag0")) {
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.MAGAZINE) != 0);
} }
if (name.equals("Mag1")) {
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.MAGAZINE) != 1);
}
if (name.equals("Mag2")) {
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.MAGAZINE) != 2);
}
ItemModelHelper.handleGunAttachments(bone, itemStack, name);
} }
if (this.transformType.firstPerson() && renderingArms) { if (this.transformType.firstPerson() && renderingArms) {
AbstractClientPlayer player = mc.player; AbstractClientPlayer localPlayer = mc.player;
if (player == null) { if (player == null) {
return; return;
} }
PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(player); PlayerRenderer playerRenderer = (PlayerRenderer) mc.getEntityRenderDispatcher().getRenderer(localPlayer);
PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel(); PlayerModel<AbstractClientPlayer> model = playerRenderer.getModel();
stack.pushPose(); stack.pushPose();
RenderUtils.translateMatrixToBone(stack, bone); RenderUtils.translateMatrixToBone(stack, bone);
@ -121,7 +161,7 @@ public class AK47ItemRenderer extends GeoItemRenderer<AK47Item> {
RenderUtils.rotateMatrixAroundBone(stack, bone); RenderUtils.rotateMatrixAroundBone(stack, bone);
RenderUtils.scaleMatrixForBone(stack, bone); RenderUtils.scaleMatrixForBone(stack, bone);
RenderUtils.translateAwayFromPivotPoint(stack, bone); RenderUtils.translateAwayFromPivotPoint(stack, bone);
ResourceLocation loc = player.getSkinTextureLocation(); ResourceLocation loc = localPlayer.getSkinTextureLocation();
VertexConsumer armBuilder = this.currentBuffer.getBuffer(RenderType.entitySolid(loc)); VertexConsumer armBuilder = this.currentBuffer.getBuffer(RenderType.entitySolid(loc));
VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc)); VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc));
if (name.equals("Lefthand")) { if (name.equals("Lefthand")) {

View file

@ -110,9 +110,20 @@ public class ModItemTagProvider extends ItemTagsProvider {
ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(),ModItems.NTW_20.get(), ModItems.M_98B.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(),ModItems.NTW_20.get(), ModItems.M_98B.get(),
ModItems.SENTINEL.get(), ModItems.GLOCK_17.get(),ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get()); ModItems.SENTINEL.get(), ModItems.GLOCK_17.get(),ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.QBZ_95.get());
this.tag(ModTags.Items.CAN_CUSTOM_GUN).add(ModItems.AK_12.get());
this.tag(ModTags.Items.MILITARY_ARMOR).add(ModItems.RU_CHEST_6B43.get(), ModItems.US_CHEST_IOTV.get()); this.tag(ModTags.Items.MILITARY_ARMOR).add(ModItems.RU_CHEST_6B43.get(), ModItems.US_CHEST_IOTV.get());
this.tag(ModTags.Items.CAN_CUSTOM_GUN).add(ModItems.AK_12.get(), ModItems.AK_47.get());
this.tag(ModTags.Items.CAN_APPLY_BARREL).add(ModItems.AK_12.get());
this.tag(ModTags.Items.CAN_APPLY_GRIP).add(ModItems.AK_12.get());
this.tag(ModTags.Items.CAN_APPLY_SCOPE).add(ModItems.AK_12.get(), ModItems.AK_47.get());
this.tag(ModTags.Items.CAN_APPLY_MAGAZINE).add(ModItems.AK_12.get(), ModItems.AK_47.get());
this.tag(ModTags.Items.CAN_APPLY_STOCK).add(ModItems.AK_12.get());
} }
private static TagKey<Item> forgeTag(String name) { private static TagKey<Item> forgeTag(String name) {

View file

@ -264,7 +264,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 = player.getMainHandItem().getOrCreateTag().getDouble("bipod") == 1 ? 0 : 0.25f; pose = GunsTool.getAttachmentType(player.getMainHandItem(), GunsTool.AttachmentType.GRIP) == 3 ? 0 : 0.25f;
} else { } else {
pose = 1; pose = 1;
} }
@ -391,7 +391,7 @@ public class ClientEventHandler {
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 = player.getMainHandItem().getOrCreateTag().getDouble("bipod") == 1 ? 0 : 0.25f; pose = GunsTool.getAttachmentType(player.getMainHandItem(), GunsTool.AttachmentType.GRIP) == 3 ? 0 : 0.25f;
} else { } else {
pose = 1; pose = 1;
} }
@ -630,13 +630,26 @@ public class ClientEventHandler {
CompoundTag tag = player.getMainHandItem().getOrCreateTag(); CompoundTag tag = player.getMainHandItem().getOrCreateTag();
float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 1.6); float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 1.6);
int barrelType = GunsTool.getAttachmentType(player.getMainHandItem(), GunsTool.AttachmentType.BARREL); int barrelType = GunsTool.getAttachmentType(player.getMainHandItem(), GunsTool.AttachmentType.BARREL);
int gripType = GunsTool.getAttachmentType(player.getMainHandItem(), GunsTool.AttachmentType.GRIP);
double recoil = switch (barrelType) { double recoil = switch (barrelType) {
case 1 -> 0.7; case 1 -> 0.9;
case 2 -> 1.3; case 2 -> 1.3;
default -> 1.8; default -> 1.8;
}; };
double gripRecoilX = switch (gripType) {
case 1 -> 0.95;
case 2 -> 0.65;
default -> 1;
};
double gripRecoilY = switch (gripType) {
case 1 -> 0.6;
case 2 -> 0.95;
default -> 1;
};
double cusWeight = player.getMainHandItem().getOrCreateTag().getDouble("CustomWeight"); double cusWeight = player.getMainHandItem().getOrCreateTag().getDouble("CustomWeight");
float gunRecoilX = (float) tag.getDouble("recoil_x") * 60; float gunRecoilX = (float) tag.getDouble("recoil_x") * 60;
@ -654,21 +667,25 @@ 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 (tag.getDouble("bipod") == 1) { if (GunsTool.getAttachmentType(player.getMainHandItem(), GunsTool.AttachmentType.GRIP) == 3) {
pose = 0.1f; pose = 0.1f;
} else { } else {
pose = 0.5f; pose = 0.5f;
} }
} }
float newYaw = player.getYRot() - (float) (0.6 * recoilHorizon * pose * times * (0.5 + fireSpread) * recoil * (1 - 0.06 * cusWeight)); // 水平后座
float newYaw = player.getYRot() - (float) (0.6 * recoilHorizon * pose * times * (0.5 + fireSpread) * recoil * (1 - 0.06 * cusWeight) * gripRecoilX);
player.setYRot(newYaw); player.setYRot(newYaw);
player.yRotO = player.getYRot(); player.yRotO = player.getYRot();
double sinRes = 0; double sinRes = 0;
// 竖直后座
if (0 < recoilTime && recoilTime < 0.5) { if (0 < recoilTime && recoilTime < 0.5) {
float newPitch = (float) (player.getXRot() - 0.02f * gunRecoilX * times * recoil * (1 - 0.06 * cusWeight)); float newPitch = (float) (player.getXRot() - 0.02f * gunRecoilX * times * recoil * (1 - 0.06 * cusWeight) * gripRecoilY);
player.setXRot(newPitch); player.setXRot(newPitch);
player.xRotO = player.getXRot(); player.xRotO = player.getXRot();
} }
@ -684,7 +701,7 @@ public class ClientEventHandler {
} }
if (0 < recoilTime && recoilTime < 2.5) { if (0 < recoilTime && recoilTime < 2.5) {
float newPitch = player.getXRot() - (float) (1.5 * pose * gunRecoilX * (sinRes + Mth.clamp(0.5 - recoilTime, 0, 0.5)) * times * (0.5 + fireSpread) * recoil * (1 - 0.06 * cusWeight)); float newPitch = player.getXRot() - (float) (1.5 * pose * gunRecoilX * (sinRes + Mth.clamp(0.5 - recoilTime, 0, 0.5)) * times * (0.5 + fireSpread) * recoil * (1 - 0.06 * cusWeight) * gripRecoilY);
player.setXRot(newPitch); player.setXRot(newPitch);
player.xRotO = player.getXRot(); player.xRotO = player.getXRot();
} }

View file

@ -252,7 +252,7 @@ public class GunEventHandler {
} }
projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z); projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z);
projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.0005f, player.getLookAngle().z, velocity, projectile.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, velocity,
(float) spared); (float) spared);
player.level().addFreshEntity(projectile); player.level().addFreshEntity(projectile);
} }
@ -475,7 +475,14 @@ public class GunEventHandler {
String origin = stack.getItem().getDescriptionId(); String origin = stack.getItem().getDescriptionId();
String name = origin.substring(origin.lastIndexOf(".") + 1); String name = origin.substring(origin.lastIndexOf(".") + 1);
SoundEvent sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(ModUtils.MODID, name + "_reload_normal")); SoundEvent sound1p;
if (stack.is(ModItems.AK_47.get()) && GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.MAGAZINE) == 2) {
sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(ModUtils.MODID, name + "_reload_normal_drum"));
} else {
sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(ModUtils.MODID, name + "_reload_normal"));
}
if (sound1p != null && player instanceof ServerPlayer serverPlayer) { if (sound1p != null && player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, sound1p, 10f, 1f); SoundTool.playLocalSound(serverPlayer, sound1p, 10f, 1f);
} }

View file

@ -191,7 +191,7 @@ public class PlayerEventHandler {
*/ */
private static void handlePlayerSprint(Player player) { private static void handlePlayerSprint(Player player) {
if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) { if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) {
player.getPersistentData().putDouble("noRun", 20); 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) {

View file

@ -2,7 +2,9 @@ package net.mcreator.superbwarfare.init;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.network.message.*; import net.mcreator.superbwarfare.network.message.BreathMessage;
import net.mcreator.superbwarfare.network.message.FireModeMessage;
import net.mcreator.superbwarfare.network.message.InteractMessage;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@ -74,6 +76,8 @@ public class ModKeyMappings {
public static final KeyMapping EDIT_BARREL = new KeyMapping("key.superbwarfare.edit_barrel", GLFW.GLFW_KEY_LEFT, "key.categories.superbwarfare"); public static final KeyMapping EDIT_BARREL = new KeyMapping("key.superbwarfare.edit_barrel", GLFW.GLFW_KEY_LEFT, "key.categories.superbwarfare");
public static final KeyMapping EDIT_MAGAZINE = new KeyMapping("key.superbwarfare.edit_magazine", GLFW.GLFW_KEY_DOWN, "key.categories.superbwarfare"); public static final KeyMapping EDIT_MAGAZINE = new KeyMapping("key.superbwarfare.edit_magazine", GLFW.GLFW_KEY_DOWN, "key.categories.superbwarfare");
public static final KeyMapping EDIT_STOCK = new KeyMapping("key.superbwarfare.edit_stock", GLFW.GLFW_KEY_RIGHT, "key.categories.superbwarfare"); public static final KeyMapping EDIT_STOCK = new KeyMapping("key.superbwarfare.edit_stock", GLFW.GLFW_KEY_RIGHT, "key.categories.superbwarfare");
// public static final KeyMapping EDIT_GRIP = new KeyMapping("key.superbwarfare.edit_grip", KeyConflictContext.IN_GAME,
// KeyModifier.SHIFT, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_LEFT, "key.categories.superbwarfare");
@SubscribeEvent @SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) { public static void registerKeyMappings(RegisterKeyMappingsEvent event) {

View file

@ -73,6 +73,7 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> AK_47_FAR = REGISTRY.register("ak_47_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_far"))); public static final RegistryObject<SoundEvent> AK_47_FAR = REGISTRY.register("ak_47_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_far")));
public static final RegistryObject<SoundEvent> AK_47_VERYFAR = REGISTRY.register("ak_47_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_veryfar"))); public static final RegistryObject<SoundEvent> AK_47_VERYFAR = REGISTRY.register("ak_47_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_veryfar")));
public static final RegistryObject<SoundEvent> AK_47_RELOAD_NORMAL = REGISTRY.register("ak_47_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_reload_normal"))); public static final RegistryObject<SoundEvent> AK_47_RELOAD_NORMAL = REGISTRY.register("ak_47_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_reload_normal")));
public static final RegistryObject<SoundEvent> AK_47_RELOAD_NORMAL_DRUM = REGISTRY.register("ak_47_reload_normal_drum", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_reload_normal_drum")));
public static final RegistryObject<SoundEvent> AK_47_RELOAD_EMPTY = REGISTRY.register("ak_47_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_reload_empty"))); public static final RegistryObject<SoundEvent> AK_47_RELOAD_EMPTY = REGISTRY.register("ak_47_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_47_reload_empty")));
public static final RegistryObject<SoundEvent> AK_12_FIRE_1P = REGISTRY.register("ak_12_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_12_fire_1p"))); public static final RegistryObject<SoundEvent> AK_12_FIRE_1P = REGISTRY.register("ak_12_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "ak_12_fire_1p")));

View file

@ -33,6 +33,12 @@ public class ModTags {
public static final TagKey<Item> IS_AUTO_WEAPON = tag("is_auto_weapon"); public static final TagKey<Item> IS_AUTO_WEAPON = tag("is_auto_weapon");
public static final TagKey<Item> CAN_CUSTOM_GUN = tag("can_custom_gun"); public static final TagKey<Item> CAN_CUSTOM_GUN = tag("can_custom_gun");
public static final TagKey<Item> CAN_APPLY_BARREL = tag("can_apply_barrel");
public static final TagKey<Item> CAN_APPLY_SCOPE = tag("can_apply_scope");
public static final TagKey<Item> CAN_APPLY_GRIP = tag("can_apply_grip");
public static final TagKey<Item> CAN_APPLY_MAGAZINE = tag("can_apply_magazine");
public static final TagKey<Item> CAN_APPLY_STOCK= tag("can_apply_stock");
public static final TagKey<Item> MILITARY_ARMOR = tag("military_armor"); public static final TagKey<Item> MILITARY_ARMOR = tag("military_armor");
public static final TagKey<Item> MILITARY_ARMOR_HEAVY = tag("military_armor_heavy"); public static final TagKey<Item> MILITARY_ARMOR_HEAVY = tag("military_armor_heavy");

View file

@ -177,15 +177,6 @@ public abstract class GunItem extends Item {
stack.getOrCreateTag().putInt("ammo", Math.min(mag, stack.getOrCreateTag().getInt("ammo") + 2)); stack.getOrCreateTag().putInt("ammo", Math.min(mag, stack.getOrCreateTag().getInt("ammo") + 2));
} }
} }
// int ctmMag = stack.getOrCreateTag().getInt("mag");
// if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) {
// stack.getOrCreateTag().putInt("customMag", (int) (Math.ceil(0.1 * PerkHelper.getItemPerkLevel(ModPerks.DIMENSION_MAGAZINE.get(), stack) * ctmMag)));
// } else if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
// stack.getOrCreateTag().putInt("customMag", (int) (Math.ceil(0.075 * PerkHelper.getItemPerkLevel(ModPerks.DIMENSION_MAGAZINE.get(), stack) * ctmMag)));
// } else {
// stack.getOrCreateTag().putInt("customMag", (int) (Math.ceil(0.15 * PerkHelper.getItemPerkLevel(ModPerks.DIMENSION_MAGAZINE.get(), stack) * ctmMag)));
// }
} }
private void handleGunAttachment(ItemStack stack) { private void handleGunAttachment(ItemStack stack) {
@ -216,9 +207,15 @@ public abstract class GunItem extends Item {
default -> 0; default -> 0;
}; };
double gripWeight = switch (tag.getInt("Grip")) {
case 1, 2 -> 0.5;
case 3 -> 1;
default -> 0;
};
double soundRadius = tag.getInt("Barrel") == 2 ? 0.25 : 1; double soundRadius = tag.getInt("Barrel") == 2 ? 0.25 : 1;
stack.getOrCreateTag().putDouble("CustomWeight", scopeWeight + barrelWeight + magazineWeight + stockWeight); stack.getOrCreateTag().putDouble("CustomWeight", scopeWeight + barrelWeight + magazineWeight + stockWeight + gripWeight);
stack.getOrCreateTag().putDouble("CustomSoundRadius", soundRadius); stack.getOrCreateTag().putDouble("CustomSoundRadius", soundRadius);
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.rifle; package net.mcreator.superbwarfare.item.gun.rifle;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.AK47ItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.AK47ItemRenderer;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModItems;
@ -8,10 +9,10 @@ import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.AnimatedItem; import net.mcreator.superbwarfare.item.AnimatedItem;
import net.mcreator.superbwarfare.item.gun.GunItem; import net.mcreator.superbwarfare.item.gun.GunItem;
import net.mcreator.superbwarfare.network.ModVariables;
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;
@ -20,11 +21,13 @@ 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;
@ -84,8 +87,12 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem {
} }
if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) {
if (GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.MAGAZINE) == 2) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal_drum"));
} else {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.ak47.reload_normal"));
} }
}
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)) {
@ -98,10 +105,25 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle"));
} }
private PlayState editPredicate(AnimationState<AK47Item> 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.ak47.edit"));
}
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.ak47.idle"));
}
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var idleController = new AnimationController<>(this, "idleController", 3, 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
@ -119,6 +141,34 @@ public class AK47Item 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 barrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
int magType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.MAGAZINE);
int stockType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.STOCK);
int customMag = switch (magType) {
case 1 -> 15;
case 2 -> 40;
default -> 0;
};
double customZoom = switch (scopeType) {
case 0, 1 -> 0;
case 2 -> 2.75;
default -> stack.getOrCreateTag().getDouble("CustomZoom");
};
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag);
}
@Override @Override
public ResourceLocation getGunIcon() { public ResourceLocation getGunIcon() {
return new ResourceLocation(ModUtils.MODID, "textures/gun_icon/ak_47_icon.png"); return new ResourceLocation(ModUtils.MODID, "textures/gun_icon/ak_47_icon.png");

View file

@ -64,6 +64,12 @@ public class EditMessage {
att %= 3; att %= 3;
tag.putInt("Stock", att); tag.putInt("Stock", att);
} }
case 4 -> {
int att = tag.getInt("Grip");
att++;
att %= 4;
tag.putInt("Grip", att);
}
} }
stack.addTagElement("Attachments", tag); stack.addTagElement("Attachments", tag);
SoundTool.playLocalSound(player, ModSounds.EDIT.get(), 1f, 1f); SoundTool.playLocalSound(player, ModSounds.EDIT.get(), 1f, 1f);

View file

@ -164,7 +164,8 @@ public class GunsTool {
SCOPE("Scope"), SCOPE("Scope"),
MAGAZINE("Magazine"), MAGAZINE("Magazine"),
BARREL("Barrel"), BARREL("Barrel"),
STOCK("Stock"); STOCK("Stock"),
GRIP("Grip");
private final String name; private final String name;

View file

@ -200,11 +200,6 @@
} }
} }
}, },
"magazine2": {
"scale": {
"vector": [0, 0, 0]
}
},
"Lefthand": { "Lefthand": {
"rotation": { "rotation": {
"vector": [-1.41476, -16.33468, -1.66483] "vector": [-1.41476, -16.33468, -1.66483]
@ -902,32 +897,39 @@
"easing": "easeOutSine" "easing": "easeOutSine"
}, },
"1.1": { "1.1": {
"vector": [-49.77006, 64.26495, -91.19885] "vector": [8.96186, 2.0287, -3.2794]
}, },
"1.1333": { "1.1333": {
"vector": [-47.55314, 65.39596, -103.44208] "vector": [10.14796, 1.03822, -17.5079]
}, },
"1.2": { "1.2": {
"vector": [-46.07222, 70.25928, -87.18593] "vector": [15.47014, -1.87641, -9.25971]
}, },
"1.2667": { "1.2667": {
"vector": [-16.54273, 37.67935, -40.57865] "vector": [-2.21105, -13.60693, 5.606]
}, },
"1.3167": { "1.3167": {
"vector": [-13.30798, -10.54682, 23.55855] "vector": [-12.93896, -12.29493, 22.09467]
},
"1.3833": {
"vector": [-16.2633, -16.81844, 40.76366]
}, },
"1.45": { "1.45": {
"vector": [-19.26177, -22.55603, 58.49338], "vector": [-26.42462, -24.4908, 57.19633],
"easing": "linear"
},
"1.55": {
"vector": [-23.13815, -22.34869, 50.80967],
"easing": "linear" "easing": "linear"
}, },
"1.6333": { "1.6333": {
"vector": [-30.96238, -13.84396, 58.89893] "vector": [-30.61838, -18.5508, 57.11005]
}, },
"1.7333": { "1.7333": {
"vector": [-27.96238, -13.84396, 58.89893] "vector": [-29.15028, -18.84594, 56.47139]
}, },
"1.8333": { "1.8333": {
"vector": [-22.71238, -13.84396, 58.89893] "vector": [-29.15028, -18.84594, 56.47139]
}, },
"1.9167": { "1.9167": {
"vector": [-25.10279, -2.73231, 57.98657], "vector": [-25.10279, -2.73231, 57.98657],
@ -985,6 +987,10 @@
"vector": [-2.65755, -2.13952, 4.93059], "vector": [-2.65755, -2.13952, 4.93059],
"easing": "linear" "easing": "linear"
}, },
"1.55": {
"vector": [-2.65755, -2.13952, 4.93059],
"easing": "linear"
},
"1.6333": { "1.6333": {
"vector": [-3.27214, -1.48037, 6.08189] "vector": [-3.27214, -1.48037, 6.08189]
}, },
@ -992,7 +998,7 @@
"vector": [-3.21729, -1.68999, 6.47986] "vector": [-3.21729, -1.68999, 6.47986]
}, },
"1.8333": { "1.8333": {
"vector": [-3.87892, -2.04721, 6.87809] "vector": [-3.21729, -1.68999, 6.47986]
}, },
"1.9167": { "1.9167": {
"vector": [-4.22575, -1.43666, 6.09951], "vector": [-4.22575, -1.43666, 6.09951],
@ -1435,18 +1441,16 @@
}, },
"bolt": { "bolt": {
"position": { "position": {
"0.1833": {
"vector": [0, 0, 0]
},
"0.25": { "0.25": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
}, },
"0.3333": { "0.3333": {
"vector": [0, 0, 3.75], "vector": [0, 0, 4.75],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"2.1667": { "2.1667": {
"vector": [0, 0, 3.75] "vector": [0, 0, 4.75],
"easing": "easeInElastic"
}, },
"2.2333": { "2.2333": {
"vector": [0, 0, 0] "vector": [0, 0, 0]
@ -1506,11 +1510,11 @@
"vector": [1.18594, 2.81484, -4.66016] "vector": [1.18594, 2.81484, -4.66016]
}, },
"0.3333": { "0.3333": {
"vector": [1.18594, 2.81484, -0.91016], "vector": [1.24383, 3.06327, -0.87708],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"2.1667": { "2.1667": {
"vector": [1.18594, 2.81484, -0.91016], "vector": [1.24383, 3.06327, -0.87708],
"easing": "easeInElastic" "easing": "easeInElastic"
}, },
"2.2833": { "2.2833": {

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -334,7 +334,7 @@
"key.superbwarfare.config": "Open Config Screen", "key.superbwarfare.config": "Open Config Screen",
"key.superbwarfare.edit_mode": "Edit Weapon", "key.superbwarfare.edit_mode": "Edit Weapon",
"key.superbwarfare.edit_scope": "Switch Scope", "key.superbwarfare.edit_scope": "Switch Scope",
"key.superbwarfare.edit_barrel": "Switch Barrel", "key.superbwarfare.edit_barrel": "Switch Barrel / Grip(Sneak)",
"key.superbwarfare.edit_magazine": "Switch Magazine", "key.superbwarfare.edit_magazine": "Switch Magazine",
"key.superbwarfare.edit_stock": "Switch Stock", "key.superbwarfare.edit_stock": "Switch Stock",

View file

@ -334,7 +334,7 @@
"key.superbwarfare.config": "打开配置界面", "key.superbwarfare.config": "打开配置界面",
"key.superbwarfare.edit_mode": "改装", "key.superbwarfare.edit_mode": "改装",
"key.superbwarfare.edit_scope": "切换瞄准镜", "key.superbwarfare.edit_scope": "切换瞄准镜",
"key.superbwarfare.edit_barrel": "切换枪管配件", "key.superbwarfare.edit_barrel": "切换枪管配件/握把(潜行)",
"key.superbwarfare.edit_magazine": "切换弹匣", "key.superbwarfare.edit_magazine": "切换弹匣",
"key.superbwarfare.edit_stock": "切换枪托", "key.superbwarfare.edit_stock": "切换枪托",

View file

@ -9,8 +9,13 @@
"firstperson_righthand": { "firstperson_righthand": {
"translation": [ "translation": [
-6.5, -6.5,
3.75, 3.5,
5 4.5
],
"scale": [
1,
1,
1.2
] ]
}, },
"firstperson_lefthand": { "firstperson_lefthand": {

View file

@ -279,6 +279,14 @@
} }
] ]
}, },
"ak_47_reload_normal_drum": {
"sounds": [
{
"name": "superbwarfare:ak_47/ak_47_reload_normal_drum",
"stream": false
}
]
},
"ak_47_reload_empty": { "ak_47_reload_empty": {
"sounds": [ "sounds": [
{ {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,4 +1,6 @@
{ {
"MinZoom": 1.25,
"MaxZoom": 6,
"spread": 4, "spread": 4,
"recoil_x": 0.002, "recoil_x": 0.002,
"recoil_y": 0.012, "recoil_y": 0.012,

View file

@ -1,7 +1,6 @@
{ {
"CustomZoom": 0.75, "CustomZoom": 0.75,
"spread": 5, "spread": 5,
"bipod": 1,
"recoil_x": 0.0018, "recoil_x": 0.0018,
"recoil_y": 0.01, "recoil_y": 0.01,
"damage": 9.5, "damage": 9.5,

View file

@ -1,6 +1,5 @@
{ {
"spread": 5, "spread": 5,
"bipod": 1,
"recoil_x": 0.004, "recoil_x": 0.004,
"recoil_y": 0.014, "recoil_y": 0.014,
"damage": 9, "damage": 9,

View file

@ -1,7 +1,6 @@
{ {
"CustomZoom": 3.75, "CustomZoom": 3.75,
"spread": 5, "spread": 5,
"bipod": 1,
"recoil_x": 0.006, "recoil_x": 0.006,
"recoil_y": 0.014, "recoil_y": 0.014,
"damage": 12, "damage": 12,

View file

@ -1,6 +1,5 @@
{ {
"CustomZoom": 3.75, "CustomZoom": 3.75,
"bipod": 1,
"spread": 8, "spread": 8,
"recoil_x": 0.01, "recoil_x": 0.01,
"recoil_y": 0.038, "recoil_y": 0.038,

View file

@ -1,6 +1,5 @@
{ {
"spread": 5.5, "spread": 5.5,
"bipod": 1,
"recoil_x": 0.0018, "recoil_x": 0.0018,
"recoil_y": 0.012, "recoil_y": 0.012,
"damage": 8.75, "damage": 8.75,