添加标枪导弹

This commit is contained in:
Atsuihsio 2024-08-31 02:31:23 +08:00
parent 24c215f074
commit 924c1983a4
50 changed files with 4632 additions and 14 deletions

View file

@ -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.JavelinItem;
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 JavelinLayer extends GeoRenderLayer<JavelinItem> {
private static final ResourceLocation LAYER = new ResourceLocation(ModUtils.MODID, "textures/item/javelin_e.png");
public JavelinLayer(GeoRenderer<JavelinItem> entityRenderer) {
super(entityRenderer);
}
@Override
public void render(PoseStack poseStack, JavelinItem 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,149 @@
package net.mcreator.superbwarfare.client.model.item;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.gun.JavelinItem;
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 JavelinItemModel extends GeoModel<JavelinItem> {
@Override
public ResourceLocation getAnimationResource(JavelinItem animatable) {
return new ResourceLocation(ModUtils.MODID, "animations/javelin.animation.json");
}
@Override
public ResourceLocation getModelResource(JavelinItem animatable) {
return new ResourceLocation(ModUtils.MODID, "geo/javelin.geo.json");
}
@Override
public ResourceLocation getTextureResource(JavelinItem animatable) {
return new ResourceLocation(ModUtils.MODID, "textures/item/javelin.png");
}
@Override
public void setCustomAnimations(JavelinItem animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("bone");
CoreGeoBone shen = getAnimationProcessor().getBone("shen");
CoreGeoBone javelin = getAnimationProcessor().getBone("javelin");
CoreGeoBone screen = getAnimationProcessor().getBone("screen");
CoreGeoBone seek = getAnimationProcessor().getBone("seek");
CoreGeoBone top = getAnimationProcessor().getBone("top");
CoreGeoBone dir = getAnimationProcessor().getBone("dir");
CoreGeoBone missile_green = getAnimationProcessor().getBone("missile_green");
CoreGeoBone missile_red = getAnimationProcessor().getBone("missile_red");
Player player = Minecraft.getInstance().player;
if (player == null) return;
ItemStack stack = player.getMainHandItem();
if (!stack.is(ModTags.Items.GUN)) return;
double p = player.getPersistentData().getDouble("zoom_pos");
double zp = player.getPersistentData().getDouble("zoom_pos_z");
top.setHidden(!stack.getOrCreateTag().getBoolean("TopMode"));
dir.setHidden(stack.getOrCreateTag().getBoolean("TopMode"));
missile_green.setHidden(!(stack.getOrCreateTag().getInt("ammo") > 0));
missile_red.setHidden(stack.getOrCreateTag().getInt("ammo") > 0);
seek.setHidden(!(stack.getOrCreateTag().getInt("SeekTime") > 1 && stack.getOrCreateTag().getInt("SeekTime") < 40 ));
gun.setPosX(1.62f * (float) p);
gun.setPosY(6.3f * (float) p - (float) (0.2f * zp));
gun.setPosZ(22.95f * (float) p + (float) (0.3f * zp));
gun.setScaleZ(1f - (0.74f * (float) p));
gun.setRotZ(-4.75f * Mth.DEG_TO_RAD * (float) p + (float) (0.02f * zp));
javelin.setHidden(gun.getPosX() > 1.55);
screen.setHidden(gun.getPosX() <= 1.55);
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 1.4));
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.07f * (float) (fp + 2 * fr));
shen.setPosZ(3.6f * (float) (fp + 0.54f * fr));
shen.setRotX(0.02f * (float) (fp + fr));
shen.setRotZ(0f);
} else {
shen.setPosY(0.28f * (float) (fp + 2 * fr));
shen.setPosZ(3.8f * (float) (fp + 0.54f * fr));
shen.setRotX(0.17f * (float) (0.18f * fp + fr));
shen.setRotZ(-0.04f * (float) (fp + 1.3 * fr));
}
shen.setPosX((float)(0.75f * fr * (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).recoilHorizon * fp));
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");
CoreGeoBone main = getAnimationProcessor().getBone("0");
var data = player.getPersistentData();
float numR = (float) (1 - 0.98 * data.getDouble("zoom_time"));
float numP = (float) (1 - 0.97 * data.getDouble("zoom_time"));
if (stack.getOrCreateTag().getInt("gun_reloading_time") > 0) {
main.setRotX(numR * main.getRotX());
main.setRotY(numR * main.getRotY());
main.setRotZ(numR * main.getRotZ());
main.setPosX(numP * main.getPosX());
main.setPosY(numP * main.getPosY());
main.setPosZ(numP * main.getPosZ());
camera.setRotX(numR * camera.getRotX());
camera.setRotY(numR * camera.getRotY());
camera.setRotZ(numR * camera.getRotZ());
}
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());
}
}

View file

@ -0,0 +1,54 @@
package net.mcreator.superbwarfare.client.renderer.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import net.mcreator.superbwarfare.entity.JavelinMissileEntity;
import net.mcreator.superbwarfare.entity.model.JavelinMissileModel;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.renderer.GeoEntityRenderer;
public class JavelinMissileRenderer extends GeoEntityRenderer<JavelinMissileEntity> {
public JavelinMissileRenderer(EntityRendererProvider.Context renderManager) {
super(renderManager, new JavelinMissileModel());
this.shadowRadius = 0.1f;
}
@Override
public RenderType getRenderType(JavelinMissileEntity animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
@Override
public void preRender(PoseStack poseStack, JavelinMissileEntity entity, BakedGeoModel model, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green,
float blue, float alpha) {
float scale = 1f;
this.scaleHeight = scale;
this.scaleWidth = scale;
super.preRender(poseStack, entity, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
}
@Override
public void render(JavelinMissileEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
poseStack.pushPose();
if (entityIn.tickCount > 5) {
poseStack.mulPose(Axis.YP.rotationDegrees(90 - Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot())));
poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()) - 90));
} else {
poseStack.mulPose(Axis.YP.rotationDegrees(Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()) - 90));
poseStack.mulPose(Axis.ZP.rotationDegrees(90 + Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())));
}
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
poseStack.popPose();
}
@Override
protected float getDeathMaxRotation(JavelinMissileEntity entityLivingBaseIn) {
return 0.0F;
}
}

View file

@ -0,0 +1,26 @@
package net.mcreator.superbwarfare.client.renderer.item;
import net.mcreator.superbwarfare.client.layer.JavelinLayer;
import net.mcreator.superbwarfare.client.model.item.JavelinItemModel;
import net.mcreator.superbwarfare.item.gun.JavelinItem;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.renderer.GeoItemRenderer;
public class JavelinItemRenderer extends GeoItemRenderer<JavelinItem> {
public JavelinItemRenderer() {
super(new JavelinItemModel());
this.addRenderLayer(new JavelinLayer(this));
}
@Override
public RenderType getRenderType(JavelinItem animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
@Override
public ResourceLocation getTextureLocation(JavelinItem instance) {
return super.getTextureLocation(instance);
}
}

View file

@ -23,6 +23,8 @@ public class AmmoBarOverlay {
private static final ResourceLocation SEMI = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/semi.png"); private static final ResourceLocation SEMI = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/semi.png");
private static final ResourceLocation BURST = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/burst.png"); private static final ResourceLocation BURST = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/burst.png");
private static final ResourceLocation AUTO = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/auto.png"); private static final ResourceLocation AUTO = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/auto.png");
private static final ResourceLocation TOP = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/top.png");
private static final ResourceLocation DIR = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/fire_mode/dir.png");
@SubscribeEvent(priority = EventPriority.NORMAL) @SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) { public static void eventHandler(RenderGuiEvent.Pre event) {
@ -66,6 +68,10 @@ public class AmmoBarOverlay {
// 渲染开火模式 // 渲染开火模式
ResourceLocation fireMode = getFireMode(stack); ResourceLocation fireMode = getFireMode(stack);
if (stack.getItem() == ModItems.JAVELIN.get()) {
fireMode = stack.getOrCreateTag().getBoolean("TopMode")? TOP : DIR;
}
event.getGuiGraphics().blit(fireMode, event.getGuiGraphics().blit(fireMode,
w - 95, w - 95,
h - 21, h - 21,
@ -166,7 +172,7 @@ public class AmmoBarOverlay {
return ""; return "";
} }
if (stack.getItem() == ModItems.M_79.get() || stack.getItem() == ModItems.RPG.get() || stack.getItem() == ModItems.TASER.get()) { if (stack.getItem() == ModItems.M_79.get() || stack.getItem() == ModItems.RPG.get() || stack.getItem() == ModItems.TASER.get() || stack.getItem() == ModItems.JAVELIN.get() ) {
return "" + stack.getOrCreateTag().getInt("max_ammo"); return "" + stack.getOrCreateTag().getInt("max_ammo");
} }
@ -198,6 +204,10 @@ public class AmmoBarOverlay {
return "Yassin105 TBG"; return "Yassin105 TBG";
} }
if (stack.getItem() == ModItems.JAVELIN.get()) {
return "Javelin Missile";
}
if (stack.getItem() == ModItems.TASER.get()) { if (stack.getItem() == ModItems.TASER.get()) {
return "Electrode Rod"; return "Electrode Rod";
} }

View file

@ -0,0 +1,294 @@
package net.mcreator.superbwarfare.entity;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.init.ModDamageTypes;
import net.mcreator.superbwarfare.init.ModEntities;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
import net.mcreator.superbwarfare.tools.CustomExplosion;
import net.mcreator.superbwarfare.tools.ParticleTool;
import net.minecraft.commands.arguments.EntityAnchorArgument;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.projectile.ThrowableItemProjectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Explosion;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BellBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PacketDistributor;
import net.minecraftforge.network.PlayMessages;
import software.bernie.geckolib.animatable.GeoEntity;
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;
public class JavelinMissileEntity extends ThrowableItemProjectile implements GeoEntity, AnimatedEntity {
public static final EntityDataAccessor<String> ANIMATION = SynchedEntityData.defineId(JavelinMissileEntity.class, EntityDataSerializers.STRING);
public static final EntityDataAccessor<String> TARGET_UUID = SynchedEntityData.defineId(JavelinMissileEntity.class, EntityDataSerializers.STRING);
public static final EntityDataAccessor<Boolean> TOP = SynchedEntityData.defineId(JavelinMissileEntity.class, EntityDataSerializers.BOOLEAN);
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public String animationprocedure = "empty";
private float damage = 300f;
public JavelinMissileEntity(EntityType<? extends JavelinMissileEntity> type, Level world) {
super(type, world);
}
public JavelinMissileEntity(LivingEntity entity, Level level, float damage) {
super(ModEntities.JAVELIN_MISSILE.get(), entity, level);
this.damage = damage;
}
public JavelinMissileEntity(PlayMessages.SpawnEntity spawnEntity, Level level) {
this(ModEntities.JAVELIN_MISSILE.get(), level);
}
@Override
public Packet<ClientGamePacketListener> getAddEntityPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
@Override
protected Item getDefaultItem() {
return ModItems.JAVELIN_MISSILE.get();
}
public void setTargetUuid(String uuid) {
this.entityData.set(TARGET_UUID, uuid);
}
public void setAttackMode(boolean mode) {
this.entityData.set(TOP, mode);
}
@Override
protected void defineSynchedData() {
this.entityData.define(TARGET_UUID, "none");
this.entityData.define(TOP, false);
}
@Override
public boolean shouldRenderAtSqrDistance(double pDistance) {
return true;
}
@Override
protected void onHitEntity(EntityHitResult result) {
Entity entity = result.getEntity();
if (this.getOwner() instanceof LivingEntity living) {
if (!living.level().isClientSide() && living instanceof ServerPlayer player) {
living.level().playSound(null, living.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1);
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5));
}
}
if (entity instanceof LivingEntity) {
entity.invulnerableTime = 0;
}
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage);
if (this.tickCount > 1) {
if (this.level() instanceof ServerLevel) {
causeEntityHitExplode(entity);
}
}
this.discard();
}
@Override
public boolean isNoGravity() {
return true;
}
@Override
public void onHitBlock(BlockHitResult blockHitResult) {
super.onHitBlock(blockHitResult);
BlockPos resultPos = blockHitResult.getBlockPos();
BlockState state = this.level().getBlockState(resultPos);
if (state.getBlock() instanceof BellBlock bell) {
bell.attemptToRing(this.level(), resultPos, blockHitResult.getDirection());
}
if (this.tickCount > 1) {
if (this.level() instanceof ServerLevel) {
causeExplode();
}
}
this.discard();
}
@Override
public void tick() {
super.tick();
Entity entity = this.level().getEntitiesOfClass(LivingEntity.class, this.getBoundingBox().inflate(512))
.stream().filter(e -> e.getStringUUID().equals(entityData.get(TARGET_UUID))).findFirst().orElse(null);
if (this.tickCount == 6) {
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, this.xo, this.yo, this.zo, 15, 0.8, 0.8, 0.8, 0.01, true);
ParticleTool.sendParticle(serverLevel, ParticleTypes.CAMPFIRE_COSY_SMOKE, this.xo, this.yo, this.zo, 10, 0.8, 0.8, 0.8, 0.01, true);
}
}
if (this.tickCount > 5) {
if (entity != null) {
if (entityData.get(TOP)) {
if (this.position().distanceTo(entity.position()) > 80) {
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(),entity.getY() + 50,entity.getZ()));
} else {
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(),entity.getEyeY() + 1,entity.getZ()));
}
} else {
this.look(EntityAnchorArgument.Anchor.EYES, new Vec3(entity.getX(),entity.getEyeY() + 1,entity.getZ()));
}
if (this.position().distanceTo(entity.position()) < 4) {
triggerExplode(entity);
this.discard();
}
}
}
if (this.tickCount > 6) {
this.setDeltaMovement(new Vec3(
0.7f * this.getDeltaMovement().x + 1.3f * this.getLookAngle().x,
0.7f * this.getDeltaMovement().y + 1.3f * this.getLookAngle().y,
0.7f * this.getDeltaMovement().z + 1.3f * this.getLookAngle().z
));
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, this.xo, this.yo, this.zo, 1, 0, 0, 0, 0, true);
}
}
if (this.tickCount > 200 || this.isInWater()) {
if (this.level() instanceof ServerLevel) {
causeExplode();
}
this.discard();
}
}
private void look(EntityAnchorArgument.Anchor pAnchor, Vec3 pTarget) {
Vec3 vec3 = pAnchor.apply(this);
double d0 = (pTarget.x - vec3.x) * 0.2;
double d1 = (pTarget.y - vec3.y) * 0.2;
double d2 = (pTarget.z - vec3.z) * 0.2;
double d3 = Math.sqrt(d0 * d0 + d2 * d2);
this.setXRot(Mth.wrapDegrees((float)(-(Mth.atan2(d1, d3) * 57.2957763671875))));
this.setYRot(Mth.wrapDegrees((float)(Mth.atan2(d2, d0) * 57.2957763671875) - 90.0F));
this.setYHeadRot(this.getYRot());
this.xRotO = this.getXRot();
this.yRotO = this.getYRot();
}
private void causeExplode() {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), this.damage,
this.getX(), this.getY(), this.getZ(), 5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
}
private void triggerExplode(Entity target) {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), this.damage,
target.getX(), target.getY(), target.getZ(), 5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
}
private void causeEntityHitExplode(Entity entity) {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this.getOwner()), this.damage,
entity.getX(), entity.getY(), entity.getZ(), 5f, Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
this.discard();
}
private PlayState movementPredicate(AnimationState<JavelinMissileEntity> event) {
if (this.animationprocedure.equals("empty")) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.jvm.idle"));
}
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState<JavelinMissileEntity> event) {
if (!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 (animationprocedure.equals("empty")) {
return PlayState.STOP;
}
return PlayState.CONTINUE;
}
@Override
protected float getGravity() {
return 0F ;
}
public String getSyncedAnimation() {
return this.entityData.get(ANIMATION);
}
public void setAnimation(String animation) {
this.entityData.set(ANIMATION, animation);
}
@Override
public void setAnimationProcedure(String procedure) {
this.animationprocedure = procedure;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate));
data.add(new AnimationController<>(this, "procedure", 0, this::procedurePredicate));
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -30,7 +30,6 @@ import net.minecraft.world.level.block.BellBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.EntityHitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PacketDistributor;
import net.minecraftforge.network.PlayMessages; import net.minecraftforge.network.PlayMessages;
@ -76,6 +75,11 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
return ModItems.ROCKET.get(); return ModItems.ROCKET.get();
} }
@Override
public boolean shouldRenderAtSqrDistance(double pDistance) {
return true;
}
@Override @Override
protected void onHitEntity(EntityHitResult result) { protected void onHitEntity(EntityHitResult result) {
float damageMultiplier = 1 + 0.2f * this.monsterMultiplier; float damageMultiplier = 1 + 0.2f * this.monsterMultiplier;
@ -142,7 +146,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
} }
} }
if (this.tickCount > 2) { if (this.tickCount > 2) {
this.setDeltaMovement(new Vec3((1.03 * this.getDeltaMovement().x()), (1.03 * this.getDeltaMovement().y() - 0.02), (1.03 * this.getDeltaMovement().z()))); this.setDeltaMovement(this.getDeltaMovement().multiply(1.03, 1.03, 1.03));
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) { if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, this.xo, this.yo, this.zo, 1, 0, 0, 0, 0, true); ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, this.xo, this.yo, this.zo, 1, 0, 0, 0, 0, true);

View file

@ -0,0 +1,24 @@
package net.mcreator.superbwarfare.entity.model;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.entity.JavelinMissileEntity;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class JavelinMissileModel extends GeoModel<JavelinMissileEntity> {
@Override
public ResourceLocation getAnimationResource(JavelinMissileEntity entity) {
return new ResourceLocation(ModUtils.MODID, "animations/javelin_missile.animation.json");
}
@Override
public ResourceLocation getModelResource(JavelinMissileEntity entity) {
return new ResourceLocation(ModUtils.MODID, "geo/javelin_missile.geo.json");
}
@Override
public ResourceLocation getTextureResource(JavelinMissileEntity entity) {
return new ResourceLocation(ModUtils.MODID, "textures/entity/javelin_missile.png");
}
}

View file

@ -533,6 +533,9 @@ public class GunEventHandler {
} else if (stack.getItem() == ModItems.RPG.get()) { } else if (stack.getItem() == ModItems.RPG.get()) {
stack.getOrCreateTag().putInt("ammo", 1); stack.getOrCreateTag().putInt("ammo", 1);
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots()); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots());
} else if (stack.getItem() == ModItems.JAVELIN.get()) {
stack.getOrCreateTag().putInt("ammo", 1);
player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots());
} }
stack.getOrCreateTag().putBoolean("is_normal_reloading", false); stack.getOrCreateTag().putBoolean("is_normal_reloading", false);

View file

@ -6,7 +6,6 @@ import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.network.message.SimulationDistanceMessage; import net.mcreator.superbwarfare.network.message.SimulationDistanceMessage;
import net.mcreator.superbwarfare.tools.SeekTool;
import net.mcreator.superbwarfare.tools.SoundTool; import net.mcreator.superbwarfare.tools.SoundTool;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -18,8 +17,6 @@ import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffectInstance;
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.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
@ -109,11 +106,11 @@ public class PlayerEventHandler {
// 测试用 // 测试用
private static void handleWeaponSeek(Player player) { private static void handleWeaponSeek(Player player) {
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zooming) { // if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zooming) {
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 256, 30); // Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 256, 30);
if (seekingEntity instanceof LivingEntity _entity && !_entity.level().isClientSide()) // if (seekingEntity instanceof LivingEntity _entity && !_entity.level().isClientSide())
_entity.addEffect(new MobEffectInstance(MobEffects.GLOWING, 2, 0)); // _entity.addEffect(new MobEffectInstance(MobEffects.GLOWING, 2, 0));
} // }
} }
private static void handleWeaponSway(Player player) { private static void handleWeaponSway(Player player) {

View file

@ -53,6 +53,8 @@ public class ModEntities {
EntityType.Builder.<HandGrenadeEntity>of(HandGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(HandGrenadeEntity::new).sized(0.3f, 0.3f)); EntityType.Builder.<HandGrenadeEntity>of(HandGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(HandGrenadeEntity::new).sized(0.3f, 0.3f));
public static final RegistryObject<EntityType<RgoGrenadeEntity>> RGO_GRENADE = register("projectile_rgo_grenade", public static final RegistryObject<EntityType<RgoGrenadeEntity>> RGO_GRENADE = register("projectile_rgo_grenade",
EntityType.Builder.<RgoGrenadeEntity>of(RgoGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(RgoGrenadeEntity::new).sized(0.3f, 0.3f)); EntityType.Builder.<RgoGrenadeEntity>of(RgoGrenadeEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(RgoGrenadeEntity::new).sized(0.3f, 0.3f));
public static final RegistryObject<EntityType<JavelinMissileEntity>> JAVELIN_MISSILE = register("projectile_javelin_missile",
EntityType.Builder.<JavelinMissileEntity>of(JavelinMissileEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(1).setCustomClientFactory(JavelinMissileEntity::new).sized(0.5f, 0.5f));
private static <T extends Entity> RegistryObject<EntityType<T>> register(String name, EntityType.Builder<T> entityTypeBuilder) { private static <T extends Entity> RegistryObject<EntityType<T>> register(String name, EntityType.Builder<T> entityTypeBuilder) {

View file

@ -26,5 +26,6 @@ public class ModEntityRenderers {
event.registerEntityRenderer(ModEntities.HAND_GRENADE_ENTITY.get(), HandGrenadeEntityRenderer::new); event.registerEntityRenderer(ModEntities.HAND_GRENADE_ENTITY.get(), HandGrenadeEntityRenderer::new);
event.registerEntityRenderer(ModEntities.RGO_GRENADE.get(), RgoGrenadeRenderer::new); event.registerEntityRenderer(ModEntities.RGO_GRENADE.get(), RgoGrenadeRenderer::new);
event.registerEntityRenderer(ModEntities.MLE_1934.get(), Mle1934Renderer::new); event.registerEntityRenderer(ModEntities.MLE_1934.get(), Mle1934Renderer::new);
event.registerEntityRenderer(ModEntities.JAVELIN_MISSILE.get(), JavelinMissileRenderer::new);
} }
} }

View file

@ -56,6 +56,7 @@ public class ModItems {
public static final RegistryObject<Item> MINIGUN = GUNS.register("minigun", Minigun::new); public static final RegistryObject<Item> MINIGUN = GUNS.register("minigun", Minigun::new);
public static final RegistryObject<Item> M_79 = GUNS.register("m_79", M79Item::new); public static final RegistryObject<Item> M_79 = GUNS.register("m_79", M79Item::new);
public static final RegistryObject<Item> RPG = GUNS.register("rpg", RpgItem::new); public static final RegistryObject<Item> RPG = GUNS.register("rpg", RpgItem::new);
public static final RegistryObject<Item> JAVELIN = GUNS.register("javelin", JavelinItem::new);
public static final RegistryObject<Item> BOCEK = GUNS.register("bocek", BocekItem::new); public static final RegistryObject<Item> BOCEK = GUNS.register("bocek", BocekItem::new);
/** /**
@ -74,6 +75,7 @@ public class ModItems {
public static final RegistryObject<Item> CREATIVE_AMMO_BOX = AMMO.register("creative_ammo_box", CreativeAmmoBox::new); public static final RegistryObject<Item> CREATIVE_AMMO_BOX = AMMO.register("creative_ammo_box", CreativeAmmoBox::new);
public static final RegistryObject<Item> TASER_ELECTRODE = AMMO.register("taser_electrode", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> TASER_ELECTRODE = AMMO.register("taser_electrode", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> GRENADE_40MM = AMMO.register("grenade_40mm", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> GRENADE_40MM = AMMO.register("grenade_40mm", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> JAVELIN_MISSILE = AMMO.register("javelin_missile", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> MORTAR_SHELLS = AMMO.register("mortar_shells", () -> new Item(new Item.Properties())); public static final RegistryObject<Item> MORTAR_SHELLS = AMMO.register("mortar_shells", () -> new Item(new Item.Properties()));
public static final RegistryObject<Item> ROCKET = AMMO.register("rocket", Rocket::new); public static final RegistryObject<Item> ROCKET = AMMO.register("rocket", Rocket::new);
public static final RegistryObject<Item> HE_5_INCHES = AMMO.register("he_5_inches", He5Inches::new); public static final RegistryObject<Item> HE_5_INCHES = AMMO.register("he_5_inches", He5Inches::new);

View file

@ -261,6 +261,14 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> MOSIN_NAGANT_LOOP = REGISTRY.register("mosin_nagant_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mosin_nagant_loop"))); public static final RegistryObject<SoundEvent> MOSIN_NAGANT_LOOP = REGISTRY.register("mosin_nagant_loop", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mosin_nagant_loop")));
public static final RegistryObject<SoundEvent> MOSIN_NAGANT_END = REGISTRY.register("mosin_nagant_end", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mosin_nagant_end"))); public static final RegistryObject<SoundEvent> MOSIN_NAGANT_END = REGISTRY.register("mosin_nagant_end", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mosin_nagant_end")));
public static final RegistryObject<SoundEvent> JAVELIN_FIRE_1P = REGISTRY.register("javelin_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "javelin_fire_1p")));
public static final RegistryObject<SoundEvent> JAVELIN_FIRE_3P = REGISTRY.register("javelin_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "javelin_fire_3p")));
public static final RegistryObject<SoundEvent> JAVELIN_FAR = REGISTRY.register("javelin_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "javelin_far")));
public static final RegistryObject<SoundEvent> JAVELIN_RELOAD_EMPTY = REGISTRY.register("javelin_reload_empty", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "javelin_reload_empty")));
public static final RegistryObject<SoundEvent> JAVELIN_LOCK = REGISTRY.register("javelin_lock", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "javelin_lock")));
public static final RegistryObject<SoundEvent> JAVELIN_LOCKON = REGISTRY.register("javelin_lockon", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "javelin_lockon")));
public static final RegistryObject<SoundEvent> MK_42_FIRE_1P = REGISTRY.register("mk_42_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mk_42_fire_1p"))); public static final RegistryObject<SoundEvent> MK_42_FIRE_1P = REGISTRY.register("mk_42_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mk_42_fire_1p")));
public static final RegistryObject<SoundEvent> MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mk_42_fire_3p"))); public static final RegistryObject<SoundEvent> MK_42_FIRE_3P = REGISTRY.register("mk_42_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mk_42_fire_3p")));
public static final RegistryObject<SoundEvent> MK_42_FAR = REGISTRY.register("mk_42_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mk_42_far"))); public static final RegistryObject<SoundEvent> MK_42_FAR = REGISTRY.register("mk_42_far", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "mk_42_far")));

View file

@ -53,6 +53,7 @@ public class ModTabs {
output.accept(BocekItem.getGunInstance()); output.accept(BocekItem.getGunInstance());
output.accept(M79Item.getGunInstance()); output.accept(M79Item.getGunInstance());
output.accept(RpgItem.getGunInstance()); output.accept(RpgItem.getGunInstance());
output.accept(JavelinItem.getGunInstance());
} }
) )
.build()); .build());

View file

@ -0,0 +1,234 @@
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.JavelinItemRenderer;
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.*;
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.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.Entity;
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.entity.player.Player;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
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 JavelinItem extends GunItem implements GeoItem, AnimatedItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public String animationProcedure = "empty";
public static ItemDisplayContext transformType;
public JavelinItem() {
super(new Properties().stacksTo(1).rarity(RarityTool.LEGENDARY));
}
@Override
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
super.initializeClient(consumer);
consumer.accept(new IClientItemExtensions() {
private final BlockEntityWithoutLevelRenderer renderer = new JavelinItemRenderer();
@Override
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
return renderer;
}
@Override
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
return PoseTool.pose(entityLiving, hand, stack);
}
});
}
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")) {
var tag = stack.getOrCreateTag();
if (tag.getInt("draw_time") < 16) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.draw"));
}
if (tag.getInt("fire_animation") > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.fire"));
}
if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.javelin.reload"));
}
if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0) {
if (player.hasEffect(MobEffects.MOVEMENT_SPEED)) {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.run_fast"));
} else {
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.run"));
}
}
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.javelin.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.14f, AttributeModifier.Operation.MULTIPLY_BASE));
}
return map;
}
@Override
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
TooltipTool.addGunTips(list, stack);
}
public static int getAmmoCount(Player player) {
int sum = 0;
for (int i = 0; i < player.getInventory().getContainerSize(); ++i) {
ItemStack itemstack = player.getInventory().getItem(i);
if (check(itemstack)) {
sum += itemstack.getCount();
}
}
return sum;
}
@Override
public Set<SoundEvent> getReloadSound() {
return Set.of(ModSounds.JAVELIN_RELOAD_EMPTY.get(),
ModSounds.JAVELIN_LOCK.get(),
ModSounds.JAVELIN_LOCKON.get());
}
@Override
public void inventoryTick(ItemStack itemStack, Level world, Entity entity, int slot, boolean selected) {
super.inventoryTick(itemStack, world, entity, slot, selected);
if (entity instanceof Player player) {
var tag = itemStack.getOrCreateTag();
tag.putInt("max_ammo", getAmmoCount(player));
if (tag.getBoolean("Seeking")) {
Entity targetEntity = player.level().getEntitiesOfClass(LivingEntity.class, player.getBoundingBox().inflate(256))
.stream().filter(e -> e.getStringUUID().equals(tag.getString("TargetEntity"))).findFirst().orElse(null);
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 256, 9);
if (seekingEntity != null && seekingEntity == targetEntity) {
tag.putInt("SeekTime", tag.getInt("SeekTime") + 1);
} else {
tag.putInt("SeekTime", 0);
}
if (tag.getInt("SeekTime") == 1 && player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_LOCK.get(), 2, 1);
}
if (tag.getInt("SeekTime") > 40 && seekingEntity instanceof LivingEntity _entity && !_entity.level().isClientSide()) {
_entity.addEffect(new MobEffectInstance(MobEffects.GLOWING, 40, 0));
if (player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_LOCKON.get(), 2, 1);
}
}
// if (seekingEntity != null) {
// player.displayClientMessage(Component.literal(" " + tag.getInt("SeekTime")), true);
// }
}
}
}
protected static boolean check(ItemStack stack) {
return stack.getItem() == ModItems.JAVELIN_MISSILE.get();
}
public static ItemStack getGunInstance() {
ItemStack stack = new ItemStack(ModItems.JAVELIN.get());
GunsTool.initCreativeGun(stack, ModItems.JAVELIN.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/javelin_icon.png");
}
@Override
public String getGunDisplayName() {
return "FGM-148";
}
}

View file

@ -1,5 +1,6 @@
package net.mcreator.superbwarfare.network.message; package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.entity.*; import net.mcreator.superbwarfare.entity.*;
import net.mcreator.superbwarfare.event.GunEventHandler; import net.mcreator.superbwarfare.event.GunEventHandler;
import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.init.*;
@ -9,14 +10,19 @@ import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.ItemNBTTool; import net.mcreator.superbwarfare.tools.ItemNBTTool;
import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.ParticleTool;
import net.mcreator.superbwarfare.tools.SeekTool;
import net.mcreator.superbwarfare.tools.SoundTool; import net.mcreator.superbwarfare.tools.SoundTool;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.game.ClientboundStopSoundPacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -24,6 +30,7 @@ import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
import org.joml.Vector3d;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -72,6 +79,19 @@ public class FireMessage {
if (player.getMainHandItem().getItem() == ModItems.BOCEK.get()) { if (player.getMainHandItem().getItem() == ModItems.BOCEK.get()) {
handleBowShoot(player); handleBowShoot(player);
} }
if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) {
var handItem = player.getMainHandItem();
var tag = handItem.getOrCreateTag();
handleJavelinFire(player);
tag.putBoolean("Seeking",false);
tag.putInt("SeekTime",0);
tag.putString("TargetEntity","none");
if (player instanceof ServerPlayer serverPlayer) {
var clientboundstopsoundpacket = new ClientboundStopSoundPacket(new ResourceLocation(ModUtils.MODID, "javelin_lock"), SoundSource.PLAYERS);
serverPlayer.connection.send(clientboundstopsoundpacket);
}
}
} }
} }
@ -96,6 +116,16 @@ public class FireMessage {
handleRpgFire(player); handleRpgFire(player);
} }
if (handItem.getItem() == ModItems.JAVELIN.get() && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zooming && tag.getInt("ammo") > 0) {
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 256, 9);
if (seekingEntity != null) {
tag.putString("TargetEntity",seekingEntity.getStringUUID());
tag.putBoolean("Seeking",true);
tag.putInt("SeekTime",0);
}
}
if (tag.getInt("fire_mode") == 1) { if (tag.getInt("fire_mode") == 1) {
player.getPersistentData().putBoolean("firing", false); player.getPersistentData().putBoolean("firing", false);
tag.putInt("burst_fire", (int) tag.getDouble("burst_size")); tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
@ -431,4 +461,53 @@ public class FireMessage {
tag.putInt("ammo", tag.getInt("ammo") - 1); tag.putInt("ammo", tag.getInt("ammo") - 1);
} }
} }
private static void handleJavelinFire(Player player) {
if (player.isSpectator()) return;
Level level = player.level();
ItemStack mainHandItem = player.getMainHandItem();
CompoundTag tag = mainHandItem.getOrCreateTag();
if (tag.getInt("SeekTime") < 40) return;
float yRot = player.getYRot();
if (yRot < 0) {
yRot += 360;
}
yRot = yRot + 90 % 360;
var firePos = new Vector3d(0, -0.2, 0.15);
firePos.rotateZ(-player.getXRot() * Mth.DEG_TO_RAD);
firePos.rotateY(-yRot * Mth.DEG_TO_RAD);
if (!level.isClientSide()) {
JavelinMissileEntity missileEntity = new JavelinMissileEntity(player, level, (float) tag.getDouble("damage") * (float) tag.getDouble("levelDamageMultiple"));
missileEntity.setPos(player.getX() + firePos.x, player.getEyeY() + firePos.y, player.getZ() + firePos.z);
missileEntity.shoot(player.getLookAngle().x, player.getLookAngle().y + 0.3, player.getLookAngle().z, 3f, 1);
missileEntity.setTargetUuid(tag.getString("TargetEntity"));
missileEntity.setAttackMode(tag.getBoolean("TopMode"));
level.addFreshEntity(missileEntity);
}
if (player.level() instanceof ServerLevel serverLevel) {
ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x,
player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y,
player.getZ() + 1.8 * player.getLookAngle().z,
30, 0.4, 0.4, 0.4, 0.005, true);
}
player.getCooldowns().addCooldown(mainHandItem.getItem(), 10);
if (player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, ModSounds.JAVELIN_FIRE_1P.get(), 2, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FIRE_3P.get(), SoundSource.PLAYERS, 4, 1);
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FAR.get(), SoundSource.PLAYERS, 12, 1);
}
tag.putBoolean("shoot", true);
tag.putInt("fire_animation", 2);
tag.putInt("ammo", tag.getInt("ammo") - 1);
}
} }

View file

@ -114,6 +114,10 @@ public class FireModeMessage {
tag.putBoolean("start_sentinel_charge", true); tag.putBoolean("start_sentinel_charge", true);
} }
} }
if (mainHandItem.getItem() == ModItems.JAVELIN.get()) {
tag.putBoolean("TopMode", !tag.getBoolean("TopMode"));
}
} }
} }
} }

View file

@ -1,11 +1,16 @@
package net.mcreator.superbwarfare.network.message; package net.mcreator.superbwarfare.network.message;
import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.entity.ICannonEntity; import net.mcreator.superbwarfare.entity.ICannonEntity;
import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.ModVariables;
import net.mcreator.superbwarfare.tools.SoundTool; import net.mcreator.superbwarfare.tools.SoundTool;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.protocol.game.ClientboundStopSoundPacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
@ -60,6 +65,16 @@ public class ZoomMessage {
if (player.isPassenger() && player.getVehicle() instanceof ICannonEntity) { if (player.isPassenger() && player.getVehicle() instanceof ICannonEntity) {
SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_OUT.get(), 2, 1); SoundTool.playLocalSound(player, ModSounds.CANNON_ZOOM_OUT.get(), 2, 1);
} }
if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) {
var handItem = player.getMainHandItem();
var tag = handItem.getOrCreateTag();
tag.putBoolean("Seeking",false);
tag.putInt("SeekTime",0);
tag.putString("TargetEntity","none");
var clientboundstopsoundpacket = new ClientboundStopSoundPacket(new ResourceLocation(ModUtils.MODID, "javelin_lock"), SoundSource.PLAYERS);
player.connection.send(clientboundstopsoundpacket);
}
} }
} }
}); });

View file

@ -0,0 +1,597 @@
{
"format_version": "1.8.0",
"animations": {
"animation.javelin.idle": {
"loop": true
},
"animation.javelin.draw": {
"animation_length": 2,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [27.21312, -47.42646, -2.0218]
},
"0.2917": {
"vector": [12.5, -15, 0]
},
"0.7083": {
"vector": [3.48268, 0.40464, 8.20687]
},
"1.2083": {
"vector": [0, 0, -2]
},
"1.4167": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [3, -17.3, 0]
},
"0.7083": {
"vector": [0, 0, -1.65]
},
"0.9167": {
"vector": [0, 0, 0.93]
},
"1.4167": {
"vector": [0, 0, 0]
}
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.7083": {
"vector": [0, 0, 0]
},
"1.0833": {
"vector": [0.25, -0.5, 0.5],
"easing": "easeInSine"
},
"1.4583": {
"vector": [0, 0, 0],
"easing": "easeOutSine"
}
}
}
}
},
"animation.javelin.reload": {
"loop": "hold_on_last_frame",
"animation_length": 4,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.5": {
"vector": [12.79362, -12.19908, 12.25285],
"easing": "easeInElastic"
},
"0.75": {
"vector": [9.75, -9.23, 11.75]
},
"0.95": {
"vector": [11.79522, -11.04857, 7.28498]
},
"1.1": {
"vector": [12.31362, -10.46218, 4.49843]
},
"1.2": {
"vector": [11.4055, -11.45078, 9.28251]
},
"1.3": {
"vector": [12.35592, -10.41977, 4.29668],
"easing": "easeInElastic"
},
"1.45": {
"vector": [11.6067, -11.25048, 8.28056]
},
"1.65": {
"vector": [11.98892, -10.84152, 6.28585]
},
"2.05": {
"vector": [5.79574, -6.02586, 7.24999]
},
"2.25": {
"vector": [7.92196, -6.92206, 8.3785]
},
"2.45": {
"vector": [4.04818, -7.81825, 9.50702]
},
"2.85": {
"vector": [2.88997, -3.00619, 6.1271]
},
"2.95": {
"vector": [2.3539, -8.5762, 8.5272]
},
"3.05": {
"vector": [2.03364, -1.90533, 5.41921]
},
"3.35": {
"vector": [-3.8135, -0.9118, -6.85724]
},
"3.5": {
"vector": [0, 0, -2]
},
"3.7": {
"vector": [0, 0, 0]
}
},
"position": {
"0.0": {
"vector": [0, 0, 0]
},
"0.6": {
"vector": [2, -3, 0],
"easing": "easeInElastic"
},
"0.8": {
"vector": [1.12822, -2.67429, -0.19599]
},
"0.95": {
"vector": [1.7, -3, 0]
},
"1.1": {
"vector": [2.14, -3.38, 0]
},
"1.2": {
"vector": [1.6, -3.3, 0]
},
"1.3": {
"vector": [1.12462, -3.83058, 0.15]
},
"1.45": {
"vector": [0.99786, -3.41627, 0.03205]
},
"1.75": {
"vector": [1.13479, -3.63167, 0.1024]
},
"2.25": {
"vector": [1.02177, -3.65324, 0.10105]
},
"2.85": {
"vector": [0.99199, -3.01733, 0.00368]
},
"2.95": {
"vector": [0.85832, -4.31036, 0.07675]
},
"3.05": {
"vector": [0, -0.98, 0.5]
},
"3.2": {
"vector": [-0.47388, 0.04235, 0.71917]
},
"3.4": {
"vector": [0, 0, 0.93]
},
"3.55": {
"vector": [0, 0, -0.3]
},
"3.7": {
"vector": [0, 0, 0]
}
}
},
"tong": {
"rotation": {
"1.1": {
"vector": [0, 0, 0]
},
"1.2": {
"vector": [0, 0, 8]
},
"1.3": {
"vector": [0, 0, -9]
},
"1.4": {
"vector": [-18, 0, -19.44444]
},
"1.65": {
"vector": [26.36182, -9.17441, -137.87933]
},
"2.35": {
"vector": [26.36182, -9.17441, -137.87933]
},
"2.45": {
"vector": [21, 0, -19.44444]
},
"2.65": {
"vector": [-7.18076, 7.51466, -11.75196]
},
"2.85": {
"vector": [0, 0, 8]
},
"3.0": {
"vector": [0, 0, 0]
}
},
"position": {
"1.2": {
"vector": [0, 0, 0]
},
"1.3": {
"vector": [0.10557, -0.66654, 2.92311]
},
"1.4": {
"vector": [-6.31004, -1.27247, 2.50163]
},
"1.5": {
"vector": [-11.56218, -9.5433, 1.07822]
},
"1.65": {
"vector": [-13.50237, -24.77616, -3.14931]
},
"2.35": {
"vector": [-13.50237, -24.77616, -3.14931]
},
"2.5": {
"vector": [-6.31004, -1.27247, 2.50163]
},
"2.65": {
"vector": [-3.58866, -0.76398, 3.64641]
},
"2.85": {
"vector": [0, 0, 0]
}
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [0, 0, 0]
},
"0.15": {
"vector": [1, 0, -3]
},
"0.35": {
"vector": [0.8, 0, -1.5]
},
"0.5": {
"vector": [0.5, 0, -1.5]
},
"0.9": {
"vector": [-1, 0, -2.8]
},
"1.25": {
"vector": [0.43, -1.5, -1.5]
},
"1.35": {
"vector": [-0.8, 2.5, 1.5]
},
"1.65": {
"vector": [-0.8, 0, -0.75]
},
"1.85": {
"vector": [1, -0.59, -0.59]
},
"2.0": {
"vector": [0.44, -0.26, 1.5]
},
"2.15": {
"vector": [0.18, -0.11, -0.5]
},
"2.35": {
"vector": [0.05, -0.03, 0.2]
},
"2.55": {
"vector": [0, 0, 0],
"easing": "easeOutSine"
},
"2.85": {
"vector": [0.43, -1.5, -1.5]
},
"2.95": {
"vector": [-0.8, 2.5, 1.5]
},
"3.1": {
"vector": [-0.8, 0, -0.75]
},
"3.25": {
"vector": [-0.36, 0, 0.67]
},
"3.35": {
"vector": [-0.32, 0.5, -0.45]
},
"3.45": {
"vector": [-0.05, -0.33, 0.3]
},
"3.55": {
"vector": [0.5, -2, -2]
},
"3.7": {
"vector": [0, 0, 0]
}
}
},
"Righthand": {
"rotation": {
"0.65": {
"vector": [0, 0, 0]
},
"0.8": {
"vector": [51.7535, -6.84439, 4.60635]
},
"0.9": {
"vector": [76.42483, -15.97024, 10.74814]
},
"1.1": {
"vector": [76.42483, -15.97024, 10.74814]
},
"1.2": {
"vector": [76.42284, -16.14404, 12.74058]
},
"1.3": {
"vector": [82.28453, -14.2459, 2.92096]
},
"1.4": {
"vector": [80.65985, -10.00387, -20.76159]
},
"1.5": {
"vector": [78.80452, -7.82779, -35.71867]
},
"1.75": {
"vector": [2.80452, -7.82779, -35.71867]
},
"2.45": {
"vector": [49.65, -13.12, -4.88]
},
"2.6": {
"vector": [79.75124, -23.16054, 0.43122]
},
"2.85": {
"vector": [76.42284, -16.14404, 12.74058]
},
"3.05": {
"vector": [76.42483, -15.97024, 10.74814]
},
"3.15": {
"vector": [76.42483, -15.97024, 10.74814]
},
"3.25": {
"vector": [51.7535, -6.84439, 4.60635]
},
"3.35": {
"vector": [0, 0, 0]
}
},
"position": {
"0.65": {
"vector": [0, 0, 0]
},
"0.8": {
"vector": [-2.47, -2.5, 3.46]
},
"0.9": {
"vector": [-1.8, 2.1, -2.2]
},
"1.1": {
"vector": [-1.8, 2.1, -2.2]
},
"1.2": {
"vector": [-2.1, 2.8, -2.2]
},
"1.3": {
"vector": [-0.4, -0.3, -2.2]
},
"1.4": {
"vector": [-1, -3.3, -2.2]
},
"1.5": {
"vector": [-1.9, -10.3, -2.2]
},
"2.45": {
"vector": [-8.74, -5.38, 2.4]
},
"2.6": {
"vector": [-4.05, 0.39, 0.68]
},
"2.85": {
"vector": [-2.1, 2.8, -2.2]
},
"3.05": {
"vector": [-1.8, 2.1, -2.2]
},
"3.15": {
"vector": [-1.8, 2.1, -2.2]
},
"3.25": {
"vector": [-2.47, -2.5, 3.46]
},
"3.35": {
"vector": [0, 0, 0]
}
}
}
}
},
"animation.javelin.run": {
"loop": true,
"animation_length": 0.8,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [14.01931, 1.43241, 2.77989]
},
"0.2": {
"vector": [9.37348, 2.99239, 8.65204],
"easing": "easeInSine"
},
"0.4": {
"vector": [14.01931, 1.43241, 2.77989],
"easing": "easeOutSine"
},
"0.6": {
"vector": [14.03728, 0.24759, -2.78126],
"easing": "easeInSine"
},
"0.8": {
"vector": [14.01931, 1.43241, 2.77989],
"easing": "easeOutSine"
}
},
"position": {
"0.0": {
"vector": [0, -2, 0]
},
"0.2": {
"vector": [-1, -1, 0],
"easing": "easeInSine"
},
"0.4": {
"vector": [-2, -2, 0],
"easing": "easeOutSine"
},
"0.6": {
"vector": [-1, -1, 0],
"easing": "easeInSine"
},
"0.8": {
"vector": [0, -2, 0],
"easing": "easeOutSine"
}
}
},
"Rockets": {
"rotation": {
"vector": [0, 0, 0]
},
"position": {
"vector": [0, 0, 0]
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [-0.3, -0.3, 0.3]
},
"0.2": {
"vector": [0.3, 0, -0.3]
},
"0.4": {
"vector": [-0.3, 0.3, 0.3]
},
"0.6": {
"vector": [0.3, 0, -0.3]
},
"0.8": {
"vector": [-0.3, -0.3, 0.3]
}
}
}
}
},
"animation.javelin.fire": {
"animation_length": 0.25
},
"animation.javelin.run_fast": {
"loop": true,
"animation_length": 0.7,
"bones": {
"0": {
"rotation": {
"0.0": {
"vector": [-13.3263, 7.54702, 1.59969],
"easing": "easeOutSine"
},
"0.175": {
"vector": [-27.62174, 12.50143, 4.04527],
"easing": "easeInSine"
},
"0.35": {
"vector": [-13.035, 17.54299, 1.66321],
"easing": "easeOutSine"
},
"0.525": {
"vector": [-23.67296, 3.37897, -3.44474],
"easing": "easeInSine"
},
"0.7": {
"vector": [-13.3263, 7.54702, 1.59969],
"easing": "easeOutSine"
}
},
"position": {
"0.0": {
"vector": [-1, 2, 1]
},
"0.175": {
"vector": [-2, 3, 1],
"easing": "easeInSine"
},
"0.35": {
"vector": [-3, 2, 1],
"easing": "easeOutSine"
},
"0.525": {
"vector": [-2, 3, 1],
"easing": "easeInSine"
},
"0.7": {
"vector": [-1, 2, 1],
"easing": "easeOutSine"
}
}
},
"Rockets": {
"rotation": {
"vector": [0, 0, 0]
},
"position": {
"vector": [0, 0, 0]
}
},
"roll": {
"rotation": {
"vector": [0, 0, 10]
},
"position": {
"vector": [-2, 0, -1]
}
},
"Righthand": {
"rotation": {
"vector": [-6.1457, -9.1471, -6.29764]
},
"position": {
"vector": [1.52734, 0.09375, 1.92969]
}
},
"Lefthand": {
"rotation": {
"vector": [-1.41476, -16.33468, -1.66483]
},
"position": {
"vector": [6, -13, 49]
}
},
"camera": {
"rotation": {
"0.0": {
"vector": [-0.3, -0.3, 0.3]
},
"0.175": {
"vector": [0.3, 0, -0.3]
},
"0.35": {
"vector": [-0.3, 0.3, 0.3]
},
"0.525": {
"vector": [0.3, 0, -0.3]
},
"0.7": {
"vector": [-0.3, -0.3, 0.3]
}
}
}
}
}
},
"geckolib_format_version": 2
}

View file

@ -0,0 +1,89 @@
{
"format_version": "1.8.0",
"animations": {
"animation.jvm.idle": {
"loop": "hold_on_last_frame",
"animation_length": 10,
"bones": {
"wing1": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing2": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing3": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing4": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing5": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing6": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing7": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing8": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"body": {
"rotation": {
"0.0": [0, 0, 0],
"10.0": [0, 21600, 0]
}
},
"wing9": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing10": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing11": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
},
"wing12": {
"rotation": {
"0.2667": [0, 0, 0],
"0.3167": [0, 105, 0]
}
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,453 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.rpg",
"texture_width": 64,
"texture_height": 64,
"visible_bounds_width": 91,
"visible_bounds_height": 10,
"visible_bounds_offset": [0, 1, 0]
},
"bones": [
{
"name": "bone",
"pivot": [0, 0, -0.11791]
},
{
"name": "body",
"parent": "bone",
"pivot": [0, -51.91, 0],
"rotation": [90, 0, 0]
},
{
"name": "wing",
"parent": "body",
"pivot": [-0.08407, -52.04737, 35.50871]
},
{
"name": "wing1",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [9, 37], "uv_size": [1, 2]},
"east": {"uv": [24, 0], "uv_size": [8, 2]},
"south": {"uv": [37, 9], "uv_size": [1, 2]},
"west": {"uv": [24, 2], "uv_size": [8, 2]},
"up": {"uv": [32, 16], "uv_size": [1, 8]},
"down": {"uv": [24, 40], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing2",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, -45],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [10, 37], "uv_size": [1, 2]},
"east": {"uv": [24, 4], "uv_size": [8, 2]},
"south": {"uv": [11, 37], "uv_size": [1, 2]},
"west": {"uv": [24, 6], "uv_size": [8, 2]},
"up": {"uv": [32, 24], "uv_size": [1, 8]},
"down": {"uv": [25, 40], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing3",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, -90],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 11], "uv_size": [1, 2]},
"east": {"uv": [24, 8], "uv_size": [8, 2]},
"south": {"uv": [12, 37], "uv_size": [1, 2]},
"west": {"uv": [24, 10], "uv_size": [8, 2]},
"up": {"uv": [26, 32], "uv_size": [1, 8]},
"down": {"uv": [27, 40], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing4",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, -135],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [13, 37], "uv_size": [1, 2]},
"east": {"uv": [24, 12], "uv_size": [8, 2]},
"south": {"uv": [37, 13], "uv_size": [1, 2]},
"west": {"uv": [24, 14], "uv_size": [8, 2]},
"up": {"uv": [28, 32], "uv_size": [1, 8]},
"down": {"uv": [29, 40], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing5",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, -180],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [14, 37], "uv_size": [1, 2]},
"east": {"uv": [24, 16], "uv_size": [8, 2]},
"south": {"uv": [37, 15], "uv_size": [1, 2]},
"west": {"uv": [24, 18], "uv_size": [8, 2]},
"up": {"uv": [30, 32], "uv_size": [1, 8]},
"down": {"uv": [31, 40], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing6",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, 135],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 17], "uv_size": [1, 2]},
"east": {"uv": [24, 20], "uv_size": [8, 2]},
"south": {"uv": [37, 19], "uv_size": [1, 2]},
"west": {"uv": [24, 22], "uv_size": [8, 2]},
"up": {"uv": [32, 32], "uv_size": [1, 8]},
"down": {"uv": [0, 41], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing7",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, 90],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 21], "uv_size": [1, 2]},
"east": {"uv": [24, 24], "uv_size": [8, 2]},
"south": {"uv": [37, 23], "uv_size": [1, 2]},
"west": {"uv": [24, 26], "uv_size": [8, 2]},
"up": {"uv": [1, 33], "uv_size": [1, 8]},
"down": {"uv": [2, 41], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing8",
"parent": "wing",
"pivot": [0, -52.02791, 39.28283],
"rotation": [0, 0, 45],
"cubes": [
{
"origin": [-1.31305, -53.29159, 31.96951],
"size": [0.8375, 2.23735, 7.82981],
"pivot": [-0.8943, -52.02791, 29.24692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 25], "uv_size": [1, 2]},
"east": {"uv": [24, 28], "uv_size": [8, 2]},
"south": {"uv": [37, 27], "uv_size": [1, 2]},
"west": {"uv": [24, 30], "uv_size": [8, 2]},
"up": {"uv": [3, 33], "uv_size": [1, 8]},
"down": {"uv": [4, 41], "uv_size": [1, -8]}
}
}
]
},
{
"name": "wing9",
"parent": "wing",
"pivot": [0, -52.02791, 50.03283],
"cubes": [
{
"origin": [-1.31305, -53.29159, 45.71951],
"size": [0.8375, 2.23735, 4.82981],
"pivot": [-0.8943, -52.02791, 39.99692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 29], "uv_size": [1, 2]},
"east": {"uv": [32, 0], "uv_size": [5, 2]},
"south": {"uv": [37, 31], "uv_size": [1, 2]},
"west": {"uv": [32, 2], "uv_size": [5, 2]},
"up": {"uv": [15, 33], "uv_size": [1, 5]},
"down": {"uv": [33, 33], "uv_size": [1, -5]}
}
}
]
},
{
"name": "wing10",
"parent": "wing",
"pivot": [0, -52.02791, 50.03283],
"rotation": [0, 0, -180],
"cubes": [
{
"origin": [-1.31305, -53.29159, 45.71951],
"size": [0.8375, 2.23735, 4.82981],
"pivot": [-0.8943, -52.02791, 39.99692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 33], "uv_size": [1, 2]},
"east": {"uv": [32, 4], "uv_size": [5, 2]},
"south": {"uv": [35, 37], "uv_size": [1, 2]},
"west": {"uv": [32, 6], "uv_size": [5, 2]},
"up": {"uv": [33, 33], "uv_size": [1, 5]},
"down": {"uv": [34, 33], "uv_size": [1, -5]}
}
}
]
},
{
"name": "wing11",
"parent": "wing",
"pivot": [0, -52.02791, 50.03283],
"rotation": [0, 0, -90],
"cubes": [
{
"origin": [-1.31305, -53.29159, 45.71951],
"size": [0.8375, 2.23735, 4.82981],
"pivot": [-0.8943, -52.02791, 39.99692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 35], "uv_size": [1, 2]},
"east": {"uv": [32, 8], "uv_size": [5, 2]},
"south": {"uv": [36, 37], "uv_size": [1, 2]},
"west": {"uv": [32, 10], "uv_size": [5, 2]},
"up": {"uv": [34, 33], "uv_size": [1, 5]},
"down": {"uv": [35, 21], "uv_size": [1, -5]}
}
}
]
},
{
"name": "wing12",
"parent": "wing",
"pivot": [0, -52.02791, 50.03283],
"rotation": [0, 0, 90],
"cubes": [
{
"origin": [-1.31305, -53.29159, 45.71951],
"size": [0.8375, 2.23735, 4.82981],
"pivot": [-0.8943, -52.02791, 39.99692],
"rotation": [0, 0, -90],
"uv": {
"north": {"uv": [37, 37], "uv_size": [1, 2]},
"east": {"uv": [32, 12], "uv_size": [5, 2]},
"south": {"uv": [38, 0], "uv_size": [1, 2]},
"west": {"uv": [32, 14], "uv_size": [5, 2]},
"up": {"uv": [35, 21], "uv_size": [1, 5]},
"down": {"uv": [35, 31], "uv_size": [1, -5]}
}
}
]
},
{
"name": "bone5",
"parent": "body",
"pivot": [-0.08407, -52.04737, 29.55871],
"cubes": [
{
"origin": [-0.77375, -53.89714, 18.75451],
"size": [1.5475, 3.7372, 33.06981],
"pivot": [0, -52.02791, 8.85492],
"rotation": [0, 0, 90],
"uv": {
"north": {"uv": [5, 33], "uv_size": [2, 4]},
"south": {"uv": [7, 33], "uv_size": [2, 4]},
"up": {"uv": [0, 0], "uv_size": [2, 33]},
"down": {"uv": [2, 33], "uv_size": [2, -33]}
}
},
{
"origin": [-0.77436, -53.8965, 18.75451],
"size": [1.5475, 3.7372, 33.06981],
"pivot": [-0.00061, -52.02791, 26.41442],
"rotation": [0, 0, 45],
"uv": {
"north": {"uv": [9, 33], "uv_size": [2, 4]},
"south": {"uv": [11, 33], "uv_size": [2, 4]},
"up": {"uv": [4, 0], "uv_size": [2, 33]},
"down": {"uv": [6, 33], "uv_size": [2, -33]}
}
},
{
"origin": [-0.77436, -53.8965, 18.75451],
"size": [1.5475, 3.7372, 33.06981],
"uv": {
"north": {"uv": [13, 33], "uv_size": [2, 4]},
"south": {"uv": [33, 16], "uv_size": [2, 4]},
"up": {"uv": [8, 0], "uv_size": [2, 33]},
"down": {"uv": [10, 33], "uv_size": [2, -33]}
}
},
{
"origin": [-0.77436, -53.8965, 18.75451],
"size": [1.5475, 3.7372, 33.06981],
"pivot": [-0.00061, -52.02791, 26.41442],
"rotation": [0, 0, -45],
"uv": {
"north": {"uv": [33, 20], "uv_size": [2, 4]},
"south": {"uv": [33, 24], "uv_size": [2, 4]},
"up": {"uv": [12, 0], "uv_size": [2, 33]},
"down": {"uv": [14, 33], "uv_size": [2, -33]}
}
}
]
},
{
"name": "bone2",
"parent": "body",
"pivot": [-0.00061, -52.02791, 18.75451],
"cubes": [
{
"origin": [-0.69644, -53.71021, 16.00451],
"size": [1.39275, 3.36348, 2.75],
"pivot": [-0.00006, -52.02791, 9.84488],
"rotation": [0, 0, 90],
"uv": {
"north": {"uv": [35, 31], "uv_size": [1, 3]},
"south": {"uv": [35, 34], "uv_size": [1, 3]},
"up": {"uv": [36, 16], "uv_size": [1, 3]},
"down": {"uv": [36, 22], "uv_size": [1, -3]}
}
},
{
"origin": [-0.69698, -53.70964, 16.00451],
"size": [1.39275, 3.36348, 2.75],
"pivot": [-0.00061, -52.02791, 25.64843],
"rotation": [0, 0, 45],
"uv": {
"north": {"uv": [36, 22], "uv_size": [1, 3]},
"south": {"uv": [36, 25], "uv_size": [1, 3]},
"up": {"uv": [36, 28], "uv_size": [1, 3]},
"down": {"uv": [36, 34], "uv_size": [1, -3]}
}
},
{
"origin": [-0.69698, -53.70964, 16.00451],
"size": [1.39275, 3.36348, 2.75],
"uv": {
"north": {"uv": [36, 34], "uv_size": [1, 3]},
"south": {"uv": [37, 0], "uv_size": [1, 3]},
"up": {"uv": [37, 3], "uv_size": [1, 3]},
"down": {"uv": [5, 40], "uv_size": [1, -3]}
}
},
{
"origin": [-0.69698, -53.70964, 16.00451],
"size": [1.39275, 3.36348, 2.75],
"pivot": [-0.00061, -52.02791, 25.64843],
"rotation": [0, 0, -45],
"uv": {
"north": {"uv": [6, 37], "uv_size": [1, 3]},
"south": {"uv": [37, 6], "uv_size": [1, 3]},
"up": {"uv": [7, 37], "uv_size": [1, 3]},
"down": {"uv": [8, 40], "uv_size": [1, -3]}
}
}
]
},
{
"name": "bone3",
"parent": "body",
"pivot": [-0.00061, -52.02791, 16.00451],
"cubes": [
{
"origin": [-0.48769, -53.20552, 15.50451],
"size": [0.97492, 2.35444, 36.6],
"pivot": [-0.00023, -52.02791, 11.69277],
"rotation": [0, 0, 90],
"uv": {
"north": {"uv": [38, 2], "uv_size": [1, 2]},
"south": {"uv": [38, 4], "uv_size": [1, 2]},
"up": {"uv": [16, 0], "uv_size": [1, 38]},
"down": {"uv": [17, 38], "uv_size": [1, -38]}
}
},
{
"origin": [-0.48807, -53.20512, 15.50451],
"size": [0.97492, 2.35444, 36.6],
"pivot": [-0.00061, -52.02791, 22.75525],
"rotation": [0, 0, 45],
"uv": {
"north": {"uv": [38, 6], "uv_size": [1, 2]},
"south": {"uv": [38, 8], "uv_size": [1, 2]},
"up": {"uv": [18, 0], "uv_size": [1, 38]},
"down": {"uv": [19, 38], "uv_size": [1, -38]}
}
},
{
"origin": [-0.48807, -53.20512, 15.50451],
"size": [0.97492, 2.35444, 36.6],
"uv": {
"north": {"uv": [38, 10], "uv_size": [1, 2]},
"south": {"uv": [38, 12], "uv_size": [1, 2]},
"up": {"uv": [20, 0], "uv_size": [1, 38]},
"down": {"uv": [21, 38], "uv_size": [1, -38]}
}
},
{
"origin": [-0.48807, -53.20512, 15.50451],
"size": [0.97492, 2.35444, 36.6],
"pivot": [-0.00061, -52.02791, 22.75525],
"rotation": [0, 0, -45],
"uv": {
"north": {"uv": [38, 14], "uv_size": [1, 2]},
"south": {"uv": [15, 38], "uv_size": [1, 2]},
"up": {"uv": [22, 0], "uv_size": [1, 38]},
"down": {"uv": [23, 38], "uv_size": [1, -38]}
}
}
]
}
]
}
]
}

View file

@ -44,12 +44,13 @@
"item.superbwarfare.qbz_95": "QBZ-95-1", "item.superbwarfare.qbz_95": "QBZ-95-1",
"item.superbwarfare.k_98": "KAR-98K", "item.superbwarfare.k_98": "KAR-98K",
"item.superbwarfare.mosin_nagant": "Mosin Nagant", "item.superbwarfare.mosin_nagant": "Mosin Nagant",
"item.superbwarfare.javelin": "FGM-148 Javelin",
"des.superbwarfare.tips.damage": "Damage: ", "des.superbwarfare.tips.damage": "Damage: ",
"des.superbwarfare.tips.level": "Level: ", "des.superbwarfare.tips.level": "Level: ",
"des.superbwarfare.tips.bypass": "Armor Piercing: ", "des.superbwarfare.tips.bypass": "Armor Piercing: ",
"des.superbwarfare.tips.distance": "Drone Distance: ", "des.superbwarfare.tips.distance": "Drone Distance: ",
"des.superbwarfare.tips.upgradepoint": "Ppgrade Point: ", "des.superbwarfare.tips.upgradepoint": "Upgrade Point: ",
"item.superbwarfare.vector_blueprint": "VECTOR Blueprint", "item.superbwarfare.vector_blueprint": "VECTOR Blueprint",
"item.superbwarfare.m_60_blueprint": "M60 Blueprint", "item.superbwarfare.m_60_blueprint": "M60 Blueprint",
@ -127,6 +128,7 @@
"item.superbwarfare.ammo_supplier.creative": "All Ammo +2147483647", "item.superbwarfare.ammo_supplier.creative": "All Ammo +2147483647",
"item.superbwarfare.he_5_inches": "HE Shell", "item.superbwarfare.he_5_inches": "HE Shell",
"item.superbwarfare.ap_5_inches": "AP Shell", "item.superbwarfare.ap_5_inches": "AP Shell",
"item.superbwarfare.javelin_missile": "Javelin Missile",
"item.superbwarfare.ancient_cpu": "Ancient CPU", "item.superbwarfare.ancient_cpu": "Ancient CPU",
"item.superbwarfare.target_deployer": "Target", "item.superbwarfare.target_deployer": "Target",

View file

@ -44,6 +44,7 @@
"item.superbwarfare.qbz_95": "95-1式自动步枪", "item.superbwarfare.qbz_95": "95-1式自动步枪",
"item.superbwarfare.k_98": "KAR-98K", "item.superbwarfare.k_98": "KAR-98K",
"item.superbwarfare.mosin_nagant": "莫辛纳甘", "item.superbwarfare.mosin_nagant": "莫辛纳甘",
"item.superbwarfare.javelin": "FGM-148标枪导弹",
"des.superbwarfare.tips.upgradepoint": "升级点数: ", "des.superbwarfare.tips.upgradepoint": "升级点数: ",
"des.superbwarfare.tips.damage": "伤害: ", "des.superbwarfare.tips.damage": "伤害: ",
@ -127,6 +128,7 @@
"item.superbwarfare.ammo_supplier.creative": "所有弹药 +2147483647", "item.superbwarfare.ammo_supplier.creative": "所有弹药 +2147483647",
"item.superbwarfare.he_5_inches": "高爆弹", "item.superbwarfare.he_5_inches": "高爆弹",
"item.superbwarfare.ap_5_inches": "穿甲弹", "item.superbwarfare.ap_5_inches": "穿甲弹",
"item.superbwarfare.javelin_missile": "标枪导弹",
"item.superbwarfare.ancient_cpu": "古代处理器", "item.superbwarfare.ancient_cpu": "古代处理器",
"item.superbwarfare.target_deployer": "标靶", "item.superbwarfare.target_deployer": "标靶",

View file

@ -0,0 +1,61 @@
{
"credit": "Made with Blockbench",
"parent": "builtin/entity",
"texture_size": [
128,
128
],
"gui_light": "front",
"display": {
"thirdperson_righthand": {
"translation": [
-5.5,
-2.25,
3.75
]
},
"thirdperson_lefthand": {
"scale": [
0,
0,
0
]
},
"firstperson_righthand": {
"rotation": [
0,
0,
4.75
],
"translation": [
-3.75,
-4.75,
0.75
]
},
"firstperson_lefthand": {
"scale": [
0,
0,
0
]
},
"gui": {
"rotation": [
165.69,
-39.63,
178.66
],
"translation": [
3.5,
-2.5,
0
],
"scale": [
0.45,
0.45,
0.45
]
}
}
}

View file

@ -0,0 +1,27 @@
{
"loader": "forge:separate_transforms",
"gui_light": "front",
"base": {
"parent": "superbwarfare:item/javelin_base"
},
"perspectives": {
"gui": {
"parent": "superbwarfare:item/javelin_icon"
},
"thirdperson_righthand": {
"parent": "superbwarfare:item/javelin_3d"
},
"thirdperson_lefthand": {
"parent": "superbwarfare:item/javelin_3d"
},
"ground": {
"parent": "superbwarfare:item/javelin_3d"
},
"fixed": {
"parent": "superbwarfare:item/javelin_3d"
},
"head": {
"parent": "superbwarfare:item/javelin_3d"
}
}
}

View file

@ -0,0 +1,131 @@
{
"credit": "Made with Blockbench",
"texture_size": [64, 64],
"textures": {
"0": "superbwarfare:item/javelin_3d",
"particle": "superbwarfare:item/javelin_3d"
},
"elements": [
{
"from": [4, -1, 4],
"to": [12, 7, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 6]},
"faces": {
"north": {"uv": [2.5, 2.5, 4.5, 4.5], "texture": "#0"},
"east": {"uv": [6.25, 4.25, 7.25, 6.25], "texture": "#0"},
"south": {"uv": [2.5, 4.5, 4.5, 6.5], "texture": "#0"},
"west": {"uv": [6.25, 6.25, 7.25, 8.25], "texture": "#0"},
"up": {"uv": [4.5, 7.5, 2.5, 6.5], "texture": "#0"},
"down": {"uv": [8.75, 0, 6.75, 1], "texture": "#0"}
}
},
{
"from": [1, 0, 4],
"to": [4, 7, 6],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 6]},
"faces": {
"north": {"uv": [7.25, 5.5, 8, 7.25], "texture": "#0"},
"east": {"uv": [5.75, 7.75, 6.25, 9.5], "texture": "#0"},
"south": {"uv": [7.25, 7.25, 8, 9], "texture": "#0"},
"west": {"uv": [8, 5.5, 8.5, 7.25], "texture": "#0"},
"up": {"uv": [9.5, 1.5, 8.75, 1], "texture": "#0"},
"down": {"uv": [9.5, 1.5, 8.75, 2], "texture": "#0"}
}
},
{
"from": [1, 2, 6],
"to": [4, 7, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 6]},
"faces": {
"north": {"uv": [5, 7.75, 5.75, 9], "texture": "#0"},
"east": {"uv": [3, 8.5, 3.5, 9.75], "texture": "#0"},
"south": {"uv": [8, 1, 8.75, 2.25], "texture": "#0"},
"west": {"uv": [8.5, 5.75, 9, 7], "texture": "#0"},
"up": {"uv": [4.25, 9.25, 3.5, 8.75], "texture": "#0"},
"down": {"uv": [5, 8.75, 4.25, 9.25], "texture": "#0"}
}
},
{
"from": [6, -3, 5],
"to": [11, -1, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 6]},
"faces": {
"north": {"uv": [8.5, 7, 9.75, 7.5], "texture": "#0"},
"east": {"uv": [5, 9, 5.75, 9.5], "texture": "#0"},
"south": {"uv": [8.5, 7.5, 9.75, 8], "texture": "#0"},
"west": {"uv": [9, 5.75, 9.75, 6.25], "texture": "#0"},
"up": {"uv": [9.25, 3, 8, 2.25], "texture": "#0"},
"down": {"uv": [9.25, 3, 8, 3.75], "texture": "#0"}
}
},
{
"from": [12, 0, 4],
"to": [17, 2, 8],
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 6]},
"faces": {
"north": {"uv": [8.5, 8, 9.75, 8.5], "texture": "#0"},
"east": {"uv": [8.75, 0, 9.75, 0.5], "texture": "#0"},
"south": {"uv": [8.5, 8.5, 9.75, 9], "texture": "#0"},
"west": {"uv": [8.75, 0.5, 9.75, 1], "texture": "#0"},
"up": {"uv": [3.75, 8.5, 2.5, 7.5], "texture": "#0"},
"down": {"uv": [5, 7.75, 3.75, 8.75], "texture": "#0"}
}
},
{
"from": [12, 2.5, -3],
"to": [16.5, 7, 24],
"rotation": {"angle": 22.5, "axis": "x", "origin": [7, 2, 6]},
"faces": {
"north": {"uv": [6.75, 1, 8, 2.25], "texture": "#0"},
"east": {"uv": [0, 0, 6.75, 1.25], "texture": "#0"},
"south": {"uv": [7.25, 4.25, 8.5, 5.5], "texture": "#0"},
"west": {"uv": [0, 1.25, 6.75, 2.5], "texture": "#0"},
"up": {"uv": [1.25, 9.25, 0, 2.5], "texture": "#0"},
"down": {"uv": [2.5, 2.5, 1.25, 9.25], "texture": "#0"}
}
},
{
"from": [11, 1.5, -5],
"to": [17.5, 8, -3],
"rotation": {"angle": 22.5, "axis": "x", "origin": [7, 2, 6]},
"faces": {
"north": {"uv": [4.5, 2.5, 6.25, 4.25], "texture": "#0"},
"east": {"uv": [8, 7.25, 8.5, 9], "texture": "#0"},
"south": {"uv": [4.5, 4.25, 6.25, 6], "texture": "#0"},
"west": {"uv": [6.25, 8.25, 6.75, 10], "texture": "#0"},
"up": {"uv": [9.75, 4.25, 8, 3.75], "texture": "#0"},
"down": {"uv": [10.25, 4.25, 8.5, 4.75], "texture": "#0"}
}
},
{
"from": [11, 1.5, 24],
"to": [17.5, 8, 26],
"rotation": {"angle": 22.5, "axis": "x", "origin": [7, 2, 6]},
"faces": {
"north": {"uv": [4.5, 6, 6.25, 7.75], "texture": "#0"},
"east": {"uv": [6.75, 8.25, 7.25, 10], "texture": "#0"},
"south": {"uv": [6.25, 2.5, 8, 4.25], "texture": "#0"},
"west": {"uv": [2.5, 8.5, 3, 10.25], "texture": "#0"},
"up": {"uv": [10.25, 5.25, 8.5, 4.75], "texture": "#0"},
"down": {"uv": [10.25, 5.25, 8.5, 5.75], "texture": "#0"}
}
}
],
"display": {
"thirdperson_righthand": {
"translation": [-6, 8, 2.25],
"scale": [1.1, 1.1, 1.1]
},
"ground": {
"translation": [0, 7.75, 0],
"scale": [0.7, 0.7, 0.7]
},
"head": {
"translation": [4.25, 0, 0]
},
"fixed": {
"rotation": [0, -90, 0],
"translation": [3.5, 5, -6.75]
}
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "superbwarfare:displaysettings/javelin.item",
"textures": {
"layer0": "superbwarfare:item/javelin"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "superbwarfare:item/javelin_icon"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "superbwarfare:item/javelin_missile"
}
}

View file

@ -1508,6 +1508,55 @@
] ]
}, },
"javelin_fire_1p": {
"sounds": [
{
"name": "superbwarfare:javelin/javelin_fire_1p",
"stream": false
}
]
},
"javelin_fire_3p": {
"sounds": [
{
"name": "superbwarfare:javelin/javelin_fire_3p",
"stream": false
}
]
},
"javelin_far": {
"sounds": [
{
"name": "superbwarfare:javelin/javelin_far",
"stream": false
}
]
},
"javelin_reload_empty": {
"sounds": [
{
"name": "superbwarfare:javelin/javelin_reload",
"stream": false
}
]
},
"javelin_lock": {
"sounds": [
{
"name": "superbwarfare:javelin/javelin_lock",
"stream": false
}
]
},
"javelin_lockon": {
"sounds": [
{
"name": "superbwarfare:javelin/javelin_lockon",
"stream": false
}
]
},
"lightsaber": { "lightsaber": {
"sounds": [ "sounds": [
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

View file

@ -0,0 +1,13 @@
{
"zoom_speed": 0.72,
"zoom": 4,
"min_zoom": 4,
"max_zoom": 9,
"spread": 5,
"zoomSpread": 5,
"mag": 1,
"weight": 2,
"empty_reload_time": 78,
"damage": 300,
"BypassesArmor": 1
}

View file

@ -30,6 +30,7 @@
"superbwarfare:m_1911", "superbwarfare:m_1911",
"superbwarfare:qbz_95", "superbwarfare:qbz_95",
"superbwarfare:k_98", "superbwarfare:k_98",
"superbwarfare:mosin_nagant" "superbwarfare:mosin_nagant",
"superbwarfare:javelin"
] ]
} }

View file

@ -6,6 +6,7 @@
"superbwarfare:sentinel", "superbwarfare:sentinel",
"superbwarfare:bocek", "superbwarfare:bocek",
"superbwarfare:ntw_20", "superbwarfare:ntw_20",
"superbwarfare:minigun" "superbwarfare:minigun",
"superbwarfare:javelin"
] ]
} }