添加标枪导弹
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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 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 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)
|
||||
public static void eventHandler(RenderGuiEvent.Pre event) {
|
||||
|
@ -66,6 +68,10 @@ public class AmmoBarOverlay {
|
|||
// 渲染开火模式
|
||||
ResourceLocation fireMode = getFireMode(stack);
|
||||
|
||||
if (stack.getItem() == ModItems.JAVELIN.get()) {
|
||||
fireMode = stack.getOrCreateTag().getBoolean("TopMode")? TOP : DIR;
|
||||
}
|
||||
|
||||
event.getGuiGraphics().blit(fireMode,
|
||||
w - 95,
|
||||
h - 21,
|
||||
|
@ -166,7 +172,7 @@ public class AmmoBarOverlay {
|
|||
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");
|
||||
}
|
||||
|
||||
|
@ -198,6 +204,10 @@ public class AmmoBarOverlay {
|
|||
return "Yassin105 TBG";
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.JAVELIN.get()) {
|
||||
return "Javelin Missile";
|
||||
}
|
||||
|
||||
if (stack.getItem() == ModItems.TASER.get()) {
|
||||
return "Electrode Rod";
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -30,7 +30,6 @@ 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;
|
||||
|
@ -76,6 +75,11 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
|||
return ModItems.ROCKET.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRenderAtSqrDistance(double pDistance) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHitEntity(EntityHitResult result) {
|
||||
float damageMultiplier = 1 + 0.2f * this.monsterMultiplier;
|
||||
|
@ -142,7 +146,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
|
|||
}
|
||||
}
|
||||
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) {
|
||||
ParticleTool.sendParticle(serverLevel, ParticleTypes.SMOKE, this.xo, this.yo, this.zo, 1, 0, 0, 0, 0, true);
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
}
|
|
@ -533,6 +533,9 @@ public class GunEventHandler {
|
|||
} else if (stack.getItem() == ModItems.RPG.get()) {
|
||||
stack.getOrCreateTag().putInt("ammo", 1);
|
||||
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);
|
||||
|
|
|
@ -6,7 +6,6 @@ import net.mcreator.superbwarfare.init.ModSounds;
|
|||
import net.mcreator.superbwarfare.init.ModTags;
|
||||
import net.mcreator.superbwarfare.network.ModVariables;
|
||||
import net.mcreator.superbwarfare.network.message.SimulationDistanceMessage;
|
||||
import net.mcreator.superbwarfare.tools.SeekTool;
|
||||
import net.mcreator.superbwarfare.tools.SoundTool;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
@ -18,8 +17,6 @@ import net.minecraft.util.Mth;
|
|||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
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.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
|
@ -109,11 +106,11 @@ public class PlayerEventHandler {
|
|||
|
||||
// 测试用
|
||||
private static void handleWeaponSeek(Player player) {
|
||||
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zooming) {
|
||||
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 256, 30);
|
||||
if (seekingEntity instanceof LivingEntity _entity && !_entity.level().isClientSide())
|
||||
_entity.addEffect(new MobEffectInstance(MobEffects.GLOWING, 2, 0));
|
||||
}
|
||||
// if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zooming) {
|
||||
// Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 256, 30);
|
||||
// if (seekingEntity instanceof LivingEntity _entity && !_entity.level().isClientSide())
|
||||
// _entity.addEffect(new MobEffectInstance(MobEffects.GLOWING, 2, 0));
|
||||
// }
|
||||
}
|
||||
|
||||
private static void handleWeaponSway(Player player) {
|
||||
|
|
|
@ -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));
|
||||
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));
|
||||
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) {
|
||||
|
|
|
@ -26,5 +26,6 @@ public class ModEntityRenderers {
|
|||
event.registerEntityRenderer(ModEntities.HAND_GRENADE_ENTITY.get(), HandGrenadeEntityRenderer::new);
|
||||
event.registerEntityRenderer(ModEntities.RGO_GRENADE.get(), RgoGrenadeRenderer::new);
|
||||
event.registerEntityRenderer(ModEntities.MLE_1934.get(), Mle1934Renderer::new);
|
||||
event.registerEntityRenderer(ModEntities.JAVELIN_MISSILE.get(), JavelinMissileRenderer::new);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@ public class ModItems {
|
|||
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> 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);
|
||||
|
||||
/**
|
||||
|
@ -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> 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> 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> ROCKET = AMMO.register("rocket", Rocket::new);
|
||||
public static final RegistryObject<Item> HE_5_INCHES = AMMO.register("he_5_inches", He5Inches::new);
|
||||
|
|
|
@ -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_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_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")));
|
||||
|
|
|
@ -53,6 +53,7 @@ public class ModTabs {
|
|||
output.accept(BocekItem.getGunInstance());
|
||||
output.accept(M79Item.getGunInstance());
|
||||
output.accept(RpgItem.getGunInstance());
|
||||
output.accept(JavelinItem.getGunInstance());
|
||||
}
|
||||
)
|
||||
.build());
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package net.mcreator.superbwarfare.network.message;
|
||||
|
||||
import net.mcreator.superbwarfare.ModUtils;
|
||||
import net.mcreator.superbwarfare.entity.*;
|
||||
import net.mcreator.superbwarfare.event.GunEventHandler;
|
||||
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.tools.ItemNBTTool;
|
||||
import net.mcreator.superbwarfare.tools.ParticleTool;
|
||||
import net.mcreator.superbwarfare.tools.SeekTool;
|
||||
import net.mcreator.superbwarfare.tools.SoundTool;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
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.ServerPlayer;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.entity.projectile.AbstractArrow;
|
||||
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.level.Level;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
import org.joml.Vector3d;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
|
@ -72,6 +79,19 @@ public class FireMessage {
|
|||
if (player.getMainHandItem().getItem() == ModItems.BOCEK.get()) {
|
||||
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);
|
||||
}
|
||||
|
||||
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) {
|
||||
player.getPersistentData().putBoolean("firing", false);
|
||||
tag.putInt("burst_fire", (int) tag.getDouble("burst_size"));
|
||||
|
@ -431,4 +461,53 @@ public class FireMessage {
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,6 +114,10 @@ public class FireModeMessage {
|
|||
tag.putBoolean("start_sentinel_charge", true);
|
||||
}
|
||||
}
|
||||
|
||||
if (mainHandItem.getItem() == ModItems.JAVELIN.get()) {
|
||||
tag.putBoolean("TopMode", !tag.getBoolean("TopMode"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,16 @@
|
|||
package net.mcreator.superbwarfare.network.message;
|
||||
|
||||
import net.mcreator.superbwarfare.ModUtils;
|
||||
import net.mcreator.superbwarfare.entity.ICannonEntity;
|
||||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.init.ModSounds;
|
||||
import net.mcreator.superbwarfare.network.ModVariables;
|
||||
import net.mcreator.superbwarfare.tools.SoundTool;
|
||||
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.sounds.SoundSource;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
|
@ -60,6 +65,16 @@ public class ZoomMessage {
|
|||
if (player.isPassenger() && player.getVehicle() instanceof ICannonEntity) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
2240
src/main/resources/assets/superbwarfare/geo/javelin.geo.json
Normal 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]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -44,12 +44,13 @@
|
|||
"item.superbwarfare.qbz_95": "QBZ-95-1",
|
||||
"item.superbwarfare.k_98": "KAR-98K",
|
||||
"item.superbwarfare.mosin_nagant": "Mosin Nagant",
|
||||
"item.superbwarfare.javelin": "FGM-148 Javelin",
|
||||
|
||||
"des.superbwarfare.tips.damage": "Damage: ",
|
||||
"des.superbwarfare.tips.level": "Level: ",
|
||||
"des.superbwarfare.tips.bypass": "Armor Piercing: ",
|
||||
"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.m_60_blueprint": "M60 Blueprint",
|
||||
|
@ -127,6 +128,7 @@
|
|||
"item.superbwarfare.ammo_supplier.creative": "All Ammo +2147483647",
|
||||
"item.superbwarfare.he_5_inches": "HE Shell",
|
||||
"item.superbwarfare.ap_5_inches": "AP Shell",
|
||||
"item.superbwarfare.javelin_missile": "Javelin Missile",
|
||||
|
||||
"item.superbwarfare.ancient_cpu": "Ancient CPU",
|
||||
"item.superbwarfare.target_deployer": "Target",
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
"item.superbwarfare.qbz_95": "95-1式自动步枪",
|
||||
"item.superbwarfare.k_98": "KAR-98K",
|
||||
"item.superbwarfare.mosin_nagant": "莫辛纳甘",
|
||||
"item.superbwarfare.javelin": "FGM-148标枪导弹",
|
||||
|
||||
"des.superbwarfare.tips.upgradepoint": "升级点数: ",
|
||||
"des.superbwarfare.tips.damage": "伤害: ",
|
||||
|
@ -127,6 +128,7 @@
|
|||
"item.superbwarfare.ammo_supplier.creative": "所有弹药 +2147483647",
|
||||
"item.superbwarfare.he_5_inches": "高爆弹",
|
||||
"item.superbwarfare.ap_5_inches": "穿甲弹",
|
||||
"item.superbwarfare.javelin_missile": "标枪导弹",
|
||||
|
||||
"item.superbwarfare.ancient_cpu": "古代处理器",
|
||||
"item.superbwarfare.target_deployer": "标靶",
|
||||
|
|
|
@ -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
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "superbwarfare:displaysettings/javelin.item",
|
||||
"textures": {
|
||||
"layer0": "superbwarfare:item/javelin"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "superbwarfare:item/javelin_icon"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "superbwarfare:item/javelin_missile"
|
||||
}
|
||||
}
|
|
@ -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": {
|
||||
"sounds": [
|
||||
{
|
||||
|
|
After Width: | Height: | Size: 338 B |
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 144 B |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 782 B |
After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 241 B |
13
src/main/resources/data/superbwarfare/guns/javelin.json
Normal 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
|
||||
}
|
|
@ -30,6 +30,7 @@
|
|||
"superbwarfare:m_1911",
|
||||
"superbwarfare:qbz_95",
|
||||
"superbwarfare:k_98",
|
||||
"superbwarfare:mosin_nagant"
|
||||
"superbwarfare:mosin_nagant",
|
||||
"superbwarfare:javelin"
|
||||
]
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
"superbwarfare:sentinel",
|
||||
"superbwarfare:bocek",
|
||||
"superbwarfare:ntw_20",
|
||||
"superbwarfare:minigun"
|
||||
"superbwarfare:minigun",
|
||||
"superbwarfare:javelin"
|
||||
]
|
||||
}
|