移除光剑,优化AK动画,添加vector的配件支持

This commit is contained in:
Atsuihsio 2024-11-17 02:34:00 +08:00
parent f8d56b2c1d
commit 65bd0200a2
52 changed files with 15852 additions and 8421 deletions

View file

@ -1,4 +1,4 @@
// 1.20.1 2024-11-14T03:25:59.6528686 Tags for minecraft:item mod id superbwarfare // 1.20.1 2024-11-16T20:28:57.8771961 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,12 +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
d1fe14a7d67387be04db7b0b2de6eba51721de27 data/superbwarfare/tags/items/can_apply_barrel.json 785859aa510afdd9153a306eda6acfac71eefa9f data/superbwarfare/tags/items/can_apply_barrel.json
06903a776ee9462fc6013b2c7f6e9afdef092aaa data/superbwarfare/tags/items/can_apply_grip.json 25f2401d6f8c466b44274bcb6eddad6fa6f6d94f data/superbwarfare/tags/items/can_apply_grip.json
d1fe14a7d67387be04db7b0b2de6eba51721de27 data/superbwarfare/tags/items/can_apply_magazine.json 785859aa510afdd9153a306eda6acfac71eefa9f data/superbwarfare/tags/items/can_apply_magazine.json
d1fe14a7d67387be04db7b0b2de6eba51721de27 data/superbwarfare/tags/items/can_apply_scope.json 785859aa510afdd9153a306eda6acfac71eefa9f data/superbwarfare/tags/items/can_apply_scope.json
4076a1feed311ef566e890e64f70c1c79a8feb49 data/superbwarfare/tags/items/can_apply_stock.json 92e3d5c30f3d6893d64dddc24d748250a6760ba4 data/superbwarfare/tags/items/can_apply_stock.json
d1fe14a7d67387be04db7b0b2de6eba51721de27 data/superbwarfare/tags/items/can_custom_gun.json 785859aa510afdd9153a306eda6acfac71eefa9f 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

@ -4,6 +4,7 @@
"superbwarfare:ak_47", "superbwarfare:ak_47",
"superbwarfare:m_4", "superbwarfare:m_4",
"superbwarfare:hk_416", "superbwarfare:hk_416",
"superbwarfare:qbz_95" "superbwarfare:qbz_95",
"superbwarfare:vector"
] ]
} }

View file

@ -4,6 +4,7 @@
"superbwarfare:m_4", "superbwarfare:m_4",
"superbwarfare:hk_416", "superbwarfare:hk_416",
"superbwarfare:qbz_95", "superbwarfare:qbz_95",
"superbwarfare:ak_47" "superbwarfare:ak_47",
"superbwarfare:vector"
] ]
} }

View file

@ -4,6 +4,7 @@
"superbwarfare:ak_47", "superbwarfare:ak_47",
"superbwarfare:m_4", "superbwarfare:m_4",
"superbwarfare:hk_416", "superbwarfare:hk_416",
"superbwarfare:qbz_95" "superbwarfare:qbz_95",
"superbwarfare:vector"
] ]
} }

View file

@ -4,6 +4,7 @@
"superbwarfare:ak_47", "superbwarfare:ak_47",
"superbwarfare:m_4", "superbwarfare:m_4",
"superbwarfare:hk_416", "superbwarfare:hk_416",
"superbwarfare:qbz_95" "superbwarfare:qbz_95",
"superbwarfare:vector"
] ]
} }

View file

@ -3,6 +3,7 @@
"superbwarfare:ak_12", "superbwarfare:ak_12",
"superbwarfare:ak_47", "superbwarfare:ak_47",
"superbwarfare:m_4", "superbwarfare:m_4",
"superbwarfare:hk_416" "superbwarfare:hk_416",
"superbwarfare:vector"
] ]
} }

View file

@ -4,6 +4,7 @@
"superbwarfare:ak_47", "superbwarfare:ak_47",
"superbwarfare:m_4", "superbwarfare:m_4",
"superbwarfare:hk_416", "superbwarfare:hk_416",
"superbwarfare:qbz_95" "superbwarfare:qbz_95",
"superbwarfare:vector"
] ]
} }

View file

@ -1,27 +0,0 @@
package net.mcreator.superbwarfare.client.layer;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.item.LightSaber;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoRenderer;
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
public class LightSaberLayer extends GeoRenderLayer<LightSaber> {
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/light_saber_e.png");
public LightSaberLayer(GeoRenderer<LightSaber> entityRenderer) {
super(entityRenderer);
}
@Override
public void render(PoseStack poseStack, LightSaber animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
RenderType glowRenderType = RenderType.eyes(LAYER);
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
}
}

View file

@ -0,0 +1,37 @@
package net.mcreator.superbwarfare.client.layer;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.machinegun.MinigunItem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoRenderer;
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
public class MinigunHeatLayer extends GeoRenderLayer<MinigunItem> {
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/minigun_heat_e.png");
public MinigunHeatLayer(GeoRenderer<MinigunItem> itemGeoRenderer) {
super(itemGeoRenderer);
}
@Override
public void render(PoseStack poseStack, MinigunItem animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
RenderType glowRenderType = RenderType.eyes(LAYER);
Player player = Minecraft.getInstance().player;
if (player == null) return;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return;
float heat = (float) stack.getOrCreateTag().getDouble("heat");
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, heat / 55, heat / 55, heat / 55, 1);
}
}

View file

@ -1,24 +0,0 @@
package net.mcreator.superbwarfare.client.model.item;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.item.LightSaber;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class LightSaberItemModel extends GeoModel<LightSaber> {
@Override
public ResourceLocation getAnimationResource(LightSaber animatable) {
return null;
}
@Override
public ResourceLocation getModelResource(LightSaber animatable) {
return ModUtils.loc("geo/light_saber.geo.json");
}
@Override
public ResourceLocation getTextureResource(LightSaber animatable) {
return ModUtils.loc("textures/item/light_saber.png");
}
}

View file

@ -34,7 +34,6 @@ public class MinigunItemModel extends GeoModel<MinigunItem> {
public void setCustomAnimations(MinigunItem animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(MinigunItem animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("barrel"); CoreGeoBone gun = getAnimationProcessor().getBone("barrel");
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); CoreGeoBone shen = getAnimationProcessor().getBone("shen");
CoreGeoBone heat_barrels = getAnimationProcessor().getBone("heatbarrels");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
@ -57,10 +56,6 @@ public class MinigunItemModel extends GeoModel<MinigunItem> {
double fp = ClientEventHandler.firePos; double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
float heat = (float) stack.getOrCreateTag().getDouble("heat");
heat_barrels.setScaleZ(4 * heat);
int rpm = stack.getOrCreateTag().getInt("rpm"); int rpm = stack.getOrCreateTag().getInt("rpm");
gun.setRotZ(gun.getRotZ() + times * -0.07f * ((float) rpm / 1200) * ClientEventHandler.miniGunRot); gun.setRotZ(gun.getRotZ() + times * -0.07f * ((float) rpm / 1200) * ClientEventHandler.miniGunRot);

View file

@ -15,8 +15,15 @@ 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 VectorItemModel extends GeoModel<VectorItem> { public class VectorItemModel extends GeoModel<VectorItem> {
public static float fireRotY = 0f;
public static float fireRotZ = 0f;
public static float rotXBipod = 0f;
public static float rotXSight = 0f;
@Override @Override
public ResourceLocation getAnimationResource(VectorItem animatable) { public ResourceLocation getAnimationResource(VectorItem animatable) {
return ModUtils.loc("animations/vector.animation.json"); return ModUtils.loc("animations/vector.animation.json");
@ -35,9 +42,15 @@ public class VectorItemModel extends GeoModel<VectorItem> {
@Override @Override
public void setCustomAnimations(VectorItem animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(VectorItem animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("bone"); CoreGeoBone gun = getAnimationProcessor().getBone("bone");
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); CoreGeoBone scope = getAnimationProcessor().getBone("Scope1");
CoreGeoBone scope = getAnimationProcessor().getBone("scope"); // CoreGeoBone scope2 = getAnimationProcessor().getBone("Scope2");
// CoreGeoBone scope3 = getAnimationProcessor().getBone("Scope3");
CoreGeoBone cross1 = getAnimationProcessor().getBone("Cross1");
// CoreGeoBone cross2 = getAnimationProcessor().getBone("Cross2");
// CoreGeoBone cross3 = getAnimationProcessor().getBone("Cross3");
CoreGeoBone kmj = getAnimationProcessor().getBone("kuaimanji"); CoreGeoBone kmj = getAnimationProcessor().getBone("kuaimanji");
CoreGeoBone sight1fold = getAnimationProcessor().getBone("SightFold1");
CoreGeoBone sight2fold = getAnimationProcessor().getBone("SightFold2");
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) return; if (player == null) return;
@ -69,31 +82,69 @@ public class VectorItemModel extends GeoModel<VectorItem> {
double turnRotX = ClientEventHandler.turnRot[0]; double turnRotX = ClientEventHandler.turnRot[0];
double turnRotY = ClientEventHandler.turnRot[1]; double turnRotY = ClientEventHandler.turnRot[1];
double turnRotZ = ClientEventHandler.turnRot[2]; double turnRotZ = ClientEventHandler.turnRot[2];
double fpz = ClientEventHandler.firePosZ * 13 * times; double fpz = ClientEventHandler.firePosZ * 20 * times;
double fp = ClientEventHandler.firePos; double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
gun.setPosX(2.35f * (float) zp); int type = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.SCOPE);
gun.setPosY(0.74f * (float) zp - (float) (0.2f * zpz));
gun.setPosZ(5f * (float) zp + (float) (0.3f * zpz)); float posY = switch (type) {
case 1 -> 0.74f;
case 2 -> 0.12f;
default -> 0.07f;
};
gun.setPosX(2.356f * (float) zp);
gun.setPosY(posY * (float) zp - (float) (0.2f * zpz));
gun.setPosZ((type == 2 ? 6 : 5) * (float) zp + (float) (0.3f * zpz));
gun.setScaleZ(1f - (0.5f * (float) zp)); gun.setScaleZ(1f - (0.5f * (float) zp));
scope.setScaleZ(1f - (0.2f * (float) zp)); scope.setScaleZ(1f - (0.2f * (float) zp));
stack.getOrCreateTag().putBoolean("HoloHidden", gun.getPosX() <= 2); stack.getOrCreateTag().putBoolean("HoloHidden", gun.getPosX() <= 2);
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); CoreGeoBone shen;
shen.setPosY((float) (-0.05f * fp - 0.04f * fr)); if (zt < 0.5) {
shen.setPosZ(0.25f * (float) (7.825 * fp + 0.64f * fr + 2.35 * fpz)); shen = getAnimationProcessor().getBone("fireRootNormal");
shen.setRotX((float) (0.02f * fp + 0.07f * fr + 0.01f * fpz)); } else {
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen = switch (type) {
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); case 0 -> getAnimationProcessor().getBone("fireRoot0");
case 1 -> getAnimationProcessor().getBone("fireRoot1");
case 2 -> getAnimationProcessor().getBone("fireRoot2");
case 3 -> getAnimationProcessor().getBone("fireRoot3");
default -> getAnimationProcessor().getBone("fireRootNormal");
};
}
shen.setPosX((float) (shen.getPosX() * (1 - 0.5 * zt))); fireRotY = (float) Mth.lerp(0.5f * times, fireRotY, 0.2f * ClientEventHandler.recoilHorizon * fpz);
shen.setPosY((float) (shen.getPosY() * (1 + 0.4 * zt))); fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.2f + 0.3 * fpz) * ClientEventHandler.recoilHorizon);
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.3 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.9 * zt))); shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.9 * zt))); shen.setPosY((float) (0.15f * fp + 0.18f * fr));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.9 * zt))); shen.setPosZ((float) (0.375 * fp + 0.44f * fr + 0.75 * fpz));
shen.setRotX((float) (0.01f * fp + 0.05f * fr + 0.01f * fpz));
shen.setRotY(fireRotY);
shen.setRotZ(fireRotZ);
shen.setPosX((float) (shen.getPosX() * (1 - 0.1 * zt)));
shen.setPosY((float) (shen.getPosY() * (-1 + 0.8 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.1 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - (type == 3 ? 0.96 : type == 1 ? 0.8 : 0.9) * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - (type == 3 ? 0.95 : 0.9) * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.4 * zt)));
cross1.setPosY(-0.25f * (float) fpz);
// cross2.setPosY(-0.7f * (float) fpz);
// cross3.setPosY(-0.2f * (float) fpz);
rotXSight = Mth.lerp(1.5f * times, rotXSight, type == 0 ? 0 : 90);
sight1fold.setRotX(rotXSight * Mth.DEG_TO_RAD);
sight2fold.setRotX(rotXSight * Mth.DEG_TO_RAD);
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));

View file

@ -1,19 +0,0 @@
package net.mcreator.superbwarfare.client.renderer.item;
import net.mcreator.superbwarfare.item.LightSaber;
import net.mcreator.superbwarfare.client.layer.LightSaberLayer;
import net.mcreator.superbwarfare.client.model.item.LightSaberItemModel;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.renderer.GeoItemRenderer;
public class LightSaberItemRenderer extends GeoItemRenderer<LightSaber> {
public LightSaberItemRenderer() {
super(new LightSaberItemModel());
this.addRenderLayer(new LightSaberLayer(this));
}
@Override
public ResourceLocation getTextureLocation(LightSaber instance) {
return super.getTextureLocation(instance);
}
}

View file

@ -3,6 +3,7 @@ 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.AnimationHelper;
import net.mcreator.superbwarfare.client.layer.MinigunHeatLayer;
import net.mcreator.superbwarfare.client.layer.MinigunLayer; import net.mcreator.superbwarfare.client.layer.MinigunLayer;
import net.mcreator.superbwarfare.client.model.item.MinigunItemModel; import net.mcreator.superbwarfare.client.model.item.MinigunItemModel;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
@ -30,6 +31,7 @@ public class MinigunItemRenderer extends GeoItemRenderer<MinigunItem> {
public MinigunItemRenderer() { public MinigunItemRenderer() {
super(new MinigunItemModel()); super(new MinigunItemModel());
this.addRenderLayer(new MinigunLayer(this)); this.addRenderLayer(new MinigunLayer(this));
this.addRenderLayer(new MinigunHeatLayer(this));
} }
@Override @Override
@ -90,10 +92,6 @@ public class MinigunItemRenderer extends GeoItemRenderer<MinigunItem> {
bone.setRotZ((float) (0.5 * (Math.random() - 0.5))); bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
} }
} }
if (name.equals("light")) {
bone.setHidden((ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5));
}
} }
if (this.transformType.firstPerson() && renderingArms) { if (this.transformType.firstPerson() && renderingArms) {

View file

@ -3,10 +3,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.AnimationHelper;
import net.mcreator.superbwarfare.client.ItemModelHelper;
import net.mcreator.superbwarfare.client.layer.VectorLayer; import net.mcreator.superbwarfare.client.layer.VectorLayer;
import net.mcreator.superbwarfare.client.model.item.VectorItemModel; import net.mcreator.superbwarfare.client.model.item.VectorItemModel;
import net.mcreator.superbwarfare.event.ClientEventHandler; import net.mcreator.superbwarfare.event.ClientEventHandler;
import net.mcreator.superbwarfare.item.gun.smg.VectorItem; import net.mcreator.superbwarfare.item.gun.smg.VectorItem;
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;
@ -83,20 +85,35 @@ public class VectorItemRenderer extends GeoItemRenderer<VectorItem> {
if (player != null) { if (player != null) {
ItemStack itemStack = player.getMainHandItem(); ItemStack itemStack = player.getMainHandItem();
if (name.equals("holo")) { if (name.equals("Cross1")) {
bone.setHidden(itemStack.getOrCreateTag().getBoolean("HoloHidden") || GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS); 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 (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("tuoxin")) {
bone.setHidden(GunsTool.getAttachmentType(itemStack, GunsTool.AttachmentType.STOCK) == 0);
} }
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 {
bone.setHidden(false); bone.setHidden(false);
bone.setScaleX((float) (0.75 + 0.5 * (Math.random() - 0.5))); bone.setScaleX((float) (0.55 + 0.5 * (Math.random() - 0.5)));
bone.setScaleY((float) (0.75 + 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)));
} }
} }
ItemModelHelper.handleGunAttachments(bone, itemStack, name);
} }
if (this.transformType.firstPerson() && renderingArms) { if (this.transformType.firstPerson() && renderingArms) {

View file

@ -41,7 +41,7 @@ public class ArmorPlateOverlay {
if (stack == ItemStack.EMPTY) return; if (stack == ItemStack.EMPTY) return;
if (stack.getTag() == null || !stack.getTag().contains("ArmorPlate")) return; if (stack.getTag() == null || !stack.getTag().contains("ArmorPlate")) return;
double amount = stack.getTag().getDouble("ArmorPlate"); double amount = 2 * stack.getTag().getDouble("ArmorPlate");
int armorLevel = 1; int armorLevel = 1;
if (stack.is(ModTags.Items.MILITARY_ARMOR)) { if (stack.is(ModTags.Items.MILITARY_ARMOR)) {

View file

@ -116,17 +116,17 @@ public class ModItemTagProvider extends ItemTagsProvider {
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(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get()); this.tag(ModTags.Items.CAN_CUSTOM_GUN).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get(), ModItems.VECTOR.get());
this.tag(ModTags.Items.CAN_APPLY_BARREL).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get()); this.tag(ModTags.Items.CAN_APPLY_BARREL).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get(), ModItems.VECTOR.get());
this.tag(ModTags.Items.CAN_APPLY_GRIP).add(ModItems.AK_12.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get(), ModItems.AK_47.get()); this.tag(ModTags.Items.CAN_APPLY_GRIP).add(ModItems.AK_12.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get(), ModItems.AK_47.get(), ModItems.VECTOR.get());
this.tag(ModTags.Items.CAN_APPLY_SCOPE).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get()); this.tag(ModTags.Items.CAN_APPLY_SCOPE).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get(), ModItems.VECTOR.get());
this.tag(ModTags.Items.CAN_APPLY_MAGAZINE).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get()); this.tag(ModTags.Items.CAN_APPLY_MAGAZINE).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.QBZ_95.get(), ModItems.VECTOR.get());
this.tag(ModTags.Items.CAN_APPLY_STOCK).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get()); this.tag(ModTags.Items.CAN_APPLY_STOCK).add(ModItems.AK_12.get(), ModItems.AK_47.get(), ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.VECTOR.get());
} }

View file

@ -197,7 +197,7 @@ public class MortarEntity extends Entity implements GeoEntity, AnimatedEntity {
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.MORTAR_DEPLOYER.get())); ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(ModItems.MORTAR_DEPLOYER.get()));
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
this.entityData.set(Y_ROT, player.getYRot()); this.entityData.set(Y_ROT, Mth.clamp(player.getYRot(), -180, 180));
} }
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;

View file

@ -40,6 +40,12 @@ public class PlayerEventHandler {
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using")) { if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using")) {
stack.getOrCreateTag().putBoolean("Using", false); stack.getOrCreateTag().putBoolean("Using", false);
} }
for (ItemStack pStack : player.getInventory().items) {
if (pStack.is(ModTags.Items.GUN)) {
pStack.getOrCreateTag().putBoolean("draw", true);
pStack.getOrCreateTag().putBoolean("init", false);
}
}
} }
@SubscribeEvent @SubscribeEvent
@ -59,6 +65,12 @@ public class PlayerEventHandler {
handleRespawnReload(player); handleRespawnReload(player);
handleRespawnAutoArmor(player); handleRespawnAutoArmor(player);
for (ItemStack pStack : player.getInventory().items) {
if (pStack.is(ModTags.Items.GUN)) {
pStack.getOrCreateTag().putBoolean("draw", true);
}
}
} }
@SubscribeEvent @SubscribeEvent
@ -344,17 +356,17 @@ public class PlayerEventHandler {
armorLevel = 3; armorLevel = 3;
} }
if (armorPlate < armorLevel * 30) { if (armorPlate < armorLevel * 15) {
for (var stack : player.getInventory().items) { for (var stack : player.getInventory().items) {
if (stack.is(ModItems.ARMOR_PLATE.get())) { if (stack.is(ModItems.ARMOR_PLATE.get())) {
if (stack.getTag() != null && stack.getTag().getBoolean("Infinite")) { if (stack.getTag() != null && stack.getTag().getBoolean("Infinite")) {
armor.getOrCreateTag().putDouble("ArmorPlate", armorLevel * 30); armor.getOrCreateTag().putDouble("ArmorPlate", armorLevel * 15);
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), SoundEvents.ARMOR_EQUIP_IRON, SoundSource.PLAYERS, 0.5f, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), SoundEvents.ARMOR_EQUIP_IRON, SoundSource.PLAYERS, 0.5f, 1);
} }
} else { } else {
for (int index0 = 0; index0 < Math.ceil(((armorLevel * 30) - armorPlate) / 30); index0++) { for (int index0 = 0; index0 < Math.ceil(((armorLevel * 15) - armorPlate) / 15); index0++) {
stack.finishUsingItem(player.level(), player); stack.finishUsingItem(player.level(), player);
} }
} }

View file

@ -118,7 +118,6 @@ public class ModItems {
public static final RegistryObject<Item> MONITOR = ITEMS.register("monitor", Monitor::new); public static final RegistryObject<Item> MONITOR = ITEMS.register("monitor", Monitor::new);
public static final RegistryObject<Item> TARGET_DEPLOYER = ITEMS.register("target_deployer", TargetDeployer::new); public static final RegistryObject<Item> TARGET_DEPLOYER = ITEMS.register("target_deployer", TargetDeployer::new);
public static final RegistryObject<Item> LIGHT_SABER = ITEMS.register("light_saber", LightSaber::new);
public static final RegistryObject<Item> KNIFE = ITEMS.register("knife", Knife::new); public static final RegistryObject<Item> KNIFE = ITEMS.register("knife", Knife::new);
public static final RegistryObject<Item> HAMMER = ITEMS.register("hammer", Hammer::new); public static final RegistryObject<Item> HAMMER = ITEMS.register("hammer", Hammer::new);
public static final RegistryObject<Item> CROWBAR = ITEMS.register("crowbar", Crowbar::new); public static final RegistryObject<Item> CROWBAR = ITEMS.register("crowbar", Crowbar::new);

View file

@ -167,6 +167,9 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> VECTOR_FIRE_3P = REGISTRY.register("vector_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_fire_3p"))); public static final RegistryObject<SoundEvent> VECTOR_FIRE_3P = REGISTRY.register("vector_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_fire_3p")));
public static final RegistryObject<SoundEvent> VECTOR_FAR = REGISTRY.register("vector_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_far"))); public static final RegistryObject<SoundEvent> VECTOR_FAR = REGISTRY.register("vector_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_far")));
public static final RegistryObject<SoundEvent> VECTOR_VERYFAR = REGISTRY.register("vector_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_veryfar"))); public static final RegistryObject<SoundEvent> VECTOR_VERYFAR = REGISTRY.register("vector_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_veryfar")));
public static final RegistryObject<SoundEvent> VECTOR_FIRE_1P_S = REGISTRY.register("vector_fire_1p_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_fire_1p_s")));
public static final RegistryObject<SoundEvent> VECTOR_FIRE_3P_S = REGISTRY.register("vector_fire_3p_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_fire_3p_s")));
public static final RegistryObject<SoundEvent> VECTOR_FAR_S = REGISTRY.register("vector_far_s", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_far_s")));
public static final RegistryObject<SoundEvent> VECTOR_RELOAD_NORMAL = REGISTRY.register("vector_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_reload_normal"))); public static final RegistryObject<SoundEvent> VECTOR_RELOAD_NORMAL = REGISTRY.register("vector_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_reload_normal")));
public static final RegistryObject<SoundEvent> VECTOR_RELOAD_EMPTY = REGISTRY.register("vector_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_reload_empty"))); public static final RegistryObject<SoundEvent> VECTOR_RELOAD_EMPTY = REGISTRY.register("vector_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "vector_reload_empty")));
@ -204,8 +207,6 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> M_60_RELOAD_NORMAL = REGISTRY.register("m_60_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_60_reload_normal"))); public static final RegistryObject<SoundEvent> M_60_RELOAD_NORMAL = REGISTRY.register("m_60_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_60_reload_normal")));
public static final RegistryObject<SoundEvent> M_60_RELOAD_EMPTY = REGISTRY.register("m_60_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_60_reload_empty"))); public static final RegistryObject<SoundEvent> M_60_RELOAD_EMPTY = REGISTRY.register("m_60_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "m_60_reload_empty")));
public static final RegistryObject<SoundEvent> LIGHT_SABER = REGISTRY.register("lightsaber", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "lightsaber")));
public static final RegistryObject<SoundEvent> SVD_FIRE_1P = REGISTRY.register("svd_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "svd_fire_1p"))); public static final RegistryObject<SoundEvent> SVD_FIRE_1P = REGISTRY.register("svd_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "svd_fire_1p")));
public static final RegistryObject<SoundEvent> SVD_FIRE_3P = REGISTRY.register("svd_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "svd_fire_3p"))); public static final RegistryObject<SoundEvent> SVD_FIRE_3P = REGISTRY.register("svd_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "svd_fire_3p")));
public static final RegistryObject<SoundEvent> SVD_FAR = REGISTRY.register("svd_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "svd_far"))); public static final RegistryObject<SoundEvent> SVD_FAR = REGISTRY.register("svd_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "svd_far")));

View file

@ -49,7 +49,7 @@ public class ArmorPlate extends Item {
armorLevel = 3; armorLevel = 3;
} }
if (armor.getOrCreateTag().getDouble("ArmorPlate") < armorLevel * 30) { if (armor.getOrCreateTag().getDouble("ArmorPlate") < armorLevel * 15) {
playerIn.startUsingItem(handIn); playerIn.startUsingItem(handIn);
} }
@ -73,7 +73,7 @@ public class ArmorPlate extends Item {
armorLevel = 3; armorLevel = 3;
} }
armor.getOrCreateTag().putDouble("ArmorPlate", Mth.clamp(armor.getOrCreateTag().getDouble("ArmorPlate") + 30, 0, armorLevel * 30)); armor.getOrCreateTag().putDouble("ArmorPlate", Mth.clamp(armor.getOrCreateTag().getDouble("ArmorPlate") + 15, 0, armorLevel * 15));
if (pLivingEntity instanceof ServerPlayer serverPlayer) { if (pLivingEntity instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), SoundEvents.ARMOR_EQUIP_IRON, SoundSource.PLAYERS, 0.5f, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), SoundEvents.ARMOR_EQUIP_IRON, SoundSource.PLAYERS, 0.5f, 1);
@ -89,7 +89,7 @@ public class ArmorPlate extends Item {
@Override @Override
public int getUseDuration(ItemStack stack) { public int getUseDuration(ItemStack stack) {
return 30; return 20;
} }
public static ItemStack getInfiniteInstance() { public static ItemStack getInfiniteInstance() {

View file

@ -1,112 +0,0 @@
package net.mcreator.superbwarfare.item;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.renderer.item.LightSaberItemRenderer;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.tools.SoundTool;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentCategory;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.core.animation.AnimatableManager;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.UUID;
import java.util.function.Consumer;
public class LightSaber extends SwordItem implements GeoItem, AnimatedItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public String animationProcedure = "empty";
public static ItemDisplayContext transformType;
public LightSaber() {
super(Tiers.NETHERITE, 10, -1.8f, new Item.Properties().rarity(Rarity.EPIC));
}
@Override
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
super.initializeClient(consumer);
consumer.accept(new IClientItemExtensions() {
private final BlockEntityWithoutLevelRenderer renderer = new LightSaberItemRenderer();
@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return renderer;
}
});
}
public void getTransformType(ItemDisplayContext type) {
transformType = type;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
@Override
public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) {
Multimap<Attribute, AttributeModifier> map = super.getDefaultAttributeModifiers(equipmentSlot);
UUID uuid = new UUID(equipmentSlot.toString().hashCode(), 0);
if (equipmentSlot == EquipmentSlot.MAINHAND) {
map = HashMultimap.create(map);
map.put(Attributes.MOVEMENT_SPEED, new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, 0.2f, AttributeModifier.Operation.MULTIPLY_BASE));
}
return map;
}
@Override
public int getEnchantmentValue() {
return 22;
}
@Override
public boolean isEnchantable(ItemStack stack) {
return true;
}
@Override
public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) {
return enchantment.category == EnchantmentCategory.BREAKABLE || enchantment.category == EnchantmentCategory.WEAPON;
}
@Override
public void setAnimationProcedure(String procedure) {
this.animationProcedure = procedure;
}
@Override
public boolean isDamageable(ItemStack stack) {
return false;
}
@Override
public boolean onEntitySwing(ItemStack itemstack, LivingEntity entity) {
boolean retval = super.onEntitySwing(itemstack, entity);
entity.playSound(ModSounds.LIGHT_SABER.get(), 1f, 1f);
if (entity instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, ModSounds.LIGHT_SABER.get(), 1f, 1f);
}
return retval;
}
}

View file

@ -137,8 +137,6 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
boolean grip = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 1 || GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP) == 2;
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) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.edit")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m4.edit"));
} }

View file

@ -1,6 +1,7 @@
package net.mcreator.superbwarfare.item.gun.smg; package net.mcreator.superbwarfare.item.gun.smg;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.client.PoseTool;
import net.mcreator.superbwarfare.client.renderer.item.VectorItemRenderer; import net.mcreator.superbwarfare.client.renderer.item.VectorItemRenderer;
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,23 +9,26 @@ 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;
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;
@ -73,14 +77,22 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
if (player == null) return PlayState.STOP; if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP;
boolean drum = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.MAGAZINE) == 2;
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_empty")); if (drum) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_empty_drum"));
} else {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_empty"));
}
} }
if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) { if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_normal")); if (drum) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.reload_normal_drum"));
} else {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.vec.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) {
@ -94,10 +106,25 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.idle")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.idle"));
} }
private PlayState editPredicate(AnimationState<VectorItem> 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.vector.edit"));
}
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.vec.idle"));
}
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
AnimationController<VectorItem> idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate); AnimationController<VectorItem> idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate);
data.add(idleController); data.add(idleController);
var editController = new AnimationController<>(this, "editController", 1, this::editPredicate);
data.add(editController);
} }
@Override @Override
@ -105,6 +132,37 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
return this.cache; return this.cache;
} }
@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 -> 20;
case 2 -> 57;
default -> 0;
};
if (scopeType == 3) {
CompoundTag tag = stack.getOrCreateTag().getCompound("Attachments");
tag.putInt("Scope", 0);
}
double customZoom = switch (scopeType) {
case 0, 1 -> 0;
case 2 -> 0.75;
default -> stack.getOrCreateTag().getDouble("CustomZoom");
};
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag);
}
public static ItemStack getGunInstance() { public static ItemStack getGunInstance() {
ItemStack stack = new ItemStack(ModItems.VECTOR.get()); ItemStack stack = new ItemStack(ModItems.VECTOR.get());
GunsTool.initCreativeGun(stack, ModItems.VECTOR.getId().getPath()); GunsTool.initCreativeGun(stack, ModItems.VECTOR.getId().getPath());

View file

@ -19844,11 +19844,11 @@
{ {
"name": "Lefthand", "name": "Lefthand",
"parent": "magazine", "parent": "magazine",
"pivot": [7.08731, -6.05141, -1.32145], "pivot": [6.23575, -6.41469, -1.32145],
"rotation": [142.14654, -3.17741, 144.27444], "rotation": [86.71153, -50.16741, -123.46245],
"cubes": [ "cubes": [
{ {
"origin": [5.48731, -6.05141, -3.07145], "origin": [4.63575, -6.41469, -3.07145],
"size": [3, 12, 4], "size": [3, 12, 4],
"uv": { "uv": {
"north": {"uv": [35.5, 31], "uv_size": [0.25, 0.25]}, "north": {"uv": [35.5, 31], "uv_size": [0.25, 0.25]},

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -152,7 +152,6 @@
"item.superbwarfare.ancient_cpu": "Ancient CPU", "item.superbwarfare.ancient_cpu": "Ancient CPU",
"item.superbwarfare.target_deployer": "Target", "item.superbwarfare.target_deployer": "Target",
"item.superbwarfare.senpai_spawn_egg": "Senpai Spawn Egg", "item.superbwarfare.senpai_spawn_egg": "Senpai Spawn Egg",
"item.superbwarfare.light_saber": "Light Saber",
"item.superbwarfare.knife": "Knife", "item.superbwarfare.knife": "Knife",
"item.superbwarfare.hammer": "Hammer", "item.superbwarfare.hammer": "Hammer",
"item.superbwarfare.crowbar": "Crowbar", "item.superbwarfare.crowbar": "Crowbar",

View file

@ -152,7 +152,6 @@
"item.superbwarfare.ancient_cpu": "古代处理器", "item.superbwarfare.ancient_cpu": "古代处理器",
"item.superbwarfare.target_deployer": "标靶", "item.superbwarfare.target_deployer": "标靶",
"item.superbwarfare.senpai_spawn_egg": "野兽先辈刷怪蛋", "item.superbwarfare.senpai_spawn_egg": "野兽先辈刷怪蛋",
"item.superbwarfare.light_saber": "光剑",
"item.superbwarfare.knife": "军刀", "item.superbwarfare.knife": "军刀",
"item.superbwarfare.hammer": "大锤", "item.superbwarfare.hammer": "大锤",
"item.superbwarfare.crowbar": "撬棍", "item.superbwarfare.crowbar": "撬棍",

View file

@ -751,6 +751,30 @@
} }
] ]
}, },
"vector_fire_1p_s": {
"sounds": [
{
"name": "superbwarfare:vector/vector_fire_1p_s",
"stream": false
}
]
},
"vector_fire_3p_s": {
"sounds": [
{
"name": "superbwarfare:vector/vector_fire_3p_s",
"stream": false
}
]
},
"vector_far_s": {
"sounds": [
{
"name": "superbwarfare:vector/vector_far_s",
"stream": false
}
]
},
"vector_reload_normal": { "vector_reload_normal": {
"sounds": [ "sounds": [
{ {
@ -1718,22 +1742,6 @@
] ]
}, },
"lightsaber": {
"sounds": [
{
"name": "superbwarfare:lightsaber1",
"stream": false
},
{
"name": "superbwarfare:lightsaber2",
"stream": false
},
{
"name": "superbwarfare:lightsaber3",
"stream": false
}
]
},
"bullet_supply": { "bullet_supply": {
"sounds": [ "sounds": [
{ {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -5,7 +5,7 @@
"damage": 6, "damage": 6,
"headshot": 1.5, "headshot": 1.5,
"velocity": 16, "velocity": 16,
"mag": 33, "mag": 13,
"projectile_amount": 1, "projectile_amount": 1,
"weight": 3, "weight": 3,
"FireMode": 2, "FireMode": 2,
@ -16,6 +16,6 @@
"normal_reload_time": 46, "normal_reload_time": 46,
"EmptyReloadTime": 64, "EmptyReloadTime": 64,
"BypassesArmor": 0.15, "BypassesArmor": 0.15,
"SoundRadius": 4, "SoundRadius": 11,
"rpm": 1200 "rpm": 1200
} }

View file

@ -1,24 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"pattern": [
"a",
"b",
"c"
],
"key": {
"a": {
"item": "minecraft:red_stained_glass_pane"
},
"b": {
"item": "minecraft:beacon"
},
"c": {
"item": "superbwarfare:shield_cell"
}
},
"result": {
"item": "superbwarfare:light_saber",
"count": 1
}
}