添加最优质的武器
This commit is contained in:
parent
3b0e3a5266
commit
f613e7dd4f
39 changed files with 6061 additions and 7 deletions
|
@ -0,0 +1,27 @@
|
||||||
|
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.gun.Qbz95Item;
|
||||||
|
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 Qbz95Layer extends GeoRenderLayer<Qbz95Item> {
|
||||||
|
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/qbz95_e.png");
|
||||||
|
|
||||||
|
public Qbz95Layer(GeoRenderer<Qbz95Item> entityRenderer) {
|
||||||
|
super(entityRenderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(PoseStack poseStack, Qbz95Item 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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,135 @@
|
||||||
|
package net.mcreator.superbwarfare.client.model.item;
|
||||||
|
|
||||||
|
import net.mcreator.superbwarfare.ModUtils;
|
||||||
|
import net.mcreator.superbwarfare.init.ModTags;
|
||||||
|
import net.mcreator.superbwarfare.item.gun.Qbz95Item;
|
||||||
|
import net.mcreator.superbwarfare.network.ModVariables;
|
||||||
|
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.core.animatable.model.CoreGeoBone;
|
||||||
|
import software.bernie.geckolib.core.animation.AnimationState;
|
||||||
|
import software.bernie.geckolib.model.GeoModel;
|
||||||
|
|
||||||
|
public class Qbz95ItemModel extends GeoModel<Qbz95Item> {
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getAnimationResource(Qbz95Item animatable) {
|
||||||
|
return new ResourceLocation(ModUtils.MODID, "animations/qbz95.animation.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getModelResource(Qbz95Item animatable) {
|
||||||
|
return new ResourceLocation(ModUtils.MODID, "geo/qbz95.geo.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getTextureResource(Qbz95Item animatable) {
|
||||||
|
return new ResourceLocation(ModUtils.MODID, "textures/item/qbz95.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCustomAnimations(Qbz95Item animatable, long instanceId, AnimationState animationState) {
|
||||||
|
CoreGeoBone gun = getAnimationProcessor().getBone("bone");
|
||||||
|
CoreGeoBone shen = getAnimationProcessor().getBone("shen");
|
||||||
|
CoreGeoBone holo = getAnimationProcessor().getBone("holo");
|
||||||
|
CoreGeoBone flare = getAnimationProcessor().getBone("flare");
|
||||||
|
CoreGeoBone bolt = getAnimationProcessor().getBone("bolt2");
|
||||||
|
|
||||||
|
Player player = Minecraft.getInstance().player;
|
||||||
|
if (player == null) return;
|
||||||
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
if (!stack.is(ModTags.Items.GUN)) return;
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getDouble("flash_time") > 0) {
|
||||||
|
flare.setHidden(false);
|
||||||
|
flare.setScaleX((float) (0.6 + 0.5 * (Math.random() - 0.5)));
|
||||||
|
flare.setScaleY((float) (0.6 + 0.5 * (Math.random() - 0.5)));
|
||||||
|
flare.setRotZ((float) (0.5 * (Math.random() - 0.5)));
|
||||||
|
} else {
|
||||||
|
flare.setHidden(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
double p = player.getPersistentData().getDouble("zoom_pos");
|
||||||
|
double zp = player.getPersistentData().getDouble("zoom_pos_z");
|
||||||
|
|
||||||
|
gun.setPosX(3.73f * (float) p);
|
||||||
|
gun.setPosY(-0.5f * (float) p - (float) (0.2f * zp));
|
||||||
|
gun.setPosZ(13f * (float) p + (float) (0.3f * zp));
|
||||||
|
gun.setRotZ((float) (0.05f * zp));
|
||||||
|
gun.setScaleZ(1f - (0.7f * (float) p));
|
||||||
|
|
||||||
|
holo.setHidden(!(gun.getPosX() > 3.1));
|
||||||
|
|
||||||
|
double fp = player.getPersistentData().getDouble("fire_pos");
|
||||||
|
double fr = player.getPersistentData().getDouble("fire_rot");
|
||||||
|
|
||||||
|
if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zooming) {
|
||||||
|
shen.setPosY(-0.01f * (float) (fp + 2 * fr));
|
||||||
|
shen.setPosZ(1.2f * (float) (fp + 0.54f * fr));
|
||||||
|
shen.setRotX(0.003f * (float) (fp + fr));
|
||||||
|
shen.setRotZ(0f);
|
||||||
|
} else {
|
||||||
|
shen.setPosY(-0.03f * (float) (fp + 2 * fr));
|
||||||
|
shen.setPosZ(0.8f * (float) (fp + 0.54f * fr));
|
||||||
|
shen.setRotX(0.07f * (float) (0.18f * fp + fr));
|
||||||
|
shen.setRotZ(-0.04f * (float) (fp + 1.3 * fr));
|
||||||
|
}
|
||||||
|
shen.setPosX(0.5f * (float)fr * (float)((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp));
|
||||||
|
|
||||||
|
bolt.setPosZ(5f * (float) fp);
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getBoolean("HoldOpen")) {
|
||||||
|
bolt.setPosZ(5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
CoreGeoBone root = getAnimationProcessor().getBone("root");
|
||||||
|
|
||||||
|
float PosX = (float) player.getPersistentData().getDouble("gun_move_posX");
|
||||||
|
float PosY = (float) player.getPersistentData().getDouble("gun_move_posY");
|
||||||
|
|
||||||
|
double y = player.getPersistentData().getDouble("y");
|
||||||
|
double x = player.getPersistentData().getDouble("x");
|
||||||
|
|
||||||
|
root.setPosX(PosX);
|
||||||
|
root.setPosY((float) y + PosY);
|
||||||
|
root.setRotX((float) x);
|
||||||
|
|
||||||
|
float RotZ = (float) player.getPersistentData().getDouble("gun_move_rotZ");
|
||||||
|
|
||||||
|
root.setRotY(0.2f * PosX);
|
||||||
|
|
||||||
|
root.setRotZ(0.2f * PosX + RotZ);
|
||||||
|
|
||||||
|
CoreGeoBone move = getAnimationProcessor().getBone("move");
|
||||||
|
|
||||||
|
double m = player.getPersistentData().getDouble("move");
|
||||||
|
|
||||||
|
double vy = player.getPersistentData().getDouble("vy");
|
||||||
|
|
||||||
|
move.setPosX(9.3f * (float) m);
|
||||||
|
|
||||||
|
move.setPosY(2f * (float) vy);
|
||||||
|
|
||||||
|
double xRot = player.getPersistentData().getDouble("xRot");
|
||||||
|
|
||||||
|
double yRot = player.getPersistentData().getDouble("yRot");
|
||||||
|
|
||||||
|
double zRot = player.getPersistentData().getDouble("zRot");
|
||||||
|
|
||||||
|
move.setRotX(0.75f * Mth.DEG_TO_RAD * (float) xRot - 0.15f * (float) vy);
|
||||||
|
|
||||||
|
move.setRotY(0.75f * Mth.DEG_TO_RAD * (float) yRot);
|
||||||
|
|
||||||
|
move.setRotZ(2.7f * (float) m + Mth.DEG_TO_RAD * (float) zRot);
|
||||||
|
|
||||||
|
CoreGeoBone camera = getAnimationProcessor().getBone("camera");
|
||||||
|
|
||||||
|
player.getPersistentData().putDouble("camera_rot_x", Mth.RAD_TO_DEG * camera.getRotX());
|
||||||
|
|
||||||
|
player.getPersistentData().putDouble("camera_rot_y", Mth.RAD_TO_DEG * camera.getRotY());
|
||||||
|
|
||||||
|
player.getPersistentData().putDouble("camera_rot_z", Mth.RAD_TO_DEG * camera.getRotZ());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package net.mcreator.superbwarfare.client.renderer.item;
|
||||||
|
|
||||||
|
import net.mcreator.superbwarfare.client.layer.Qbz95Layer;
|
||||||
|
import net.mcreator.superbwarfare.client.model.item.Qbz95ItemModel;
|
||||||
|
import net.mcreator.superbwarfare.item.gun.Qbz95Item;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import software.bernie.geckolib.renderer.GeoItemRenderer;
|
||||||
|
|
||||||
|
public class Qbz95ItemRenderer extends GeoItemRenderer<Qbz95Item> {
|
||||||
|
public Qbz95ItemRenderer() {
|
||||||
|
super(new Qbz95ItemModel());
|
||||||
|
this.addRenderLayer(new Qbz95Layer(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getTextureLocation(Qbz95Item instance) {
|
||||||
|
return super.getTextureLocation(instance);
|
||||||
|
}
|
||||||
|
}
|
|
@ -121,7 +121,7 @@ public class GunEventHandler {
|
||||||
stack.getOrCreateTag().putBoolean("bullet_chain", true);
|
stack.getOrCreateTag().putBoolean("bullet_chain", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get()) {
|
if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get() || player.getMainHandItem().getItem() == ModItems.QBZ_95.get()) {
|
||||||
if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) {
|
if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) {
|
||||||
stack.getOrCreateTag().putDouble("fire_sequence", 0);
|
stack.getOrCreateTag().putDouble("fire_sequence", 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -435,6 +435,12 @@ public class GunEventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (stack.getItem() == ModItems.QBZ_95.get()) {
|
||||||
|
if (tag.getInt("gun_reloading_time") == 14) {
|
||||||
|
tag.putBoolean("HoldOpen", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (tag.getInt("gun_reloading_time") == 1) {
|
if (tag.getInt("gun_reloading_time") == 1) {
|
||||||
if (stack.is(ModTags.Items.OPEN_BOLT)) {
|
if (stack.is(ModTags.Items.OPEN_BOLT)) {
|
||||||
if (tag.getInt("ammo") == 0) {
|
if (tag.getInt("ammo") == 0) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ public class ModItems {
|
||||||
public static final RegistryObject<Item> SKS = GUNS.register("sks", SksItem::new);
|
public static final RegistryObject<Item> SKS = GUNS.register("sks", SksItem::new);
|
||||||
public static final RegistryObject<Item> M_4 = GUNS.register("m_4", M4Item::new);
|
public static final RegistryObject<Item> M_4 = GUNS.register("m_4", M4Item::new);
|
||||||
public static final RegistryObject<Item> HK_416 = GUNS.register("hk_416", Hk416Item::new);
|
public static final RegistryObject<Item> HK_416 = GUNS.register("hk_416", Hk416Item::new);
|
||||||
|
public static final RegistryObject<Item> QBZ_95 = GUNS.register("qbz_95", Qbz95Item::new);
|
||||||
public static final RegistryObject<Item> MK_14 = GUNS.register("mk_14", Mk14Item::new);
|
public static final RegistryObject<Item> MK_14 = GUNS.register("mk_14", Mk14Item::new);
|
||||||
public static final RegistryObject<Item> MARLIN = GUNS.register("marlin", MarlinItem::new);
|
public static final RegistryObject<Item> MARLIN = GUNS.register("marlin", MarlinItem::new);
|
||||||
public static final RegistryObject<Item> SVD = GUNS.register("svd", SvdItem::new);
|
public static final RegistryObject<Item> SVD = GUNS.register("svd", SvdItem::new);
|
||||||
|
@ -172,6 +173,7 @@ public class ModItems {
|
||||||
public static final RegistryObject<Item> DEVOTION_BLUEPRINT = ITEMS.register("devotion_blueprint", () -> new BlueprintItem(Rarity.EPIC));
|
public static final RegistryObject<Item> DEVOTION_BLUEPRINT = ITEMS.register("devotion_blueprint", () -> new BlueprintItem(Rarity.EPIC));
|
||||||
public static final RegistryObject<Item> TASER_BLUEPRINT = ITEMS.register("taser_blueprint", () -> new BlueprintItem(Rarity.COMMON));
|
public static final RegistryObject<Item> TASER_BLUEPRINT = ITEMS.register("taser_blueprint", () -> new BlueprintItem(Rarity.COMMON));
|
||||||
public static final RegistryObject<Item> M_1911_BLUEPRINT = ITEMS.register("m_1911_blueprint", () -> new BlueprintItem(Rarity.COMMON));
|
public static final RegistryObject<Item> M_1911_BLUEPRINT = ITEMS.register("m_1911_blueprint", () -> new BlueprintItem(Rarity.COMMON));
|
||||||
|
public static final RegistryObject<Item> QBZ_95_BLUEPRINT = ITEMS.register("qbz_95_blueprint", () -> new BlueprintItem(Rarity.EPIC));
|
||||||
|
|
||||||
|
|
||||||
private static RegistryObject<Item> block(RegistryObject<Block> block) {
|
private static RegistryObject<Item> block(RegistryObject<Block> block) {
|
||||||
|
|
|
@ -202,6 +202,13 @@ public class ModSounds {
|
||||||
public static final RegistryObject<SoundEvent> M_1911_RELOAD_NORMAL = REGISTRY.register("m_1911_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_1911_reload_normal")));
|
public static final RegistryObject<SoundEvent> M_1911_RELOAD_NORMAL = REGISTRY.register("m_1911_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_1911_reload_normal")));
|
||||||
public static final RegistryObject<SoundEvent> M_1911_RELOAD_EMPTY = REGISTRY.register("m_1911_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_1911_reload_empty")));
|
public static final RegistryObject<SoundEvent> M_1911_RELOAD_EMPTY = REGISTRY.register("m_1911_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "m_1911_reload_empty")));
|
||||||
|
|
||||||
|
public static final RegistryObject<SoundEvent> QBZ_95_FIRE_1P = REGISTRY.register("qbz_95_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "qbz_95_fire_1p")));
|
||||||
|
public static final RegistryObject<SoundEvent> QBZ_95_FIRE_3P = REGISTRY.register("qbz_95_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "qbz_95_fire_3p")));
|
||||||
|
public static final RegistryObject<SoundEvent> QBZ_95_FAR = REGISTRY.register("qbz_95_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "qbz_95_far")));
|
||||||
|
public static final RegistryObject<SoundEvent> QBZ_95_VERYFAR = REGISTRY.register("qbz_95_veryfar", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "qbz_95_veryfar")));
|
||||||
|
public static final RegistryObject<SoundEvent> QBZ_95_RELOAD_NORMAL = REGISTRY.register("qbz_95_reload_normal", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "qbz_95_reload_normal")));
|
||||||
|
public static final RegistryObject<SoundEvent> QBZ_95_RELOAD_EMPTY = REGISTRY.register("qbz_95_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "qbz_95_reload_empty")));
|
||||||
|
|
||||||
public static final RegistryObject<SoundEvent> MK_42_FIRE_1P = REGISTRY.register("mk_42_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "mk_42_fire_1p")));
|
public static final RegistryObject<SoundEvent> MK_42_FIRE_1P = REGISTRY.register("mk_42_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "mk_42_fire_1p")));
|
||||||
public static final RegistryObject<SoundEvent> MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "mk_42_fire_3p")));
|
public static final RegistryObject<SoundEvent> MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "mk_42_fire_3p")));
|
||||||
public static final RegistryObject<SoundEvent> MK_42_FAR = REGISTRY.register("mk_42_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "mk_42_far")));
|
public static final RegistryObject<SoundEvent> MK_42_FAR = REGISTRY.register("mk_42_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation("superbwarfare", "mk_42_far")));
|
||||||
|
|
|
@ -34,6 +34,7 @@ public class ModTabs {
|
||||||
output.accept(AK47Item.getGunInstance());
|
output.accept(AK47Item.getGunInstance());
|
||||||
output.accept(M4Item.getGunInstance());
|
output.accept(M4Item.getGunInstance());
|
||||||
output.accept(Hk416Item.getGunInstance());
|
output.accept(Hk416Item.getGunInstance());
|
||||||
|
output.accept(Qbz95Item.getGunInstance());
|
||||||
output.accept(Mk14Item.getGunInstance());
|
output.accept(Mk14Item.getGunInstance());
|
||||||
output.accept(MarlinItem.getGunInstance());
|
output.accept(MarlinItem.getGunInstance());
|
||||||
output.accept(SvdItem.getGunInstance());
|
output.accept(SvdItem.getGunInstance());
|
||||||
|
|
193
src/main/java/net/mcreator/superbwarfare/item/gun/Qbz95Item.java
Normal file
193
src/main/java/net/mcreator/superbwarfare/item/gun/Qbz95Item.java
Normal file
|
@ -0,0 +1,193 @@
|
||||||
|
package net.mcreator.superbwarfare.item.gun;
|
||||||
|
|
||||||
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
import net.mcreator.superbwarfare.ModUtils;
|
||||||
|
import net.mcreator.superbwarfare.client.renderer.item.Qbz95ItemRenderer;
|
||||||
|
import net.mcreator.superbwarfare.init.ModItems;
|
||||||
|
import net.mcreator.superbwarfare.init.ModSounds;
|
||||||
|
import net.mcreator.superbwarfare.init.ModTags;
|
||||||
|
import net.mcreator.superbwarfare.item.AnimatedItem;
|
||||||
|
import net.mcreator.superbwarfare.tools.GunsTool;
|
||||||
|
import net.mcreator.superbwarfare.tools.TooltipTool;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.model.HumanoidModel;
|
||||||
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
|
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
|
||||||
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.sounds.SoundEvent;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.effect.MobEffects;
|
||||||
|
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.ItemDisplayContext;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.item.Rarity;
|
||||||
|
import net.minecraft.world.item.TooltipFlag;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
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.core.animation.AnimationController;
|
||||||
|
import software.bernie.geckolib.core.animation.AnimationState;
|
||||||
|
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||||
|
import software.bernie.geckolib.core.object.PlayState;
|
||||||
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem {
|
||||||
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
public String animationProcedure = "empty";
|
||||||
|
public static ItemDisplayContext transformType;
|
||||||
|
|
||||||
|
public Qbz95Item() {
|
||||||
|
super(new Properties().stacksTo(1).rarity(Rarity.EPIC));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
|
||||||
|
super.initializeClient(consumer);
|
||||||
|
consumer.accept(new IClientItemExtensions() {
|
||||||
|
private final BlockEntityWithoutLevelRenderer renderer = new Qbz95ItemRenderer();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
|
||||||
|
return renderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack itemStack) {
|
||||||
|
return HumanoidModel.ArmPose.BOW_AND_ARROW;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getTransformType(ItemDisplayContext type) {
|
||||||
|
transformType = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayState idlePredicate(AnimationState 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 (this.animationProcedure.equals("empty")) {
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getInt("draw_time") < 16) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.draw"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getInt("fire_animation") > 0) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.fire"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.reload_empty"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getBoolean("is_normal_reloading")) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.reload_normal"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getInt("fire_mode") == 0 && stack.getOrCreateTag().getDouble("cg") > 0) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.changefirerate2"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stack.getOrCreateTag().getInt("fire_mode") == 2 && stack.getOrCreateTag().getDouble("cg") > 0) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.qbz95.changefirerate"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0) {
|
||||||
|
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.run_fast"));
|
||||||
|
} else {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.run"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.qbz95.idle"));
|
||||||
|
}
|
||||||
|
return PlayState.STOP;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayState procedurePredicate(AnimationState event) {
|
||||||
|
if (transformType != null && transformType.firstPerson()) {
|
||||||
|
if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||||
|
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
|
||||||
|
if (event.getController().getAnimationState() == AnimationController.State.STOPPED) {
|
||||||
|
this.animationProcedure = "empty";
|
||||||
|
event.getController().forceAnimationReset();
|
||||||
|
}
|
||||||
|
} else if (this.animationProcedure.equals("empty")) {
|
||||||
|
return PlayState.STOP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PlayState.CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||||
|
var procedureController = new AnimationController<>(this, "procedureController", 0, this::procedurePredicate);
|
||||||
|
data.add(procedureController);
|
||||||
|
var idleController = new AnimationController<>(this, "idleController", 4, this::idlePredicate);
|
||||||
|
data.add(idleController);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||||
|
return this.cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
|
||||||
|
Multimap<Attribute, AttributeModifier> map = super.getAttributeModifiers(slot, stack);
|
||||||
|
UUID uuid = new UUID(slot.toString().hashCode(), 0);
|
||||||
|
if (slot == EquipmentSlot.MAINHAND) {
|
||||||
|
map = HashMultimap.create(map);
|
||||||
|
map.put(Attributes.MOVEMENT_SPEED,
|
||||||
|
new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, -0.035f, AttributeModifier.Operation.MULTIPLY_BASE));
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
|
||||||
|
TooltipTool.addGunTips(list, stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<SoundEvent> getReloadSound() {
|
||||||
|
return Set.of(ModSounds.QBZ_95_RELOAD_EMPTY.get(), ModSounds.QBZ_95_RELOAD_NORMAL.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ItemStack getGunInstance() {
|
||||||
|
ItemStack stack = new ItemStack(ModItems.QBZ_95.get());
|
||||||
|
GunsTool.initCreativeGun(stack, ModItems.QBZ_95.getId().getPath());
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAnimationProcedure(String procedure) {
|
||||||
|
this.animationProcedure = procedure;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getGunIcon() {
|
||||||
|
return new ResourceLocation(ModUtils.MODID, "textures/gun_icon/qbz95_icon.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGunDisplayName() {
|
||||||
|
return "QBZ-95-1";
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load diff
4148
src/main/resources/assets/superbwarfare/geo/qbz95.geo.json
Normal file
4148
src/main/resources/assets/superbwarfare/geo/qbz95.geo.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -39,6 +39,7 @@
|
||||||
"item.superbwarfare.glock_17": "GLOCK-17",
|
"item.superbwarfare.glock_17": "GLOCK-17",
|
||||||
"item.superbwarfare.glock_18": "GLOCK-18",
|
"item.superbwarfare.glock_18": "GLOCK-18",
|
||||||
"item.superbwarfare.m_1911": "M1911A1",
|
"item.superbwarfare.m_1911": "M1911A1",
|
||||||
|
"item.superbwarfare.qbz_95": "QBZ-95-1",
|
||||||
|
|
||||||
"des.superbwarfare.tips.damage": "Damage: ",
|
"des.superbwarfare.tips.damage": "Damage: ",
|
||||||
"des.superbwarfare.tips.level": "Level: ",
|
"des.superbwarfare.tips.level": "Level: ",
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
"item.superbwarfare.glock_17_blueprint": "GLOCK-17 Blueprint",
|
"item.superbwarfare.glock_17_blueprint": "GLOCK-17 Blueprint",
|
||||||
"item.superbwarfare.glock_18_blueprint": "GLOCK-18 Blueprint",
|
"item.superbwarfare.glock_18_blueprint": "GLOCK-18 Blueprint",
|
||||||
"item.superbwarfare.m_1911_blueprint": "M1911 Blueprint",
|
"item.superbwarfare.m_1911_blueprint": "M1911 Blueprint",
|
||||||
|
"item.superbwarfare.qbz_95_blueprint": "QBZ-95-1 Blueprint",
|
||||||
|
|
||||||
"item.superbwarfare.common_material_pack": "Common Material Pack",
|
"item.superbwarfare.common_material_pack": "Common Material Pack",
|
||||||
"item.superbwarfare.rare_material_pack": "Rare Material Pack",
|
"item.superbwarfare.rare_material_pack": "Rare Material Pack",
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
"item.superbwarfare.glock_17": "格洛克17手枪",
|
"item.superbwarfare.glock_17": "格洛克17手枪",
|
||||||
"item.superbwarfare.glock_18": "格洛克18手枪",
|
"item.superbwarfare.glock_18": "格洛克18手枪",
|
||||||
"item.superbwarfare.m_1911": "M1911手枪",
|
"item.superbwarfare.m_1911": "M1911手枪",
|
||||||
|
"item.superbwarfare.qbz_95": "95-1式自动步枪",
|
||||||
|
|
||||||
"des.superbwarfare.tips.damage": "伤害: ",
|
"des.superbwarfare.tips.damage": "伤害: ",
|
||||||
"des.superbwarfare.tips.level": "等级: ",
|
"des.superbwarfare.tips.level": "等级: ",
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
"item.superbwarfare.glock_17_blueprint": "格洛克17手枪蓝图",
|
"item.superbwarfare.glock_17_blueprint": "格洛克17手枪蓝图",
|
||||||
"item.superbwarfare.glock_18_blueprint": "格洛克18手枪蓝图",
|
"item.superbwarfare.glock_18_blueprint": "格洛克18手枪蓝图",
|
||||||
"item.superbwarfare.m_1911_blueprint": "M1911手枪蓝图",
|
"item.superbwarfare.m_1911_blueprint": "M1911手枪蓝图",
|
||||||
|
"item.superbwarfare.qbz_95_blueprint": "95-1式自动步枪蓝图",
|
||||||
|
|
||||||
"item.superbwarfare.common_material_pack": "普通材料包",
|
"item.superbwarfare.common_material_pack": "普通材料包",
|
||||||
"item.superbwarfare.rare_material_pack": "稀有材料包",
|
"item.superbwarfare.rare_material_pack": "稀有材料包",
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "builtin/entity",
|
||||||
|
"texture_size": [
|
||||||
|
256,
|
||||||
|
256
|
||||||
|
],
|
||||||
|
"gui_light": "front",
|
||||||
|
"display": {
|
||||||
|
"firstperson_righthand": {
|
||||||
|
"translation": [
|
||||||
|
-5.25,
|
||||||
|
0.25,
|
||||||
|
-1.25
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"firstperson_lefthand": {
|
||||||
|
"scale": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gui": {
|
||||||
|
"rotation": [
|
||||||
|
165.69,
|
||||||
|
-39.63,
|
||||||
|
178.66
|
||||||
|
],
|
||||||
|
"translation": [
|
||||||
|
-1.9,
|
||||||
|
-3.25,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"scale": [
|
||||||
|
0.18,
|
||||||
|
0.18,
|
||||||
|
0.18
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"loader": "forge:separate_transforms",
|
||||||
|
"gui_light": "front",
|
||||||
|
"base": {
|
||||||
|
"parent": "superbwarfare:item/qbz_95_base"
|
||||||
|
},
|
||||||
|
"perspectives": {
|
||||||
|
"gui": {
|
||||||
|
"parent": "superbwarfare:item/qbz_95_icon"
|
||||||
|
},
|
||||||
|
"thirdperson_righthand": {
|
||||||
|
"parent": "superbwarfare:item/m8703d"
|
||||||
|
},
|
||||||
|
"thirdperson_lefthand": {
|
||||||
|
"parent": "superbwarfare:item/m8703d"
|
||||||
|
},
|
||||||
|
"ground": {
|
||||||
|
"parent": "superbwarfare:item/m8703d"
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"parent": "superbwarfare:item/m8703d"
|
||||||
|
},
|
||||||
|
"head": {
|
||||||
|
"parent": "superbwarfare:item/m8703d"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "superbwarfare:displaysettings/qbz95.item",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/qbz95"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/gun_blueprint"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"parent": "item/generated",
|
||||||
|
"textures": {
|
||||||
|
"layer0": "superbwarfare:item/qbz95_icon"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1263,6 +1263,7 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
"m_1911_fire_1p": {
|
"m_1911_fire_1p": {
|
||||||
"sounds": [
|
"sounds": [
|
||||||
{
|
{
|
||||||
|
@ -1311,6 +1312,56 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"qbz_95_fire_1p": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:qbz95/qbz95_fire1p",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qbz_95_fire_3p": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:qbz95/qbz95_fire3p",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qbz_95_far": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:qbz95/qbz95_far",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qbz_95_veryfar": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:qbz95/qbz95_veryfar",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qbz_95_reload_normal": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:qbz95/qbz95_reload_normal",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"qbz_95_reload_empty": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:qbz95/qbz95_reload_empty",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
"lightsaber": {
|
"lightsaber": {
|
||||||
"sounds": [
|
"sounds": [
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 7.4 KiB |
BIN
src/main/resources/assets/superbwarfare/textures/item/qbz95.png
Normal file
BIN
src/main/resources/assets/superbwarfare/textures/item/qbz95.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.2 KiB |
23
src/main/resources/data/superbwarfare/guns/qbz_95.json
Normal file
23
src/main/resources/data/superbwarfare/guns/qbz_95.json
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"zoom_speed": 1.25,
|
||||||
|
"zoom": 1.25,
|
||||||
|
"spread": 3.7,
|
||||||
|
"zoomSpread": 0.1,
|
||||||
|
"recoil_x": 0.0013,
|
||||||
|
"recoil_y": 0.009,
|
||||||
|
"damage": 7.5,
|
||||||
|
"headshot": 2,
|
||||||
|
"velocity": 48,
|
||||||
|
"mag": 30,
|
||||||
|
"projectile_amount": 1,
|
||||||
|
"fire_interval": 1,
|
||||||
|
"weight": 1,
|
||||||
|
"fire_mode": 2,
|
||||||
|
"semi": 1,
|
||||||
|
"burst": 0,
|
||||||
|
"auto": 1,
|
||||||
|
"burst_size": 1,
|
||||||
|
"normal_reload_time": 58,
|
||||||
|
"empty_reload_time": 74,
|
||||||
|
"BypassesArmor": 0.28
|
||||||
|
}
|
|
@ -4,6 +4,20 @@
|
||||||
{
|
{
|
||||||
"rolls": 1,
|
"rolls": 1,
|
||||||
"entries": [
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "superbwarfare:qbz_95_blueprint",
|
||||||
|
"weight": 10,
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "set_count",
|
||||||
|
"count": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "minecraft:item",
|
"type": "minecraft:item",
|
||||||
"name": "superbwarfare:hunting_rifle_blueprint",
|
"name": "superbwarfare:hunting_rifle_blueprint",
|
||||||
|
|
|
@ -256,6 +256,20 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "superbwarfare:qbz_95_blueprint",
|
||||||
|
"weight": 10,
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"function": "set_count",
|
||||||
|
"count": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "minecraft:item",
|
"type": "minecraft:item",
|
||||||
"name": "superbwarfare:devotion_blueprint",
|
"name": "superbwarfare:devotion_blueprint",
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"category": "misc",
|
||||||
|
"pattern": [
|
||||||
|
"aba",
|
||||||
|
"aca",
|
||||||
|
"aaa"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"a": {
|
||||||
|
"item": "minecraft:diamond"
|
||||||
|
},
|
||||||
|
"b": {
|
||||||
|
"item": "superbwarfare:qbz_95_blueprint"
|
||||||
|
},
|
||||||
|
"c": {
|
||||||
|
"item": "minecraft:lapis_lazuli"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "superbwarfare:qbz_95_blueprint",
|
||||||
|
"count": 2
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"type": "minecraft:smithing_transform",
|
||||||
|
"template": {
|
||||||
|
"item": "superbwarfare:qbz_95_blueprint"
|
||||||
|
},
|
||||||
|
"base": {
|
||||||
|
"item": "superbwarfare:epic_material_pack"
|
||||||
|
},
|
||||||
|
"addition": {
|
||||||
|
"item": "superbwarfare:cemented_carbide_ingot"
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "superbwarfare:qbz_95"
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,6 +24,7 @@
|
||||||
"superbwarfare:rpg",
|
"superbwarfare:rpg",
|
||||||
"superbwarfare:glock_17",
|
"superbwarfare:glock_17",
|
||||||
"superbwarfare:glock_18",
|
"superbwarfare:glock_18",
|
||||||
"superbwarfare:m_1911"
|
"superbwarfare:m_1911",
|
||||||
|
"superbwarfare:qbz_95"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -23,6 +23,7 @@
|
||||||
"superbwarfare:ak_47",
|
"superbwarfare:ak_47",
|
||||||
"superbwarfare:glock_17",
|
"superbwarfare:glock_17",
|
||||||
"superbwarfare:glock_18",
|
"superbwarfare:glock_18",
|
||||||
"superbwarfare:m_1911"
|
"superbwarfare:m_1911",
|
||||||
|
"superbwarfare:qbz_95"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -27,6 +27,7 @@
|
||||||
"superbwarfare:rpg",
|
"superbwarfare:rpg",
|
||||||
"superbwarfare:glock_17",
|
"superbwarfare:glock_17",
|
||||||
"superbwarfare:glock_18",
|
"superbwarfare:glock_18",
|
||||||
"superbwarfare:m_1911"
|
"superbwarfare:m_1911",
|
||||||
|
"superbwarfare:qbz_95"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -22,6 +22,7 @@
|
||||||
"superbwarfare:marlin",
|
"superbwarfare:marlin",
|
||||||
"superbwarfare:glock_17",
|
"superbwarfare:glock_17",
|
||||||
"superbwarfare:glock_18",
|
"superbwarfare:glock_18",
|
||||||
"superbwarfare:m_1911"
|
"superbwarfare:m_1911",
|
||||||
|
"superbwarfare:qbz_95"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -18,6 +18,7 @@
|
||||||
"superbwarfare:sentinel",
|
"superbwarfare:sentinel",
|
||||||
"superbwarfare:glock_17",
|
"superbwarfare:glock_17",
|
||||||
"superbwarfare:glock_18",
|
"superbwarfare:glock_18",
|
||||||
"superbwarfare:m_1911"
|
"superbwarfare:m_1911",
|
||||||
|
"superbwarfare:qbz_95"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -10,6 +10,7 @@
|
||||||
"superbwarfare:mk_14",
|
"superbwarfare:mk_14",
|
||||||
"superbwarfare:m_60",
|
"superbwarfare:m_60",
|
||||||
"superbwarfare:marlin",
|
"superbwarfare:marlin",
|
||||||
"superbwarfare:ak_47"
|
"superbwarfare:ak_47",
|
||||||
|
"superbwarfare:qbz_95"
|
||||||
]
|
]
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue