添加老干妈
This commit is contained in:
parent
b845ad4dc8
commit
0fb8a642e2
35 changed files with 46286 additions and 19 deletions
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"base": {
|
||||||
|
"parent": "superbwarfare:item/m_2_base"
|
||||||
|
},
|
||||||
|
"gui_light": "front",
|
||||||
|
"loader": "neoforge:separate_transforms",
|
||||||
|
"perspectives": {
|
||||||
|
"gui": {
|
||||||
|
"parent": "superbwarfare:item/m_2_icon"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "superbwarfare:displaysettings/m_2.item",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/m_2"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/m_2_icon"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:recipes/root",
|
||||||
|
"criteria": {
|
||||||
|
"has_m2hb_blueprint": {
|
||||||
|
"conditions": {
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"items": "superbwarfare:m2hb_blueprint"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"trigger": "minecraft:inventory_changed"
|
||||||
|
},
|
||||||
|
"has_the_recipe": {
|
||||||
|
"conditions": {
|
||||||
|
"recipe": "superbwarfare:m_2_smithing"
|
||||||
|
},
|
||||||
|
"trigger": "minecraft:recipe_unlocked"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"requirements": [
|
||||||
|
[
|
||||||
|
"has_the_recipe",
|
||||||
|
"has_m2hb_blueprint"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"rewards": {
|
||||||
|
"recipes": [
|
||||||
|
"superbwarfare:m_2_smithing"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:smithing_transform",
|
||||||
|
"addition": {
|
||||||
|
"tag": "superbwarfare:storage_blocks/steel"
|
||||||
|
},
|
||||||
|
"base": {
|
||||||
|
"item": "superbwarfare:rare_material_pack"
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"count": 1,
|
||||||
|
"id": "superbwarfare:m_2"
|
||||||
|
},
|
||||||
|
"template": {
|
||||||
|
"item": "superbwarfare:m2hb_blueprint"
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,6 +30,7 @@
|
||||||
"superbwarfare:devotion",
|
"superbwarfare:devotion",
|
||||||
"superbwarfare:rpk",
|
"superbwarfare:rpk",
|
||||||
"superbwarfare:m_60",
|
"superbwarfare:m_60",
|
||||||
|
"superbwarfare:m_2",
|
||||||
"superbwarfare:minigun",
|
"superbwarfare:minigun",
|
||||||
"superbwarfare:m_79",
|
"superbwarfare:m_79",
|
||||||
"superbwarfare:secondary_cataclysm",
|
"superbwarfare:secondary_cataclysm",
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
"values": [
|
"values": [
|
||||||
"superbwarfare:ntw_20"
|
"superbwarfare:ntw_20",
|
||||||
|
"superbwarfare:m_2"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -34,6 +34,7 @@
|
||||||
"superbwarfare:secondary_cataclysm",
|
"superbwarfare:secondary_cataclysm",
|
||||||
"superbwarfare:taser",
|
"superbwarfare:taser",
|
||||||
"superbwarfare:minigun",
|
"superbwarfare:minigun",
|
||||||
"superbwarfare:mp_5"
|
"superbwarfare:mp_5",
|
||||||
|
"superbwarfare:m_2"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -0,0 +1,119 @@
|
||||||
|
package com.atsuishio.superbwarfare.client.model.item;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
|
import com.atsuishio.superbwarfare.client.AnimationHelper;
|
||||||
|
import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay;
|
||||||
|
import com.atsuishio.superbwarfare.data.gun.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.machinegun.M2Item;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import software.bernie.geckolib.animation.AnimationState;
|
||||||
|
import software.bernie.geckolib.cache.object.GeoBone;
|
||||||
|
|
||||||
|
public class M2ItemModel extends CustomGunModel<M2Item> {
|
||||||
|
|
||||||
|
public static float fireRotY = 0f;
|
||||||
|
public static float fireRotZ = 0f;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getAnimationResource(M2Item animatable) {
|
||||||
|
return Mod.loc("animations/m_2.animation.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getModelResource(M2Item animatable) {
|
||||||
|
return Mod.loc("geo/m_2.geo.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getTextureResource(M2Item animatable) {
|
||||||
|
return Mod.loc("textures/item/m_2.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getLODModelResource(M2Item animatable) {
|
||||||
|
return Mod.loc("geo/lod/m_2.geo.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getLODTextureResource(M2Item animatable) {
|
||||||
|
return Mod.loc("textures/item/lod/m_2.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCustomAnimations(M2Item animatable, long instanceId, AnimationState<M2Item> animationState) {
|
||||||
|
Player player = Minecraft.getInstance().player;
|
||||||
|
if (player == null) return;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (shouldCancelRender(stack, animationState)) return;
|
||||||
|
|
||||||
|
GeoBone b1 = getAnimationProcessor().getBone("b1");
|
||||||
|
GeoBone b2 = getAnimationProcessor().getBone("b2");
|
||||||
|
GeoBone b3 = getAnimationProcessor().getBone("b3");
|
||||||
|
GeoBone b4 = getAnimationProcessor().getBone("b4");
|
||||||
|
GeoBone b5 = getAnimationProcessor().getBone("b5");
|
||||||
|
|
||||||
|
int ammo = GunData.from(stack).ammo.get();
|
||||||
|
boolean flag = GunData.from(stack).hideBulletChain.get();
|
||||||
|
|
||||||
|
if (ammo < 5 && flag) {
|
||||||
|
b5.setScaleX(0);
|
||||||
|
b5.setScaleY(0);
|
||||||
|
b5.setScaleZ(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ammo < 4 && flag) {
|
||||||
|
b4.setScaleX(0);
|
||||||
|
b4.setScaleY(0);
|
||||||
|
b4.setScaleZ(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ammo < 3 && flag) {
|
||||||
|
b3.setScaleX(0);
|
||||||
|
b3.setScaleY(0);
|
||||||
|
b3.setScaleZ(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ammo < 2 && flag) {
|
||||||
|
b2.setScaleX(0);
|
||||||
|
b2.setScaleY(0);
|
||||||
|
b2.setScaleZ(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ammo < 1 && flag) {
|
||||||
|
b1.setScaleX(0);
|
||||||
|
b1.setScaleY(0);
|
||||||
|
b1.setScaleZ(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||||
|
|
||||||
|
double fpz = ClientEventHandler.firePosZ * 4 * times;
|
||||||
|
double fp = ClientEventHandler.firePos;
|
||||||
|
double fr = ClientEventHandler.fireRot;
|
||||||
|
|
||||||
|
|
||||||
|
GeoBone shen = getAnimationProcessor().getBone("fireRootNormal");
|
||||||
|
|
||||||
|
fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
|
||||||
|
fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5f * fpz) * ClientEventHandler.recoilHorizon);
|
||||||
|
|
||||||
|
shen.setPosX(-0.7f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
|
||||||
|
shen.setPosY((float) (0.4f * fp + 0.44f * fr));
|
||||||
|
shen.setPosZ((float) (2.825 * fp + 0.24f * fr + 1.25 * fpz));
|
||||||
|
shen.setRotX((float) (0.01f * fp + 0.08f * fr + 0.01f * fpz));
|
||||||
|
shen.setRotY(fireRotY);
|
||||||
|
shen.setRotZ(fireRotZ);
|
||||||
|
|
||||||
|
CrossHairOverlay.gunRot = shen.getRotZ();
|
||||||
|
|
||||||
|
ClientEventHandler.gunRootMove(getAnimationProcessor());
|
||||||
|
GeoBone camera = getAnimationProcessor().getBone("camera");
|
||||||
|
AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 1f, 0.45f);
|
||||||
|
ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
|
||||||
|
}
|
||||||
|
}
|
|
@ -95,7 +95,7 @@ public class CrossHairOverlay implements LayeredDraw.Layer {
|
||||||
float finPosX = ((w - finLength) / 2) + moveX;
|
float finPosX = ((w - finLength) / 2) + moveX;
|
||||||
float finPosY = ((h - finLength) / 2) + moveY;
|
float finPosY = ((h - finLength) / 2) + moveY;
|
||||||
|
|
||||||
if (shouldRenderCrossHair(player) || (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && (stack.is(ModItems.MINIGUN.get()) || stack.is(ModItems.AURELIA_SCEPTRE.get()))) || (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && (ClientEventHandler.zoomTime > 0 || ClientEventHandler.bowPullPos > 0))) {
|
if (shouldRenderCrossHair(player) || (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && (stack.is(ModItems.MINIGUN.get()) || stack.is(ModItems.AURELIA_SCEPTRE.get()) || stack.is(ModItems.M_2.get()))) || (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && (ClientEventHandler.zoomTime > 0 || ClientEventHandler.bowPullPos > 0))) {
|
||||||
preciseBlit(guiGraphics, Mod.loc("textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
preciseBlit(guiGraphics, Mod.loc("textures/screens/point.png"), w / 2f - 7.5f + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16);
|
||||||
if (!player.isSprinting() || ClientEventHandler.cantSprint > 0) {
|
if (!player.isSprinting() || ClientEventHandler.cantSprint > 0) {
|
||||||
if (data.projectileAmount() > 1) {
|
if (data.projectileAmount() > 1) {
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.atsuishio.superbwarfare.client.renderer.gun;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.client.AnimationHelper;
|
||||||
|
import com.atsuishio.superbwarfare.client.model.item.M2ItemModel;
|
||||||
|
import com.atsuishio.superbwarfare.client.renderer.CustomGunRenderer;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.machinegun.M2Item;
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.world.item.ItemDisplayContext;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import software.bernie.geckolib.animatable.GeoItem;
|
||||||
|
import software.bernie.geckolib.cache.object.GeoBone;
|
||||||
|
|
||||||
|
public class M2ItemRenderer extends CustomGunRenderer<M2Item> {
|
||||||
|
|
||||||
|
public M2ItemRenderer() {
|
||||||
|
super(new M2ItemModel());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void renderRecursively(PoseStack stack, M2Item animatable, GeoBone bone, RenderType type, MultiBufferSource buffer, VertexConsumer bufferIn, boolean isReRender, float partialTick, int packedLightIn, int packedOverlayIn, int color) {
|
||||||
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
String name = bone.getName();
|
||||||
|
boolean renderingArms = false;
|
||||||
|
if (name.equals("Lefthand") || name.equals("Righthand")) {
|
||||||
|
bone.setHidden(true);
|
||||||
|
renderingArms = true;
|
||||||
|
} else {
|
||||||
|
bone.setHidden(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
var player = mc.player;
|
||||||
|
if (player == null) return;
|
||||||
|
ItemStack itemStack = player.getMainHandItem();
|
||||||
|
|
||||||
|
if (itemStack.getItem() instanceof GunItem && GeoItem.getId(itemStack) == this.getInstanceId(animatable)) {
|
||||||
|
if (this.renderPerspective == ItemDisplayContext.FIRST_PERSON_RIGHT_HAND || this.renderPerspective == ItemDisplayContext.THIRD_PERSON_RIGHT_HAND) {
|
||||||
|
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, 0, 0.1, 2.95, 1.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (renderingArms) {
|
||||||
|
AnimationHelper.renderArms(player, this.renderPerspective, stack, name, bone, buffer, type, packedLightIn, false);
|
||||||
|
}
|
||||||
|
super.renderRecursively(stack, animatable, bone, type, buffer, bufferIn, isReRender, partialTick, packedLightIn, packedOverlayIn, color);
|
||||||
|
}
|
||||||
|
}
|
|
@ -64,6 +64,7 @@ public class ModItemModelProvider extends ItemModelProvider {
|
||||||
gunItem(ModItems.TRACHELIUM);
|
gunItem(ModItems.TRACHELIUM);
|
||||||
gunItem(ModItems.VECTOR);
|
gunItem(ModItems.VECTOR);
|
||||||
gunItem(ModItems.MP_5);
|
gunItem(ModItems.MP_5);
|
||||||
|
gunItem(ModItems.M_2);
|
||||||
|
|
||||||
simpleItem(ModItems.EMPTY_PERK, "perk/");
|
simpleItem(ModItems.EMPTY_PERK, "perk/");
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ public class ModItemTagProvider extends ItemTagsProvider {
|
||||||
this.tag(ModTags.Items.SNIPER_RIFLE).add(ModItems.HUNTING_RIFLE.get(), ModItems.SENTINEL.get(),
|
this.tag(ModTags.Items.SNIPER_RIFLE).add(ModItems.HUNTING_RIFLE.get(), ModItems.SENTINEL.get(),
|
||||||
ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get());
|
ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get());
|
||||||
|
|
||||||
this.tag(ModTags.Items.HEAVY_WEAPON).add(ModItems.NTW_20.get());
|
this.tag(ModTags.Items.HEAVY_WEAPON).add(ModItems.NTW_20.get(), ModItems.M_2.get());
|
||||||
|
|
||||||
this.tag(ModTags.Items.SHOTGUN).add(ModItems.HOMEMADE_SHOTGUN.get(), ModItems.M_870.get(), ModItems.AA_12.get());
|
this.tag(ModTags.Items.SHOTGUN).add(ModItems.HOMEMADE_SHOTGUN.get(), ModItems.M_870.get(), ModItems.AA_12.get());
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ public class ModItemTagProvider extends ItemTagsProvider {
|
||||||
ModItems.SKS.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(), ModItems.TRACHELIUM.get(), ModItems.M_79.get(),
|
ModItems.SKS.get(), ModItems.RPK.get(), ModItems.HK_416.get(), ModItems.AA_12.get(), ModItems.M_4.get(), ModItems.DEVOTION.get(), ModItems.TRACHELIUM.get(), ModItems.M_79.get(),
|
||||||
ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.M_98B.get(), ModItems.SENTINEL.get(), ModItems.M_870.get(), ModItems.MARLIN.get(), ModItems.GLOCK_17.get(), ModItems.RPG.get(),
|
ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.M_98B.get(), ModItems.SENTINEL.get(), ModItems.M_870.get(), ModItems.MARLIN.get(), ModItems.GLOCK_17.get(), ModItems.RPG.get(),
|
||||||
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.AURELIA_SCEPTRE.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get(), ModItems.MP_443.get(), ModItems.INSIDIOUS.get(), ModItems.SECONDARY_CATACLYSM.get(),
|
ModItems.GLOCK_18.get(), ModItems.M_1911.get(), ModItems.AURELIA_SCEPTRE.get(), ModItems.QBZ_95.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get(), ModItems.MP_443.get(), ModItems.INSIDIOUS.get(), ModItems.SECONDARY_CATACLYSM.get(),
|
||||||
ModItems.TASER.get(), ModItems.MINIGUN.get(), ModItems.MP_5.get());
|
ModItems.TASER.get(), ModItems.MINIGUN.get(), ModItems.MP_5.get(), ModItems.M_2.get());
|
||||||
|
|
||||||
this.tag(ModTags.Items.LAUNCHER).add(ModItems.RPG.get(), ModItems.JAVELIN.get())
|
this.tag(ModTags.Items.LAUNCHER).add(ModItems.RPG.get(), ModItems.JAVELIN.get())
|
||||||
.addTag(ModTags.Items.LAUNCHER_GRENADE);
|
.addTag(ModTags.Items.LAUNCHER_GRENADE);
|
||||||
|
|
|
@ -131,7 +131,7 @@ public class ModRecipeProvider extends RecipeProvider {
|
||||||
gunSmithing(writer, ModItems.K_98_BLUEPRINT.get(), GunRarity.RARE, ItemTags.LOGS, ModItems.K_98.get());
|
gunSmithing(writer, ModItems.K_98_BLUEPRINT.get(), GunRarity.RARE, ItemTags.LOGS, ModItems.K_98.get());
|
||||||
gunSmithing(writer, ModItems.MOSIN_NAGANT_BLUEPRINT.get(), GunRarity.RARE, ItemTags.LOGS, ModItems.MOSIN_NAGANT.get());
|
gunSmithing(writer, ModItems.MOSIN_NAGANT_BLUEPRINT.get(), GunRarity.RARE, ItemTags.LOGS, ModItems.MOSIN_NAGANT.get());
|
||||||
gunSmithing(writer, ModItems.JAVELIN_BLUEPRINT.get(), GunRarity.LEGENDARY, ModItems.ANCIENT_CPU.get(), ModItems.JAVELIN.get());
|
gunSmithing(writer, ModItems.JAVELIN_BLUEPRINT.get(), GunRarity.LEGENDARY, ModItems.ANCIENT_CPU.get(), ModItems.JAVELIN.get());
|
||||||
// gunSmithing(writer, ModItems.M_2_HB_BLUEPRINT.get(), GunRarity.RARE, ModTags.Items.INGOTS_STEEL, ModItems.M_2_HB.get());
|
gunSmithing(writer, ModItems.M_2_HB_BLUEPRINT.get(), GunRarity.RARE, ModTags.Items.STORAGE_BLOCK_STEEL, ModItems.M_2.get());
|
||||||
gunSmithing(writer, ModItems.SECONDARY_CATACLYSM_BLUEPRINT.get(), GunRarity.LEGENDARY, ModItems.KNIFE.get(), ModItems.SECONDARY_CATACLYSM.get());
|
gunSmithing(writer, ModItems.SECONDARY_CATACLYSM_BLUEPRINT.get(), GunRarity.LEGENDARY, ModItems.KNIFE.get(), ModItems.SECONDARY_CATACLYSM.get());
|
||||||
gunSmithing(writer, ModItems.INSIDIOUS_BLUEPRINT.get(), GunRarity.EPIC, ModTags.Items.INGOTS_CEMENTED_CARBIDE, ModItems.INSIDIOUS.get());
|
gunSmithing(writer, ModItems.INSIDIOUS_BLUEPRINT.get(), GunRarity.EPIC, ModTags.Items.INGOTS_CEMENTED_CARBIDE, ModItems.INSIDIOUS.get());
|
||||||
gunSmithing(writer, ModItems.AURELIA_SCEPTRE_BLUEPRINT.get(), GunRarity.LEGENDARY, Items.END_CRYSTAL, ModItems.AURELIA_SCEPTRE.get());
|
gunSmithing(writer, ModItems.AURELIA_SCEPTRE_BLUEPRINT.get(), GunRarity.LEGENDARY, Items.END_CRYSTAL, ModItems.AURELIA_SCEPTRE.get());
|
||||||
|
|
|
@ -48,7 +48,7 @@ import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.item.C4Bomb.TAG_CONTROL;
|
import static com.atsuishio.superbwarfare.item.C4BombItem.TAG_CONTROL;
|
||||||
|
|
||||||
public class C4Entity extends Entity implements GeoEntity, OwnableEntity {
|
public class C4Entity extends Entity implements GeoEntity, OwnableEntity {
|
||||||
|
|
||||||
|
|
|
@ -74,5 +74,22 @@ public class ModEnumExtensions {
|
||||||
public static HumanoidModel.ArmPose getMinigunPose() {
|
public static HumanoidModel.ArmPose getMinigunPose() {
|
||||||
return SUPERBWARFARE_MINIGUN_POSE.getValue();
|
return SUPERBWARFARE_MINIGUN_POSE.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final EnumProxy<HumanoidModel.ArmPose> SUPERBWARFARE_M2_POSE = new EnumProxy<>(
|
||||||
|
HumanoidModel.ArmPose.class,
|
||||||
|
false,
|
||||||
|
(IArmPoseTransformer) (model, entity, arm) -> {
|
||||||
|
if (arm != HumanoidArm.LEFT) {
|
||||||
|
model.rightArm.xRot = 45f * Mth.DEG_TO_RAD + model.head.xRot;
|
||||||
|
model.rightArm.yRot = -10f * Mth.DEG_TO_RAD;
|
||||||
|
model.leftArm.xRot = -45f * Mth.DEG_TO_RAD + model.head.xRot;
|
||||||
|
model.leftArm.yRot = 40f * Mth.DEG_TO_RAD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
public static HumanoidModel.ArmPose getM2Pose() {
|
||||||
|
return SUPERBWARFARE_M2_POSE.getValue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,10 +13,7 @@ import com.atsuishio.superbwarfare.item.gun.launcher.JavelinItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.launcher.M79Item;
|
import com.atsuishio.superbwarfare.item.gun.launcher.M79Item;
|
||||||
import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem;
|
import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem;
|
||||||
import com.atsuishio.superbwarfare.item.gun.launcher.SecondaryCataclysm;
|
import com.atsuishio.superbwarfare.item.gun.launcher.SecondaryCataclysm;
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.DevotionItem;
|
import com.atsuishio.superbwarfare.item.gun.machinegun.*;
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.MinigunItem;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.machinegun.RpkItem;
|
|
||||||
import com.atsuishio.superbwarfare.item.gun.rifle.*;
|
import com.atsuishio.superbwarfare.item.gun.rifle.*;
|
||||||
import com.atsuishio.superbwarfare.item.gun.shotgun.Aa12Item;
|
import com.atsuishio.superbwarfare.item.gun.shotgun.Aa12Item;
|
||||||
import com.atsuishio.superbwarfare.item.gun.shotgun.HomemadeShotgunItem;
|
import com.atsuishio.superbwarfare.item.gun.shotgun.HomemadeShotgunItem;
|
||||||
|
@ -79,6 +76,7 @@ public class ModItems {
|
||||||
public static final DeferredHolder<Item, DevotionItem> DEVOTION = GUNS.register("devotion", DevotionItem::new);
|
public static final DeferredHolder<Item, DevotionItem> DEVOTION = GUNS.register("devotion", DevotionItem::new);
|
||||||
public static final DeferredHolder<Item, RpkItem> RPK = GUNS.register("rpk", RpkItem::new);
|
public static final DeferredHolder<Item, RpkItem> RPK = GUNS.register("rpk", RpkItem::new);
|
||||||
public static final DeferredHolder<Item, M60Item> M_60 = GUNS.register("m_60", M60Item::new);
|
public static final DeferredHolder<Item, M60Item> M_60 = GUNS.register("m_60", M60Item::new);
|
||||||
|
public static final DeferredHolder<Item, M2Item> M_2 = GUNS.register("m_2", M2Item::new);
|
||||||
public static final DeferredHolder<Item, MinigunItem> MINIGUN = GUNS.register("minigun", MinigunItem::new);
|
public static final DeferredHolder<Item, MinigunItem> MINIGUN = GUNS.register("minigun", MinigunItem::new);
|
||||||
public static final DeferredHolder<Item, M79Item> M_79 = GUNS.register("m_79", M79Item::new);
|
public static final DeferredHolder<Item, M79Item> M_79 = GUNS.register("m_79", M79Item::new);
|
||||||
public static final DeferredHolder<Item, SecondaryCataclysm> SECONDARY_CATACLYSM = GUNS.register("secondary_cataclysm", SecondaryCataclysm::new);
|
public static final DeferredHolder<Item, SecondaryCataclysm> SECONDARY_CATACLYSM = GUNS.register("secondary_cataclysm", SecondaryCataclysm::new);
|
||||||
|
|
|
@ -351,6 +351,8 @@ public class ModSounds {
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_FIRE_3P = REGISTRY.register("m2_fire_3p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_fire_3p")));
|
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_FIRE_3P = REGISTRY.register("m2_fire_3p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_fire_3p")));
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_FAR = REGISTRY.register("m2_far", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_far")));
|
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_FAR = REGISTRY.register("m2_far", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_far")));
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_VERYFAR = REGISTRY.register("m2_veryfar", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_veryfar")));
|
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_VERYFAR = REGISTRY.register("m2_veryfar", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_veryfar")));
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_RELOAD_NORMAL = REGISTRY.register("m_2_reload_normal", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m2_reload_normal")));
|
||||||
|
public static final DeferredHolder<SoundEvent, SoundEvent> M_2_RELOAD_EMPTY = REGISTRY.register("m_2_reload_empty", () -> SoundEvent.createVariableRangeEvent(Mod.loc("m_2_reload_empty")));
|
||||||
|
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MK_42_FIRE_1P = REGISTRY.register("mk_42_fire_1p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("mk_42_fire_1p")));
|
public static final DeferredHolder<SoundEvent, SoundEvent> MK_42_FIRE_1P = REGISTRY.register("mk_42_fire_1p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("mk_42_fire_1p")));
|
||||||
public static final DeferredHolder<SoundEvent, SoundEvent> MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("mk_42_fire_3p")));
|
public static final DeferredHolder<SoundEvent, SoundEvent> MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("mk_42_fire_3p")));
|
||||||
|
|
|
@ -0,0 +1,163 @@
|
||||||
|
package com.atsuishio.superbwarfare.item.gun.machinegun;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
|
import com.atsuishio.superbwarfare.client.renderer.gun.M2ItemRenderer;
|
||||||
|
import com.atsuishio.superbwarfare.data.gun.GunData;
|
||||||
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModEnumExtensions;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModSounds;
|
||||||
|
import com.atsuishio.superbwarfare.item.gun.GunItem;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.model.HumanoidModel;
|
||||||
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.sounds.SoundEvent;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.entity.Entity;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.ItemDisplayContext;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.Rarity;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import software.bernie.geckolib.animation.*;
|
||||||
|
import software.bernie.geckolib.constant.DataTickets;
|
||||||
|
import software.bernie.geckolib.renderer.GeoItemRenderer;
|
||||||
|
|
||||||
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class M2Item extends GunItem {
|
||||||
|
|
||||||
|
public M2Item() {
|
||||||
|
super(new Properties().stacksTo(1).rarity(Rarity.RARE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Supplier<GeoItemRenderer<? extends Item>> getRenderer() {
|
||||||
|
return M2ItemRenderer::new;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
|
||||||
|
if (!stack.isEmpty()) {
|
||||||
|
if (entityLiving.getUsedItemHand() == hand) {
|
||||||
|
return ModEnumExtensions.Client.getM2Pose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HumanoidModel.ArmPose.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayState fireAnimPredicate(AnimationState<M2Item> event) {
|
||||||
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
if (player == null) return PlayState.STOP;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP;
|
||||||
|
if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND)
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_2.idle"));
|
||||||
|
|
||||||
|
if (ClientEventHandler.firePosTimer > 0 && ClientEventHandler.firePosTimer < 0.45) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m_2.fire"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_2.idle"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayState idlePredicate(AnimationState<M2Item> event) {
|
||||||
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
if (player == null) return PlayState.STOP;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP;
|
||||||
|
if (event.getData(DataTickets.ITEM_RENDER_PERSPECTIVE) != ItemDisplayContext.FIRST_PERSON_RIGHT_HAND)
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_2.idle"));
|
||||||
|
|
||||||
|
if (GunData.from(stack).reload.empty()) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m_2.reload_empty"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GunData.from(stack).reload.normal()) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.m_2.reload_normal"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.isSprinting() && player.onGround() && ClientEventHandler.cantSprint == 0 && ClientEventHandler.drawTime < 0.01) {
|
||||||
|
if (ClientEventHandler.tacticalSprint) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_2.run_fast"));
|
||||||
|
} else {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_2.run"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.m_2.idle"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||||
|
var fireAnimController = new AnimationController<>(this, "fireAnimController", 0, this::fireAnimPredicate);
|
||||||
|
data.add(fireAnimController);
|
||||||
|
var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate);
|
||||||
|
data.add(idleController);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<SoundEvent> getReloadSound() {
|
||||||
|
return Set.of(ModSounds.M_2_RELOAD_EMPTY.get(), ModSounds.M_2_RELOAD_NORMAL.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) {
|
||||||
|
var data = GunData.from(stack);
|
||||||
|
if (data.draw.get()) {
|
||||||
|
data.draw.set(false);
|
||||||
|
if (data.ammo.get() <= 5) {
|
||||||
|
data.hideBulletChain.set(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.inventoryTick(stack, level, entity, slot, selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getGunIcon() {
|
||||||
|
return Mod.loc("textures/gun_icon/m2_icon.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGunDisplayName() {
|
||||||
|
return "M2HB";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOpenBolt(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canEjectShell(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasBulletInBarrel(ItemStack stack) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeShoot(GunData data, Player player, double spread, boolean zoom) {
|
||||||
|
super.beforeShoot(data, player, spread, zoom);
|
||||||
|
|
||||||
|
if (data.ammo.get() <= 5) {
|
||||||
|
data.hideBulletChain.set(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addReloadTimeBehavior(Map<Integer, Consumer<GunData>> behaviors) {
|
||||||
|
super.addReloadTimeBehavior(behaviors);
|
||||||
|
|
||||||
|
behaviors.put(70, data -> data.hideBulletChain.reset());
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,6 +35,15 @@
|
||||||
"class": "com/atsuishio/superbwarfare/init/ModEnumExtensions$Client",
|
"class": "com/atsuishio/superbwarfare/init/ModEnumExtensions$Client",
|
||||||
"field": "SUPERBWARFARE_MINIGUN_POSE"
|
"field": "SUPERBWARFARE_MINIGUN_POSE"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enum": "net/minecraft/client/model/HumanoidModel$ArmPose",
|
||||||
|
"name": "SUPERBWARFARE_M2_POSE",
|
||||||
|
"constructor": "(ZLnet/neoforged/neoforge/client/IArmPoseTransformer;)V",
|
||||||
|
"parameters": {
|
||||||
|
"class": "com/atsuishio/superbwarfare/init/ModEnumExtensions$Client",
|
||||||
|
"field": "SUPERBWARFARE_M2_POSE"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
3500
src/main/resources/assets/superbwarfare/geo/lod/m_2.geo.json
Normal file
3500
src/main/resources/assets/superbwarfare/geo/lod/m_2.geo.json
Normal file
File diff suppressed because it is too large
Load diff
38199
src/main/resources/assets/superbwarfare/geo/m_2.geo.json
Normal file
38199
src/main/resources/assets/superbwarfare/geo/m_2.geo.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -16,6 +16,7 @@
|
||||||
"item.superbwarfare.rpg": "RPG-7",
|
"item.superbwarfare.rpg": "RPG-7",
|
||||||
"item.superbwarfare.m_98b": "M98B",
|
"item.superbwarfare.m_98b": "M98B",
|
||||||
"item.superbwarfare.m_60": "M60",
|
"item.superbwarfare.m_60": "M60",
|
||||||
|
"item.superbwarfare.m_2": "M2HB",
|
||||||
"item.superbwarfare.mk_14": "MK-14EBR",
|
"item.superbwarfare.mk_14": "MK-14EBR",
|
||||||
"item.superbwarfare.m_79": "M79",
|
"item.superbwarfare.m_79": "M79",
|
||||||
"item.superbwarfare.mp_5": "MP5",
|
"item.superbwarfare.mp_5": "MP5",
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
"item.superbwarfare.rpg": "RPG-7火箭筒",
|
"item.superbwarfare.rpg": "RPG-7火箭筒",
|
||||||
"item.superbwarfare.m_98b": "M98B狙击步枪",
|
"item.superbwarfare.m_98b": "M98B狙击步枪",
|
||||||
"item.superbwarfare.m_60": "M60通用机枪",
|
"item.superbwarfare.m_60": "M60通用机枪",
|
||||||
|
"item.superbwarfare.m_2": "M2HB重机枪",
|
||||||
"item.superbwarfare.mk_14": "MK-14EBR射手步枪",
|
"item.superbwarfare.mk_14": "MK-14EBR射手步枪",
|
||||||
"item.superbwarfare.m_79": "M79榴弹发射器",
|
"item.superbwarfare.m_79": "M79榴弹发射器",
|
||||||
"item.superbwarfare.vector": "短剑冲锋枪",
|
"item.superbwarfare.vector": "短剑冲锋枪",
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "builtin/entity",
|
||||||
|
"texture_size": [
|
||||||
|
128,
|
||||||
|
128
|
||||||
|
],
|
||||||
|
"display": {
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"rotation": [
|
||||||
|
135,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"translation": [
|
||||||
|
-1,
|
||||||
|
7,
|
||||||
|
6.5
|
||||||
|
],
|
||||||
|
"scale": [
|
||||||
|
0.6,
|
||||||
|
0.6,
|
||||||
|
0.6
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"scale": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"rotation": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"translation": [
|
||||||
|
-3.5,
|
||||||
|
-0.5,
|
||||||
|
-1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"scale": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"translation": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
5.25
|
||||||
|
],
|
||||||
|
"scale": [
|
||||||
|
0.6,
|
||||||
|
0.6,
|
||||||
|
0.6
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [
|
||||||
|
165.69,
|
||||||
|
-39.63,
|
||||||
|
178.66
|
||||||
|
],
|
||||||
|
"translation": [
|
||||||
|
-3.25,
|
||||||
|
-0.75,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"scale": [
|
||||||
|
0.37,
|
||||||
|
0.37,
|
||||||
|
0.37
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"translation": [
|
||||||
|
-4.75,
|
||||||
|
6.5,
|
||||||
|
0.75
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"rotation": [
|
||||||
|
0,
|
||||||
|
-90,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"translation": [
|
||||||
|
-12,
|
||||||
|
0,
|
||||||
|
-1
|
||||||
|
],
|
||||||
|
"scale": [
|
||||||
|
1.25,
|
||||||
|
1.25,
|
||||||
|
1.25
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"textures": {
|
||||||
|
"particle": "item/m_2"
|
||||||
|
}
|
||||||
|
}
|
|
@ -2489,6 +2489,22 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"m2_reload_normal": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:m2/m2_reload_normal",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"m2_reload_empty": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:m2/m2_reload_empty",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"wheel_chair_engine": {
|
"wheel_chair_engine": {
|
||||||
"sounds": [
|
"sounds": [
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 6 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
BIN
src/main/resources/assets/superbwarfare/textures/item/m_2.png
Normal file
BIN
src/main/resources/assets/superbwarfare/textures/item/m_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
40
src/main/resources/data/superbwarfare/guns/m_2.json
Normal file
40
src/main/resources/data/superbwarfare/guns/m_2.json
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
"ID": "superbwarfare:m_2",
|
||||||
|
"Spread": 5,
|
||||||
|
"RecoilX": 0.012,
|
||||||
|
"RecoilY": 0.02,
|
||||||
|
"Damage": 40,
|
||||||
|
"Headshot": 2.5,
|
||||||
|
"Velocity": 43,
|
||||||
|
"Magazine": 100,
|
||||||
|
"Weight": 15,
|
||||||
|
"DefaultFireMode": "Auto",
|
||||||
|
"NormalReloadTime": 100,
|
||||||
|
"EmptyReloadTime": 124,
|
||||||
|
"BypassesArmor": 0.4,
|
||||||
|
"SoundRadius": 15,
|
||||||
|
"RPM": 400,
|
||||||
|
"HeatPerShoot": 2,
|
||||||
|
"AvailableFireModes": [
|
||||||
|
"Semi",
|
||||||
|
"Auto"
|
||||||
|
],
|
||||||
|
"DamageReduce": {
|
||||||
|
"Type": "Heavy"
|
||||||
|
},
|
||||||
|
"AmmoType": "@HeavyAmmo",
|
||||||
|
"AvailablePerks": [
|
||||||
|
"@Ammo",
|
||||||
|
"superbwarfare:fourth_times_charm",
|
||||||
|
"superbwarfare:subsistence",
|
||||||
|
"superbwarfare:powerful_attraction",
|
||||||
|
"superbwarfare:intelligent_chip",
|
||||||
|
"superbwarfare:killing_tally",
|
||||||
|
"superbwarfare:desperado",
|
||||||
|
"superbwarfare:monster_hunter",
|
||||||
|
"superbwarfare:vorpal_weapon",
|
||||||
|
"!superbwarfare:micro_missile",
|
||||||
|
"!superbwarfare:longer_wire",
|
||||||
|
"!superbwarfare:cupid_arrow"
|
||||||
|
]
|
||||||
|
}
|
|
@ -2,19 +2,13 @@
|
||||||
"type": "minecraft:crafting_shaped",
|
"type": "minecraft:crafting_shaped",
|
||||||
"category": "misc",
|
"category": "misc",
|
||||||
"pattern": [
|
"pattern": [
|
||||||
"abc",
|
" b ",
|
||||||
"def",
|
"def",
|
||||||
"ghi"
|
"ghi"
|
||||||
],
|
],
|
||||||
"key": {
|
"key": {
|
||||||
"a": {
|
|
||||||
"item": "superbwarfare:m2hb_blueprint"
|
|
||||||
},
|
|
||||||
"b": {
|
"b": {
|
||||||
"item": "superbwarfare:rare_material_pack"
|
"item": "superbwarfare:m_2"
|
||||||
},
|
|
||||||
"c": {
|
|
||||||
"tag": "superbwarfare:ingots/steel"
|
|
||||||
},
|
},
|
||||||
"d": {
|
"d": {
|
||||||
"item": "minecraft:comparator"
|
"item": "minecraft:comparator"
|
||||||
|
|
Loading…
Add table
Reference in a new issue